news 2026/9/11 11:30:27

Snipe-IT Docker 部署实战:十分钟把资产管理系统跑起来

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Snipe-IT Docker 部署实战:十分钟把资产管理系统跑起来

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…,把这串值填回.envAPP_KEY=一行。

然后正式用 docker compose 启动:

docker compose up -d docker compose ps

ps里 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.crtsnipeit-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 启动信息出现,升级完成。想锁定版本时,在.envAPP_VERSION(镜像标签是${APP_VERSION:-latest}),升级前先记下当前号,方便出问题时回滚。

出事了怎么查:现象、原因、一条命令修复

容器反复重启,日志出现Please re-run this container with an environment variable $APP_KEY原因:.envAPP_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=8080docker 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 11:29:50

PolarDB存算分离架构与传统MySQL基准测试:性能差距从哪来?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 11:29:44

前后端代码扫描统一选型:从各扫各的到一体化工具体系

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 11:29:23

CMSIS-4:嵌入式静态工程的硬件抽象契约与源码级确定性保障

1. CMSIS‑4不是“过时标准”,而是嵌入式开发中被严重低估的静态工程锚点CMSIS‑4这个名词,在2024年的嵌入式工程师日常交流里,常常以两种方式出现:一种是Keil MDK项目里那个被自动勾选、从不点开的“CMSIS”文件夹;另…

作者头像 李华
网站建设 2026/9/11 11:27:45

Duix Avatar Linux部署指南:4步搭建离线数字人视频生成环境

Duix Avatar Linux部署指南:4步搭建离线数字人视频生成环境 【免费下载链接】Duix-Avatar 🚀 Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning. 项目地址: https://gitcode.com/GitHub_T…

作者头像 李华
网站建设 2026/9/11 11:27:21

Dataiku DSS图表功能详解与实战技巧

1. Dataiku DSS图表功能深度解析Dataiku DSS(Data Science Studio)作为一款领先的企业级数据科学平台,其图表功能(Charts)是数据分析师日常工作中最常用的核心模块之一。Concept-8版本对可视化系统进行了重大升级&…

作者头像 李华
网站建设 2026/9/11 11:25:16

WorkBuddy实战指南:从AI工作台到自动化工作流的构建与优化

刚接触CloudQ WorkBuddy那会儿,我一度以为它只是个带聊天框的笔记工具。真正用了一个月,把会议纪要做到自动同步、让它在凌晨定时把日报推到微信、又折腾完本地方案和远端环境的记忆迁移之后,我才意识到这玩意儿其实是把“AI智能体”和“自动…

作者头像 李华