Snipe-IT开源IT资产管理系统Docker快速部署完整实战指南
【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it
Snipe-IT 是一款免费开源的 IT 资产与软件许可证管理系统,它能帮你回答三个灵魂拷问:这台笔记本在谁手上?这个软件授权还剩几个?下个月哪些设备要过保?本文将从工程师视角出发,带你用 Docker 在 5 分钟内完成从零到一的部署,再通过真实业务场景演示资产录入、分配、维修与备份的全流程。
为什么你的资产台账总是对不上账
先回忆一下你现在的资产管理方式:是不是还靠一张 Excel 表格?新人入职领电脑靠邮件申请,IT 群聊里翻记录;设备维修了没人登记,财务年底盘点时发现账实不符;软件许可证买多了用不完、买少了又要加购。这些问题看似零散,根子只有一个——缺少一套统一的资产台账系统。
Snipe-IT 就是为这个场景设计的。它运行在浏览器里,支持资产全生命周期管理、许可证余量追踪、状态标签、二维码标签打印、维修记录、审批流、LDAP/AD 集成和完整的 REST API。更重要的是,它有官方 Docker 镜像,不用装 PHP、不用配 MySQL,一条命令就能跑起来。
为什么首选 Docker 部署而不是裸装
你可以在 Linux 服务器上手动装 Nginx、PHP、MariaDB 再跑安装向导,但 Docker 方案在四个方面有明显优势:
| 对比项 | 传统裸装 | Docker Compose |
|---|---|---|
| 环境准备 | 手动装 PHP/扩展/MySQL,约 30 分钟 | 一条docker compose up -d |
| 环境一致性 | 开发与生产环境常有差异 | 镜像一致,环境完全可复现 |
| 升级回滚 | 容易踩依赖冲突 | 换镜像版本即可 |
| 备份恢复 | 需分别备份代码、数据库、上传文件 | 数据集中在两个卷里 |
注意:Docker 部署不等于"不用懂原理"。你仍然需要理解docker-compose.yml里的服务拓扑、卷挂载和环境变量,本文后面会逐个拆开讲。
开始之前:准备你的部署环境
本指南假设你使用 Linux 服务器或本地开发机,目标机器满足以下条件即可:
# 检查 Docker 与 Compose 是否就绪 docker --version docker compose version # 如果没有安装,可用官方脚本快速安装 Docker Engine curl -fsSL https://get.docker.com | bashSnipe-IT 官方推荐至少2GB 内存,数据库走 MariaDB,磁盘空间按资产照片和备份量预留。建议把项目放在独立目录,例如/opt/snipe-it。
从零到一:5 分钟部署 Snipe-IT 全流程
第一步:拉取项目代码
项目仓库地址为 https://gitcode.com/GitHub_Trending/sn/snipe-it ,克隆后你会得到完整源码,其中docker-compose.yml和docker/docker.env就是部署的核心。
git clone https://gitcode.com/GitHub_Trending/sn/snipe-it cd snipe-it第二步:生成密钥并创建 .env 配置
项目提供的docker/docker.env是模板文件,但里面大量变量是给旧式容器链接使用的占位符,直接照抄会连不上数据库。建议你基于它手工精简出一份可用的.env:
# 先用模板看看有哪些配置项 cat docker/docker.env # 复制为实际使用的 .env cp docker/docker.env .env然后编辑.env,至少保证下面这几组参数正确。首先是应用基础配置:
# 应用密钥,必须为 32 位随机字符串,未设置时容器会反复报错 APP_KEY=base64:你的32位随机字符串 # 站点访问地址,填 http://服务器IP:8000 APP_URL=http://192.168.1.100:8000 # 时区与语言,中文环境建议保留 en 界面+中文字段名 APP_TIMEZONE=Asia/Shanghai APP_LOCALE=en接着是数据库连接配置。在 Compose 模式下,db服务的网络别名就是db,所以主机名必须写db:
DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=snipeit DB_USERNAME=snipeit DB_PASSWORD=这里填一个强密码 DB_PREFIX=null再确认邮件配置(没有 SMTP 可以先留空,系统不会因此启动失败):
MAIL_MAILER=smtp MAIL_HOST=smtp.example.com MAIL_PORT=587 MAIL_USERNAME=your@email.com MAIL_PASSWORD=your-password MAIL_FROM_ADDR=your@email.com MAIL_FROM_NAME=Snipe-IT第三步:一键启动应用与数据库
项目自带的docker-compose.yml定义了两个服务:app(Snipe-IT 应用)和db(MariaDB),数据分别落在storage和db_data两个命名卷里,容器删除后数据不丢。
# 后台启动全部服务 docker compose up -d # 查看两个容器的运行状态 docker compose ps # 跟随应用日志,看到 "Supervisord started successfully" 即表示启动完成 docker compose logs -f app注意:首次启动要拉取镜像、等待数据库初始化并执行迁移,通常需要 1~3 分钟,属正常现象。app容器健康检查通过前不要急着访问页面。
第四步:验证部署是否成功
# 确认应用容器健康 docker compose ps # 打开浏览器访问 # http://你的服务器IP:8000看到登录页说明部署成功。默认演示账号admin@example.com/password可以登录,但登录后第一件事就是修改密码,或者删除演示用户并创建自己的管理员账号。
第五步:快速校验数据库连通性
如果登录页一直转圈,多半是应用连不上数据库,用这条命令直接从容器内验证:
# 从 app 容器内 ping db 服务名 docker compose exec app ping db # 检查应用能否读取到环境变量 docker compose exec app php artisan about上线第一步:用真实业务场景把系统跑起来
部署成功只是开始,接下来我们走一遍最常见的场景——新员工入职领电脑。这能帮你验证系统配置是否完整。
场景一:录入基础档案
Snipe-IT 的业务对象有依赖顺序:先有厂商和分类,再建型号,最后录资产。建议按这个顺序操作:
- 厂商:管理 → 厂商 → 新建,录入联想、戴尔等供应商信息
- 分类:管理 → 分类 → 新建,建议按"笔记本电脑、显示器、软件授权、配件"划分
- 型号:管理 → 型号 → 新建,关联厂商与分类,可设置默认保修期
- 资产:资产 → 新建,选择型号后填写序列号、购买日期、购买价格、状态标签
场景二:批量导入历史资产
如果手上有几百台存量设备,逐个录入不现实,用 CSV 导入最快。项目自带了模板:sample_csvs/assets-sample.csv,表头包含公司、名称、资产标签、分类、厂商、型号、购买日期、价格、签出对象等字段。
# 参考模板结构,整理你自己的资产清单 head -5 sample_csvs/assets-sample.csv在 Web 界面进入 管理 → 导入 → 资产导入,上传 CSV 并做字段映射即可。注意:导入前先在分类、厂商、状态标签里建好对应条目,否则会导入失败。
场景三:设备报修与维修跟踪
资产在生命周期里免不了维修。Snipe-IT 的"维护记录"模块可以登记故障描述、维修成本、供应商和完成日期,把维修历史完整串起来。
上面这类"故障"可以对应成一条维修工单:把故障现象写在备注里,把更换键盘的费用填进维修成本,完成后更新状态标签为"可用"。这样财务核算和资产折旧时,每一笔成本都有据可查。
场景四:签出与归还
资产录入后,用"签出"把它分配给具体员工:
- 进入资产详情 → 签出
- 选择签出对象(用户/位置/资产)
- 填写签出日期、期望归还日期、备注
- 系统自动写入操作日志,员工会收到邮件通知(需配置 SMTP)
员工离职或设备报废时执行"签入",流程对称且全程留痕。
生产环境进阶:安全、备份与升级三板斧
个人试用和公司生产环境是两个世界。如果你要正式上线,下面三点必须做。
1. 安全加固清单
# 更换默认端口,避免 8000 端口被扫描 # 在 .env 中设置 APP_PORT=8080- 数据库使用强密码,可用
openssl rand -base64 32生成 - 在防火墙只放行
APP_PORT,不要暴露数据库端口 - 登录后立即修改默认密码,关闭演示数据
- 有条件时配置 HTTPS 反代(如 Nginx + Let's Encrypt)
2. 备份策略:数据库 + 上传文件一起备份
Snipe-IT 内置了 Laravel Backup,配置好.env后即可定时备份:
# 启用自动备份 BACKUP_ENABLED=true BACKUP_RETENTION=30 BACKUP_DISK=local手动备份也可以随时触发:
# 生成一次完整备份(含数据库与上传文件) docker compose exec app php artisan backup:run # 查看已有备份 docker compose exec app php artisan backup:list如果想把备份落到宿主机目录,把docker-compose.yml里的卷改成 bind mount 即可,例如./data/storage:/var/lib/snipeit,方便直接拷贝到异地存储。
3. 升级流程:先备份再升级
# 1. 先备份 docker compose exec app php artisan backup:run # 2. 拉取最新代码并重建容器 git pull origin master docker compose pull docker compose up -d # 3. 执行数据库迁移 docker compose exec app php artisan migrate --force # 4. 清理缓存 docker compose exec app php artisan config:clear docker compose exec app php artisan cache:clear注意:生产环境升级前,务必先在小环境验证一遍迁移脚本,避免直接在生产库执行失败。
常见问题排查:问题 → 症状 → 解决方案
问题一:容器启动后立即退出
症状:docker compose ps里app状态为Exited,日志报APP_KEY相关错误。
解决方案:APP_KEY未正确设置或长度不对。重新生成并写入.env:
docker compose run --rm app php artisan key:generate --show # 把输出结果粘贴到 .env 的 APP_KEY 行,然后重启 docker compose up -d问题二:数据库连接失败
症状:页面持续白屏或报SQLSTATE[HY000] [2002] Connection refused,但db容器看起来是启动的。
解决方案:检查.env中DB_HOST是否为db(Compose 网络别名),并确认密码与docker-compose.yml中MYSQL_PASSWORD一致。改了配置后必须重启容器:
# 修改 .env 后,让容器重新读取配置 docker compose up -d --force-recreate app问题三:上传大文件失败
症状:导入 CSV 或上传资产图片时提示超出限制。
解决方案:在.env中加大 PHP 上传限制并重启:
echo "PHP_UPLOAD_LIMIT=100M" >> .env docker compose restart app问题四:登录页可以打开但邮件发不出
症状:签出资产后员工收不到通知邮件。
解决方案:先用内置命令测试邮件链路,多数是 SMTP 端口或认证问题:
docker compose exec app php artisan snipeit:test-email admin@example.com如果测试报认证失败,检查MAIL_USERNAME/MAIL_PASSWORD与 SMTP 服务商要求是否一致(如 587 端口通常需要 STARTTLS)。
检查清单:上线前逐项打勾
- ✅ Docker 与 Docker Compose 版本符合要求
- ✅
.env中APP_KEY、DB_HOST=db、数据库密码三项配置正确 - ✅ 首次访问能打开登录页,默认账号已改密
- ✅ 厂商、分类、状态标签基础档案已建立
- ✅ 存量资产已通过 CSV 批量导入并核对数量
- ✅ 测试一次签出/签入流程,确认操作日志正常
- ✅ 已执行
backup:run验证备份可用 - ✅ 防火墙只放行
APP_PORT,数据库端口未暴露 - ✅ 升级流程已在测试环境演练过一遍
下一步该做什么
Snipe-IT 的价值不在于部署,而在于把它变成日常运维的"事实来源":把今天这份指南里的场景跑通,让第一台资产真正流转起来。之后你可以继续探索它的 REST API 对接自己的工单系统、配置 LDAP 实现单点登录、接入监控告警。资产管理的账,从今天开始,每一笔都有据可查。
【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考