【.NET6 + Vue3 + CentOS7.9 + Docker + Docker-Compose + SSL】個人博客前後端運維部署

来源:https://www.cnblogs.com/lujiesheng/archive/2023/08/02/17599850.html
-Advertisement-
Play Games

個人博客 前端:https://lujiesheng.cn 個人博客 後端:https://api.lujiesheng.cn 個人博客 運維:https://portainer.lujiesheng.cn # 1. 伺服器準備 我採用的是 騰訊雲輕量應用伺服器(2C 4G 8M 80G),配置如下 ...


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

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 教程簡介 D3是Data-Driven Documents的縮寫,D3.js是一個基於數據管理文檔的資源JavaScript庫。 D3 是最有效的數據可視化框架之一。它允許開發人員在 HTML、CSS 和 SVG 的幫助下在瀏覽器中創建動態的互動式數據可視化。數據可視化是將過濾後的數據以圖片和 ...
  • 數據類型 1、能直接處理的基本數據類型有5個:整型、浮點型、字元串、布爾值、空 1)整型(int)=整數,例如0至9,-1至-9,100,-8180等,人數、年齡、頁碼、門牌號等 沒有小數位的數字,是整型 2)浮點型(float)=小數,例如金額、身高、體重、距離、長度、π等 精確到小數位的數字,是 ...
  • # Python 3.12 搶先看——關於 f-string 的改動 哈嘍大家好,我是鹹魚 相信小伙伴們對 python 中的 f-string 都不陌生 f-string 是格式化字元串的縮寫,是以小寫或大寫字母 F 為首碼的字元串文本 f-string 提供簡潔明瞭的語法,**允許對變數和表達式 ...
  • > 依賴註入就是對類的屬性進行賦值 ## 4.1、環境搭建 > 創建名為spring_ioc_xml的新module,過程參考[3.1節](https://www.cnblogs.com/Javaer1995/p/17570068.html "3.1節") ### 4.1.1、創建spring配置文 ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 本文是《quarkus依賴註入》系列的第 ...
  • [toc] # Autofac Autofac 是一款超贊的.NET IoC 容器 . 它管理類之間的依賴關係, 從而使 應用在規模及複雜性增長的情況下依然可以輕易地修改 . 它的實現方式是將常規的.net類當做 組件 處理. 控制反轉背後的核心思想是, 我們不再將應用中的類捆綁在一起, 讓類自己去 ...
  • Swagger是一個規範且完整的框架,用於生成、描述、調試和可視化Restfull風格的Web服務。Swagger的目標是對Rest API定義一個標準且和語言無關的介面,可以讓人和電腦擁有無需訪問源碼、文檔或網路流量監控就可以發現和連接服務的能力。當通過Swagger進行正確定義,用於可以理解遠... ...
  • # Unity IPostprocessBuildWithReport Unity IPostprocessBuildWithReport是Unity引擎中的一個非常有用的功能,它可以讓開發者在構建項目後自動執行一些操作,並且可以獲取構建報告。這個功能可以幫助開發提高工作效率,減少手動操作的時間和錯 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...