Snipe-IT开源资产管理系统完整部署与配置指南

预计阅读 21 分钟
徐梁
2025/9/18
27 次阅读
Snipe-IT资产管理IT运维开源系统Laravel设备管理

Snipe-IT开源资产管理系统完整部署与配置指南

前言

Snipe-IT是一款基于PHP Laravel框架开发的开源IT资产管理系统,支持硬件资产、软件许可证、耗材、配件等全生命周期管理。本文详细介绍如何在Rocky Linux 8上从零部署Snipe-IT系统,并配置常见的资产管理场景。

系统环境

  • 操作系统: Rocky Linux 8.8

  • PHP版本: PHP 8.1

  • 数据库: MySQL 8.0

  • Web服务器: Nginx 1.20

  • Snipe-IT版本: 6.3.0

一、环境准备

1.1 系统初始化

# 更新系统

dnf update -y

关闭SELinux

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

setenforce 0

配置防火墙

firewall-cmd --permanent --add-service=http

firewall-cmd --permanent --add-service=https

firewall-cmd --reload

设置时区

timedatectl set-timezone Asia/Shanghai

1.2 安装PHP 8.1及扩展

# 安装EPEL和Remi仓库

dnf install -y epel-release

dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

启用PHP 8.1模块

dnf module reset php -y

dnf module enable php:remi-8.1 -y

安装PHP及必需扩展

dnf install -y php php-fpm php-mysqlnd php-bcmath php-gd php-mbstring \

php-xml php-ldap php-curl php-zip php-fileinfo php-tokenizer \

php-intl php-sodium php-redis php-opcache

1.3 安装MySQL 8.0

# 安装MySQL仓库

dnf install -y https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm

安装MySQL服务器

dnf install -y mysql-server

启动MySQL

systemctl enable --now mysqld

获取临时密码

TEMP_PASSWORD=$(grep "temporary password" /var/log/mysqld.log | awk "{print \$NF}")

echo "临时密码: $TEMP_PASSWORD"

修改root密码并创建数据库

mysql -uroot -p"$TEMP_PASSWORD" --connect-expired-password << EOF

ALTER USER "root"@"localhost" IDENTIFIED BY "YourRootPassword@2024";

CREATE DATABASE snipeit CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER "snipeit"@"localhost" IDENTIFIED BY "SnipeIT@2024";

GRANT ALL PRIVILEGES ON snipeit.* TO "snipeit"@"localhost";

FLUSH PRIVILEGES;

EXIT;

EOF

1.4 安装Nginx

# 安装Nginx

dnf install -y nginx

启动Nginx

systemctl enable --now nginx

1.5 安装Composer

# 下载并安装Composer

curl -sS https://getcomposer.org/installer | php

mv composer.phar /usr/local/bin/composer

chmod +x /usr/local/bin/composer

验证安装

composer --version

1.6 安装Git

dnf install -y git

二、部署Snipe-IT

2.1 下载Snipe-IT源码

# 创建目录

mkdir -p /var/www

cd /var/www

克隆代码

git clone https://github.com/snipe/snipe-it snipeit

cd snipeit

切换到稳定版本

git checkout v6.3.0

2.2 安装PHP依赖

cd /var/www/snipeit

安装依赖包(生产环境)

composer install --no-dev --prefer-source --optimize-autoloader

注意: 安装过程可能需要5-10分钟,请耐心等待。

2.3 配置环境文件

# 复制配置文件模板

cp .env.example .env

编辑配置文件

vi .env

关键配置项:

# 应用基础配置

APP_ENV=production

APP_DEBUG=false

APP_KEY=

APP_URL=http://asset.yourdomain.com

APP_TIMEZONE=Asia/Shanghai

APP_LOCALE=zh-CN

数据库配置

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_DATABASE=snipeit

DB_USERNAME=snipeit

DB_PASSWORD=SnipeIT@2024

DB_PREFIX=null

DB_DUMP_PATH="/usr/bin"

邮件配置(可选)

MAIL_DRIVER=smtp

MAIL_HOST=smtp.exmail.qq.com

MAIL_PORT=465

MAIL_USERNAME=asset@yourdomain.com

MAIL_PASSWORD=your-mail-password

MAIL_ENCRYPTION=ssl

MAIL_FROM_ADDR=asset@yourdomain.com

MAIL_FROM_NAME="IT资产管理系统"

队列配置

QUEUE_DRIVER=sync

缓存配置

CACHE_DRIVER=file

SESSION_DRIVER=file

文件上传限制

UPLOAD_MAX_FILESIZE=10M

POST_MAX_SIZE=10M

2.4 生成应用密钥

php artisan key:generate

输出示例:

Application key set successfully.

2.5 执行数据库迁移

# 执行迁移

php artisan migrate --force

可选:导入示例数据用于测试

php artisan db:seed --class=DemoDataSeeder

2.6 设置文件权限

# 设置目录所有者

chown -R nginx:nginx /var/www/snipeit

设置基础权限

chmod -R 755 /var/www/snipeit

设置storage和bootstrap/cache可写

chmod -R 775 /var/www/snipeit/storage

chmod -R 775 /var/www/snipeit/public/uploads

chmod -R 775 /var/www/snipeit/bootstrap/cache

设置正确的SELinux上下文(如果启用了SELinux)

chcon -R -t httpd_sys_rw_content_t /var/www/snipeit/storage

chcon -R -t httpd_sys_rw_content_t /var/www/snipeit/public/uploads

三、配置Web服务器

3.1 配置PHP-FPM

编辑 /etc/php-fpm.d/www.conf:

vi /etc/php-fpm.d/www.conf

关键配置:

user = nginx

group = nginx

listen = /run/php-fpm/www.sock

listen.owner = nginx

listen.group = nginx

listen.mode = 0660

编辑 /etc/php.ini 调整上传限制:

upload_max_filesize = 10M

post_max_size = 10M

max_execution_time = 300

memory_limit = 256M

重启PHP-FPM:

systemctl restart php-fpm

3.2 配置Nginx

创建配置文件 /etc/nginx/conf.d/snipeit.conf:

server {

listen 80;

server_name asset.yourdomain.com;

root /var/www/snipeit/public;

index index.php;

access_log /var/log/nginx/snipeit-access.log;

error_log /var/log/nginx/snipeit-error.log;

client_max_body_size 10M;

location / {

try_files $uri $uri/ /index.php?$query_string;

}

location ~ \.php$ {

fastcgi_pass unix:/run/php-fpm/www.sock;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

fastcgi_read_timeout 300;

}

location ~ /\.ht {

deny all;

}

location ~ /\.git {

deny all;

}

}

测试并重启Nginx:

nginx -t

systemctl restart nginx

四、Web界面初始化

4.1 访问安装向导

浏览器访问: http://asset.yourdomain.com

如果一切正常,会看到Snipe-IT的安装向导。

4.2 完成初始化配置

按照向导填写:

  1. 欢迎页面: 点击"Next"

  2. 环境检查: 确保所有项目都是绿色的✓

  3. 数据库配置: 应该已自动填充(从.env读取)

  4. 创建管理员账户:

    • 站点名称: IT资产管理系统

    • 语言: 简体中文

    • 管理员姓名

    • 管理员邮箱

    • 管理员密码

  5. 完成安装: 点击"Finish"

五、基础配置

登录后台进行基础配置。

5.1 配置公司信息

设置 → 公司设置

填写:

  • 公司全称: 常州中创新航科技集团

  • 简称: 中创新航

  • 邮箱/电话/地址等联系信息

  • 上传公司Logo

5.2 创建地点层级

设置 → 地点

示例层级结构:

├─ 总部大楼

│ ├─ 一层

│ │ ├─ 机房

│ │ └─ 大厅

│ ├─ 二层办公区

│ └─ 三层研发中心

└─ 生产车间

├─ 一号厂房

└─ 二号厂房

5.3 配置资产状态

设置 → 状态标签

推荐状态:

  • 可部署 (Ready to Deploy)

  • 📦 待部署 (Pending)

  • 🔧 维修中 (Broken - Not Fixable)

  • ⏸️ 已归档 (Archived)

  • ♻️ 已报废 (Out for Repair)

  • 📤 已借出 (Out for Diagnostics)

5.4 创建资产类别

设置 → 类别

网络设备类别

  • 核心交换机

  • 汇聚交换机

  • 接入交换机

  • 路由器

  • 防火墙

  • 无线AP

  • 无线控制器

服务器类别

  • 物理服务器

  • 虚拟机

  • 存储设备

  • 刀片服务器

终端设备

  • 台式机

  • 笔记本

  • 显示器

  • 打印机

5.5 添加制造商

设置 → 制造商

常见网络设备制造商:

  • Cisco

  • 华为(Huawei)

  • H3C

  • Juniper

  • Arista

  • Dell

  • HP

5.6 创建资产型号

设置 → 型号

示例(核心交换机):

  • 型号名称: Cisco Catalyst 9300-48P

  • 制造商: Cisco

  • 类别: 核心交换机

  • 型号编号: C9300-48P

  • EOL日期: 2030-12-31

  • 备注: 48端口千兆PoE交换机

示例(服务器):

  • 型号名称: Dell PowerEdge R740

  • 制造商: Dell

  • 类别: 物理服务器

  • 型号编号: R740

  • 自定义字段: CPU核心数、内存大小、存储容量

六、资产管理实战

6.1 添加单个资产

资产 → 创建资产

示例(添加核心交换机):

基本信息:

资产标签: SWITCH-CORE-001

型号: Cisco Catalyst 9300-48P

状态: 可部署

采购信息:

供应商: 网络设备供应商

采购成本: ¥35,000

采购日期: 2024-01-15

位置信息:

地点: 总部大楼 → 一层 → 机房

位置: 机柜A01-U10

其他信息:

序列号: FCW2234XXXXX

资产名称: 核心交换机01

保修到期: 2027-01-15

备注:

IP地址: 192.168.1.254

MAC地址: 00:1A:2B:3C:4D:5E

管理VLAN: 100

6.2 批量导入资产

准备CSV文件 assets_import.csv:

资产标签,型号,序列号,采购日期,地点,状态,供应商,采购成本,备注

SWITCH-ACC-001,H3C S5130-28P,210235001,2024-02-10,二层办公区,可部署,华为代理商,8500,楼层交换机

SWITCH-ACC-002,H3C S5130-28P,210235002,2024-02-10,三层研发中心,可部署,华为代理商,8500,楼层交换机

SERVER-001,Dell R740,SN2024001,2024-01-20,一层机房,可部署,Dell代理,45000,应用服务器

SERVER-002,Dell R740,SN2024002,2024-01-20,一层机房,可部署,Dell代理,45000,数据库服务器

导入步骤:

  1. 资产 → 导入

  2. 上传CSV文件

  3. 映射字段(系统会自动识别)

  4. 预览并确认

  5. 点击"导入"

6.3 资产检出(分配)

将资产分配给员工或部门:

资产 → 选择资产 → 检出

检出给: 张三(IT部门)

检出日期: 2024-03-01

预期检入日期: 2025-03-01(可选)

备注: 办公笔记本电脑

检出后资产状态自动变更,系统会发送邮件通知。

6.4 资产检入(回收)

员工离职或设备更换时回收资产:

资产 → 选择资产 → 检入

填写检入备注,系统自动记录检入时间。

6.5 资产维护记录

记录设备维修保养历史:

资产 → 选择资产 → 维护

维护类型: 故障维修

开始日期: 2024-03-15

完成日期: 2024-03-16

维护成本: ¥1,200

维护人员: 运维部-李四

维护说明: 更换电源模块

6.6 资产审计

定期盘点资产:

资产 → 审计

功能:

  • 扫描资产标签二维码快速定位

  • 批量确认资产位置

  • 标记异常资产

  • 生成审计报告

七、软件许可证管理

7.1 添加许可证

许可证 → 创建许可证

示例(Windows Server许可证):

基本信息:

名称: Windows Server 2022 Standard

类别: 操作系统

许可类型: 用户许可证

许可详情:

序列号: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

许可证密钥: 已加密存储

席位数: 10

可重新安装: 是

采购信息:

供应商: Microsoft授权经销商

采购成本: ¥25,000

采购日期: 2024-01-10

到期日期: 永久授权

维护信息:

维护供应商: Microsoft

维护成本: ¥5,000/年

维护到期: 2025-01-10

7.2 许可证分配

许可证 → 选择许可证 → 检出

  • 检出给资产: SERVER-001

  • 激活日期: 2024-01-15

  • 备注: 数据库服务器系统

7.3 许可证到期提醒

设置 → 警报

配置提前提醒:

  • 提前30天邮件提醒

  • 到期当天再次提醒

  • 收件人: IT部门负责人

八、耗材管理

8.1 添加耗材

耗材 → 创建耗材

示例(网线):

基本信息:

名称: 超五类网线(蓝色)

类别: 网络耗材

型号: Cat5e

库存信息:

当前数量: 500米

最小库存: 100米

可购买: 是

采购信息:

供应商: 综合布线供应商

单价: ¥2/米

订单编号: PO-2024-001

示例(打印机墨盒):

基本信息:

名称: HP 803 黑色墨盒

类别: 打印耗材

制造商: HP

型号: 803

库存信息:

当前数量: 15个

最小库存: 5个

采购信息:

供应商: 办公用品供应商

单价: ¥85/个

8.2 耗材领用

耗材 → 选择耗材 → 检出

领用人: 张三

领用数量: 20米

用途: 三层办公区网络布线

领用日期: 2024-03-10

8.3 库存预警

当耗材低于最小库存时:

  • 系统自动发送邮件提醒采购

  • 在仪表板显示预警标记

  • 生成采购建议清单

九、报表与导出

9.1 资产报表

报表 → 资产报表

可用筛选条件:

  • 资产类别

  • 资产状态

  • 地点

  • 部门

  • 供应商

  • 日期范围

9.2 导出Excel

点击"导出"按钮,下载包含以下信息的Excel:

  • 资产标签

  • 型号

  • 序列号

  • 状态

  • 地点

  • 分配人

  • 采购日期

  • 采购成本

  • 折旧信息

9.3 生成条形码/二维码

资产 → 标签/标记 → 生成

选项:

  • 条形码格式: Code 128

  • 二维码: 包含资产详情URL

  • 标签尺寸: 40mm x 20mm

  • 批量打印: 支持

9.4 自定义报表

设置 → 自定义报表

可以创建SQL查询生成自定义报表:

SELECT 

assets.asset_tag,

models.name AS model_name,

locations.name AS location_name,

assets.purchase_date,

assets.purchase_cost

FROM assets

LEFT JOIN models ON assets.model_id = models.id

LEFT JOIN locations ON assets.rtd_location_id = locations.id

WHERE assets.status_id = 2

ORDER BY assets.purchase_date DESC;

十、API与集成

10.1 生成API令牌

设置 → API令牌 → 创建新令牌

10.2 API调用示例(Python)

import requests

import json

API配置

api_url = "http://asset.yourdomain.com/api/v1"

api_token = "your-api-token-here"

headers = {

"Authorization": f"Bearer {api_token}",

"Accept": "application/json",

"Content-Type": "application/json"

}

获取所有资产

def get_all_assets():

response = requests.get(f"{api_url}/hardware", headers=headers)

assets = response.json()

return assets["rows"]

创建新资产

def create_asset(data):

response = requests.post(

f"{api_url}/hardware",

headers=headers,

json=data

)

return response.json()

更新资产

def update_asset(asset_id, data):

response = requests.patch(

f"{api_url}/hardware/{asset_id}",

headers=headers,

json=data

)

return response.json()

使用示例

assets = get_all_assets()

for asset in assets:

print(f"{asset[\"asset_tag\"]}: {asset[\"name\"]}")

10.3 与Zabbix监控集成

通过API同步资产信息到Zabbix:

def sync_to_zabbix():

# 从Snipe-IT获取资产

snipeit_assets = get_all_assets()

for asset in snipeit_assets:

if asset["category"]["name"] == "交换机":

# 在Zabbix中创建主机

zabbix_create_host(

host=asset["name"],

ip=asset["custom_fields"]["IP地址"]["value"],

groups=["Network devices"]

)

十一、备份与恢复

11.1 数据库备份脚本

创建 /root/scripts/backup_snipeit_db.sh:

#!/bin/bash

BACKUP_DIR="/backup/snipeit/database"

DATE=$(date +%Y%m%d_%H%M%S)

DB_NAME="snipeit"

DB_USER="snipeit"

DB_PASS="SnipeIT@2024"

mkdir -p $BACKUP_DIR

备份数据库

mysqldump -u$DB_USER -p"$DB_PASS" $DB_NAME | gzip > $BACKUP_DIR/snipeit_$DATE.sql.gz

保留最近30天备份

find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete

echo "数据库备份完成: $BACKUP_DIR/snipeit_$DATE.sql.gz"

11.2 文件备份脚本

创建 /root/scripts/backup_snipeit_files.sh:

#!/bin/bash

BACKUP_DIR="/backup/snipeit/files"

DATE=$(date +%Y%m%d)

SNIPEIT_DIR="/var/www/snipeit"

mkdir -p $BACKUP_DIR

备份上传文件

tar -czf $BACKUP_DIR/uploads_$DATE.tar.gz \

$SNIPEIT_DIR/public/uploads

备份配置文件

tar -czf $BACKUP_DIR/config_$DATE.tar.gz \

$SNIPEIT_DIR/.env \

$SNIPEIT_DIR/storage

保留最近30天备份

find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

echo "文件备份完成"

11.3 配置定时任务

crontab -e

添加:

# 每天凌晨2点备份数据库

0 2 * * * /root/scripts/backup_snipeit_db.sh >> /var/log/snipeit_backup.log 2>&1

每周日凌晨3点备份文件

0 3 * * 0 /root/scripts/backup_snipeit_files.sh >> /var/log/snipeit_backup.log 2>&1

11.4 恢复数据库

# 解压备份

gunzip snipeit_20240315_020000.sql.gz

恢复到数据库

mysql -usnipeit -p"SnipeIT@2024" snipeit < snipeit_20240315_020000.sql

十二、性能优化

12.1 启用Redis缓存

# 安装Redis

dnf install -y redis

systemctl enable --now redis

修改Snipe-IT配置

vi /var/www/snipeit/.env

修改缓存配置:

CACHE_DRIVER=redis

SESSION_DRIVER=redis

QUEUE_DRIVER=redis

REDIS_HOST=127.0.0.1

REDIS_PORT=6379

REDIS_PASSWORD=null

重新生成缓存:

cd /var/www/snipeit

php artisan cache:clear

php artisan config:cache

12.2 启用OPcache

编辑 /etc/php.d/10-opcache.ini:

opcache.enable=1

opcache.memory_consumption=256

opcache.interned_strings_buffer=16

opcache.max_accelerated_files=10000

opcache.revalidate_freq=60

opcache.fast_shutdown=1

重启PHP-FPM:

systemctl restart php-fpm

12.3 配置队列处理

对于大型环境,启用队列可以提高性能:

# 修改.env

QUEUE_DRIVER=database

创建队列表

php artisan queue:table

php artisan migrate

运行队列worker(使用Supervisor管理)

dnf install -y supervisor

创建Supervisor配置 /etc/supervisord.d/snipeit-worker.ini:

[program:snipeit-worker]

process_name=%(program_name)s_%(process_num)02d

command=php /var/www/snipeit/artisan queue:work --sleep=3 --tries=3

autostart=true

autorestart=true

user=nginx

numprocs=2

redirect_stderr=true

stdout_logfile=/var/log/snipeit-worker.log

启动Supervisor:

systemctl enable --now supervisord

supervisorctl reread

supervisorctl update

supervisorctl start snipeit-worker:*

十三、安全加固

13.1 启用HTTPS

# 安装Certbot

dnf install -y certbot python3-certbot-nginx

获取证书

certbot --nginx -d asset.yourdomain.com

自动续期

echo "0 0 1 * * /usr/bin/certbot renew --quiet" | crontab -

13.2 配置双因素认证

设置 → 双因素认证

  1. 启用2FA

  2. 管理员强制使用

  3. 支持的方式:

    • Google Authenticator

    • Microsoft Authenticator

    • Authy

13.3 配置LDAP/AD集成

设置 → LDAP同步

LDAP服务器: ldap://dc.yourdomain.com

端口: 389

绑定用户名: CN=snipeit,OU=Service Accounts,DC=yourdomain,DC=com

绑定密码:

基准DN: OU=Users,DC=yourdomain,DC=com

用户过滤器: (&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

测试连接后启用LDAP登录。

13.4 审计日志

所有操作自动记录,查看位置:

报表 → 活动日志

记录内容:

  • 操作人

  • 操作时间

  • 操作类型(创建/编辑/删除)

  • 操作对象

  • 修改前后的值

  • IP地址

十四、常见问题排查

14.1 500错误

# 查看Laravel日志

tail -100 /var/www/snipeit/storage/logs/laravel.log

常见原因:

1. 权限问题

chown -R nginx:nginx /var/www/snipeit/storage

chmod -R 775 /var/www/snipeit/storage

2. 缓存问题

php artisan cache:clear

php artisan config:clear

14.2 邮件发送失败

# 测试邮件配置

php artisan snipeit:test-mail

检查日志

tail -f /var/www/snipeit/storage/logs/laravel.log

14.3 文件上传失败

检查PHP配置:

# 查看当前限制

php -i | grep upload_max_filesize

php -i | grep post_max_size

修改限制

vi /etc/php.ini

upload_max_filesize = 10M

post_max_size = 10M

systemctl restart php-fpm

14.4 性能慢

# 清理缓存

php artisan cache:clear

优化自动加载

composer dump-autoload --optimize

缓存配置和路由

php artisan config:cache

php artisan route:cache

十五、升级维护

15.1 升级Snipe-IT

cd /var/www/snipeit

备份数据库

mysqldump -usnipeit -p snipeit > /backup/snipeit_before_upgrade.sql

进入维护模式

php artisan down

拉取最新代码

git pull

更新依赖

composer install --no-dev --prefer-source

执行数据库迁移

php artisan migrate --force

清理缓存

php artisan cache:clear

php artisan config:clear

退出维护模式

php artisan up

15.2 健康检查

# 检查系统状态

php artisan snipeit:health

检查队列

php artisan queue:failed

检查调度任务

php artisan schedule:list

结语

Snipe-IT为企业提供了完整的IT资产管理解决方案。对于管理700+交换机和10+服务器的网络环境,建议:

  1. 建立标准化资产编号体系

    • 按类型-位置-序号命名

    • 例如: SWITCH-CORE-001、SERVER-DB-001

  2. 定期进行资产审计

    • 每季度盘点一次

    • 更新资产状态和位置

  3. 与监控系统集成

    • 通过API同步到Zabbix

    • 实现资产信息与监控数据关联

  4. 配置自动化流程

    • 到期提醒

    • 库存预警

    • 报表定时发送

  5. 做好数据备份

    • 每日数据库备份

    • 每周文件备份

    • 异地备份存储

通过Snipe-IT可以有效提升IT资产管理效率,降低资产流失风险,优化采购成本控制。


相关资源

  • 官方文档: https://snipe-it.readme.io/

  • GitHub仓库: https://github.com/snipe/snipe-it

  • 社区论坛: https://gitter.im/snipe/snipe-it

喜欢这篇文章吗?分享给朋友吧!

相关推荐

评论 (0)

欢迎留下您的想法和建议

加载评论中...

发表评论

评论将在审核通过后显示