ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Snipe-IT Docker 部署实战:3 分钟拉起容器到生产加固的完整避坑手册

Snipe-IT Docker 部署实战:3 分钟拉起容器到生产加固的完整避坑手册 Snipe-IT Docker 部署实战3 分钟拉起容器到生产加固的完整避坑手册【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it还在用 Excel 记 IT 资产两百台笔记本谁领走了、软件许可证还剩几个席位、上个月归还的 iPad 落在哪个工位——全靠翻表格和问人。Snipe-IT 是开源免费的 IT 资产与许可证管理系统领用归还、维护记录、EULA 签名这些流程它都接得住。这篇文章带你把它跑进一个 Docker 容器里怎么 3 分钟拉起、.env 哪些项不填会直接崩、数据卷挂在哪才不会丢东西最后把常见故障一条条修掉。先拉镜像跑通一条 compose 命令看到登录页官方已经把 Apache PHP 8.3 打进了现成镜像snipe/snipe-it你不需要在本机装任何 PHP 扩展更不用碰仓库里的 Dockerfile——它只是构建时用的部署阶段直接拉镜像就行。先把代码仓库拉下来里面有 docker-compose.yml 和环境变量模板git clone https://gitcode.com/GitHub_Trending/sn/snipe-it cd snipe-itcompose 文件里其实就两个服务app跑 Snipe-ITdb是 MariaDB 11.4.7。数据库带了健康检查depends_on配了condition: service_healthy说白了就是库没就绪之前应用容器不会抢跑省掉了一类连不上库的时序问题。把 .env 三项填对别让容器白拉一次.env是整个部署里唯一要动手改的文件它同时喂给app通过env_file和dbMYSQL_*变量。为什么必须提前弄对启动脚本 docker/startup.sh 一开头就检查APP_KEY缺了直接打印提示然后 exit容器会秒退日志里那行 Please re-run this container with an environment variable $APP_KEY 就是这个坑。cp docker/docker.env .env然后打开.env重点改这几处其余保持模板原样即可APP_KEY留空或沿用占位符都会崩。先起一次空容器生成一把 32 位随机密钥把输出填回.envdocker run --rm snipe/snipe-it php artisan key:generate --showAPP_URL你的真实访问地址决定邮件链接和资产标签 URL 的前缀填错后面很难排查。APP_PORT宿主端口compose 里映射的是${APP_PORT:-8000}:80不改就是 8000。数据库四件套MYSQL_DATABASE/MYSQL_USER/MYSQL_PASSWORD/MYSQL_ROOT_PASSWORD自己定值。注意模板里的DB_HOST${MYSQL_PORT_3306_TCP_ADDR}是老式服务发现的写法直接改成DB_HOSTdb就是 compose 里的服务名端口保持 3306。填完拉起然后盯日志docker compose up -d docker compose logs -f app日志里能看到php artisan migrate --force跑完、Supervisord 把 Apache 接管起来基本就成了。浏览器打开http://服务器IP:8000走/install安装向导建好数据库连接和管理员账号就算正式跑通。拉起来只是能看真上生产还得先搞清楚数据落在容器的哪个位置——下一节专门讲这件事。把数据卷指对位置顺手跑通第一次备份 先说结论这个镜像唯一挂载的卷是storage指向容器里的/var/lib/snipeit上传的设备照片、备份 dump、OAuth 密钥全在这里面构建时 Dockerfile 里一堆ln -fs已经把public/uploads、storage/app/backups这些目录都软链过去了。数据库则在db_data卷里。两个卷都在 docker-compose.yml 顶部声明docker compose down删容器不删卷但手动docker volume rm之前先想想后果。备份不需要装额外工具两件事覆盖全量库用mysqldump直接导文件卷用docker cp拷出来。docker compose exec db sh -c \ exec mysqldump -uroot -p\$MYSQL_ROOT_PASSWORD\ $MYSQL_DATABASE \ backup-$(date %F).sql.gz docker compose cp app:/var/lib/snipeit ./snipeit-data-backup恢复时 Snipe-IT 自带入口 app/Console/Commands/ 里的RestoreFromBackup命令可以直接用方向反过来就行。建议把这两条塞进 crontab 每天跑一遍别等出事再想起昨天没备份。数据保住了接下来是对外服务的安全面。开 HTTPS、提上传上限生产前必做的两件事先说证书。启动脚本里有个很省事的判断只要/var/lib/snipeit/ssl/下同时存在snipeit-ssl.crt和snipeit-ssl.key它就会自动a2enmod ssl两个文件不在就反着来。所以操作就是把证书丢进宿主机那个storage卷对应的目录下docker compose restart app完事。虚拟主机细节在 docker/001-default-ssl.conf默认端口 443 已被镜像 EXPOSE。第二个坑是上传限制。批量导入资产 CSV、传设备大图的时候撞 413 或文件超过大小限制大概率是 PHP 默认upload_max_filesize太小。不用改任何配置文件启动脚本每次开机都会读PHP_UPLOAD_LIMIT环境变量并改写所有 php.ini顺手还能调APACHE_LIMIT_REQUEST_FIELD_SIZE这类 Apache 头长度限制。往.env里加一行重启即可echo PHP_UPLOAD_LIMIT100 .env docker compose restart app改完用一张大点的图试传一次确认生效因为它是重启时应用热改.env不生效。配置加固完接下来是所有人都躲不过去的一环排障。修掉容器崩溃、数据库超时、上传被拒现象一容器秒退日志只有 APP_KEY 提示。容器Exiteddocker compose logs app里打印 Please re-run this container with an environment variable $APP_KEY。大概率原因就是.env里没填APP_KEY或值被填成了模板占位符。修复一条命令先用上面给过的key:generate --show生成追加进.env再docker compose up -d。现象二app 一直重启提示连不上数据库。先看docker compose psdb那行health: starting卡住不动、或者干脆 unhealthy就是库没起来。九成是.env里数据库变量和MYSQL_ROOT_PASSWORD没配对root 密码为空 MariaDB 会直接拒启动。把四个MYSQL_*值统一改对docker compose down docker compose up -d重建即可库已经起来了只是 app 连不上再进容器查一遍DB_HOST是不是写成了db。现象三页面能看上传报 403 或 Permission denied。这是卷的属主问题——容器内应用以 UID 10000 的docker用户跑而挂载进来的卷如果是 root 属主写文件就会撞权限。进容器把数据目录属主交还给应用用户docker compose exec -u root app chown -R 10000:50 /var/lib/snipeit上传成功但大文件被拒回上一节确认PHP_UPLOAD_LIMIT真的随重启生效了docker compose exec app php -i | grep upload_max_filesize。故障清完日常运维就只剩升级和备份节奏这一件事了。接下来你可以做什么升级基本是三步.env里把APP_VERSION指定到目标版本不填就是latest然后docker compose pull docker compose up -d启动脚本每次都会自动跑migrate --force你不用手动管迁移。动手前把上一节那两条备份命令跑一遍这是唯一不能省的前置动作。再往后的路线看你团队规模想让离职交接不再丢资产把 sample_csvs/ 里的模板拿去试一遍 CSV 批量导入比逐台录快一个量级邮件通知领用提醒、到期告警目前没配的话补上.env里的MAIL_*一组变量再重启排障时想翻更细的应用日志docker compose exec app tail -f /var/www/html/storage/logs/laravel.log常用资源官方 Docker 文档docker/README.md环境变量模板改 .env 时对照docker/docker.env生产 compose 文件docker-compose.yml参与社区与反馈问题CONTRIBUTING.md【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表