Snipe-IT Docker 部署实战:十分钟把资产管理系统跑起来
【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it
Snipe-IT 是一款免费开源的 IT 资产和许可证管理系统——公司里谁领走了哪台笔记本、哪张许可证下周到期,全靠它记账。Snipe-IT Docker 部署的思路并不复杂:应用、数据库、定时任务各进各的容器,你只管端口和两个数据卷。
手搓环境的痛,容器一次替你解决
以前自己装这套系统:apt 装 Apache,配 PHP 扩展(gd、bcmath、ldap 一个不能少),再折腾 composer 依赖和文件权限,环境漂移排查起来全是泪。
容器化之后这些活都干完了:Dockerfile 基于 Ubuntu 24.04 装齐 Apache 和 PHP 8.3 全家桶;startup.sh 负责建数据目录、跑数据库迁移、修权限;supervisord.conf(Supervisord 是轻量进程管理器)同时拉起 Apache 和 Laravel 任务调度器。你只需要记住三个东西:一个 app 容器、一个 db 容器、两个命名卷。
🔧 快速拉起:从 clone 到浏览器访问
先克隆仓库拿到 compose 编排文件:
git clone https://gitcode.com/GitHub_Trending/sn/snipe-it cd snipe-it目录里能看到 docker-compose.yml 就算成功。
compose 启动依赖一个.env文件,用仓库自带模板初始化即可:
cp docker/docker.env .env这是 compose 的启动前提,生成新文件而已,不动仓库里任何内容。模板里APP_KEY一行是注释状态,这正是下一步要处理的。
APP_KEY 是 Laravel 的加密密钥,没有它容器会直接退出。下面这条命令用镜像跑一次生成脚本,只输出密钥、不启动服务:
docker run --rm -it snipe/snipe-it:latest php artisan key:generate --show输出形如base64:xxxx…,把这串值填回.env的APP_KEY=一行。
然后正式用 docker compose 启动:
docker compose up -d docker compose psps里 app 和 db 都到Up (healthy)才算就绪;首次镜像拉取要几分钟,属正常现象。
打开浏览器访问http://你的IP:8000,走一遍初始安装向导。如果向导没出现,直接在容器里建管理员:
docker compose exec app php artisan snipeit:create-admin \ --first_name=Admin --last_name=User --email=admin@example.com \ --username=admin --password=换成强密码看到创建成功的输出后,用这个邮箱密码登录,就能看到资产登记、借还、维护这些模块了。
.env 配置里哪几行不能乱改
APP_URL:访问地址,邮件通知里的链接、资产标签上的网址都由它生成,填你的域名或http://IP:8000。DB_DATABASE/DB_USERNAME/DB_PASSWORD:compose 会把它们直接注入 MariaDB(MySQL 社区分支)做初始化,见 docker-compose.yml 里的MYSQL_DATABASE映射。数据库建好后再改要导数据,想清楚再填。APP_PORT:宿主机端口,默认8000。容器内部固定监听 80,端口映射只改冒号前面的数字。MAIL_*:不配也能跑,但借还通知、验收提醒全依赖它。
完整参数和注释见 docker/docker.env。另外仓库还有一份 dev.docker-compose.yml,附带 Redis 和 MailHog(本地收件箱),适合先拿来做本地联调。
数据落盘:两个命名卷管住所有家当
.env 配置 管行为,数据则全押在 docker-compose.yml 声明的两个命名卷上,这是整个 Snipe-IT Docker 部署里最该背下来的一段:
db_data:挂到/var/lib/mysql,数据库本体。storage:挂到/var/lib/snipeit,内部分四块——data/uploads(公开图片)、data/private_uploads(私有文件,如验收签名)、dumps(备份文件)、keys(OAuth 密钥、LDAP 证书)。
容器内对应路径是 Dockerfile 里的软链指过去的,所以重启、改端口、升级镜像都不会碰到数据。
备份走应用自带的备份/恢复流程(恢复命令定义见 RestoreFromBackup.php),文件统一落在dumps目录——它就在storage卷里。需要回滚时:
docker compose exec app php artisan snipeit:restore命令会按交互提示让你选择备份文件,选错会报错,重新执行即可。
🛡️ 生产加固:HTTPS、上传限制与版本升级
HTTPS 不用改任何配置:把证书放进storage卷的ssl目录,文件名固定为snipeit-ssl.crt和snipeit-ssl.key(用docker volume inspect可查到该卷在宿主机的实际位置)。startup.sh 启动时检测到这两个文件就自动开启 SSL 模块,检测不到就自动禁用,重启即生效。
大文件上传默认会被 PHP 上限卡住,startup.sh 留了个开关:在.env加一行PHP_UPLOAD_LIMIT=100(单位 MB,同时调整 upload_max_filesize 和 post_max_size),然后docker compose up -d,容器日志里能看到Changing upload limit to 100M说明生效。
升级比传统部署省一步——不用手动跑迁移,因为 startup.sh 每次启动都会执行php artisan migrate --force,数据库迁移自动跟上:
docker compose pull docker compose up -d docker compose logs -f app看到迁移输出结束、Apache 启动信息出现,升级完成。想锁定版本时,在.env设APP_VERSION(镜像标签是${APP_VERSION:-latest}),升级前先记下当前号,方便出问题时回滚。
出事了怎么查:现象、原因、一条命令修复
容器反复重启,日志出现Please re-run this container with an environment variable $APP_KEY原因:.env里APP_KEY是空的,startup 脚本检测到就主动退出。 修复:docker run --rm snipe/snipe-it:latest php artisan key:generate --show生成后写回.env,再docker compose up -d。
app 一直Restarting,日志全是数据库连接失败原因:MariaDB 首次初始化还没跑完,健康检查没通过,compose 的service_healthy条件会让 app 反复等待重试。 修复:docker compose logs db看初始化进度,healthy之后 app 会自动拉起,通常无需干预。
端口 8000 访问不通,或浏览器直接 502原因:宿主机 8000 被别的进程占了,端口映射没绑上。 修复:.env里改APP_PORT=8080,docker compose up -d后换新端口访问。
上传头像、图片报 413 或静默失败原因:PHP 默认上传上限(一般 2M)低于文件体积。 修复:.env追加PHP_UPLOAD_LIMIT=100,然后docker compose up -d。
两个命名卷加一个.env,就是这套 Snipe-IT Docker 部署的全部家当;镜像升级、数据库迁移、HTTPS 开关都已自动化,留给你的日常只剩备份和翻日志。建议上线当天就给storage卷打个完整快照,比如docker run --rm -v snipe-it_storage:/d -v $(pwd)/backup:/o alpine tar czf /o/snipeit.tar.gz -C /d .——备份文件、上传图、证书一次全带上,比单导数据库更全。
【免费下载链接】snipe-itA free open source IT asset/license management system项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考