<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          從零到一快速搭建個人博客網站(域名備案 + https免費證書)

          共 11357字,需瀏覽 23分鐘

           ·

          2021-06-23 08:16


          作者:yangwqonly

          cnblogs.com/winkin/p/14135677.html

          前言

          為什么選擇搭建個人博客?一方面是各個平臺經常下架原創(chuàng)文章,另一個方面是為了熟悉整個建站流程。

          通過搭建個人博客,我們可以自由的發(fā)表文章不用擔心下架,而且可以鍛煉個人的SEO優(yōu)化能力,不管是運維還是運營這塊對個人的技術提升有著很大的幫助。

          本篇文章記錄了網站從零到一的過程,希望你也能根據(jù)本篇文章搭建出屬于自己的網站。大家有疑問可以一起討論。

          下面開始正題。

          環(huán)境介紹

          資源說明
          centosv7.2
          docker快速部署項目環(huán)境
          nginx反向代理,同時配置https證書
          halov1.4.2,開源博客項目
          Let's Encrypt 免費證書配置https

          效果演示

          https://yangwq.cn/

          前置環(huán)境安裝

          Docker安裝

          參考:

          https://www.cnblogs.com/winkin/p/14083574.html

          halo安裝

          準備halo配置文件

          # 下載配置文件到 /home/halo/.halo 目錄
          curl -o /home/halo/.halo/application.yaml --create-dirs https://dl.halo.run/config/application-template.yaml

          修改配置文件,將數(shù)據(jù)庫調整為mysql,默認是h2(可選)

          將上面h2的數(shù)據(jù)庫注釋,并把mysql的配置打開,注意,需要提前在mysql建立數(shù)據(jù)庫 halodb,相關的數(shù)據(jù)庫表halo會自動生成,如果mysql 和 halo都是容器創(chuàng)建的,這里配置的mysqlip應該是mysql容器內部的ip。

          # 查看mysql容器的ip,mysql-prod替換成mysql容器名稱或者容器id
          docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql

          修改后:

          下載并安裝halo

          # 拉取halo鏡像
          docker pull ruibaby/halo

          # 運行halo
          # -p 8090:8090 指定宿主機端口與容器端口映射,這里是將宿主機的8090映射到docker的8090
          # -v /home/halo/.halo:/root/.halo 掛載halo配置文件,我們在上一步下載了配置文件在宿主機的/home/halo/.halo
          docker run --rm -it -d --name halo -p 8090:8090  -v /home/halo/.halo:/root/.halo ruibaby/halo

          ## 查看容器狀態(tài),確認halo是否啟動成功,如果啟動失敗需要檢查下數(shù)據(jù)庫連接
          docker ps

          # 配置防火墻,注意,阿里云需要同時配置安全組8090端口
          # 開放8090端口
          firewall-cmd --permanent --add-port=8090/tcp
          #重啟防火墻(修改配置后要重啟防火墻)
          firewall-cmd --reload

          正常情況應該如下:

          經過上面的步驟創(chuàng)建的halo還不能通過外部ip訪問,我們現(xiàn)在配置一個nginx進行代理

          nginx安裝

          # 下載nginx鏡像
          docker pull nginx
          # 啟動nginx
          docker run -p 80:80 --name nginx -d nginx

          # 我們需要nginx使用我們自定義的配置,最方便的方法將nginx現(xiàn)在有的配置復制一份到宿主機目錄 /home/nginx 
          docker container cp nginx:/etc/nginx /home/nginx

          # 移除我們剛創(chuàng)建的nginx,重新以宿主機配置目錄啟動
          docker stop nginx
          docker rm nginx
          # 編輯 conf.d 下的default.conf 文件,默認轉發(fā)到halo端口,ip地址為本機ip
          location / {
              root   /usr/share/nginx/html;
              index  index.html index.htm;
          }
          改為,10.0.2.5 為本機ip,通過命令 ip addr 查看,端口是halo的端口:
           location / {
               proxy_pass http://10.0.2.5:8090;
           }

          # 重新創(chuàng)建nginx
          docker run -p 80:80 --name nginx \
          -v /home/nginx/logs:/var/log/nginx \
          -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
          -v /home/nginx/conf.d:/etc/nginx/conf.d \
          -d nginx

          # 配置防火墻,注意,阿里云需要同時配置安全組80端口
          # 開放80端口
          firewall-cmd --permanent --add-port=80/tcp
          #重啟防火墻(修改配置后要重啟防火墻)
          firewall-cmd --reload

          # 到這里,我們可以通過ip訪問halo了

          到這一步如果不能使用ip直接訪問,首先確定halo啟動成功沒,然后查看nginx配置是否正確,最后再檢查防火墻和安全組。

          域名及網站備案

          目前我們只能通過ip訪問halo,我們可以通過配置域名進行訪問。

          首先我們得申請一個域名:

          https://wanwang.aliyun.com/domain

          申請完成后進行備案:

          https://beian.aliyun.com/

          備案注意事項:

          • 如果處于異地工作的情況,建議備案地點選擇老家,而且手上要有老家的手機號,如果選擇異地的話,需要你提供臨時居住證之類比較麻煩。
          • 阿里云備案時間在一周左右,一般提交申請會有人找你確認信息,之后按備案流程走就行了。

          配置https

          一般情況證書是需要購買的,但是也有一些平臺提供了免費證書,阿里云也有一年的免費證書,但是阿里云證書只能單個域名使用,如果要通配符證書是需要付費的。而Let’s Encrypt 證書即可以免費申請證書,又支持通配符,是個人開發(fā)者的上選。

          這里我們通過github項目配置免費證書(也可以手動安裝,不過自動安裝比較方便,下面兩種方式都會提到):letencrypt-certbot

          https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au

          使用此項目前我們配置一下前置環(huán)境:certbot 和 git

          安裝git

          yum install git

          安裝certbot

          # 安裝certbot,中間需要輸入y確認
          yum install epel-release
          yum install certbot 
          # 查看版本,如果安裝正常會顯示版本號
          certbot --version

          申請證書

          特別注意的是,這里需要主機把80端口和443端口開放,上面我們已經開放了80端口,這里開放443端口就行了

          # 配置防火墻,注意,阿里云需要同時配置安全組443端口
          # 開放443端口
          firewall-cmd --permanent --add-port=443/tcp
          #重啟防火墻(修改配置后要重啟防火墻)
          firewall-cmd --reload

          重要提示:為避免遇到操作次數(shù)的限制,加入 dry-run 參數(shù),可以避免操作限制,等執(zhí)行無誤后,再進行真實的 renew 操作

          手動安裝證書+手動續(xù)期

          # 申請證書,需要填入你的郵箱和域名, --dry-run 測試使用不會生成證書,我們先用這個命令看是否成功
          certbot certonly --email 你的郵箱@qq.com -d *.域名.cn -d 域名.cn --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory --dry-run
          # 如果沒有錯誤信息,去掉--dry-run真正生成證書
          certbot certonly --email 你的郵箱@qq.com -d *.域名.cn -d 域名.cn --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory

          # 手動續(xù)期
          certbot renew

          安裝過程中,需要確認選項,講一下手動安裝的重點:

          安裝成功后顯示:

          注意:證書90天后過期,我們手動續(xù)期的話比較麻煩,而且每次需要手動去DNS解析列表創(chuàng)建對應的記錄,所以推薦下面的自動續(xù)期方式

          通過apikey 和secret生成證書+自動續(xù)期

          首先獲取api key 和secret:

          https://help.aliyun.com/knowledge_detail/38738.html

          這種方式其實是利用你開放的api key調用阿里云提供的接口,所以保險起見我們創(chuàng)建一個權限很小的用戶就行了。

          流程:

          • 為了安全,我們需要先創(chuàng)建RAM用戶,配置一個權限小的用戶;
          • 給新創(chuàng)建的用戶配置 AliyunDNSFullAccess(管理云解析(DNS)) 的權限;
          • 獲取apikey 和 secret。
          # 新建一個目標,拉取項目
          mkdir /home/certbot
          cd /home/certbot
          git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
          cd certbot-letencrypt-wildcardcertificates-alydns-au
          chmod 0777 au.sh

          # 編輯au.sh,加入我們上面申請的key
          vi au.sh

          #填寫阿里云的AccessKey ID及AccessKey Secret
          #如何申請見https://help.aliyun.com/knowledge_detail/38738.html
          ALY_KEY=""
          ALY_TOKEN=""

          # 運行命令,加上--dry-run 測試,如果沒問題去掉 --dry-run 執(zhí)行,腳本目錄就是我們上面創(chuàng)建的 /home/certbot/certbot-letencrypt-wildcardcertificates-alydns-au
          certbot certonly  -d *.yangwq.cn -d yangwq.cn --manual --preferred-challenges dns-01 --email [email protected]  --manual-auth-hook "/腳本目錄/au.sh python aly add" --manual-cleanup-hook "/腳本目錄/au.sh python aly clean" --dry-run;

          # 配置自動續(xù)期,使用crontab實現(xiàn)
          vi /etc/crontab

          # 加入以下命令,這個命令就是每周執(zhí)行一次腳本,如果需要續(xù)期就會自動更新
          0 0 * * 0 root certbot renew --manual --preferred-challenges dns --deploy-hook  "docker restart nginx" --manual-auth-hook "/腳本目錄/au.sh python aly add" --manual-cleanup-hook "/腳本目錄/au.sh python aly clean" --manual-public-ip-logging-ok;

          到這一步我們證書生成成功了,同樣存放在 /etc/letsencrypt/live/yangwq.cn/ 目錄,注意這里的文件是軟鏈接,我們實際上的文件在 etc/letsencrypt/archive/yangwq.cn 目錄

          nginx安裝證書

          # 編輯conf.d 下的default.conf
          server {
              listen       80 default;
              server_name yangwq.cn;
           # http自動轉https
              rewrite ^(.*)$  https://$host$1 permanent;
            
          }

          server {
              listen 443 ssl;
              server_name yangwq.cn;
              
              # 配置站點證書文件地址
              ssl_certificate  /etc/letsencrypt/archive/yangwq.cn/fullchain1.pem;
              # 配置證書私鑰
              ssl_certificate_key  /etc/letsencrypt/archive/yangwq.cn/privkey1.pem;
           
              
              # 配置服務器可使用的加密算法
              ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

              # 指定服務器密碼算法在優(yōu)先于客戶端密碼算法時,使用 SSLv3 和 TLS 協(xié)議
              ssl_prefer_server_ciphers  on;
              
              # ssl 版本 可用 SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2 
              # ie6 只支持 SSLv2,SSLv3 但是存在安全問題, 故不支持
              ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
              
              # 配置 TLS 握手后生成的 session 緩存空間大小 1m 大約能存儲 4000 個 session
              ssl_session_cache          shared:SSL:50m;
              # session 超時時間
              ssl_session_timeout        1d;
              
              # 負載均衡時使用 此處暫時關閉 詳情見 https://imququ.com/post/optimize-tls-handshake.html 
              # 1.5.9 及以上支持
              ssl_session_tickets off;
              
              # 瀏覽器可能會在建立 TLS 連接時在線驗證證書有效性,從而阻塞 TLS 握手,拖慢整體速度。OCSP stapling 是一種優(yōu)化措施,服務端通過它可以在證書鏈中封裝證書頒發(fā)機構的 OCSP(Online Certificate Status Protocol)響應,從而讓瀏覽器跳過在線查詢。服務端獲取 OCSP 一方面更快(因為服務端一般有更好的網絡環(huán)境),另一方面可以更好地緩存 以上內容來自 https://imququ.com/post/my-nginx-conf-for-wpo.html
              # 1.3.7 及以上支持
              ssl_stapling               on;
              ssl_stapling_verify        on;
              # 根證書 + 中間證書
              ssl_trusted_certificate    /etc/letsencrypt/archive/yangwq.cn/fullchain1.pem;
              
              # HSTS 可以告訴瀏覽器,在指定的 max-age 內,始終通過 HTTPS 訪問該域名。即使用戶自己輸入 HTTP 的地址,或者點擊了 HTTP 鏈接,瀏覽器也會在本地替換為 HTTPS 再發(fā)送請求 相關配置見 https://imququ.com/post/sth-about-switch-to-https.html
              add_header Strict-Transport-Security max-age=60;
              
              # 在此填寫原本 http 協(xié)議中的配置
              location / {                           # 定義首頁索引目錄和名稱
                  proxy_pass http://172.24.35.32:8080;
              }
            error_page   500 502 503 504  /50x.html;
              location = /50x.html {                #重定向錯誤頁面到 /50x.html
                  root   /usr/share/nginx/html;
              }

          }

          注意:將上面yangwq.cn相關的路徑換成你的域名路徑。

          # 為了讓nginx能訪問到我們剛生成的證書,需要重新掛載證書路徑到nginx
          docker stop nginx
          docker rm nginx
          # 運行nginx,此處加入了443端口和證書路徑
          docker run -p 80:80 -p 443:443 --name nginx \
          -v /home/nginx/logs:/var/log//nginx \
          -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf \
          -v /home/nginx/conf.d:/etc/nginx/conf.d \
          -v /etc/letsencrypt/archive/:/etc/letsencrypt/archive/ \
          -d nginx

          此時我們就可以通過https域名訪問項目了,而且這個時候也可以新建二級域名訪問項目的(二級域名同樣是https)。

          總結

          實際部署過程中博主是遇到很多問題的,比如項目訪問不了、https證書失敗、二級域名不生效等。本篇文章是經過實踐后得出的流程,如果中間有碰到問題可以在下方評論我們可以一起解決。


          瀏覽 62
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.艹| 国产97色在线 | 亚洲 | 天天综合网永久入口 | 毛片AV网址 | 日本親子亂子偷XXXX50 |