Docker安装Snipe-IT
Centos7安装Snipe-IT,由于没有科学上网克隆GitHub项目时报错Failed to connect to github.com port 443: Connection refused。改为Docker安装。以下是Docker安装Snipe-IT的过程。如果您可以科学上网还是报错,可以添加代理。
1.本地开启科学上网代理.
2.配置git代理,需要查看科学上网的地理端口和地址。
git config --global http.proxy http://127.0.0.1:55615
git config --global https.proxy http://127.0.0.1:55616
3.查看代理设置
git config --global --get http.proxy
git config --global --get https.proxy
4.取消代理设置
git config --global --unset http.proxy
git config --global --unset https.proxy
一、下载Centos7镜像。
1.找一个国内源镜像,拉取速度会快一些,可以免去设置yum源的问题,这里我下载了阿里云镜像。
阿里云镜像下载地址:http://mirrors.aliyun.com/centos/7/isos/x86_64/
二、安装Docker
1.验证Linux内核,Docker 要求 CentOS 系统的内核版本高于 3.10
uname -r
2.更新yum,对软件和依赖进行更新。
sudo yum update
3.卸载系统中可能安装的 Docker和低版本 ,防止版本冲突导致安装失败。
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
4.安装Docker所需依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5.设置Docker yum源为阿里云源,可以加速拉取速度。
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ##官方源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ##阿里源
6.安装Docker和Docker-cli
sudo yum install -y docker-ce docker-ce-cli containerd.io
如果安装报错 命令后加 –allowerasing
sudo yum install -y docker-ce docker-ce-cli containerd.io --allowerasing
7.验证Docker是否安装成功
启动docker
sudo systemctl start docker
查看Docker服务状态 running 就是启动成功
sudo systemctl status docker
8.查看Docker版本信息
docker version
docker -v
两个命令任意即可 查看Docker版本 ,出现如下回显表明安装成功
9.设置Docker服务开机自启动
sudo systemctl enable docker
10.测试Docker拉取镜像
docker run centos /bin/echo 'hello word!'
11.配置 docker阿里云容器镜像服务镜像加速,登录阿里云控制台找到镜像加速服务,选择Centos
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docke
将代码中的xxxxxx,改为自己的镜像加速地址。
PS: 配置完成后会拉取镜像 可能会报守护进程找不到 卸载docke重新安装 不配置镜像加速,如果是虚拟机安装,在配置镜像加速前设置一个还原点或是快照。
****三、部署 Snipe-IT准备
1.Snipe-IT需要先拉取mysql和snipe-it 镜像,拉取mysql镜像,这里使用了mysql 8.0和snipe-it6.1.0。
docker pull mysql:8.0
docker pull snipe/snipe-it:v6.1.0
2.生成应用密钥 app_key,key需要配置在.env.docker中。
docker run --rm snipe/snipe-it
这就是生成的key,.env.docker需要配置base64:后面的字符串 。
”Please re-run this container with an environment variable $APP_KEY
An example APP_KEY you could use is:
base64:7NZr+F1xN/4GxBI/xpHEy+4xdLPCEkCguWdyuLg2LnQ= “
3.下载官方源码包
https://github.com/snipe/snipe-it/releases/tag/v6.1.0
参考文档链接
官网参考文档,https://snipe-it.readme.io/docs/upgrading
下载源码包,然后解压,找到其中的 .env .docker docker-compose.yaml 文件,这两个文件是最主要的。
4.上传源码包
打开cmd
scp C:\Users\Administrator\Desktop\snipe-it-6.1.0.zip root@192.168.1.199:/root
将下载的文件传送到linux系统中,C:\Users\Administrator\Desktop\snipe-it-6.1.0.zip 这里是源码的下载位置。
github下载有的时候需要科学上网,有时候不用,看运气。如果没有下载成功,我上传上来了。
链接:https://pan.baidu.com/s/1idpNPW2QnN0h7nthhgpTpw
提取码:lz8q
切换回linu中,查看文件是否上传上来了
5.解压源码包
sudo yum -y install unzip ##如果没有zip的解压工具需要安装unzip
unzip snipe-it-6.1.0.zip
备份这两个文件,以免操作失误导致不能使用。
cp .env.docker docker-compose.yml /root
6.编辑配置文件
进入到解压目录编辑这两个文件.env .docker docker-compose.yaml 。需要安装一个vim编辑器,vi不支持全选删除。
安装vim
sudo yum -y install vim
编辑.env .docker
vim .env.docker
输入ggdG将文档清空,将下面的代码复制进来,需要注意的是数据库名和密码修改为所需要的,APP_KEY=base64:需要将上面生成的粘贴进来,要与生成的key保持一致。宿主机地址可以设置为IP和域名
# --------------------------------------------
# REQUIRED: DB SETUP
# --------------------------------------------
# 当数据库使用mysql的时候的配置
MYSQL_PORT_3306_TCP_ADDR=mysql
MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_DATABASE=snipeit_data
MYSQL_USER=snipeit
MYSQL_PASSWORD=123456
MYSQL_ROOT_PASSWORD=123456
# --------------------------------------------
# REQUIRED: BASIC APP SETTINGS
# --------------------------------------------
#环境需要设置成生产环境
APP_ENV=production
#需要关掉debug
APP_DEBUG=false
# please regenerate the APP_KEY value by calling `docker-compose run --rm snipeit bash` and then `php artisan key:generate --show` and then copy paste the value here
#需要使用生成的key
APP_KEY=base64:7NZr+F1xN/4GxBI/xpHEy+4xdLPCEkCguWdyuLg2LnQ=
#设置链接,这个要设置宿主机的IP地址,如果是域名,也需要把域名解析到宿主机上
APP_URL=http://192.168.1.199
APP_TIMEZONE='Asia/Shanghai'
APP_LOCALE=zh-CN
MAX_RESULTS=1000
#每分钟访问限制
API_THROTTLE_PER_MINUTE=2000
# --------------------------------------------
# REQUIRED: UPLOADED FILE STORAGE SETTINGS
# --------------------------------------------
PRIVATE_FILESYSTEM_DISK=local
PUBLIC_FILESYSTEM_DISK=local_public
# --------------------------------------------
# REQUIRED: DATABASE SETTINGS
# --------------------------------------------
#设置数据库部分
DB_CONNECTION=mysql
DB_HOST=mysql
DB_DATABASE=snipeit_data
DB_USERNAME=snipeit
DB_PASSWORD=123456
DB_PREFIX=null
DB_DUMP_PATH='/usr/bin'
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
# --------------------------------------------
# OPTIONAL: SSL DATABASE SETTINGS
# --------------------------------------------
DB_SSL=false
DB_SSL_IS_PAAS=false
DB_SSL_KEY_PATH=null
DB_SSL_CERT_PATH=null
DB_SSL_CA_PATH=null
DB_SSL_CIPHER=null
# --------------------------------------------
# REQUIRED: OUTGOING MAIL SERVER SETTINGS
# --------------------------------------------
#设置邮箱部分
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=xxxxxxxx@163.com
MAIL_PASSWORD=xxxxxxxxxxxxxx
MAIL_ENCRYPTION=null
MAIL_FROM_ADDR=xxxxxxxxxxxxx@163.com
MAIL_FROM_NAME='Snipe-IT-From'
MAIL_REPLYTO_ADDR=xxxxxxxxxxx@163.com
MAIL_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=null
MAIL_BACKUP_NOTIFICATION_ADDRESS=null
BACKUP_ENV=true
# --------------------------------------------
# OPTIONAL: SESSION SETTINGS
# --------------------------------------------
# 指定会话应保持有效的时间(以分钟为单位)。
SESSION_LIFETIME=12000
# 指定当用户关闭浏览器窗口时登录的会话是否应过期。
EXPIRE_ON_CLOSE=false
# 指定您是否希望在 Snipe-IT 会话中使用加密 cookie。
ENCRYPT=false
COOKIE_NAME=snipeit_session
COOKIE_DOMAIN=null
SECURE_COOKIES=false
API_TOKEN_EXPIRATION_YEARS=40
# --------------------------------------------
# OPTIONAL: SECURITY HEADER SETTINGS
# --------------------------------------------
APP_TRUSTED_PROXIES=192.168.1.1,10.0.0.1
ALLOW_IFRAMING=false
REFERRER_POLICY=same-origin
ENABLE_CSP=false
CORS_ALLOWED_ORIGINS=null
ENABLE_HSTS=false
# --------------------------------------------
# OPTIONAL: CACHE SETTINGS
# --------------------------------------------
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
CACHE_PREFIX=snipeit
# --------------------------------------------
# OPTIONAL: REDIS SETTINGS
# --------------------------------------------
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
# --------------------------------------------
# OPTIONAL: MEMCACHED SETTINGS
# --------------------------------------------
MEMCACHED_HOST=null
MEMCACHED_PORT=null
# --------------------------------------------
# OPTIONAL: PUBLIC S3 Settings
# --------------------------------------------
PUBLIC_AWS_SECRET_ACCESS_KEY=null
PUBLIC_AWS_ACCESS_KEY_ID=null
PUBLIC_AWS_DEFAULT_REGION=null
PUBLIC_AWS_BUCKET=null
PUBLIC_AWS_URL=null
PUBLIC_AWS_BUCKET_ROOT=null
# --------------------------------------------
# OPTIONAL: PRIVATE S3 Settings
# --------------------------------------------
PRIVATE_AWS_ACCESS_KEY_ID=null
PRIVATE_AWS_SECRET_ACCESS_KEY=null
PRIVATE_AWS_DEFAULT_REGION=null
PRIVATE_AWS_BUCKET=null
PRIVATE_AWS_URL=null
PRIVATE_AWS_BUCKET_ROOT=null
# --------------------------------------------
# OPTIONAL: AWS Settings
# --------------------------------------------
AWS_ACCESS_KEY_ID=null
AWS_SECRET_ACCESS_KEY=null
AWS_DEFAULT_REGION=null
# --------------------------------------------
# OPTIONAL: LOGIN THROTTLING
# --------------------------------------------
LOGIN_MAX_ATTEMPTS=5
LOGIN_LOCKOUT_DURATION=60
RESET_PASSWORD_LINK_EXPIRES=900
# --------------------------------------------
# OPTIONAL: MISC
# --------------------------------------------
LOG_CHANNEL=stderr
LOG_MAX_DAYS=10
APP_LOCKED=false
APP_CIPHER=AES-256-CBC
GOOGLE_MAPS_API=
LDAP_MEM_LIM=500M
LDAP_TIME_LIM=600
# 允许清除已删除信息
ALLOW_DATA_PURGE=true
# 允许删除备份
ALLOW_BACKUP_DELETE=true
编辑docker-compose.yaml
vim docker-compose.yaml
输入ggdG将文档清空,将下面的代码复制进来,需要注意的是数据库名和密码要与上面一致。这里要注意以下,如果对snipr-it和mysql规划端口的话,下面的端口也要与docker的一致。
version: '3'
services:
snipeit:
container_name: snipeit
image: snipe/snipe-it:v6.1.0
restart: always
ports:
- "80:80"
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
- ./logs:/var/www/html/storage/logs
- ./snipe-vol:/var/lib/snipeit
depends_on:
- mysql
env_file:
- .env.docker
networks:
- snipeit-backend
mysql:
image: mysql:8.0
container_name: mysql
ports:
- 3306:3306
restart: always
volumes:
- ./db:/var/lib/mysql
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
environment:
MYSQL_ROOT_PASSWORD: 123456
#允许空密码
#MYSQL_ALLOW_EMPTY_PASSWORD: yes
#新建数据库
MYSQL_DATABASE: snipeit_data
#新建用户
MYSQL_USER: snipeit
#设置用户密码
MYSQL_PASSWORD: 123456
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
networks:
- snipeit-backend
networks:
snipeit-backend:
这里要注意一下:.env.docker文件需要与docker-compose.yaml文件保持在同目录下。到这里准备工作就已经完成了。
四、部署
1.创建并启动容器
docker compose up -d
运行docker-compose.yaml文件时,数据库初始化完成,但 snipe-it 可能无法正常初始化,数据库无法创建表。需要重启 compose。
docker compose restart
定位问题时可以查看日志。
docker compose logs -f
2.进入容器赋予权限
docker compose exec snipeit bash
chmod -R 777 storage
chmod -R 777 public/uploads
chmod -R 777 bootstrap/cache
到这里就部署完成了,访问http://自己的IP或是域名,进行Snipe-IT配置。
五、Snipe-IT配置
1.初始化配置
到这里Snipe-IT 就安装完成了。
六、系统备份界面报错
是数据库权限问题,进入数据库修改权限
docker exec -it mysql mysql -uroot -p123456
修改权限
GRANT RELOAD, LOCK TABLES ON *.* TO 'snipeit'@'%';
FLUSH PRIVILEGES;
到这里就完成了Snipe-IT系统的安装就可以进行资产的管理了。