Snipe-IT Docker部署实战:5步搭建免费IT资产管理系统,附持久化与备份方案
Snipe-IT Docker部署实战:5步搭建免费IT资产管理系统,附持久化与备份方案
【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it
Snipe-IT 是一款免费开源的 IT 资产与许可证管理系统,帮助团队统一登记硬件设备、软件授权、供应商和维护记录。本文将一套完整的 Snipe-IT Docker 部署流程拆成"动手前决策、正式实施、上线后运维"三个阶段,从环境准备、容器编排、数据持久化,一直讲到备份恢复与性能调优,让没有容器经验的新手也能一次跑通,并保证数据安全。
一、先回答一个问题:资产台账为什么总是失控?
很多公司不是没有台账,而是台账活在 Excel 里、藏在聊天记录里,设备一多就变成一锅粥:谁领了哪台笔记本、序列号是多少、保修到哪天、软件授权还剩几个,全靠人肉记忆。Snipe-IT 这类工具的价值,就是把上述信息变成一套可检索、可追踪、可导出的资产档案。
用 Docker 来运行它,收益集中在四点:
- 环境一致:开发、测试、生产跑同一套镜像,不再有"在我机器上好好的"这类问题;
- 上手极快:容器编排一条命令拉起 Web 应用和数据库,省去手工装 PHP、MySQL、Apache 的过程;
- 数据安全:数据库和上传文件通过卷持久化,容器销毁重建也不影响资产数据;
- 维护省心:升级、备份、回滚都围绕镜像和卷操作,运维动作高度收敛。
图:设备故障与损坏每天都在发生,没有一套系统化的记录,维修成本和归属关系只会越来越乱。
二、动手前的三项决策,别急着敲命令
决策一:容器化还是传统部署?
两种路线各有适用场景,先对号入座:
| 对比维度 | Docker 容器化 | 传统 LNMP 部署 |
|---|---|---|
| 部署耗时 | 分钟级 | 小时级,依赖手工步骤 |
| 环境隔离 | 强,互不干扰 | 弱,易冲突 |
| 升级回滚 | 换镜像即可 | 需要手动覆盖代码与依赖 |
| 适合场景 | 中小团队、快速上线 | 已有成熟运维脚本的定制环境 |
对绝大多数团队,容器化是性价比更高的起点。
决策二:核对环境清单
实施前先确认本机满足最低要求:
docker --version # 查看 Docker 引擎版本 docker compose version # 查看 Compose 插件版本- Docker 引擎要求 20.10 以上;
- Compose 建议使用 V2 插件(即
docker compose子命令),老版本docker-compose语法也兼容,但建议统一。
决策三:规划端口与访问地址
提前想好三件事:Web 服务映射到宿主机哪个端口、将来用 IP 访问还是域名访问、数据库是否只允许容器内网访问。这三项决定了下文的.env如何填写,避免启动后再返工。
三、正式实施:五步启动一个可用的资产管理系统
第一步:获取项目源码
git clone https://gitcode.com/GitHub_Trending/sn/snipe-it cd snipe-it仓库内已包含docker-compose.yml、docker.env模板和Dockerfile等编排所需文件,无需额外拼装。
第二步:生成环境配置与应用密钥
cp docker/docker.env .env.env里最重要的一个参数是APP_KEY,它是 Laravel 应用的加密密钥,必须唯一且保密。如果留空,应用会拒绝启动。生成方式:
docker compose run --rm app php artisan key:generate --show把输出结果回填到.env的APP_KEY=一行即可。
第三步:配置数据库、访问地址与邮件
编辑.env,至少改完下面这几组参数再启动:
# 应用访问地址,改为服务器实际 IP 或域名 APP_URL=http://your-server-ip:8000 # 数据库连接信息,账号密码自拟 DB_DATABASE=snipeit DB_USERNAME=snipeit_user DB_PASSWORD=替换为强密码 # 邮件服务,通知功能依赖它 MAIL_MAILER=smtp MAIL_HOST=smtp.your-domain.com MAIL_PORT=587 MAIL_USERNAME=your-email@domain.com MAIL_PASSWORD=your-email-password如果暂时没有邮件服务器,可以先启动,通知功能之后补配,不影响资产录入。
第四步:拉起容器并验证状态
docker compose up -d docker compose ps # 确认 app 与 db 两个容器均处于 Up 状态 docker compose logs -f app # 实时查看应用日志日志中出现Supervisord started successfully字样,说明应用进程就绪,稍等片刻即可访问。
第五步:首次登录并立刻换密码
浏览器打开http://服务器IP:8000,用内置初始账号登录:
- 账号:
admin@example.com - 密码:
password
登录后第一件事就是修改管理员密码,这套默认凭据是公开的,保持原样等于把系统大门敞开。
四、数据持久化:把"临时容器"变成"长期系统"
默认编排中,数据库和上传目录分别挂在命名卷db_data与storage上。命名卷已经保证容器重建数据不丢,但卷文件存放在 Docker 私有目录,备份时不太直观。
更稳妥的做法是映射到宿主机目录,方便直接打包:
mkdir -p ./data/{db,storage,backups}然后在docker-compose.yml的 volumes 部分改为:
volumes: - ./data/db:/var/lib/mysql - ./data/storage:/var/lib/snipeit - ./data/backups:/var/lib/snipeit/dumps这样数据库文件、上传的资产图片/附件、备份产物全部落在项目目录下,tar一把梭即可带走。
五、上线前的安全加固清单
容器能跑起来只是及格线,对外暴露服务前建议依次完成四项加固:
- 更换默认端口:在
.env中设置APP_PORT=8080(或其他非默认端口),降低被扫描命中的概率; - 启用 HTTPS:把证书与私钥放入
docker/ssl/目录,再在startup.sh中启用 Apache 的 SSL 配置,并让APP_URL使用https://前缀; - 数据库强密码:用随机工具生成密码,例如
openssl rand -base64 32,并填回.env; - 最小权限与网络隔离:让数据库容器不对外映射端口,仅允许应用容器内网访问;如部署在云上,再用防火墙限制 Web 端口来源 IP。
六、日常使用:录入厂商、分类,再用 CSV 批量建库
先把基础字典建好
登录后台后,按"厂商 → 分类 → 状态标签 → 用户"的顺序建立基础数据:
- 厂商:登记三星、索尼等设备供应商的联系方式与官网;
- 分类:区分笔记本电脑、显示器、软件授权、配件等资产类型;
- 状态标签:定义可用、维修中、已报废、待处置等状态;
- 用户:导入员工名单,作为资产的领用对象。
用 CSV 模板批量导入存量资产
手工一条条录入几千条设备记录不现实,Snipe-IT 支持 CSV 导入:
- 打开仓库中的模板
sample_csvs/assets-sample.csv,按列名填写; - 在后台导入页面选择文件、校验映射关系后提交。
模板数据形如:
资产名称,序列号,型号,厂商,分类,状态,位置,购买日期,价格 笔记本-001,SN123456,ThinkPad X1,联想,笔记本电脑,可用,技术部,2023-01-15,8999 显示器-001,SN789012,Dell U2720Q,戴尔,显示器,可用,设计部,2023-02-20,3499维护记录别落下
资产生命周期里,维修与故障记录和采购信息同等重要。领用、归还、报修、报废全程留痕,后续审计和成本核算才有依据。
图:硬件损坏、维修与更换是资产管理的高频场景,Snipe-IT 的维护模块可以完整追踪每台设备的故障与维修过程。
七、故障速查:三个高频问题的自查路径
现象一:容器启动即退出
先看日志定位,再对症处理:
docker compose logs appAPP_KEY缺失:按上文第二步重新生成并回填;- 数据库连不上:先确认
db容器状态,再测试容器间网络:
docker compose ps db docker compose exec app ping db- 数据目录初始化异常:清理卷后重建,注意此操作会清空数据,仅限初始化阶段使用:
docker compose down -v docker compose up -d db docker compose up -d app现象二:上传大文件被拒绝
默认上传上限偏小,图片、说明文档一多就撞墙。在.env追加并重启:
echo "PHP_UPLOAD_LIMIT=100M" >> .env docker compose restart app现象三:邮件发不出去
按顺序排查:先核对.env里的 SMTP 配置,再手动发一封测试邮件验证:
docker compose exec app php artisan snipeit:test-email your-email@domain.com若仍失败,查看容器内邮件日志:
docker compose exec app tail -f /var/log/mail.log八、备份、恢复与升级:把闭环走完才算完工
备份策略:自动 + 手动双保险
.env中开启定时备份相关开关:
BACKUP_ENABLED=true BACKUP_RETENTION=30 BACKUP_DISK=local BACKUP_NOTIFICATIONS_ENABLED=true手动触发备份与查看列表:
docker compose exec app php artisan backup:run docker compose exec app php artisan backup:list数据库层面也可以直接用mysqldump落库到备份目录:
docker compose exec db mysqldump -u snipeit_user -p"${DB_PASSWORD}" snipeit > backup_$(date +%Y%m%d).sql恢复流程:按逆序执行
# 1. 恢复数据库 docker compose exec -T db mysql -u snipeit_user -p"${DB_PASSWORD}" snipeit < backup_20240614.sql # 2. 解包上传目录 tar -xzf storage_backup_20240614.tar.gz -C ./ # 3. 恢复环境配置并重启 cp env_backup_20240614 .env docker compose restart升级流程:先备份,再滚动
# 1. 升级前必做备份 docker compose exec app php artisan backup:run # 2. 停止并拉取新代码 docker compose down git pull origin master # 3. 按需更新镜像版本并重建 docker compose pull docker compose up -d # 4. 执行数据库迁移与缓存清理 docker compose exec app php artisan migrate --force docker compose exec app php artisan config:clear docker compose exec app php artisan cache:clear九、进阶调优:缓存、运行参数与监控
引入 Redis 提升并发表现
在docker-compose.yml中追加一个轻量缓存服务:
redis: image: redis:alpine command: redis-server --appendonly yes volumes: - redis_data:/data restart: unless-stopped随后在.env中切换驱动并指定连接信息:
CACHE_DRIVER=redis SESSION_DRIVER=redis QUEUE_CONNECTION=redis REDIS_HOST=redis REDIS_PASSWORD=your_redis_password按业务规模调整 PHP 参数
导出导入、报表生成都是重活,可在.env中放大运行上限:
PHP_MEMORY_LIMIT=512M PHP_MAX_EXECUTION_TIME=300 PHP_UPLOAD_MAX_FILESIZE=100M关注四类基础指标
日常巡检时至少盯住:容器 CPU/内存占用(docker stats)、数据库连接数、应用响应时间、磁盘剩余空间(docker compose exec app df -h)。指标异常往往先于用户投诉出现,早发现早处理。
十、收尾:一份可以直接抄进团队 Wiki 的运维清单
把分散的动作收敛成清单,新接手的人照着做就不会漏:
- 安装 Docker 与 Compose,确认版本满足要求
- 生成唯一
APP_KEY,数据库使用随机强密码 - 数据卷映射到宿主目录,避免数据"隐形"
- 首登立即修改管理员默认密码
- 端口、HTTPS、防火墙三项安全配置到位
- 建立厂商、分类、状态标签、用户等基础字典
- 用 CSV 模板完成存量资产批量导入
- 开启自动备份,验证一次手动恢复流程
- 记录当前版本号,纳入每月升级与安全更新节奏
- 定期抽查日志与磁盘,按需扩容或清理
到这里,一套可持续运营的 Snipe-IT 资产管理系统就已经落地:部署有五步可循,数据有持久化和备份兜底,故障有速查路径,升级有标准流程。剩下的,就是把这份清单贴到团队 Wiki,让资产台账从"某人的记忆"变成"系统的记录"。
【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
