本篇文章更新時間:2024/05/30
如有資訊過時或語誤之處,歡迎使用 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;dAj_v@8R7U]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
其中沒有註解的部分就是照做指令輸入執行的步驟:
從 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 拉~
- Dokku 預設會在
/home/dokku/
使用者目錄下也建立一個 App 的資料夾(這邊就是blog
),裡面會有 Host 上的 Nginx 設定,用來處理對應外網與內網的容器,所以如果要設定 Host 相關資料要到這裡找。- 如果開發過程要操作匯入匯出資料庫等操作,可以使用
dokku mysql:help
這指令來查詢。
後記
這樣的建站服務其實也滿簡單的,甚至可以考慮當作一個標準開發環境建置的規劃。
本來是想用來建立隨手測試的 WordPress 站沙盒服務,但整體來說,建立容器與啟用的速度並不快,作為沙盒服務的體驗還有最佳化空間。
比起從原生 Docker 容器開始處理,最後還有 Nginx 之類的 Reverse Proxy 要處理,難度與複雜度大幅下降,平民(?)許多。