刚好最近 Heroku 也发新闻Heroku's Next Chapter表示不再提供免费的方案了。
Dokku号称是 Heroku 的开源版本,可以自己架设在本机或云端主机上来操作 Docker 容器。
Dokku 的安装方式很简单,但有要求的操作系统环境
Ubuntu 18.04/20.04/22.04 Debian 10+ x64
上述是写文当下的需求。 至少也是最新版本了! 除此之外,其他的兼容性都满高,甚至主机的内存需求 512MB 的最小云端 VPS 规格就可以(建议加 SWAP 空间),实在是很轻量。Ubuntu 22.04
安装 Dokku
更新 VPS 的 -> ,系統更新到最新hostnamecloud.wpmore.cn
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
其中没有注释的部分就是照做命令输入执行的步骤:
从开始,建立一个App叫blog,后面就是建立一个储存数据的空间来放WordPress的档案。dokku apps:create blog
但接下来要注意,这边指定使用的数据库也满旧了,可以注解这行不执行,使用当前最新版本就好。5.6 export MYSQL_IMAGE_VERSION="5.6"
最后就是输入来启动服务,都跑完指令后会输出一个网址:。cd blog && git push dokku masterhttp://blog.cloud.mxp.tw
要附加上 SSL 凭证,还要再补上一个指令:,执行完毕就可以浏览开始玩 WordPress 拉~dokku letsencrypt:enable blog
- Dokku 默认会在用户目录下也建立一个 App 的文件夹(这边就是),里面会有 Host 上的 Nginx 设置,用来处理对应外网与内网的容器,所以如果要设定 Host 相关资料要到这里找。
/home/dokku/blog
- 如果开发过程要操作导入导出数据库等操作,可以使用这指令来查询。
dokku mysql:help
后记
这样的建站服务其实也满简单的,甚至可以考虑当作一个标准开发环境建置的规划。
本来是想用来建立随手测试的 WordPress 站沙盒服务,但整体来说,建立容器与启用的速度并不快,作为沙盒服务的体验还有优化空间。
比起从原生 Docker 容器开始处理,最后还有 Nginx 之类的 Reserve Proxy 要处理,难度与复杂度大幅下降,平民(? )许多。