首页 > 系统相关 >【.NET6 + Vue3 + CentOS7.9 + Docker + Docker-Compose + SSL】个人博客前后端运维部署

【.NET6 + Vue3 + CentOS7.9 + Docker + Docker-Compose + SSL】个人博客前后端运维部署

时间:2023-08-02 12:00:24浏览次数:47  
标签:端运维 Compose cn ssl nginx etc compose Docker docker

个人博客 前端:https://lujiesheng.cn
个人博客 后端:https://api.lujiesheng.cn
个人博客 运维:https://portainer.lujiesheng.cn

1. 服务器准备

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

image

安装镜像选择 CentOS 7.6 64bit:

image

2. 服务器防火墙设置

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

image

3. 域名解析

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

image

4. SSL证书准备

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

image

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

image

5. 容器镜像服务准备

新建命名空间:

image

新建私有镜像仓库:

image

6. 连接登录到服务器

我采用的是 FinalShell:

image

更新服务器系统和内核版本:

# 执行更新命令:
yum -y update

# 等待更新完毕后,执行查看命令,确认系统和内核版本:
cat /etc/redhat-release
uname -r

image

7. 安装插件依赖包

yum -y install gcc

image

yum -y install gcc-c++

image

yum install -y yum-utils

image

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

image

yum makecache fast

image

8. 安装 Docker

# 执行安装命令:
yum install -y docker-ce docker-ce-cli containerd.io

image

# 启动 Docker
systemctl start docker.socket
systemctl start docker

# 查看 Docker 状态
systemctl status docker

# 设置 Docker 自启
systemctl enable docker
systemctl enable docker.socket

# 检查自启状态
systemctl list-unit-files | grep docker

image

# 查看当前docker版本
docker version

image

更新Docker远程仓库镜像源:
https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors

# 创建deamon.json文件用来保存源
vim /etc/docker/daemon.json

# 添加稳定而且不经常变动的镜像源
{"registry-mirrors": ["https://i0q82fc7.mirror.aliyuncs.com"]}

# 保存并重启一下Docker
systemctl daemon-reload
systemctl restart docker

image

# 按照以下步骤来修改时区
cd /etc/

# 首先备份原有的 /etc/localtime 文件
mv /etc/localtime /etc/localtime.bak

# 然后创建一个新的链接文件
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 修改 /etc/timezone 文件,将其内容修改为所需的时区(例如 "Asia/Shanghai")
echo "Asia/Shanghai" | sudo tee /etc/timezone

# 查看是否设置成功
date
cat /etc/timezone

image

9. 安装 Docker Compose

我们这里选择离线安装:

# 去官网下载
https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64

# 切换服务器目录
cd /usr/local/bin

# 把下载的文件上传上去

image

# 改名
mv docker-compose-linux-x86_64 docker-compose

# 授权
chmod +x /usr/local/bin/docker-compose

# 测试是否安装成功
docker-compose version

image

10. 准备部署目录和配置文件

cd /home
mkdir blog
cd blog
mkdir nginx
mkdir ui
cd nginx
mkdir ssl

image

# 在 /home/blog 目录下创建 docker-compose.yml 文件,编辑该文件,内容如下:
点击查看代码
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
    container_name: portainer
    ports:
      - "xxxx:xxxx" # 把xxxx改成自己portainer的端口,需要跟服务器防火墙添加的规则对应!
    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的端口,需要跟服务器防火墙添加的规则对应!
    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的端口,需要跟服务器防火墙添加的规则对应!
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=xxx # 把xxx改成自己的mysql连接密码
    volumes:
      - mysql_data:/var/lib/mysql
    restart: always
    networks:
      - network
    depends_on:
      - redis

  api:
    image: ccr.ccs.tencentyun.com/lenceas/blog_api:v1.0
    container_name: api
    ports:
      - "xxxx:xxxx" # 把xxxx改成自己api的端口
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    restart: always
    networks:
      - network
    depends_on:
      - mysql

networks:
  network:
    driver: bridge

volumes:
  redis_data:
  mysql_data:

image

# 切换到ui目录下,并把前端build打包的dist文件上传:
cd /home/blog/ui

image

# 切换到nginx/ssl 目录下,并把之前下载的ssl证书全部上传(只上传 crt 和 key 文件):
cd /home/blog/nginx/ssl

image

# 切换到 nginx 目录下,并创建 nginx.conf 文件,编辑该文件,内容如下:
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的域名请求转成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 默认访问端口号为 443
         listen 443 ssl;
         #请填写绑定证书的域名
         server_name lujiesheng.cn;
         #请填写证书文件的相对路径或绝对路径
         ssl_certificate /etc/nginx/certs/lujiesheng.cn_bundle.crt;
         #请填写私钥文件的相对路径或绝对路径
         ssl_certificate_key /etc/nginx/certs/lujiesheng.cn.key;
         ssl_session_timeout 5m;
         #请按照以下协议配置
         ssl_protocols TLSv1.2 TLSv1.3;
         #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
         ssl_prefer_server_ciphers on;
         location / {
             #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
             #例如,您的网站主页在 Nginx 服务器的 /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的域名请求转成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 默认访问端口号为 443
         listen 443 ssl;
         #请填写绑定证书的域名
         server_name api.lujiesheng.cn;
         #请填写证书文件的相对路径或绝对路径
         ssl_certificate /etc/nginx/certs/api.lujiesheng.cn_bundle.crt;
         #请填写私钥文件的相对路径或绝对路径
         ssl_certificate_key /etc/nginx/certs/api.lujiesheng.cn.key;
         ssl_session_timeout 5m;
         #请按照以下协议配置
         ssl_protocols TLSv1.2 TLSv1.3;
         #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
         ssl_prefer_server_ciphers on;
         location / {
             #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
             #例如,您的网站主页在 Nginx 服务器的 /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的域名请求转成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 默认访问端口号为 443
         listen 443 ssl;
         #请填写绑定证书的域名
         server_name portainer.lujiesheng.cn;
         #请填写证书文件的相对路径或绝对路径
         ssl_certificate /etc/nginx/certs/portainer.lujiesheng.cn_bundle.crt;
         #请填写私钥文件的相对路径或绝对路径
         ssl_certificate_key /etc/nginx/certs/portainer.lujiesheng.cn.key;
         ssl_session_timeout 5m;
         #请按照以下协议配置
         ssl_protocols TLSv1.2 TLSv1.3;
         #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
         ssl_prefer_server_ciphers on;
         location / {
             #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
             #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
             proxy_pass http://ip:port/;
             #root /etc/www;
             #index  index.html index.htm;
         }
    }
    # portainer.lujiesheng.cn end
}

# 记得把截图部分改成自己的服务器IP和对应服务的端口:

image

image

image

# 切换到 blog 目录下(docker-compose.yml 同级目录):
cd /home/blog

image

11. 打包 .NET6 API 镜像

# 切换到工程文件的解决方案根目录,把里层的 Dockerfile 文件复制过来:

image

# 先登录腾讯云容器服务

image

image

# 本地登录一下

image

# 登录
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

# 然后切换到服务器窗口登录并拉取镜像:
docker login ccr.ccs.tencentyun.com --username=100012562502
docker pull ccr.ccs.tencentyun.com/lenceas/blog_api:v1.0

image

12. 启动 Docker Compose 服务

# 启动 docker-compose (第一次启动需要拉取镜像,耐心等候几分钟即可...)
docker-compose up -d

image

# 查看是否运行成功命令
docker-compose images
docker-compose ps
docker network ls

image

image

# docker-compose 常用命令
# 启动容器:
docker-compose up
# 或者后台运行:
docker-compose up -d
# 停止容器:
docker-compose down
# 构建和启动容器:
docker-compose up --build
# 显示容器日志:
docker-compose logs
# 显示运行的服务列表:
docker-compose ps
# 查看当前 Docker 中所有网络列表
docker network ls
# 停止并移除容器,网络,卷和镜像(慎用):
docker-compose down --volumes --rmi all
# 查看 Docker Compose 配置文件(默认为 docker-compose.yml)的帮助信息:
docker-compose config
# 执行一个容器内的命令:
docker-compose exec <service_name> <command>
# 重新构建指定服务的容器:
docker-compose build <service_name>
# 停止并删除所有容器,但保留网络和卷等资源:
docker-compose down --volumes

13. 验证访问是否部署成功

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

image

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

image

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

image

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

标签:端运维,Compose,cn,ssl,nginx,etc,compose,Docker,docker
From: https://www.cnblogs.com/lujiesheng/p/17599850.html

相关文章

  • docker 安装 bage私有nuget服务器并上传nuget包
    下载镜像dockerpullloicsharma/baget创建映射文件夹mkdir/data\mkdir/data/app\mkdir/data/app/bagetmkdir/data/app/baget/baget-data 写入配置文件baget.envecho"#以下配置是用于发布包的API密钥,您应该将其更改ApiKey的值以保护服务器。ApiKey=Nuge......
  • Docker使用理解
    1.轻量级的虚拟机,可以像房间一样隔离每个应用,安装依赖一条命令。  保证同样的运行环境,解决每个计算机运行情况不同的问题。2.镜像是一个发布包,可以发布多个运行实例供用户访问。3.可以将镜像 dockersave 为压缩包给其他人用  命令:dockersave-o./ywtest.tarywtes......
  • Docker的办公网络与容器网络互通简单实现思路
    参考博文https://www.cnblogs.com/quemengqio/p/17034668.html需求:本地电脑需要连接dev环境的docker容器网络,需要dev-java-services这台主机专门做路由转发现在需要在办公室的出口路由器上,设置静态路由,将dev的docker网络的网段,路由到dev-java-services节点上iproute172.1......
  • Docker教程
     正文:Docker介绍Docker安装镜像文件容器文件编写Dockerfile导入导出和发布 Docker官网:https://www.docker.comGithubDocker源码:https://github.com/docker/docker-ce Docker介绍一、环境配置的难题Docker的出现是为了解决环境配置的难题,软件开发最大的麻烦......
  • 第3天 - docker 常用命令整理
    镜像常用操作1.查看安装的镜像dockerimages2.启动镜像dockerrun-d--namekingbasev8r6-p54321:54321-eSYSTEM_USER=kingbasees-eSYSTEM_PWD=kingbasees-v/home/kingbase-es-v8-r6-docker/license.dat:/opt/docker/kingbase-latest/opt/license.datchyiyaqing......
  • Docker简易项目部署
    Docker简易项目部署私有仓库#dockerpull拉取,都是从hub.docker上拉取的,公司自己做的docker镜像,放在哪比较合适#dockerpush推到hub.docker,如果是公开,大家都可以下载,公司内部只希望公司的人用,其他人不能用#公司内部,需要有个仓库管理自己的镜像----》私有仓库私服 ......
  • Docker简易部署
    Docker简易部署应用部署mysql部署#在宿主机上不需要安装mysql了,直接拉取mysql镜像,运行成容器即可#部署步骤 -1创建文件夹mkdir/root/mysql mkdir/root/mysql/conf.d mkdir/root/mysql/data/-2基于镜像运行成容器(端口映射,目录映射)dockerrun......
  • docker 入门
    docker入门虚拟化技术介绍#虚拟化在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟......
  • Docker
    1.docker是一个快速交付应用,运行应用的技术 1.1docker可以将应用及其依赖和运行环境(系统依赖库)打包成一个镜像,可以移植到任意的linux系统上 1.2运行时利用沙箱技术让各个容器隔离,各个应用互不干扰,启动移动通过一条命令完成,方便快捷 ......
  • 使用Maven插件为SpringBoot应用构建Docker镜像
    Docker开启远程API用vim编辑器修改docker.service文件#生成证书opensslgenrsa-aes256-outca-key.pem4096opensslreq-new-x509-days365-keyca-key.pem-sha256-outca.pemopensslgenrsa-outserver-key.pem4096opensslreq-subj"/CN=localhost"-sha256-......