前置准备:Linux服务器、域名
1.安装docker
1.安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2.设置阿里云docker-ce镜像
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装docker-ce
yum install -y docker-ce
4.启动docker
#启动docker
systemctl start docker
#开机自启
systemctl start docker
#查看docker版本
docker -v
如果出现版本号则证明安装成功。

5.配置国内镜像源
如果未配置国内镜像源会导致拉取镜像超时。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.安装Mysql
1.拉取5.7版本mysql镜像
docker pull mysql:5.7
2.启动Mysql容器
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -d mysql:5.7
3.开启Mysql远程连接
#进入容器
docker exec -it mysql bash
#输入账号密码
mysql -uroot -ppassword
#开启远程权限
alter user 'root'@'%' identified with mysql_native_password by 'password';
#刷新权限
flush privileges;
3.安装Redis
#拉取镜像
docker pull redis
#启动容器
docker run -d --name redis -p 6379:6379 redis --requirepass "password"
4.安装Nginx
#拉取镜像:docker pull nginx
# 创建挂载目录
mkdir -p /mnt/nginx/conf
mkdir -p /mnt/nginx/log
mkdir -p /mnt/nginx/html
mkdir -p /mnt/nginx/ssl
# 生成容器
docker run --name nginx -p 80:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /mnt/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /mnt/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html/ /mnt/nginx/
# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx
#运行容器
docker run -p 80:80 -p 443:443 --name nginx \
-v /mnt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /mnt/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /mnt/nginx/log:/var/log/nginx \
-v /mnt/nginx/html:/usr/share/nginx/html \
-v /mnt/nginx/ssl:/etc/nginx/ssl \
-d nginx:latest
5.搭建SSL证书
1.申请免费证书

2.下载Nginx证书并上传至服务器

3.配置nginx.conf文件
# view配置
server {
listen 443 ssl;
server_name criesa.cn www.criesa.cn;
ssl_certificate /etc/nginx/ssl/criesa.cn_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/criesa.cn.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
if ($host = 'www.criesa.cn') {
return 301 https://criesa.cn$request_uri;
}
location / {
root /usr/share/nginx/html/view;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
# api配置
server {
listen 443 ssl;
server_name api.criesa.cn;
ssl_certificate /etc/nginx/ssl/api.criesa.cn_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/api.criesa.cn.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /blog/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://124.220.33.109:8090/;
}
}
# crm配置
server {
listen 443 ssl;
server_name admin.criesa.cn;
ssl_certificate /etc/nginx/ssl/admin.criesa.cn_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/admin.criesa.cn.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html/crm;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
server {
listen 80;
server_name *.criesa.cn;
return 301 https://$host$request_uri;
}
6.部署后端服务
1.构建镜像
1.打jar包并上传至服务器
2.配置dockerfile
FROM openjdk:8
MAINTAINER criesa <criesa@163.com>
ADD ./blog-api.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
3.构建docker镜像
docker build -f ./blog_dockerfile -t app .
2.服务编排
1.安装dockerCompose
#下载 Docker Compose 的可执行文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)"
-o /usr/local/bin/docker-compose
#授予可执行权限
sudo chmod +x /usr/local/bin/docker-compose
验证安装
docker-compose --version
这里发现下载下来的docker-compose被错误的HTML文件所替代,删除掉重新下载。
#删除docker-compose
sudo rm /usr/local/bin/docker-compose
再次查看版本,出现版本号,成功。

2.使用dockerCompose编排项目
创建docker-comnpose目录
mkdir /mnt/docker/docker-compose
编写 docker-compose.yml 文件
version: '3'
services:
app:
image: app
container_name: nblog
restart: always
network_mode: bridge
ports:
- "8090:8090"
volumes:
- /home/nblog/logs:/logs
启动容器
docker-compose up -d
查看启动日志
docker logs -f nblog

7.部署前端项目
前端项目只需打包后上传至nginx挂载的html目录下并配置nginx即可。
#进入nginx容器
docker exec -it nginx /bin/bash
#重载nginx配置
nginx -s reload