GoDaddy 域名 + Linode 主機商 + Https 憑證 + 自動更新

Stephen Chen
8 min readMar 28, 2020

--

想要有一個網站有很多種方式,Google “架網站” 會有很多服務都可以完成這個目的,但身為一個開發人員就是執著想走一遍流程。

首先是想要有一個有域名的網站其實蠻麻煩的,首先你要有域名商 + 主機商這邊域名商會以 GoDaddy 為主,主機商以 Linode 為主。

你可以找任何廠商來搭配,域名商我沒研究哪個比較好,主機商選 Linode 是因為便宜,只需要5 美元。

那就開始拉,在這之前必須先確認註冊了 GoDaddy 跟 Linode 的帳號,並且在 Godaddy 購買了域名,以及在 Linodo 上創建了一台主機,主機本篇將使用 Ubuntu 18.04 。

  1. 首先先創立一台主機,創建之後會需要等一段時間

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 個

在 GoDaddy Domain 的頁面,有個 Nameservers 的 section 我們這邊選用 custom 到 Linode nameservers

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
看到 success 就對了

接著到 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 的問題了

Reference

Linode Office Domain Manager

Https tutorial on ubuntu

Install Apache2 Web Server

Certbot-auto

--

--