资讯详情

Snipe-IT Docker 部署实战:从拉取镜像到生产备份的完整流程

📅 2026/10/17 1:41:30 | 华诺云谱 👁 阅读
Snipe-IT Docker 部署实战:从拉取镜像到生产备份的完整流程
Snipe-IT Docker 部署实战从拉取镜像到生产备份的完整流程【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-itSnipe-IT 是一个基于 Laravel 的开源 IT 资产与软件许可证管理系统用于跟踪设备去向、维保记录与许可证到期时间。本文带你用 Docker Compose 把它部署到一台 Linux 服务器上覆盖环境检查、容器启动、首次初始化、按需配置和日常运维。部署前准备在动手之前先确认下面这张环境清单。每一项都说明了它为什么必要缺任何一项后面都会卡住。项目要求为什么需要Docker / Docker Compose宿主机已安装并能拉取公共镜像应用和数据库都跑在容器里不需要手动装 PHP 8.3、Apache、MariaDB端口 8000宿主机未被占用应用容器把容器内 80 端口映射到宿主机的APP_PORT默认 8000被占用会启动失败数据库无需本地安装docker-compose.yml里已内置mariadb:11.4.7数据落在db_data卷中磁盘空间建议预留 10GB 以上上传文件、备份 zip 都存在storage卷图片多时增长很快出网 SMTP至少需要一个可用发信地址资产签收、到期提醒、密码找回都依赖邮件不通则这些功能全部失效时区明确APP_TIMEZONE资产折旧、维保到期都以时间计算时区错乱会导致报表偏移环境模板文件在 docker/docker.env容器启动逻辑在 docker/startup.sh生产编排文件为 docker-compose.yml。部署实施整个部署分成三个阶段每个阶段给出目的、可执行命令和通过标志。阶段一拉取代码与生成环境变量目的是准备.env文件Compose 文件通过env_file读取它缺了它容器起不来。git clone https://gitcode.com/GitHub_Trending/sn/snipe-it cd snipe-it cp docker/docker.env .env docker run --rm snipe/snipe-it php artisan key:generate --show把命令输出的 base64 串填回.env的APP_KEY并确认下面三项# 编辑 .env至少检查这三行 grep -E ^(APP_KEY|APP_URL|DB_DATABASE|DB_USERNAME|DB_PASSWORD) .env通过标志grep能逐行打印出APP_KEYbase64:...、APP_URLhttp://...:8000以及数据库用户名密码说明配置齐了。阶段二启动两个容器目的是让app和db两个服务同时跑起来。Compose 文件已声明depends_on: db: condition: service_healthy所以 app 会等 MariaDB 健康检查通过后再启动顺序问题不用手动管。docker compose up -d docker compose ps docker compose logs -f app通过标志docker compose ps里app和db两行都是Up (healthy)logs里能看到 Apache 与 Laravel 的启动信息没有SQLSTATE报错。启动脚本 docker/startup.sh 会自动跑php artisan migrate --force日志里出现 migrate 完成即代表数据库结构就绪。阶段三完成 Web 端初始化容器启动后并没有自动建管理员需要进浏览器走一次设置向导。这条路由由 app/Http/Controllers/SetupController.php 处理走的是web中间件不需要鉴权。# 在浏览器打开下面的地址完成三步 # 1. 检查系统依赖 # 2. 填写管理员姓名、用户名、邮箱、密码 # 3. 配置 SMTP 并发一封测试邮件 # 完成后跳转到 setup/done 即算通过 open http://127.0.0.1:8000/setup通过标志向导最后一步显示 setup complete 并跳到登录页用刚填的账号密码登录成功进入 Dashboard。首次运行验证登录后逐项过一遍下面这张清单全部打勾才算部署完成。验证项位置通过标准访问地址http://host:8000打开是登录页不是 500 或 Apache 默认页管理员账号登录页阶段三创建的账号能登录且权限为 superuser资产列表侧边栏 Hardware → Assets能打开空列表无报错模型列表Hardware → Models能打开能看到内置厂商设置页Admin → Settings各子页签General / Branding / Security / Notifications / LDAP / Backups都能进备份页Admin → Settings → Backups能看到页面可以点 Create Backup登录后的第一件事是两件事一是把Admin → Settings → Security里APP_DEBUG关掉生产必须 false二是回到.env把APP_ENVproduction明确写死然后docker compose restart app让配置生效。按需配置按需求场景分组只动你需要的部分避免一次改一堆导致回滚困难。安全强制 HTTPS适用场景对外提供服务不允许 HTTP 明文传输登录密码。镜像里已经内置 Apache SSL 站点 docker/001-default-ssl.conf启动脚本会检测/var/lib/snipeit/ssl/下是否存在snipeit-ssl.crt与snipeit-ssl.key有就自动a2enmod ssl。# 把证书放到 storage 卷对应路径 mkdir -p ./ssl cp my-cert.crt ./ssl/snipeit-ssl.crt cp my-cert.key ./ssl/snipeit-ssl.key # 用 -v 把 ./ssl 挂到容器 /var/lib/snipeit/ssl编辑 docker-compose.yml 的 app.volumes # 然后重启 docker compose restart app验证curl -vk https://host:443能看到证书链浏览器地址栏显示锁形图标。通知接入 SMTP适用场景需要把签收邮件、到期提醒真正发到用户邮箱。在.env里改MAIL_MAILERsmtp MAIL_HOSTsmtp.your-provider.com MAIL_PORT587 MAIL_USERNAMEyoucompany.com MAIL_PASSWORDapp-password MAIL_FROM_ADDRitcompany.com MAIL_FROM_NAMEIT-Asset改完执行docker compose restart app进Admin → Settings → Notifications点 Send test email 收得到信即通过。性能换 Redis 缓存适用场景并发用户超过 50file 缓存开始成为瓶颈。修改.envCACHE_DRIVERredis SESSION_DRIVERredis QUEUE_CONNECTIONredis REDIS_HOSTredis REDIS_PORT6379并在 docker-compose.yml 里加一段redis: redis:7-alpine服务、给app加depends_on: redis。改完docker compose up -d生效。数据调整上传上限适用场景要批量导入带图资产默认 2M 太小。在.env加一行PHP_UPLOAD_LIMIT100启动脚本 docker/startup.sh 里检测到PHP_UPLOAD_LIMIT变量后会 sed 改upload_max_filesize和post_max_size。docker compose up -d app后Admin → Settings → General里上传 50MB 图片不报 413 即通过。生产环境运维备份系统自带备份命令把数据库 dump 和上传目录一起打成 zip。docker compose exec app php artisan snipeit:backup --filenameprod-$(date %Y%m%d) docker compose exec app ls -lh storage/app/backups验证ls能看到刚生成的 zip 文件大小和数据库行数、上传目录总量匹配。备份实际落在storage/app/backups软链到/var/lib/snipeit/dumps也就是storage卷随容器持久化。用 cron 做定时echo 0 3 * * * cd /path/to/snipe-it docker compose exec -T app php artisan snipeit:backup --filenameauto-\$(date \%Y\%m\%d) /var/log/snipe-backup.log 21 | crontab -升级流程先备份 → 更新代码 → 重拉镜像 → 迁移 → 清缓存。docker compose exec app php artisan snipeit:backup --filenamepre-upgrade git pull docker compose pull docker compose up -d docker compose exec app php artisan migrate --force docker compose exec app php artisan config:clear docker compose exec app php artisan view:clear启动脚本本身已经会跑 migrate但手动再执行一次能确保升级过程中新加的 migration 都落库。日志应用日志在容器内/var/www/html/storage/logs/laravel.logApache 与 supervisor 日志走 stdout。docker compose logs --tail200 -f app docker compose logs --since1h app | grep -iE error|exception docker compose exec app tail -n 100 /var/www/html/storage/logs/laravel.log验证能连续跟踪日志、能按时间段过滤说明监控链路可用。恢复出问题时的恢复入口是snipeit:restore命令签名见 app/Console/Commands/RestoreFromBackup.php。docker compose stop app docker compose exec -it db bash -c mysql -uroot -p$MYSQL_ROOT_PASSWORD $MYSQL_DATABASE /dev/stdin SQL -- 从备份 zip 里提取出的 .sql 文件通过管道喂给 mysql SQL docker compose exec app php artisan snipeit:restore --filenamepre-upgrade.zip docker compose start app也可以直接在Admin → Settings → Backups里选一个 zip 点 Restore走的是同一个恢复流程只是多了一层 Web 校验。高频问题速查现象原因处理方法docker compose ps里 app 一直Restarting.env缺APP_KEY或格式不对用docker run --rm snipe/snipe-it php artisan key:generate --show重新生成粘回.env后docker compose up -d数据库容器healthyapp 启动日志刷SQLSTATE[HY000] [2002]DB_HOST在 Compose 网络里应为服务名db不是localhost编辑.env把DB_HOST改成dbdocker compose restart app登录页 500laravel.log报Vite manifest not found容器内前端构建产物缺失或过期docker compose exec app php artisan storage:link php artisan view:clear php artisan config:cache后重启上传资产图片返回 413PHP 默认upload_max_filesize2M在.env加PHP_UPLOAD_LIMIT50docker compose up -d app让启动脚本改写 php.ini管理员密码忘记收不到重置邮件SMTP 未配通或用户邮箱没填先修 SMTP 走 Web 重置急用时进db容器用php -r生成 bcrypt 哈希后UPDATE users SET password... WHERE email...setup页面打不开直接跳到登录已创建过管理员setup 路由检测到就 301属于正常行为直接登录即可想重跑向导需先把 users 表除首条外清掉生产慎用下一步部署跑通后建议先接入公司 LDAPAdmin → Settings → LDAP参考 app/Livewire/LdapSettings.php 的字段向导把账号体系统一再把snipeit:backup挂上 cron 并配一条异地推送两件事做完这套资产系统才真正算进入生产。【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑