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 完成初始化配置
按照向导填写:
欢迎页面: 点击"Next"
环境检查: 确保所有项目都是绿色的✓
数据库配置: 应该已自动填充(从.env读取)
创建管理员账户:
站点名称: IT资产管理系统
语言: 简体中文
管理员姓名
管理员邮箱
管理员密码
完成安装: 点击"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,数据库服务器
导入步骤:
资产 → 导入
上传CSV文件
映射字段(系统会自动识别)
预览并确认
点击"导入"
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 配置双因素认证
设置 → 双因素认证
启用2FA
管理员强制使用
支持的方式:
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+服务器的网络环境,建议:
建立标准化资产编号体系
按类型-位置-序号命名
例如: SWITCH-CORE-001、SERVER-DB-001
定期进行资产审计
每季度盘点一次
更新资产状态和位置
与监控系统集成
通过API同步到Zabbix
实现资产信息与监控数据关联
配置自动化流程
到期提醒
库存预警
报表定时发送
做好数据备份
每日数据库备份
每周文件备份
异地备份存储
通过Snipe-IT可以有效提升IT资产管理效率,降低资产流失风险,优化采购成本控制。
相关资源:
官方文档: https://snipe-it.readme.io/
GitHub仓库: https://github.com/snipe/snipe-it
社区论坛: https://gitter.im/snipe/snipe-it