# 前提说明
> 项目目录结构说明：  
  1、 项目日志：/data/webapp/logs  
  2、 项目上传资源文件：/data/webapp/uploads  
  3、 项目docker环境：/data/docker/webapp  
  4、 前端项目目录：/data/webapp/www  
  5、 部署文件临时存放位置：/data/software 【注意：提前创建好】
  6、 以下操作均为root用户操作

## 1、安装docker 
##### 1.1 上传docker-20.10.23.tgz到服务器[如：/data/software]，解压缩并迁移命令

```
# cp /data/software

# tar -zxvf docker-20.10.23.tgz

# cp -pf docker/* /usr/bin

```

##### 1.2 将docker注册为系统服务

``` 
# vim /usr/lib/systemd/system/docker.service 

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
[Service]
Type=notify
EnvironmentFile=-/run/flannel/docker
WorkingDirectory=/usr/local/bin
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock --selinux-enabled=false
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
```

##### 1.3 设置docker镜像存储位置、国内镜像加速、私服地址信任

``` 
# mkdir -p /data/docker/lib && mkdir /etc/docker

# vim /etc/docker/daemon.json
{
"registry-mirrors": [
	"https://hub-mirror.c.163.com/", 
	"https://mirror.ccs.tencentyun.com", 
	"https://mirror.baidubce.com"
 ],
 "insecure-registries": [
   "docker.platomix.net:10000"
 ],
 "data-root": "/data/docker/lib"
}
```

##### 1.4 启动docker

```
# systemctl daemon-reload

# systemctl start docker

# systemctl enable docker  // 开机启动

# docker info  //查看docker是否启动成功
```

##### 1.5 上传docker-compose上传到/data/software
``` 
# cd /data/software

# cp docker-compose /usr/local/bin 

# chmod a+x /usr/local/bin/docker-compose
	
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# docker-compose --version  //查看是否成功
```

## 2.部署项目

##### 2.1、准备文件以及目录
 上传webapp.zip和dist.zip到/data/software，解压缩

```
# mkdir -p /data/webapp/{logs,www,uploads}

# unzip webapp.zip -d /data/docker

# unzip dist.zip -d /data/webapp/www
```

##### 2.2、后端docker项目镜像安装
  上传所有tar文件到/data/software，然后执行下面命令安装镜像

```
#docker load < redis-5.0.tar
#docker load < nginx-1.23.tar
#docker load < mysql-8.tar

#docker load < gmetry-bi-[version].tar
#docker load < gmetry-system-[version].tar
#docker load < gmetry-upgrade-[version].tar
#docker load < gmetry-xxljob-[version].tar
```

##### 2.3、启动后端docker项目
项目启动必须按照顺序【每一个步骤启动完成后，稍等10-20s，使任务完全启动成功后再执行下一个步骤】：

```
1、创建docker网桥
#docker network create net_webapp
#docker network ls  #查看网桥

2、启动mysql/redis
# cd /data/docker/webapp
# docker-compose up -d mysql redis

3、启动BI项目模块 -> 【注意：启动该项目之前，请先修改3.2】
# cd /data/docker/webapp
# docker-compose up -d gmetry-xxljob gmetry-bi gmetry-system gmetry-upgrade

4、最后启动nginx
# cd /data/docker/webapp
# docker-compose up -d nginx
```

## 3.项目特殊说明
##### 3.1、修改前端接口地址【必须】

```
# vim /data/webapp/www/config.js
找到API_URL和API_UPLOADVIEW的值替换为系统访问的IP或域名；比如系统访问ip:port为192.168.0.1:8080[80端口可省略]：
API_URL: "http://192.168.0.1:8080",
API_UPLOADVIEW: "http://192.168.0.1:8080/uploads"
```

##### 3.2、修改项目中IP或者域名地址【必须】
```
 # cd /data/docker/webapp
 # vim docker-compose.yml
 
 替换该文件中所有http://localhost为访问域名或者IP加上端口。比如，系统访问ip:port为192.168.0.1:8080[80端口可省略]，
  http://localhost -> http://192.168.0.1:8080
 
 【注意】：如果是https协议的地址，需要同时修改协议。
 
 //修改完后，需要重启docker容器；如果未启动容器，直接启动即可
 # docker-compose up -d gmetry-xxljob gmetry-bi gmetry-system gmery-upgrade
 
 ```
##### 3.3、修改系统访问的域名地址【可选】
 如果用户的访问是域名，需要修改server_name【注意：IP访问无需改动】
 
 ```
 # cd /data/docker/webapp
 # vim nginx/conf.d/default.conf

 server_name localhost [域名] 
 
 //修改完成后，需要重启nginx容器
 # docker-compose restart nginx
 ```
 
##### 3.4、修改对外访问端口【可选】
 默认系统页面访问端口是80，如果客户不开通80端口，需要改为其他端口，比如：8080【端口值无要求】

```
 # cd /data/docker/webapp
 # vim docker-compose.yml
 找到nginx的ports配置【第10行】：
   ports: 
     - "80:80"
     - "443:443"
 修改"80:80" -> "8080:80"
 
 //修改完成后，需要重启nginx容器
 # docker-compose up -d nginx
 ```

 
##### 3.5、使支持https协议，配置证书【可选】  
 
 1、去掉/data/docker/webapp/nginx/conf.d/default.conf中关于tls的注释；  
 2、上传2个nginx证书文件，并修改为localhost.pem和localhost.key，放到/data/docker/webapp/nginx/nginx/cert目录中；  
 3、给2个文件添加访问权限: `# chmod 755  localhost.pem && chmod 755  localhost.key `
 
 ```  
 //重启nginx即可
 # cd /data/docker/webapp
 # docker-compose restart nginx
 
 ```
 
## 4.验证是否部署成功
 
 浏览器打开：`http://[ip或域名][:端口]`
 
如果正常打开页面，并且验证码也显示，说明部署成功。
