个人博客 前端: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:

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

# 执行更新命令:
yum -y update # 等待更新完毕后,执行查看命令,确认系统和内核版本:
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

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

# 启动 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

# 查看当前docker版本
docker version

更新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

# 按照以下步骤来修改时区
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

9. 安装 Docker Compose

我们这里选择离线安装:

# 去官网下载
https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64 # 切换服务器目录
cd /usr/local/bin # 把下载的文件上传上去

# 改名
mv docker-compose-linux-x86_64 docker-compose # 授权
chmod +x /usr/local/bin/docker-compose # 测试是否安装成功
docker-compose version

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

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

# 在 /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:

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

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

# 切换到 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和对应服务的端口:

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

11. 打包 .NET6 API 镜像

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

# 先登录腾讯云容器服务

# 本地登录一下

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

12. 启动 Docker Compose 服务

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

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

# 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

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

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

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

【.NET6 + Vue3 + CentOS7.9 + Docker + Docker-Compose + SSL】个人博客前后端运维部署的更多相关文章

  1. 使用Docker快速搭建Halo个人博客到阿里云服务器上[附加主题和使用域名访问]

    一.前言 小编买了一个服务器也是一直想整个网站,一直在摸索,看了能够快速搭建博客系统的教程.总结了有以下几种方式,大家按照自己喜欢的去搭建: halo wordpress hexo vuepress ...

  2. 使用coding、daocloud和docker打造markdown纯静态博客

    说起独立博客的技术演变,从数据库到纯文本放git是一大进步,从HTML到markdown又是一大进步. 解析技术有没有进步呢?既然markdown是纯文本了,再用PHP/Python/Ruby去实时解 ...

  3. Docker环境下的前后端分离项目部署与运维

    本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能.高负载.高可用的部署方案.包括了MySQL集群.Redis集群.负载均衡.双机 ...

  4. Docker搭建Jenkins+Gogs+Maven/Gradle——代码自动化运维部署平台(三)

    一.简介 1.CI/CD CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/C ...

  5. 超简单Centos+Docker+Halo搭建java向博客

    首先,我就当你们了解docker基本知识了. 直接开始,全新的系统. 1. 安装Docker 移除旧的版本:  $ sudo yum remove docker \                  ...

  6. Docker环境下的前后端分离项目部署与运维(七)Redis高速缓存

    Redis高速缓存 利用内存保存数据,读写速度远超硬盘:可以减少I/O操作,降低I/O压力. 发红包.抢红包的数据可以存在高速缓存中,加快处理速度,不需要经过数据库 淘宝首页一些优惠活动商品等热数据可 ...

  7. Docker环境下的前后端分离项目部署与运维(十一)Docker Swarm技术

    Docker Swarm技术 docker swarm技术(之前的docker集群都是在 一个虚拟主机上的,但是如果这个主机挂掉了over了,docker技术就是多个虚拟主机形成一个集群) Swarm ...

  8. Docker环境下的前后端分离项目部署与运维(十二)使用Portainer管理Docker

    安装 docker hub地址:https://hub.docker.com/r/portainer/portainer/ # 每台服务器都要安装 docker pull portainer/port ...

  9. Docker环境下的前后端分离项目部署与运维(九)后端项目部署与负载均衡

    数据库准备 建立数据库 renren_fast ,然后运行renrenfast项目中的db文件夹内的脚本 -- 菜单 CREATE TABLE `sys_menu` ( `menu_id` bigin ...

  10. Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群

    下载RabbitMQ镜像 镜像地址RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq 安装命令安装之前,切记把Docker Hub设置为 ...

随机推荐

  1. MQTT.fx的安装和使用

    一.下载和安装 MQTT.fx支持Windows/Linux/Mac,附下载地址:http://www.jensd.de/apps/mqttfx/,下载完成之后双击进行安装. 二.配置使用 打开软件, ...

  2. Python网页应用开发神器fac 0.2.6版本重要新功能一览

    fac项目地址:https://github.com/CNFeffery/feffery-antd-components ,欢迎star支持 大家好我是费老师,距离我的开源Python网页应用通用组件 ...

  3. 使用 shell 脚本自动申请进京证 (六环外) —— debug 过程

    问题现象 用 shell 脚本写了一个自动办理六环外进京证的工具 <使用 shell 脚本自动申请进京证 (六环外)>,然而运行这个脚本总是返回以下错误信息: { "msg&qu ...

  4. 2022-05-18:假设数组a和数组b为两组信号: 1) length(b) <= length(a); 2) 对于任意0<=i<length(b), 有b[i+1] - b[i] == a[i+1

    2022-05-18:假设数组a和数组b为两组信号: length(b) <= length(a): 对于任意0<=i<length(b), 有b[i+1] - b[i] == a[ ...

  5. 2021-02-27:假设一个固定大小为W的窗口,依次划过arr,返回每一次滑出状况的最大值。例如,arr = [4,3,5,4,3,3,6,7], W = 3。返回:[5,5,5,4,6,7]。

    2021-02-27:假设一个固定大小为W的窗口,依次划过arr,返回每一次滑出状况的最大值.例如,arr = [4,3,5,4,3,3,6,7], W = 3.返回:[5,5,5,4,6,7]. 福 ...

  6. 2022-03-16:给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号。 另外给一个下标从 0 开始的二维整数数组 meetings , 其中 meetings[i] = [xi,

    2022-03-16:给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号. 另外给一个下标从 0 开始的二维整数数组 meetings , 其中 meetings[i] = [xi, ...

  7. 2021-07-09:股票问题6。给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付

    2021-07-09:股票问题6.给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用.你可以无限次地完成交易,但是你每笔交易都需要付 ...

  8. 给你安利一款国产良心软件uTools

    前言 大家好,我是xiezhr 最近由于换了新电脑,也是在各种折腾搭建开发环境,安装各种常用软件.今天呢给大家安利一款你可能没用过的国产良心软件uTools,这也是我刚刚拿到电脑后安装的第一款软件吧. ...

  9. Python Numpy 切片和索引(高级索引、布尔索引、花式索引)

    张量(Tensor).标量(scalar).向量(vector).矩阵(matrix) Python Numpy 切片和索引(高级索引.布尔索引.花式索引) Python NumPy 广播(Broad ...

  10. ET介绍——组件式设计(优化版的ECS)

    组件式设计 在代码复用和组织数据方面,面向对象可能是大家第一反应.面向对象三大特性继承,封装,多态,在一定程度上能解决不少代码复用,数据复用的问题.不过面向对象不是万能的,它也有极大的缺陷: 1. 数 ...