Docker部署Halo部落格並配置SSL證書

hjavn發表於2021-09-07

阿里雲工具與資源中心

幫助開發者更加高效的工作,提供圍繞開發者全生命週期的工具與資源

本文所用環境:阿里雲ECS伺服器,全新安裝CentOS 8.4。 本文前置內容:購買雲伺服器,購買域名並備案,雲服務控制檯安全組/防火牆中放行80,8090,443埠(若有安裝寶塔皮膚等也需要在皮膚中放行) 本文將介紹通過Docker部署Halo部落格並通過certbot自動申請證照並安裝實現https訪問。

  1. 安裝Docker

    本文使用全新安裝的系統,因此並沒有安裝Docker,已安裝Docker則可跳過這一步。登入終端輸入以下內容並按回車等待即可完成Docker安裝,該命令同樣適用於Ubuntu。

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

  2. 建立Halo部落格的工作目錄

    本文將Halo部落格工作目錄置於home目錄下,並命名為.halo。該目錄將用來存放部落格所有配置、文章、主題等資料,若有備份或遷移需要則可以直接複製該目錄。

    建立目錄並前往該目錄mkdir ~/.halo && cd ~/.halo

  3. 下載預設配置檔案到工作目錄

    wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml

    該配置檔案包含了埠,資料庫,快取,後臺根路徑等配置,一般下載後不用更改,若需要更改使用的資料庫等需求可參考官方文件

  4. 拉取Halo映象

    docker pull halohub/halo:latest

  5. 建立容器

    docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.11

    8090:8090第一個8090為宿主機埠,第二個8090為容器埠,含義為將宿主機的8090埠對映到容器的8090埠。

    ~/.halo:/root/.halo含義為將宿主機的~/.halo目錄對映到容器的/root/.halo目錄,注意後者不可更改。

    其他引數具體含義請參考官方文件

  6. 此時即可使用http://ip:埠號訪問安裝引導介面。但比較推薦完成下列反向代理以及SSL證照配置後再進行部落格的初始化。

注意下文內容基於使用8090宿主機埠,如有更改請注意在配置檔案中將8090改為自行修改的埠

  1. 安裝Nginx

    # 下列程式碼適用於CentOS
    # 新增 Nginx 源
    sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    
    # 安裝 Nginx
    sudo yum install -y nginx
    
    # 啟動 Nginx
    sudo systemctl start nginx.service
    
    # 設定開機自啟 Nginx
    sudo systemctl enable nginx.service
    # 下列程式碼適用於Ubuntu
    sudo update
    sudo apt install nginx
  2. 配置Nginx

    # 下載 Halo 官方的 Nginx 配置模板
    curl -o /etc/nginx/conf.d/halo.conf --create-dirs https://dl.halo.run/config/nginx.conf

    下載之後需要對其進行修改。以上方法安裝的Nginx預設路徑為/etc/nginx

    # 適用 vim 編輯 halo.conf
    vim /etc/nginx/conf.d/halo.conf

    開啟之後的內容應該類似

    server {
        listen 80;
    
        server_name example.com www.example.com; # 將 example.com www.example.com 修改為自己的域名
    
        location / {
            proxy_set_header HOST $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
            proxy_pass http://127.0.0.1:8090/; # 如有更改預設的宿主機8090埠,請修改此處為執行選擇的埠
        }
    }

    修改完成之後

    # 檢查配置是否有誤
    sudo nginx -t
    
    # 過載 Nginx 配置
    sudo nginx -s reload

    阿里雲/騰訊雲等雲服務商也可以申請免費的SSL證照並下載,這類證照請查閱相關教程,本文僅介紹通過certbot申請證照並自動安裝。

    1. 安裝 certbot 和 certbot nginx 外掛:

      # 根據自己的系統選擇相應命令
      
      # CentOS 安裝 certbot 以及 certbot nginx 外掛
      sudo yum install certbot -y
      sudo yum install python3-certbot-nginx -y
      
      # Ubuntu 安裝 certbot 以及 certbot nginx 外掛
      sudo apt install certbot
      sudo apt install python3-certbot-nginx
    2. 申請並自動配置證照:

      sudo certbot --nginx

    需要輸入郵箱並按ya同意相關協議,具體請參考輸入命令後的輸出

    1. 自動續約

      這裡申請的免費證照可以免費續期,理論上可以一直免費使用,這裡提供了自動執行續期的命令

      sudo certbot renew --dry-run

到這裡,即完成了所有的步驟,可以直接通過域名進行Halo部落格的訪問。注意,國內服務商註冊的域名大多需要備案,否則無法使用,具體請參考雲服務商的文件。

在設定完反向代理後,必須在部落格的後臺管理介面設定正確的部落格地址,否則可能導致CSS載入不成功、樣式混亂等錯誤。
image-20210907000504142.png

本文轉自:developer.aliyun.com/article/78979...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章