翼度科技»论坛 编程开发 .net 查看内容

【.NET6 + Vue3 + CentOS7.9 + Docker + Docker-Compose + SSL】个人博客前

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
个人博客 前端:https://lujiesheng.cn
个人博客 后端:https://api.lujiesheng.cn
个人博客 运维:https://portainer.lujiesheng.cn
1. 服务器准备

我采用的是 腾讯云轻量应用服务器(2C 4G 8M 80G),配置如下图:

安装镜像选择 CentOS 7.6 64bit:

2. 服务器防火墙设置

添加防火墙出入站规则,设置如下图:

3. 域名解析

把已备案的域名解析到服务器,记录如下图:

4. SSL证书准备

通过腾讯云申请免费证书:

把对应的证书下载到本地:

5. 容器镜像服务准备

新建命名空间:

新建私有镜像仓库:

6. 连接登录到服务器

我采用的是 FinalShell:

更新服务器系统和内核版本:
  1. # 执行更新命令:
  2. yum -y update
  3. # 等待更新完毕后,执行查看命令,确认系统和内核版本:
  4. cat /etc/redhat-release
  5. uname -r
复制代码

7. 安装插件依赖包
  1. yum -y install gcc
复制代码
  1. yum -y install gcc-c++
复制代码
  1. yum install -y yum-utils
复制代码
  1. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
复制代码
  1. yum makecache fast
复制代码

8. 安装 Docker
  1. # 执行安装命令:
  2. yum install -y docker-ce docker-ce-cli containerd.io
复制代码
  1. # 启动 Docker
  2. systemctl start docker.socket
  3. systemctl start docker
  4. # 查看 Docker 状态
  5. systemctl status docker
  6. # 设置 Docker 自启
  7. systemctl enable docker
  8. systemctl enable docker.socket
  9. # 检查自启状态
  10. systemctl list-unit-files | grep docker
复制代码
  1. # 查看当前docker版本
  2. docker version
复制代码

更新Docker远程仓库镜像源:
https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors
  1. # 创建deamon.json文件用来保存源
  2. vim /etc/docker/daemon.json
  3. # 添加稳定而且不经常变动的镜像源
  4. {"registry-mirrors": ["https://i0q82fc7.mirror.aliyuncs.com"]}
  5. # 保存并重启一下Docker
  6. systemctl daemon-reload
  7. systemctl restart docker
复制代码
  1. # 按照以下步骤来修改时区
  2. cd /etc/
  3. # 首先备份原有的 /etc/localtime 文件
  4. mv /etc/localtime /etc/localtime.bak
  5. # 然后创建一个新的链接文件
  6. ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  7. # 修改 /etc/timezone 文件,将其内容修改为所需的时区(例如 "Asia/Shanghai")
  8. echo "Asia/Shanghai" | sudo tee /etc/timezone
  9. # 查看是否设置成功
  10. date
  11. cat /etc/timezone
复制代码

9. 安装 Docker Compose

我们这里选择离线安装:
  1. # 去官网下载
  2. https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64
  3. # 切换服务器目录
  4. cd /usr/local/bin
  5. # 把下载的文件上传上去
复制代码
  1. # 改名
  2. mv docker-compose-linux-x86_64 docker-compose
  3. # 授权
  4. chmod +x /usr/local/bin/docker-compose
  5. # 测试是否安装成功
  6. docker-compose version
复制代码

10. 准备部署目录和配置文件
  1. cd /home
  2. mkdir blog
  3. cd blog
  4. mkdir nginx
  5. mkdir ui
  6. cd nginx
  7. mkdir ssl
复制代码
  1. # 在 /home/blog 目录下创建 docker-compose.yml 文件,编辑该文件,内容如下:
复制代码
点击查看代码
  1. version: "3.8"
  2. services:
  3.   nginx:
  4.     image: nginx
  5.     container_name: nginx
  6.     ports:
  7.       - "80:80"
  8.       - "443:443"
  9.     volumes:
  10.       - ./nginx/nginx.conf:/etc/nginx/nginx.conf
  11.       - ./nginx/ssl:/etc/nginx/certs
  12.       - ./ui/dist:/var/www/html
  13.     restart: always
  14.     networks:
  15.       - network
  16.   portainer:
  17.     image: portainer/portainer
  18.     container_name: portainer
  19.     ports:
  20.       - "xxxx:xxxx" # 把xxxx改成自己portainer的端口,需要跟服务器防火墙添加的规则对应!
  21.     environment:
  22.       - TZ=Asia/Shanghai
  23.     volumes:
  24.       - /etc/localtime:/etc/localtime:ro
  25.       - /etc/timezone:/etc/timezone:ro
  26.       - /var/run/docker.sock:/var/run/docker.sock
  27.     restart: always
  28.     networks:
  29.       - network
  30.     depends_on:
  31.       - nginx
  32.   redis:
  33.     image: redis
  34.     container_name: redis
  35.     ports:
  36.       - "xxxx:6379" # 把xxxx改成自己redis的端口,需要跟服务器防火墙添加的规则对应!
  37.     environment:
  38.       - TZ=Asia/Shanghai
  39.     volumes:
  40.       - /etc/localtime:/etc/localtime:ro
  41.       - /etc/timezone:/etc/timezone:ro
  42.       - redis_data:/data
  43.     command: redis-server --requirepass xxx # 把xxx改成自己的redis连接密码
  44.     restart: always
  45.     networks:
  46.       - network
  47.     depends_on:
  48.       - portainer
  49.   mysql:
  50.     image: mysql
  51.     container_name: mysql
  52.     ports:
  53.       - "xxxx:3306" # 把xxxx改成自己mysql的端口,需要跟服务器防火墙添加的规则对应!
  54.     environment:
  55.       - TZ=Asia/Shanghai
  56.       - MYSQL_ROOT_PASSWORD=xxx # 把xxx改成自己的mysql连接密码
  57.     volumes:
  58.       - mysql_data:/var/lib/mysql
  59.     restart: always
  60.     networks:
  61.       - network
  62.     depends_on:
  63.       - redis
  64.   api:
  65.     image: ccr.ccs.tencentyun.com/lenceas/blog_api:v1.0
  66.     container_name: api
  67.     ports:
  68.       - "xxxx:xxxx" # 把xxxx改成自己api的端口
  69.     environment:
  70.       - TZ=Asia/Shanghai
  71.     volumes:
  72.       - /etc/localtime:/etc/localtime:ro
  73.       - /etc/timezone:/etc/timezone:ro
  74.     restart: always
  75.     networks:
  76.       - network
  77.     depends_on:
  78.       - mysql
  79. networks:
  80.   network:
  81.     driver: bridge
  82. volumes:
  83.   redis_data:
  84.   mysql_data:
复制代码
  1. # 切换到ui目录下,并把前端build打包的dist文件上传:
  2. cd /home/blog/ui
复制代码
  1. # 切换到nginx/ssl 目录下,并把之前下载的ssl证书全部上传(只上传 crt 和 key 文件):
  2. cd /home/blog/nginx/ssl
复制代码
  1. # 切换到 nginx 目录下,并创建 nginx.conf 文件,编辑该文件,内容如下:
  2. cd /home/blog/nginx
复制代码
点击查看代码
  1. user  nginx;
  2. worker_processes  auto;
  3. error_log  /var/log/nginx/error.log notice;
  4. pid        /var/run/nginx.pid;
  5. events {
  6.     worker_connections  1024;
  7. }
  8. http {
  9.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  10.                       '$status $body_bytes_sent "$http_referer" '
  11.                       '"$http_user_agent" "$http_x_forwarded_for"';
  12.     access_log  /var/log/nginx/access.log  main;
  13.     sendfile            on;
  14.     tcp_nopush          on;
  15.     tcp_nodelay         on;
  16.     keepalive_timeout   65;
  17.     types_hash_max_size 4096;
  18.     include             /etc/nginx/mime.types;
  19.     default_type        application/octet-stream;
  20.     # Load modular configuration files from the /etc/nginx/conf.d directory.
  21.     # See http://nginx.org/en/docs/ngx_core_module.html#include
  22.     # for more information.
  23.     include /etc/nginx/conf.d/*.conf;
  24.     # lujiesheng.cn start
  25.     server {
  26.         listen       80;
  27.         listen       [::]:80;
  28.         server_name  lujiesheng.cn;
  29.         #把http的域名请求转成https
  30.         return 301 https://$host$request_uri;
  31.         #root         /etc/www;
  32.         # Load configuration files for the default server block.
  33.         include /etc/nginx/default.d/*.conf;
  34.         error_page 404 /404.html;
  35.         location = /404.html {
  36.         }
  37.         error_page 500 502 503 504 /50x.html;
  38.         location = /50x.html {
  39.         }
  40.     }
  41.     server {
  42.          #SSL 默认访问端口号为 443
  43.          listen 443 ssl;
  44.          #请填写绑定证书的域名
  45.          server_name lujiesheng.cn;
  46.          #请填写证书文件的相对路径或绝对路径
  47.          ssl_certificate /etc/nginx/certs/lujiesheng.cn_bundle.crt;
  48.          #请填写私钥文件的相对路径或绝对路径
  49.          ssl_certificate_key /etc/nginx/certs/lujiesheng.cn.key;
  50.          ssl_session_timeout 5m;
  51.          #请按照以下协议配置
  52.          ssl_protocols TLSv1.2 TLSv1.3;
  53.          #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
  54.          ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  55.          ssl_prefer_server_ciphers on;
  56.          location / {
  57.              #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
  58.              #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
  59.              root /var/www/html;
  60.              index  index.html index.htm;
  61.          }
  62.      }
  63.     # lujiesheng.cn end
  64.     # api.lujiesheng.cn start
  65.     server {
  66.        listen       80;
  67.        listen       [::]:80;
  68.        server_name   api.lujiesheng.cn;
  69.        # 把http的域名请求转成https
  70.        return 301 https://$host$request_uri;
  71.        #root         /etc/www;
  72.    
  73.        # Load configuration files for the default server block.
  74.        include /etc/nginx/default.d/*.conf;
  75.    
  76.        error_page 404 /404.html;
  77.        location = /404.html {
  78.        }
  79.    
  80.        error_page 500 502 503 504 /50x.html;
  81.        location = /50x.html {
  82.        }
  83.     }
  84.     server {
  85.          #SSL 默认访问端口号为 443
  86.          listen 443 ssl;
  87.          #请填写绑定证书的域名
  88.          server_name api.lujiesheng.cn;
  89.          #请填写证书文件的相对路径或绝对路径
  90.          ssl_certificate /etc/nginx/certs/api.lujiesheng.cn_bundle.crt;
  91.          #请填写私钥文件的相对路径或绝对路径
  92.          ssl_certificate_key /etc/nginx/certs/api.lujiesheng.cn.key;
  93.          ssl_session_timeout 5m;
  94.          #请按照以下协议配置
  95.          ssl_protocols TLSv1.2 TLSv1.3;
  96.          #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
  97.          ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  98.          ssl_prefer_server_ciphers on;
  99.          location / {
  100.              #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
  101.              #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
  102.              proxy_pass http://ip:port/;
  103.              #root /etc/www;
  104.              #index  index.html index.htm;
  105.          }
  106.     }
  107.     # api.lujiesheng.cn end
  108.    
  109.     # portainer.lujiesheng.cn start
  110.     server {
  111.         listen       80;
  112.          listen       [::]:80;
  113.         server_name   portainer.lujiesheng.cn;
  114.         # 把http的域名请求转成https
  115.            return 301 https://$host$request_uri;
  116.            #root         /etc/www;
  117.         
  118.            # Load configuration files for the default server block.
  119.            include /etc/nginx/default.d/*.conf;
  120.         
  121.            error_page 404 /404.html;
  122.            location = /404.html {
  123.            }
  124.         
  125.            error_page 500 502 503 504 /50x.html;
  126.            location = /50x.html {
  127.            }
  128.     }
  129.     server {
  130.          #SSL 默认访问端口号为 443
  131.          listen 443 ssl;
  132.          #请填写绑定证书的域名
  133.          server_name portainer.lujiesheng.cn;
  134.          #请填写证书文件的相对路径或绝对路径
  135.          ssl_certificate /etc/nginx/certs/portainer.lujiesheng.cn_bundle.crt;
  136.          #请填写私钥文件的相对路径或绝对路径
  137.          ssl_certificate_key /etc/nginx/certs/portainer.lujiesheng.cn.key;
  138.          ssl_session_timeout 5m;
  139.          #请按照以下协议配置
  140.          ssl_protocols TLSv1.2 TLSv1.3;
  141.          #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
  142.          ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  143.          ssl_prefer_server_ciphers on;
  144.          location / {
  145.              #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
  146.              #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
  147.              proxy_pass http://ip:port/;
  148.              #root /etc/www;
  149.              #index  index.html index.htm;
  150.          }
  151.     }
  152.     # portainer.lujiesheng.cn end
  153. }
复制代码
  1. # 记得把截图部分改成自己的服务器IP和对应服务的端口:
复制代码


  1. # 切换到 blog 目录下(docker-compose.yml 同级目录):
  2. cd /home/blog
复制代码

11. 打包 .NET6 API 镜像
  1. # 切换到工程文件的解决方案根目录,把里层的 Dockerfile 文件复制过来:
复制代码
  1. # 先登录腾讯云容器服务
复制代码

  1. # 本地登录一下
复制代码
  1. # 登录
  2. docker login ccr.ccs.tencentyun.com --username=100012562502
  3. # 开始打包
  4. docker build -t ccr.ccs.tencentyun.com/lenceas/blog_api:v1.0 .
  5. # 推送到腾讯云容器
  6. docker push ccr.ccs.tencentyun.com/lenceas/blog_api:v1.0
  7. # 然后切换到服务器窗口登录并拉取镜像:
  8. docker login ccr.ccs.tencentyun.com --username=100012562502
  9. docker pull ccr.ccs.tencentyun.com/lenceas/blog_api:v1.0
复制代码

12. 启动 Docker Compose 服务
  1. # 启动 docker-compose (第一次启动需要拉取镜像,耐心等候几分钟即可...)
  2. docker-compose up -d
复制代码
  1. # 查看是否运行成功命令
  2. docker-compose images
  3. docker-compose ps
  4. docker network ls
复制代码

  1. # docker-compose 常用命令
  2. # 启动容器:
  3. docker-compose up
  4. # 或者后台运行:
  5. docker-compose up -d
  6. # 停止容器:
  7. docker-compose down
  8. # 构建和启动容器:
  9. docker-compose up --build
  10. # 显示容器日志:
  11. docker-compose logs
  12. # 显示运行的服务列表:
  13. docker-compose ps
  14. # 查看当前 Docker 中所有网络列表
  15. docker network ls
  16. # 停止并移除容器,网络,卷和镜像(慎用):
  17. docker-compose down --volumes --rmi all
  18. # 查看 Docker Compose 配置文件(默认为 docker-compose.yml)的帮助信息:
  19. docker-compose config
  20. # 执行一个容器内的命令:
  21. docker-compose exec <service_name> <command>
  22. # 重新构建指定服务的容器:
  23. docker-compose build <service_name>
  24. # 停止并删除所有容器,但保留网络和卷等资源:
  25. docker-compose down --volumes
复制代码
13. 验证访问是否部署成功

个人博客 前端:https://lujiesheng.cn

个人博客 后端:https://api.lujiesheng.cn

个人博客 运维:https://portainer.lujiesheng.cn

至此,所有流程完毕,部署成功!!!

来源:https://www.cnblogs.com/lujiesheng/archive/2023/08/02/17599850.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具