
Snipe-IT 资产管理系统 Docker 保姆级部署实战从一台空机器到资产台账上线一条命令跑通【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it如果你的公司还靠一张共享 Excel 表格记着几百台笔记本、显示器、软件授权是谁在用那你大概率经历过这种场面月底盘点时财务要设备折旧数据、行政要领用记录、运维要保修状态而那张表里三分之一的行已经过期了。Snipe-IT 就是来解决这个问题的——一套免费开源的 IT 资产与许可证管理系统asset/license management system用 Web 界面管设备、软件授权、耗材、配件和维修记录还带二维码标签、CSV 批量导入和完备的权限体系。本文用 Docker 把它跑起来全程可以照抄命令目标是一台只有 Docker 的空机器最终得到一个能正常登录、能录资产、能备份恢复的生产可用系统。本文命令均在 Linux 服务器上验证过使用的项目版本为当前仓库主分支。文章基于仓库内的docker/docker.env、docker-compose.yml与docker/startup.sh实际配置展开所有涉及密钥、密码、域名的地方都用占位符标出请务必替换成你自己的值。动手之前先给自己做一次体检大多数部署翻车不是命令敲错了而是环境没对齐。照着下面这份清单核对一遍能省掉后面一半的排障时间。硬件与系统检查项最低要求我的建议操作系统任意支持 Docker 的 Linux 发行版Ubuntu 22.04 / Debian 12 均可内存2 GB4 GB 以上跑 MySQL 更从容磁盘10 GB 可用单独给数据卷留足空间端口8000可改生产环境建议换高位端口软件工具先确认版本避免旧版 compose 语法不兼容docker --version docker compose version看到 docker 20 和 compose v2 就没问题。接着克隆项目代码仓库地址仅此一处需要后续操作全部在本地完成git clone https://gitcode.com/GitHub_Trending/sn/snipe-it cd snipe-it版本选型说明docker-compose.yml里应用镜像写的是snipe/snipe-it:${APP_VERSION:-latest}数据库是mariadb:11.4.7。APP_VERSION没设置时默认拉取latest。想固定版本就在.env里写死APP_VERSIONv7.x.x——生产环境强烈建议这么做避免某天latest更新后行为变化。镜像来源应用和数据库镜像都从 Docker Hub 拉取无需额外配置仓库。仓库里docker/目录自带三份 Dockerfile 和一套完整启动脚本startup.sh我们不走源码构建直接用官方镜像最省事。里程碑一把配置模板请回家并逐项人肉校对项目不提供开箱即用的.env但给了模板复制一份再改cp docker/docker.env .env打开.env你会看到大量被注释的键和几个还没被展开的${...}占位符。这里是最容易踩坑的地方docker/docker.env是给旧版docker-compose.yml链接方式传数据库地址用的模板里面DB_HOST${MYSQL_PORT_3306_TCP_ADDR}这种写法在新版 compose 里不会被自动展开原样传给应用容器会导致数据库连不上。我们要做的是把关键项全部改成明确的值。必须改的配置一个都不能少配置项填什么说明与注意APP_KEYbase64:...下一步生成应用加密密钥留空容器直接启动失败APP_URLhttp://你的服务器IP:8000生成邮件链接、二维码依赖它APP_TIMEZONEAsia/Shanghai时区决定所有时间显示APP_LOCALEzh或en界面语言DB_HOSTdb改成 compose 服务名不要留模板的${...}DB_PORT3306DB_DATABASEsnipeit数据库名DB_USERNAMEsnipeit_user普通账号DB_PASSWORD一串强随机密码别和 root 密码相同MYSQL_ROOT_PASSWORD另一串强随机密码compose 文件里 db 服务会读取这个值MAIL_MAILERsmtp邮件可后配不影响部署生成随机密码用系统自带工具即可openssl rand -base64 24至于MAIL_HOST等邮件项模板里的${MAIL_...}同样不会被展开可以先全部换成你自己的 SMTP 配置或者临时注释掉——系统能正常跑只是收不到通知邮件后续在后台设置里再补。里程碑二生成应用密钥这是第一条命脉APP_KEY是 Laravel 应用的加密基石Snipe-IT 的启动脚本startup.sh里写死了校验逻辑检测不到APP_KEY就打印提示并退出。生成方式不用自己编官方镜像里带了 artisan 命令docker compose run --rm app php artisan key:generate --show这条命令会先拉取镜像第一次较慢然后输出一串base64:xxxxx。把它填回.env的APP_KEY后面格式是APP_KEYbase64:xxxxx注意base64:前缀别丢。密钥生成后要长期保存。它用于加密数据库里的敏感字段换密钥会导致已加密数据无法解密这不是能随便 rotate 的值。里程碑三拉起容器等一句Supervisord started successfully一切就绪启动docker compose up -ddocker-compose.yml定义了三个东西值得先看懂app服务把宿主机${APP_PORT:-8000}端口映射到容器内 80storage卷挂在/var/lib/snipeit上传文件、备份都在这里db服务用mariadb:11.4.7数据落在db_data卷还配了 healthcheckapp会等数据库健康后再启动。看状态docker compose ps两个容器都显示Up之后盯启动日志docker compose logs -f app日志滚动到最后看到Supervisord started successfully这行就说明 Web 服务进程正式接管了。此时按CtrlC退出日志跟随容器不受影响。顺带做个快速健康检查——项目在routes/web.php里注册了无需登录的/health路由curl -s -o /dev/null -w %{http_code}\n http://127.0.0.1:8000/health返回200即通过。这一步只验证 Web 层数据库连接是否正常等下一步浏览器见真章。里程碑四走完 /setup 向导创建你的第一个管理员打开浏览器访问http://你的服务器IP:8000。第一次访问没有配置任何用户系统会自动跳到/setup安装向导。这个向导是 Snipe-IT 独有的初始化流程分两步先做环境自检数据库连通、存储目录可写、.env 是否暴露再创建管理员账号。向导里注意三件事环境自检页如果报错会明确告诉你是哪一项不合格按提示修完刷新即可不用重来。管理员账号用你的真实邮箱和强密码别用adminexample.com / password这种演示值——虽然参考文档常这么写但这是生产系统第一步就该正经。完成后回到登录页用刚创建的账号登录。登录后第一件事右上角头像 → 个人资料 → 修改密码向导里设的只是初始密码。登录后进「管理」菜单把这几项基础数据填上资产台账才有骨架厂商管理录入联想、戴尔等供应商后续设备型号要引用它资产分类建笔记本显示器软件等分类状态标签配置可用/在库/维修中/报废等状态位置办公室、机房等物理位置上线之后的三层验证确认真的部署成功了光能打开登录页不算完按下面三层走一遍冒烟测试才算真正交付第一层页面功能冒烟新建一个分类 → 新建一个厂商 → 新建一条资产不填序列号也能建但建议填给资产打二维码标签列表页的二维码图标确认图片能正常生成记一条维护记录确认日期、费用字段能保存第二层数据与日志验证# 应用日志无异常堆栈 docker compose logs app --tail 50 # 数据确实落进了 MySQL在 db 容器里查一下 docker compose exec db mariadb -u snipeit_user -p snipeit -e show tables;密码会以明文出现在命令行参数里注意别截图外发。能看到几十张业务表说明连接和迁移都正常——startup.sh每次启动都会自动执行php artisan migrate --force所以表结构你不需要手动建。第三层重启韧性验证docker compose restart app重启后能正常登录、数据还在说明卷挂载和持久化没问题。这个测试建议在正式交付前必做它能暴露一大类数据只存在容器里的隐患。把备份、升级、监控排进值班表部署完成只是起点运维节奏要固定下来。我给三个建议的固定动作备份每周一次雷打不动Snipe-IT 内置了备份功能数据会落到storage卷的dumps/目录docker compose exec app php artisan backup:run docker compose exec app php artisan backup:list想备份到宿主机把卷里的 dumps 目录再拷贝一份出来docker cp $(docker compose ps -q app):/var/lib/snipeit/dumps ./backups/升级选业务低峰期半小时内完成# 1. 先备份 docker compose exec app php artisan backup:run # 2. 拉新代码如果用的是 git 部署方式 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监控看一眼就够docker stats docker compose logs -f --tail 50 app盯三个指标CPU 长期 80% 说明该加资源/var/lib/snipeit所在磁盘快满就该清备份日志里出现大量 500 就去看异常堆栈。踩坑实录五个高频事故的现象、原因与解药以下问题都来自真实部署场景按现象 → 原因 → 解决记录。事故一容器启动即退出现象docker compose up -d后docker compose ps显示 app 状态为Exited。原因APP_KEY缺失。startup.sh检测不到就直接退出日志里会有Please re-run this container with an environment variable $APP_KEY的提示。解决按里程碑二生成密钥写入.envdocker compose up -d重新拉起。事故二页面 500 或数据库连接失败现象能进/setup但环境自检报数据库错误。原因.env里DB_HOST还是模板原样DB_HOST${MYSQL_PORT_3306_TCP_ADDR}这个变量在 compose 环境下永远不会展开应用拿它当主机名去连必然失败。解决把DB_HOST改成dbDB_PORT改成3306确保.env里的DB_USERNAME/DB_PASSWORD与 compose 里 db 服务的MYSQL_USER/MYSQL_PASSWORD一致。改完docker compose up -d重建。事故三能登录但上传图片/CSV 报文件过大现象导入 CSV 或上传头像时提示超出upload_max_filesize。原因PHP 上传上限默认较小。解决.env里加一行PHP_UPLOAD_LIMIT100单位是 MBstartup.sh会在启动时自动写入 php.ini然后docker compose restart app。事故四8000 端口被占现象docker compose up报端口绑定冲突。原因服务器上已有别的服务用了 8000。解决.env里设置APP_PORT8080或你喜欢的任意端口重新docker compose up -d访问地址随之变化。事故五数据丢了现象执行过docker compose down -v后重来一遍发现所有资产记录都没了。原因-v会连带删除卷db_data和storage里的数据一并清空。down不加-v是安全的加上就是格式化。解决备份先行日常重启用restart或down永远不要对生产数据卷执行down -v。进阶玩法缓存、HTTPS、多实例与认证集成系统稳定跑起来之后下面几个方向按需取用点到即止。Redis 缓存docker-compose.yml里加一个redis:alpine服务然后.env配置CACHE_DRIVERredis SESSION_DRIVERredis QUEUE_CONNECTIONredis REDIS_HOSTredis REDIS_PASSWORD你的密码startup.sh已经内置了对REDIS_*环境变量的读取支持改了就能用。多实例横向扩容的前提就是先上 Redis否则文件会话在多实例间不共享。HTTPSstartup.sh会自动检测/var/lib/snipeit/ssl/snipeit-ssl.crt和snipeit-ssl.key两个文件存在就启用 Apache 的 SSL 模块。把证书放进 storage 卷的ssl/目录后重启容器即可无需改任何配置。多实例有负载均衡器的话可以部署多个 app 副本把APP_PORT错开映射前置 Nginx 做反向代理。每个副本共享同一个数据库和 Redis会话由 Redis 统一管理。认证集成仓库里已经带了 SCIM 路由routes/scim.php、SAML 服务提供者SamlServiceProvider和完整的 LDAP 设置项在后台「设置 → LDAP」里可以配 AD/LDAP 同步实现公司账号体系单点登录。这个功能建议交给熟悉目录服务的人来配属于配置半小时、排障一整天的典型项目。CSV 批量导入仓库sample_csvs/目录下有资产、用户、授权、厂商等各类样例 CSV后台导入向导会先让你上传文件、再逐字段映射比手工录几百行高效得多。导入前务必先用assets-sample.csv这种模板格式验证一遍字段名。收尾把今天的动作浓缩成一张自检清单最后照着这份清单过一遍过了就算正式交付docker compose ps两个容器均为 Upcurl http://IP:8000/health返回 200/setup向导已走完管理员账号密码已修改已新建至少一条资产并生成了二维码.env中APP_KEY、APP_URL、DB_HOSTdb均已确认php artisan backup:run执行成功备份文件出现在 dumps 目录重启 app 容器后数据仍在已设置PHP_UPLOAD_LIMIT如需大文件导入已用openssl rand生成强密码并妥善保管未使用示例默认值到这里一套能录入资产、能管授权、能追维护、能备份恢复的 Snipe-IT 就已经在你手上跑起来了。接下来值得做的第一件事把你们公司手头那张共享 Excel 导成 CSV按sample_csvs/assets-sample.csv的格式整理好导入系统让台账真正活起来。部署只是开始数据进去的那一刻它才开始替你干活。【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考