個人博客 前端:https://lujiesheng.cn
個人博客 后端:https://api.lujiesheng.cn
個人博客 運(yùn)維:https://portainer.lujiesheng.cn
1. 服務(wù)器準(zhǔn)備
我采用的是 騰訊云輕量應(yīng)用服務(wù)器(2C 4G 8M 80G),配置如下圖:
安裝鏡像選擇 CentOS 7.6 64bit:
2. 服務(wù)器防火墻設(shè)置
添加防火墻出入站規(guī)則,設(shè)置如下圖:
3. 域名解析
把已備案的域名解析到服務(wù)器,記錄如下圖:
4. SSL證書準(zhǔn)備
通過騰訊云申請免費證書:
把對應(yīng)的證書下載到本地:
5. 容器鏡像服務(wù)準(zhǔn)備
新建命名空間:
新建私有鏡像倉庫:
6. 連接登錄到服務(wù)器
我采用的是 FinalShell:
更新服務(wù)器系統(tǒng)和內(nèi)核版本:
# 執(zhí)行更新命令:
yum -y update
# 等待更新完畢后,執(zhí)行查看命令,確認(rèn)系統(tǒng)和內(nèi)核版本:
cat /etc/redhat-release
uname -r
7. 安裝插件依賴包
yum -y install gcc
yum -y install gcc-c++
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
8. 安裝 Docker
# 執(zhí)行安裝命令:
yum install -y docker-ce docker-ce-cli containerd.io
# 啟動 Docker
systemctl start docker.socket
systemctl start docker
# 查看 Docker 狀態(tài)
systemctl status docker
# 設(shè)置 Docker 自啟
systemctl enable docker
systemctl enable docker.socket
# 檢查自啟狀態(tài)
systemctl list-unit-files | grep docker
# 查看當(dāng)前docker版本
docker version
更新Docker遠(yuǎn)程倉庫鏡像源:
https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors
# 創(chuàng)建deamon.json文件用來保存源
vim /etc/docker/daemon.json
# 添加穩(wěn)定而且不經(jīng)常變動的鏡像源(把下面的xxxx替換成自己的)
{"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]}
# 保存并重啟一下Docker
systemctl daemon-reload
systemctl restart docker
# 按照以下步驟來修改時區(qū)
cd /etc/
# 首先備份原有的 /etc/localtime 文件
mv /etc/localtime /etc/localtime.bak
# 然后創(chuàng)建一個新的鏈接文件
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 修改 /etc/timezone 文件,將其內(nèi)容修改為所需的時區(qū)(例如 "Asia/Shanghai")
echo "Asia/Shanghai" | sudo tee /etc/timezone
# 查看是否設(shè)置成功
date
cat /etc/timezone
9. 安裝 Docker Compose
我們這里選擇離線安裝:
# 去官網(wǎng)下載
https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64
# 切換服務(wù)器目錄
cd /usr/local/bin
# 把下載的文件上傳上去
# 改名
mv docker-compose-linux-x86_64 docker-compose
# 授權(quán)
chmod +x /usr/local/bin/docker-compose
# 測試是否安裝成功
docker-compose version
10. 準(zhǔn)備部署目錄和配置文件
cd /home
mkdir blog
cd blog
mkdir nginx
mkdir ui
cd nginx
mkdir ssl
# 在 /home/blog 目錄下創(chuàng)建 docker-compose.yml 文件,編輯該文件,內(nèi)容如下:
點擊查看代碼
version: "3.8"
services:
nginx:
image: nginx
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/ssl:/etc/nginx/certs
- ./ui/dist:/var/www/html
restart: always
networks:
- network
portainer:
image: portainer/portainer-ce
container_name: portainer
ports:
- "xxxx:9000" # 把xxxx改成自己portainer的端口,需要跟服務(wù)器防火墻添加的規(guī)則對應(yīng)!
environment:
- TZ=Asia/Shanghai
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/run/docker.sock:/var/run/docker.sock
restart: always
networks:
- network
depends_on:
- nginx
redis:
image: redis
container_name: redis
ports:
- "xxxx:6379" # 把xxxx改成自己redis的端口,需要跟服務(wù)器防火墻添加的規(guī)則對應(yīng)!
environment:
- TZ=Asia/Shanghai
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- redis_data:/data
command: redis-server --requirepass xxx # 把xxx改成自己的redis連接密碼
restart: always
networks:
- network
depends_on:
- portainer
mysql:
image: mysql
container_name: mysql
ports:
- "xxxx:3306" # 把xxxx改成自己mysql的端口,需要跟服務(wù)器防火墻添加的規(guī)則對應(yīng)!
environment:
- MYSQL_ROOT_PASSWORD=xxx # 把xxx改成自己的mysql連接密碼
volumes:
- mysql_data:/var/lib/mysql
restart: always
networks:
- network
depends_on:
- redis
mongo:
image: mongo
container_name: mongo
ports:
- "xxxx:27017" # 把xxxx改成自己mongo的端口,需要跟服務(wù)器防火墻添加的規(guī)則對應(yīng)!
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=xxx # 把xxx改成自己的mongo連接密碼
volumes:
- mongo_data:/var/lib/mongo
restart: always
networks:
- network
depends_on:
- mysql
api:
image: ccr.ccs.tencentyun.com/lenceas/blog_api:v1.0
container_name: api
ports:
- "xxxx:xxxx" # 把xxxx改成自己api的端口
environment:
- TZ=Asia/Shanghai
- ASPNETCORE_ENVIRONMENT=Production
- JWT_SECRETKEY=xxxx # 把xxxx改成自己jwt的密鑰
- DATABASE_MYSQL="xxxx" # 把xxxx改成自己mysql的連接字符串
- DATABASE_MONGO="xxxx" # 把xxxx改成自己mongo的連接字符串
- REDIS_CONNECTSTR="xxxx" # 把xxxx改成自己redis的連接字符串
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
restart: always
networks:
- network
depends_on:
- mongo
networks:
network:
driver: bridge
volumes:
redis_data:
mysql_data:
mongo_data:
# 切換到ui目錄下,并把前端build打包的dist文件上傳:
cd /home/blog/ui
# 切換到nginx/ssl 目錄下,并把之前下載的ssl證書全部上傳(只上傳 crt 和 key 文件):
cd /home/blog/nginx/ssl
# 切換到 nginx 目錄下,并創(chuàng)建 nginx.conf 文件,編輯該文件,內(nèi)容如下:
cd /home/blog/nginx
點擊查看代碼
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
# lujiesheng.cn start
server {
listen 80;
listen [::]:80;
server_name lujiesheng.cn;
#把http的域名請求轉(zhuǎn)成https
return 301 https://$host$request_uri;
#root /etc/www;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
server {
#SSL 默認(rèn)訪問端口號為 443
listen 443 ssl;
#請?zhí)顚懡壎ㄗC書的域名
server_name lujiesheng.cn;
#請?zhí)顚懽C書文件的相對路徑或絕對路徑
ssl_certificate /etc/nginx/certs/lujiesheng.cn_bundle.crt;
#請?zhí)顚懰借€文件的相對路徑或絕對路徑
ssl_certificate_key /etc/nginx/certs/lujiesheng.cn.key;
ssl_session_timeout 5m;
#請按照以下協(xié)議配置
ssl_protocols TLSv1.2 TLSv1.3;
#請按照以下套件配置,配置加密套件,寫法遵循 openssl 標(biāo)準(zhǔn)。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#網(wǎng)站主頁路徑。此路徑僅供參考,具體請您按照實際目錄操作。
#例如,您的網(wǎng)站主頁在 Nginx 服務(wù)器的 /etc/www 目錄下,則請修改 root 后面的 html 為 /etc/www。
root /var/www/html;
index index.html index.htm;
}
}
# lujiesheng.cn end
# api.lujiesheng.cn start
server {
listen 80;
listen [::]:80;
server_name api.lujiesheng.cn;
# 把http的域名請求轉(zhuǎn)成https
return 301 https://$host$request_uri;
#root /etc/www;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
server {
#SSL 默認(rèn)訪問端口號為 443
listen 443 ssl;
#請?zhí)顚懡壎ㄗC書的域名
server_name api.lujiesheng.cn;
#請?zhí)顚懽C書文件的相對路徑或絕對路徑
ssl_certificate /etc/nginx/certs/api.lujiesheng.cn_bundle.crt;
#請?zhí)顚懰借€文件的相對路徑或絕對路徑
ssl_certificate_key /etc/nginx/certs/api.lujiesheng.cn.key;
ssl_session_timeout 5m;
#請按照以下協(xié)議配置
ssl_protocols TLSv1.2 TLSv1.3;
#請按照以下套件配置,配置加密套件,寫法遵循 openssl 標(biāo)準(zhǔn)。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#網(wǎng)站主頁路徑。此路徑僅供參考,具體請您按照實際目錄操作。
#例如,您的網(wǎng)站主頁在 Nginx 服務(wù)器的 /etc/www 目錄下,則請修改 root 后面的 html 為 /etc/www。
proxy_pass http://ip:port/;
#root /etc/www;
#index index.html index.htm;
}
}
# api.lujiesheng.cn end
# portainer.lujiesheng.cn start
server {
listen 80;
listen [::]:80;
server_name portainer.lujiesheng.cn;
# 把http的域名請求轉(zhuǎn)成https
return 301 https://$host$request_uri;
#root /etc/www;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
server {
#SSL 默認(rèn)訪問端口號為 443
listen 443 ssl;
#請?zhí)顚懡壎ㄗC書的域名
server_name portainer.lujiesheng.cn;
#請?zhí)顚懽C書文件的相對路徑或絕對路徑
ssl_certificate /etc/nginx/certs/portainer.lujiesheng.cn_bundle.crt;
#請?zhí)顚懰借€文件的相對路徑或絕對路徑
ssl_certificate_key /etc/nginx/certs/portainer.lujiesheng.cn.key;
ssl_session_timeout 5m;
#請按照以下協(xié)議配置
ssl_protocols TLSv1.2 TLSv1.3;
#請按照以下套件配置,配置加密套件,寫法遵循 openssl 標(biāo)準(zhǔn)。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#網(wǎng)站主頁路徑。此路徑僅供參考,具體請您按照實際目錄操作。
#例如,您的網(wǎng)站主頁在 Nginx 服務(wù)器的 /etc/www 目錄下,則請修改 root 后面的 html 為 /etc/www。
proxy_pass http://ip:port/;
#root /etc/www;
#index index.html index.htm;
}
}
# portainer.lujiesheng.cn end
}
# 記得把截圖部分改成自己的服務(wù)器IP和對應(yīng)服務(wù)的端口:
# 切換到 blog 目錄下(docker-compose.yml 同級目錄):
cd /home/blog
11. 打包 .NET6 API 鏡像
# 切換到工程文件的解決方案根目錄,把里層的 Dockerfile 文件復(fù)制過來:
# 先登錄騰訊云容器服務(wù)
# 本地登錄一下
# 登錄
docker login ccr.ccs.tencentyun.com --username=100012562502
# 開始打包
docker build -t ccr.ccs.tencentyun.com/lenceas/blog_api:v1.0 .
# 推送到騰訊云容器
docker push ccr.ccs.tencentyun.com/lenceas/blog_api:v1.0
# 然后切換到服務(wù)器窗口登錄并拉取鏡像:
docker login ccr.ccs.tencentyun.com --username=100012562502
docker pull ccr.ccs.tencentyun.com/lenceas/blog_api:v1.0
12. 啟動 Docker Compose 服務(wù)
# 啟動 docker-compose (第一次啟動需要拉取鏡像,耐心等候幾分鐘即可...)
docker-compose up -d
# 查看是否運(yùn)行成功命令
docker-compose images
docker-compose ps
docker network ls
# docker-compose 常用命令
# 啟動容器:
docker-compose up
# 或者后臺運(yùn)行:
docker-compose up -d
# 停止容器:
docker-compose stop xxx(自定義的容器名 or 容器id)
# 刪除容器(慎用):
docker-compose down
# 構(gòu)建和啟動容器:
docker-compose up --build
# 顯示容器日志:
docker-compose logs
# 顯示運(yùn)行的服務(wù)列表:
docker-compose ps
# 查看當(dāng)前 Docker 中所有網(wǎng)絡(luò)列表
docker network ls
# 停止并移除容器,網(wǎng)絡(luò),卷和鏡像(慎用):
docker-compose down --volumes --rmi all
# 查看 Docker Compose 配置文件(默認(rèn)為 docker-compose.yml)的幫助信息:
docker-compose config
# 執(zhí)行一個容器內(nèi)的命令:
docker-compose exec <service_name> <command>
# 重新構(gòu)建指定服務(wù)的容器:
docker-compose build <service_name>
# 停止并刪除所有容器,但保留網(wǎng)絡(luò)和卷等資源:
docker-compose down --volumes
13. 驗證訪問是否部署成功
個人博客 前端:https://lujiesheng.cn
個人博客 后端:https://api.lujiesheng.cn
個人博客 運(yùn)維:https://portainer.lujiesheng.cn
文章來源:http://www.zghlxwxcb.cn/news/detail-622216.html
至此,所有流程完畢,部署成功?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-622216.html
到了這里,關(guān)于【.NET6 + Vue3 + CentOS7.9 + Docker + Docker-Compose + SSL】個人博客前后端運(yùn)維部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!