[Dokku] 架設 Docker 雲端服務與安裝 WordPress 的方法

本篇文章更新時間:2022/10/25
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


剛好最近 Heroku 也發新聞 Heroku’s Next Chapter 表示不再提供免費的方案了。

Dokku 號稱是 Heroku 的開源版本,可以自己架設在本機或雲端主機上來操作 Docker 容器。

Dokku 的安裝方式很簡單,但有要求的作業系統環境

Ubuntu 18.04/20.04/22.04
Debian 10+ x64

上述是寫文當下的需求。至少 Ubuntu 22.04 也是最新版本了!除此之外,其他的相容性都滿高,甚至主機的記憶體需求 512MB 的最小雲端 VPS 規格就可以(建議加 SWAP 空間),實在是很輕量。

安裝 Dokku

更新 VPS 的 hostname -> cloud.mxp.tw,系統更新到最新

apt update && apt upgrade -y && apt remove -y && apt autoremove -y && apt clean -y && apt autoclean -y && apt update && reboot

開始安裝。寫文當前版本:v0.28.4

wget https://raw.githubusercontent.com/dokku/dokku/master/bootstrap.sh;
sudo DOKKU_BRANCH=v0.28.4 bash bootstrap.sh

上述指令自動安裝完後,設定一下環境

dokku domains:set-global cloud.mxp.tw

不特別設定過網域的話,接下來開的 App 服務都會用 APP_NAME.cloud.mxp.tw 來顯示與操作。

接下來是新增你的 Public key 來對 Dokku 操作,如果都在VPS 上面玩的話,也可以直接使用 ssh-keygen -b 4096 這指令對當前使用者的 ~/.ssh 增加金鑰對。

把這個使用者加入管理腳色:

cat ~/.ssh/id_rsa.pub | dokku ssh-keys:add admin

這樣就一切準備就緒~

如果服務會對外公開,那網域部分的設定要加上兩個 A 紀錄: cloud.mxp.tw A -> VPS IP*.cloud.mxp.tw A -> VPS IP 這樣建立服務完成後的其他網域也都可以正確指向。

使用 Dokku 建立 WordPress 網站

首先把一些常用容器「外掛」裝起來:

dokku plugin:install https://github.com/dokku/dokku-mysql.git mysql
dokku plugin:install https://github.com/dokku/dokku-mariadb.git mariadb
dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
dokku config:set --global DOKKU_LETSENCRYPT_EMAIL=註冊信箱
dokku letsencrypt:cron-job --add

然後下載建立範本:

git clone https://github.com/dokku-community/dokku-wordpress

這個範本使用的 Heroku buildpacks 與 WordPress 版本已經過時,所以指令要下成

make build APP_NAME=blog SERVER_NAME=cloud.mxp.twm WORDPRESS_VERSION=6.0.3 BUILDPACK_VERSION=v225

buildpack 版本可以這邊查:heroku-buildpack-php

然後會看到下面的畫面輸出:

# creating the wordpress repo
Cloning into 'blog'...
remote: Enumerating objects: 331880, done.
remote: Counting objects: 100% (54/54), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 331880 (delta 33), reused 30 (delta 30), pack-reused 331826
Receiving objects: 100% (331880/331880), 291.32 MiB | 10.55 MiB/s, done.
Resolving deltas: 100% (268004/268004), done.
Updating files: 100% (3437/3437), done.
# adding wp-config.php from gist
# adding .env file to configure buildpack
# ensuring our composer.json loads with php 5.6 and loads the mysql extension
# setting the correct dokku remote for your app and server combination
# retrieving potential salts and writing them to /tmp/wp-salts
# run the following commands on the server to setup the app:

dokku apps:create blog

# setup plugins persistent storage

mkdir -p /var/lib/dokku/data/storage/blog-plugins
chown 32767:32767 /var/lib/dokku/data/storage/blog-plugins
dokku storage:mount blog /var/lib/dokku/data/storage/blog-plugins:/app/wp-content/plugins

# setup upload persistent storage

mkdir -p /var/lib/dokku/data/storage/blog-uploads
chown 32767:32767 /var/lib/dokku/data/storage/blog-uploads
dokku storage:mount blog /var/lib/dokku/data/storage/blog-uploads:/app/wp-content/uploads

# setup languages persistent storage

mkdir -p /var/lib/dokku/data/storage/blog-languages
chown 32767:32767 /var/lib/dokku/data/storage/blog-languages
dokku storage:mount blog /var/lib/dokku/data/storage/blog-languages:/app/wp-content/languages

# setup your mysql database and link it to your app
# if you're using MariaDB, replace mysql with mariadb

export MYSQL_IMAGE_VERSION="5.6"
dokku mysql:create blog-database
dokku mysql:link blog-database blog

# you will also need to set the proper environment variables for keys and salts
# the following were generated using the wordpress salt api: https://api.wordpress.org/secret-key/1.1/salt/
# and use the following commands to set them up:

dokku config:set blog AUTH_KEY='~3.doJh}AS8y9*U;[email protected]]Ye?>M&c$}Rz|>4xLngh^d7pE<%,*#14)O.FG%'
dokku config:set blog SECURE_AUTH_KEY='mqe4Z=g_a.~|8#v.F{ca#/lRPx9O`7n<lm3s!x%Ww_K2[GwhYB,G7L2E6+*+jR!'
dokku config:set blog LOGGED_IN_KEY='[email protected]/)KdL1|o5?e/+4GvBI>yzg_%hT<0z-1vzBbS:~`?wN;v1#lr<*2n'
dokku config:set blog NONCE_KEY='wGQAHut=,r,[email protected]><lr|@r/anh&0*6aW)iu8bw1pTcT(p)#0Rh2dGcj<:aR,'
dokku config:set blog AUTH_SALT='+6$Q*~;ZROi#[email protected]$]3zVzUx9qJ>n+*eI[w1RcKbnCLyU/pW6,ZRWa)EN,B|y~Ym-M'
dokku config:set blog SECURE_AUTH_SALT='[email protected]&.F~uL7[Xig|r(er+j62na?>-xkK;$%BhE)-izMIiA1}0Rq9xO,:5G'
dokku config:set blog LOGGED_IN_SALT='k&@+M~o}9-ARtt9=F!pnl!sF*U]:}/C4-U=AWEG=A9#0ME(H{7c/F+OOWHwJL|'
dokku config:set blog NONCE_SALT='_An~>7*@1?0H=1q/jK^{-KKQS_5^.c5=K~+G2jt=O#A+OU6C3Y+V,^pmr7:b23'

# now, on your local machine, change directory to your new wordpress app, and push it up

cd blog
git push dokku master

其中沒有註解的部分就是照做指令輸入執行的步驟:

dokku apps:create blog 開始,建立一個 App 叫 blog,後面就是建立一個儲存資料的空間來放 WordPress 的檔案。

但接下來要注意,這邊指定使用的資料庫 5.6 也滿舊了,可以註解 export MYSQL_IMAGE_VERSION="5.6" 這行不執行,使用當前最新版本就好。

最後就是輸入 cd blog && git push dokku master 來啟動服務,都跑完指令後會輸出一個網址: http://blog.cloud.mxp.tw

要附加上 SSL 憑證,還要再補上一個指令: dokku letsencrypt:enable blog,執行完畢就可以瀏覽開始玩 WordPress 拉~

  1. Dokku 預設會在 /home/dokku/ 使用者目錄下也建立一個 App 的資料夾(這邊就是 blog),裡面會有 Host 上的 Nginx 設定,用來處理對應外網與內網的容器,所以如果要設定 Host 相關資料要到這裡找。
  2. 如果開發過程要操作匯入匯出資料庫等操作,可以使用 dokku mysql:help 這指令來查詢。

後記

這樣的建站服務其實也滿簡單的,甚至可以考慮當作一個標準開發環境建置的規劃。

本來是想用來建立隨手測試的 WordPress 站沙盒服務,但整體來說,建立容器與啟用的速度並不快,作為沙盒服務的體驗還有最佳化空間。

比起從原生 Docker 容器開始處理,最後還有 Nginx 之類的 Reserve Proxy 要處理,難度與複雜度大幅下降,平民(?)許多。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____34%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

文章
Filter

Filter Search Results