1. 环境准备:从零搭建Docker与MariaDB基础
在CentOS 7上部署Snipe-IT前,我们需要先搭建好Docker和MariaDB这两个基础设施。我遇到过不少新手在环境准备阶段就卡住的情况,大多是因为忽略了系统版本兼容性或依赖包冲突。下面这个经过实测的流程,能帮你避开90%的坑。
1.1 配置Docker环境
首先更新系统基础组件,这个步骤很多人会跳过,但老旧版本的依赖包可能导致后续安装失败。执行以下命令:
bash复制yum update -y && yum install -y yum-utils device-mapper-persistent-data lvm2
接着配置国内镜像源加速下载。阿里云的Docker镜像仓库是我用过最稳定的,速度比官方源快5倍不止:
bash复制yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker时要注意版本匹配。CentOS 7官方源中的Docker版本较旧,建议安装指定版本:
bash复制yum install -y docker-ce-20.10.17 docker-ce-cli-20.10.17 containerd.io
启动Docker后,建议立即设置开机自启并调整用户组权限。很多权限问题都是因为忘记这步:
bash复制systemctl start docker && systemctl enable docker
usermod -aG docker $(whoami)
1.2 部署MariaDB数据库
Snipe-IT官方推荐使用MySQL/MariaDB作为后端数据库。我更喜欢MariaDB,它在CentOS上的兼容性更好。安装时要注意字符集配置:
bash复制yum install -y mariadb-server mariadb
初始化数据库安全设置时,有以下几个关键点:
- 设置root密码强度至少8位含特殊字符
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
bash复制systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation
创建专用数据库时,字符集一定要用utf8mb4,否则存储中文资产信息会出现乱码:
sql复制CREATE DATABASE snipeit CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON snipeit.* TO 'snipeit'@'%' IDENTIFIED BY 'ComplexP@ssw0rd2023';
FLUSH PRIVILEGES;
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Snipe-IT容器化部署实战
2.1 获取镜像与生成应用密钥
直接使用官方镜像是最稳妥的选择,但要注意版本标签。不带标签的latest版本可能包含不稳定的新特性:
bash复制docker pull snipe/snipe-it:latest
生成应用密钥这步很多人会忽略,但APP_KEY是Laravel框架的安全核心。建议在临时容器中生成后保存到本地:
bash复制docker run --rm snipe/snipe-it php artisan key:generate --show
2.2 配置文件深度解析
.env文件是Snipe-IT的核心配置,我整理了一份增强版模板,包含20+个实用参数:
env复制# 数据库配置
DB_HOST=your_db_host
DB_DATABASE=snipeit
DB_USERNAME=snipeit
DB_PASSWORD=YourSecurePassword
DB_PREFIX=null
# 邮件服务配置(以腾讯企业邮箱为例)
MAIL_DRIVER=smtp
MAIL_HOST=exmail.qq.com
MAIL_PORT=465
MAIL_USERNAME=it@yourcompany.com
MAIL_PASSWORD=EmailPassword
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=it@yourcompany.com
MAIL_FROM_NAME="IT资产管理"
# 系统关键参数
APP_ENV=production
APP_DEBUG=false # 生产环境务必关闭
APP_KEY=base64:your_generated_key
APP_URL=https://asset.yourdomain.com
APP_TIMEZONE=Asia/Shanghai
APP_LOCALE=zh-CN # 中文界面
# 文件上传限制(单位MB)
PHP_UPLOAD_LIMIT=100
2.3 Docker Compose高级配置
这个优化版的docker-compose.yml增加了健康检查、资源限制和日志轮转:
yaml复制version: "3.8"
services:
snipeit:
image: snipe/snipe-it:latest
ports:
- "80:80"
container_name: snipeit_prod
volumes:
- ./uploads:/var/www/html/public/uploads
- ./private_uploads:/var/www/html/public/uploads/private
- ./storage:/var/www/html/storage
env_file:
- .env
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
deploy:
resources:
limits:
cpus: '2'
memory: 2G
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
启动时建议先测试配置再正式部署:
bash复制docker-compose config # 验证配置
docker-compose up -d # 后台运行
3. 权限配置与系统调优
3.1 存储卷权限修复
Snipe-IT常见的权限问题90%集中在storage和uploads目录。正确的做法是在宿主机预先创建目录并设置权限:
bash复制mkdir -p ./storage/{logs,framework/{cache,sessions,views}}
mkdir -p ./public/uploads
chown -R 33:33 ./storage ./public/uploads # www-data用户UID通常为33
进入容器内部验证权限:
bash复制docker exec -it snipeit_prod bash
ls -ld /var/www/html/storage /var/www/html/public/uploads
3.2 资产标签生成方案
二维码生成失败通常有三个原因:
- PHP GD库未启用(官方镜像已包含)
- 写入权限不足
- 字体文件缺失
解决方案分三步走:
bash复制# 1. 确认字体存在
docker exec snipeit_prod ls /usr/share/fonts
# 2. 修改标签模板(可选)
vi resources/views/labels/default.blade.php
# 3. 重建缓存
docker exec snipeit_prod php artisan cache:clear
4. 生产环境增强配置
4.1 HTTPS安全加固
使用Let's Encrypt证书配置HTTPS:
yaml复制# 在docker-compose.yml中增加
ports:
- "443:443"
environment:
- HTTPS=true
- SSL_CERT=/etc/letsencrypt/live/yourdomain.com/fullchain.pem
- SSL_KEY=/etc/letsencrypt/live/yourdomain.com/privkey.pem
4.2 数据库备份策略
创建每日自动备份任务:
bash复制# 备份脚本/usr/local/bin/backup_snipeit.sh
#!/bin/bash
docker exec mariadb_container mysqldump -u snipeit -p'password' snipeit | gzip > /backups/snipeit_$(date +%Y%m%d).sql.gz
find /backups -type f -mtime +30 -delete
# 添加到crontab
0 2 * * * /usr/local/bin/backup_snipeit.sh
4.3 性能监控方案
配置Prometheus监控指标:
yaml复制environment:
- METRICS_ENABLED=true
- METRICS_USERNAME=monitor
- METRICS_PASSWORD=SecureMonitorP@ss
访问 /metrics 端点获取性能数据,配合Grafana可生成资产管理系统健康度看板。
