> 技术文档 > Docker/Docker Compose 部署Snipeit_docker部署snipe-it

Docker/Docker Compose 部署Snipeit_docker部署snipe-it


一、基础环境

OS:CentOS-Stream-8-20240408.0-x86_64-dvd1.iso 
Docker:version 26.1.3, 
Docker-Compose:version v2.27.0 
DB:MySQL8 
 

二、开始安装

#切换到指定安装目录 

cd /root

#创建项目所需的目录 

mkdir snipe_it mkdir snipe_mysql

#进入网站项目文件夹 

cd /root/snipe_it

#创建一个docker-compose.yml配置文件 

#编辑该文件 

vim docker-compose.yml
version: \'3\'services: # Snipe-IT 服务配置 snipeit: container_name: snipeit image: snipe/snipe-it:latest # 使用最新版 Snipe-IT 镜像 restart: always # 总是在容器退出时重启 ports: - \"8000:80\" # 映射容器端口 80 到主机端口 8000 volumes: - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime # 设置容器时区为上海 - ./logs:/root/snipe_it/logs/ # 映射日志目录到本地logs目录 - ./snipe-vol:/var/lib/snipeit # 映射 Snipe-IT 数据目录到本地snipe-vol目录 depends_on: - mysql # 依赖于 mysql 服务 env_file: - .env.docker # 使用 .env.docker 文件中的环境变量配置 networks: - snipeit-backend # 使用 snipeit-backend 网络 # MySQL 服务配置 mysql: image: mysql:8.0 # 使用 MySQL 8.0 镜像 container_name: mysql ports: - 3306:3306 # 映射容器端口 3306 到主机端口 3306 restart: always # 总是在容器退出时重启 volumes: - ./db:/var/lib/mysql # 映射数据库目录到本地db目录 - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime # 设置容器时区为上海 environment: MYSQL_ROOT_PASSWORD: Snipeit@2024# # MySQL root 用户密码 MYSQL_DATABASE: snipeit_data # 新建数据库名称 MYSQL_USER: snipeit # 新建用户 MYSQL_PASSWORD: Snipeit@2024# # 设置用户密码 command: - --default-authentication-plugin=mysql_native_password # 设置 MySQL 默认认证插件为 mysql_native_password - --character-set-server=utf8mb4 # 设置 MySQL 服务器使用 utf8mb4 字符集 - --collation-server=utf8mb4_unicode_ci # 设置 MySQL 服务器的字符校对规则为 utf8mb4_unicode_ci networks: - snipeit-backend # 使用 snipeit-backend 网络networks: snipeit-backend: # Snipe-IT 和 MySQL 服务共用的网络


#确保当前在/root/snipe_it目录下,创建docker-compose.yml文件中所需要的.env.docker配置依赖

vim .env.docker
#生成APP_KEY值docker run --rm snipe/snipe-it(此时开始抓取snipe-it 镜像需要一定时间)#你将得到如下的显示Please re-run this container with an environment variable $APP_KEYAn example APP_KEY you could use is: base64:xxx

编辑.env.docker文件

# --------------------------------------------# REQUIRED: DB SETUP# --------------------------------------------# 当数据库使用mysql的时候的配置MYSQL_PORT_3306_TCP_ADDR=mysqlMYSQL_PORT_3306_TCP_PORT=3306MYSQL_DATABASE=snipeit_dataMYSQL_USER=snipeitMYSQL_PASSWORD=Snipeit@2024#MYSQL_ROOT_PASSWORD=Snipeit@2024## --------------------------------------------# REQUIRED: BASIC APP SETTINGS# --------------------------------------------#环境设置成生产环境APP_ENV=production#关掉debugAPP_DEBUG=false#上面命令生成的APP_KEY值APP_KEY=base64:8Jjj1emNvRrwxV0zeEq4sbI5oO7Q3jUTICW4apyCMBY=#设置网站访问地址APP_URL=http://10.90.XX.XX:8000APP_TIMEZONE=\'Asia/Shanghai\'APP_LOCALE=zh-CNMAX_RESULTS=1000#每分钟访问限制API_THROTTLE_PER_MINUTE=2000# --------------------------------------------# REQUIRED: UPLOADED FILE STORAGE SETTINGS# --------------------------------------------PRIVATE_FILESYSTEM_DISK=localPUBLIC_FILESYSTEM_DISK=local_public# --------------------------------------------# REQUIRED: DATABASE SETTINGS# --------------------------------------------#设置数据库DB_CONNECTION=mysqlDB_HOST=mysqlDB_DATABASE=snipeit_dataDB_USERNAME=snipeitDB_PASSWORD=Snipeit@2024#DB_PREFIX=nullDB_DUMP_PATH=\'/usr/bin\'DB_CHARSET=utf8mb4DB_COLLATION=utf8mb4_unicode_ci# --------------------------------------------# OPTIONAL: SSL DATABASE SETTINGS# --------------------------------------------DB_SSL=falseDB_SSL_IS_PAAS=falseDB_SSL_KEY_PATH=nullDB_SSL_CERT_PATH=nullDB_SSL_CA_PATH=nullDB_SSL_CIPHER=null# --------------------------------------------# REQUIRED: OUTGOING MAIL SERVER SETTINGS# --------------------------------------------#设置邮箱MAIL_DRIVER=smtpMAIL_HOST=smtp.163.comMAIL_PORT=25MAIL_USERNAME=XX@163.comMAIL_PASSWORD=XXMAIL_ENCRYPTION=nullMAIL_FROM_ADDR=XX@163.comMAIL_FROM_NAME=\'Snipe-IT-From\'MAIL_REPLYTO_ADDR=XX@163.comMAIL_REPLYTO_NAME=\'Snipe-IT-Replyto\'MAIL_AUTO_EMBED_METHOD=\'attachment\'# --------------------------------------------# REQUIRED: IMAGE LIBRARY# This should be gd or imagick# --------------------------------------------IMAGE_LIB=gd# --------------------------------------------# OPTIONAL: BACKUP SETTINGS# --------------------------------------------MAIL_BACKUP_NOTIFICATION_DRIVER=nullMAIL_BACKUP_NOTIFICATION_ADDRESS=nullBACKUP_ENV=true# --------------------------------------------# OPTIONAL: SESSION SETTINGS# --------------------------------------------# 指定会话应保持有效的时间(以分钟为单位)。SESSION_LIFETIME=12000# 指定当用户关闭浏览器窗口时登录的会话是否应过期。EXPIRE_ON_CLOSE=false# 指定您是否希望在 Snipe-IT 会话中使用加密 cookie。ENCRYPT=falseCOOKIE_NAME=snipeit_sessionCOOKIE_DOMAIN=nullSECURE_COOKIES=falseAPI_TOKEN_EXPIRATION_YEARS=40# --------------------------------------------# OPTIONAL: SECURITY HEADER SETTINGS# --------------------------------------------APP_TRUSTED_PROXIES=192.168.1.1,10.0.0.1ALLOW_IFRAMING=falseREFERRER_POLICY=same-originENABLE_CSP=falseCORS_ALLOWED_ORIGINS=nullENABLE_HSTS=false# --------------------------------------------# OPTIONAL: CACHE SETTINGS# --------------------------------------------CACHE_DRIVER=fileSESSION_DRIVER=fileQUEUE_DRIVER=syncCACHE_PREFIX=snipeit# --------------------------------------------# OPTIONAL: REDIS SETTINGS# --------------------------------------------REDIS_HOST=redisREDIS_PASSWORD=nullREDIS_PORT=6379# --------------------------------------------# OPTIONAL: MEMCACHED SETTINGS# --------------------------------------------MEMCACHED_HOST=nullMEMCACHED_PORT=null# --------------------------------------------# OPTIONAL: PUBLIC S3 Settings# --------------------------------------------PUBLIC_AWS_SECRET_ACCESS_KEY=nullPUBLIC_AWS_ACCESS_KEY_ID=nullPUBLIC_AWS_DEFAULT_REGION=nullPUBLIC_AWS_BUCKET=nullPUBLIC_AWS_URL=nullPUBLIC_AWS_BUCKET_ROOT=null# --------------------------------------------# OPTIONAL: PRIVATE S3 Settings# --------------------------------------------PRIVATE_AWS_ACCESS_KEY_ID=nullPRIVATE_AWS_SECRET_ACCESS_KEY=nullPRIVATE_AWS_DEFAULT_REGION=nullPRIVATE_AWS_BUCKET=nullPRIVATE_AWS_URL=nullPRIVATE_AWS_BUCKET_ROOT=null# --------------------------------------------# OPTIONAL: AWS Settings# --------------------------------------------AWS_ACCESS_KEY_ID=nullAWS_SECRET_ACCESS_KEY=nullAWS_DEFAULT_REGION=null# --------------------------------------------# OPTIONAL: LOGIN THROTTLING# --------------------------------------------LOGIN_MAX_ATTEMPTS=5LOGIN_LOCKOUT_DURATION=60RESET_PASSWORD_LINK_EXPIRES=900# --------------------------------------------# OPTIONAL: MISC# --------------------------------------------LOG_CHANNEL=stderrLOG_MAX_DAYS=10APP_LOCKED=falseAPP_CIPHER=AES-256-CBCGOOGLE_MAPS_API=LDAP_MEM_LIM=500MLDAP_TIME_LIM=600# 允许清除已删除信息ALLOW_DATA_PURGE=true# 允许删除备份ALLOW_BACKUP_DELETE=true

#创建并启动 Snipe-IT 和 MySQL 两个容器

docker-compose up -d

三、访问 

打开浏览器,ip+端口的方式访问即可: 

四、后续使用

可参阅官网:snipe-it

五、优化配置

(1)docker镜像开机自启 
1.首先,确保已经安装并部署好了Docker和nvidia-docker。可以使用以下命令启动Docker服务,并设置为开机自启 

systemctl daemon-reload systemctl start docker systemctl enable docker 

2.运行命令docker imagesdocker ps -a查看已安装的镜像和容器的状态。确认镜像已经安装且状态为未启动。 
3.为了设置镜像象在Docker开机时自启动,可以使用以下命令不是代码组成: 
 

docker update --restart=always  

其中,是要设置自启动的镜像的ID。通过这人命令,镜像在Docker开机时就会自动启动。 
4.最后,重启Docker服务,可以使用以下命令: 
 

systemctl restart docker 

六、数据迁移与恢复

6.1 进入snipeit 目录

tar -czvf snipeit_it tar.gz snipeit_itsz snipeit_it tar.gz