GoDaddy 域名 + Linode 主機商 + Https 憑證 + 自動更新
想要有一個網站有很多種方式,Google “架網站” 會有很多服務都可以完成這個目的,但身為一個開發人員就是執著想走一遍流程。
首先是想要有一個有域名的網站其實蠻麻煩的,首先你要有域名商 + 主機商這邊域名商會以 GoDaddy 為主,主機商以 Linode 為主。
你可以找任何廠商來搭配,域名商我沒研究哪個比較好,主機商選 Linode 是因為便宜,只需要5 美元。
那就開始拉,在這之前必須先確認註冊了 GoDaddy 跟 Linode 的帳號,並且在 Godaddy 購買了域名,以及在 Linodo 上創建了一台主機,主機本篇將使用 Ubuntu 18.04 。
- 首先先創立一台主機,創建之後會需要等一段時間
2. 主機創立之後,瀏覽下,可以發現 Linode 已經預設了一組 Domain
3. 接著透過 ssh 登入主機安裝 Web Server
4. 首先更新系統,
/// apt 是 server 的套件管理工具
sudo apt update
接著安裝 git, curl, wget, zip, unzip
/// 使用 -y 自動回答所有等下會出現的問題
sudo apt install -y git curl wget zip unzip
安裝 Apache
sudo apt install apache2
透過 systemctl 確認一下 Apache 是否安裝成功,按 q 鍵可退出。
至於 systemctl 是一隻用來管理 systemd 的指令服務,那 systemd 是什麼呢?
可以右轉鳥哥的詳細介紹
sudo systemctl status apache2
透過 ufw 檢查一下防火牆,ufw aka ( Uncomplicated Firewall ) 不複雜的防火牆縮寫,有興趣可以參考這篇
sudo ufw allow in "Apache Full"
沒問題會出現
接著還記得剛剛 Linode 配給你的域名嗎?
打開 Incognito mode,訪問看看,如果出現這樣代表成功,我個人私心推薦強烈看一下這裏
5. 接著到 GoDaddy,我這邊已經買了兩個了,如下被紅的兩條
轉到 Linode Domains 的頁面輸入買好的域名 [ 或使用 Cloudflare ]
進到細節頁面的時候會看到一堆 DNS Resource Record ( RR )
你可以把 DNS 想成是一本電話簿,RR 就是電話簿上的分類,RR 目前有超多種,此篇只會使用 A/AAAA Record。
而 A/AAAA Record 分別對應到 32 bit 的 ipv4 以及 128 bit 的 ipv6,32 跟 128 的關係所以是 A 跟 AAAA。推薦這影片可以有更細節的解說
進入正題,首先注意到 NS Record 上的 Name Server ,因為你是在 GoDaddy 買的域名,所以這等等會需要“被”輸入到 GoDaddy 上。
然後 A/AAAA Record 需要加入 www 以及 IP 是剛剛創建主機的 IP。
轉到 GoDaddy 域名細節的畫面,加入上面 NS Record 下的 5 個
6. 以上完成網頁版的設定之後,接著回到 Apache2 上設定網站囉~
這邊不在細說目錄結構,上方的 Apache2 其實已經講得很清楚了
首先到指定的路徑
cd /etc/apache2/sites-available
複製一份默認的 conf 檔案取名為 my-domain.conf,名字建議跟你域名一樣方便之後查找
cp 000-default.conf my-domain.conf
使用 vim 編輯器編輯,也可以使用任何編輯器 Ex: nano
vim my-domain.conf
把你剛買的域名輸入進去,儲存且離開
由於上面只是設定檔而已,你還得手動開啟 enable
這次我們將使用 a2ensite,不多解釋這是幹嘛的,因為名字就已經說明了一切 a2 + en + site
然後他的兄弟 a2dissite,也不多解釋 a2 + dis+ site
sudo a2ensite my-domain.conf
這次使用 apache2ctl 驗證一下有沒有打錯字
這次名字有點難猜,細看就是 apache2 + ctl,就是 Apache HTTP server control interface
sudo apache2ctl configtest
重啟
systemctl reload apache2
大致上完成了,接著可以靜靜等待一陣子,根據官方說明必須要等待 30 分鐘以上,我是沒去實測,剛好吃飯時間到了。
7. 設定 Https
確認上面都沒問題之後(測試是否你買的域名可以正確的 render),接著要讓 http 變成 https 。
其實就是加上一個憑證,憑證可以是自己簽名,或者透過第三方機構發行 Certificate Authority (CA)。 這邊將使用免費的 Let’s Encrypt 來當做我們 Server 的憑證。話說有個套件叫 Certbot,Cert + bot 看這樣的命名就知道他在幹嘛了吧。只需透過幾個簡單的安裝跟設定就可以變成 http + s。
首先安裝
sudo add-apt-repository ppa:certbot/certbot
再來安裝 Certbot 的 Apache package
sudo apt install python-certbot-apache
[ 2020–07–30 更新 ]
在 Ubuntu 20.04 LTS
sudo apt install python3-certbot-apache
接著要來指定哪個域名要憑證
sudo certbot --apache -d your-domain.com -d www.your-domain.com
然後會有一連串問答
比較值得注意的是下面這個,看你要不要當使用者使用 http 的時候,會自動跳轉到 https 的協定,我是選 2 ,不過之後也可以修正,不用太擔心
好了之後在 /etc/apache2/sites-available 底下會多一個 conf 檔案
然後測試一下是否可以更新憑證,透過 — dry-run 來測試更新,但不會真的更新
sudo certbot renew --dry-run
接著到 browser ,試看看,看到鎖頭代表成功了
8. 自動更新憑證
首先安裝 certbot-auto
wget https://dl.eff.org/certbot-auto
移到全局
sudo mv certbot-auto /usr/local/bin/certbot-auto
改變 owner 變成 root
sudo chown root /usr/local/bin/certbot-auto
給予 0755 權限
sudo chmod 0755 /usr/local/bin/certbot-auto
試看看
/usr/local/bin/certbot-auto --help
順便到 cronjob 看一下,他已經自動幫你寫進去了,默認是每隔 12 小時執行一次
vim /etc/cron.d/certbot
這樣流程就走完,可以不用擔心憑證過期或者被 revoke 的問題了