前言廢話
大家多少都有聽過 HackMD 吧!其方便於只需使用 Markdown 語法即可撰寫出一篇篇好看的文章。但你可曾想過自己架設一個嗎?
CodiMD 就是開源版的 HackMD,由 HackMD 自行維護,你可以在 這裡 找到他的原始碼。而類似的還有另一款名為 HedgeDoc,一樣是開源版本,我一樣將連結放在 這裡。
不過 HedgeDoc 不是本篇重點,因此我就不細講了,有興趣的可以自己去看看哦!
安裝 CodiMD
首先,先更新一下系統
sudo apt-get -y update && sudo apt-get -y upgrade
安裝 docker-compose
sudo apt-get install -y docker-compose
接著,可以建立一個資料夾,我們在資料夾裡面,建立一個名為 docker-compose.yml
的檔案
sudo mkdir codimd && cd codimd
sudo vim docker-compose.yml
在內文貼上以下文字,並修改你的資料庫帳號及密碼(注意,以下是截稿前的配置,若想找最新的配置,可以在 這裡 找到)
version: "3"
services:
database:
image: postgres:11.6-alpine
environment:
- POSTGRES_USER=codimd
- POSTGRES_PASSWORD=change_password
- POSTGRES_DB=codimd
volumes:
- "database-data:/var/lib/postgresql/data"
restart: always
codimd:
image: hackmdio/hackmd:2.4.2
environment:
- CMD_DB_URL=postgres://codimd:change_password@database/codimd
- CMD_USECDN=false
depends_on:
- database
ports:
- "3000:3000"
volumes:
- upload-data:/home/hackmd/app/public/uploads
restart: always
volumes:
database-data: {}
upload-data: {}
存檔離開後,我們執行他。
sudo docker-compose up -d
這時候,你的機器應該會下載檔案直到完成,你應該就可以在瀏覽器打開 <IP位址>:3000
看到網站囉!
遇到的問題及解答
關閉帳號註冊
若你希望服務不開放註冊,只讓自己用的話,你可以在初次註冊帳號結束後,編輯 docker-compose.yml
我們可以在 codimd 區塊的 environment 底下新增
- CMD_ALLOW_ANONYMOUS=false
- CMD_ALLOW_EMAIL_REGISTER=false
存檔後,使用 docker-compose down
將服務下線,並使用 docker-compose up -d
啟動服務。現在,你應該就不會看到註冊按鈕囉!
Docker 無法用防火牆管理
在筆記的當下,我正為這台機器使用 ufw 當作防火牆,根據上面我們的設定,我們將 CodiMD 設定在 Port 3000,但 ufw 卻無法控制他,即便已在 ufw 禁止這個 Port 的連入,我還是能從外面訪問他。
經過一番的爬文,我找到了一個解決方案:我們編輯 docker-compose.yml
,並修改 codimd 區塊裡的 ports
# 刪除
- "3000:3000"
# 新增
- "127.0.0.1:3000:3000"
接著使用 docker-compose down
將服務下線,並使用 docker-compose up -d
啟動服務。現在,你應該就只能在 localhost 訪問到他囉。那你說,這樣外網就訪問不到啦,我將在下一個小節提到。
使用 Nginx 代理
通常,雖然我們可以直接在服務上開 Port 訪問他,但大部分人應該更偏好使用正規的網頁伺服器來進行管理。因此,本節將使用 Nginx 為例,來代理 CodiMD。
首先,先安裝 Nginx
sudo apt-get install -y nginx
進入 /etc/nginx/sites-enabled/
並新增一個檔案叫 codimd
cd /etc/nginx/sites-enabled/ && sudo vim codimd
貼上以下內容,並適當的更新內容,例如:網域名稱、代理的 Port (若你有更改)
server {
listen 80;
root /var/www/html;
server_name test.example.com;
location / {
proxy_pass http://localhost:3000/;
}
}
接著重啟 Nginx
sudo systemctl restart nginx
若你已經在 DNS 綁上網域了,那你現在應該可以使用這個網域訪問到 CodiMD 囉!
結語
這篇文章是給想要自行架設此平台的人看啦。但要是你對這樣的需求不高,其實 HackMD 就真的很好用了啦!