架设 Docker 云端服务与安装 WordPress 的方法

刚好最近 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;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<lm3s!x%Ww_K2[GwhYB,G7L2E6+*+jR!'
dokku config:set blog LOGGED_IN_KEY='xi~Hpjr@x9l/)KdL1|o5?e/+4GvBI>yzg_%hT<0z-1vzBbS:~`?wN;v1#lr<*2n'
dokku config:set blog NONCE_KEY='wGQAHut=,r,pVf@KMo><lr|@r/anh&0*6aW)iu8bw1pTcT(p)#0Rh2dGcj<:aR,'
dokku config:set blog AUTH_SALT='+6$Q*~;ZROi#f@$]3zVzUx9qJ>n+*eI[w1RcKbnCLyU/pW6,ZRWa)EN,B|y~Ym-M'
dokku config:set blog SECURE_AUTH_SALT='i5X10@clke&.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

  1. Dokku 默认会在用户目录下也建立一个 App 的文件夹(这边就是),里面会有 Host 上的 Nginx 设置,用来处理对应外网与内网的容器,所以如果要设定 Host 相关资料要到这里找。/home/dokku/blog
  2. 如果开发过程要操作导入导出数据库等操作,可以使用这指令来查询。dokku mysql:help

后记

这样的建站服务其实也满简单的,甚至可以考虑当作一个标准开发环境建置的规划。

本来是想用来建立随手测试的 WordPress 站沙盒服务,但整体来说,建立容器与启用的速度并不快,作为沙盒服务的体验还有优化空间。

比起从原生 Docker 容器开始处理,最后还有 Nginx 之类的 Reserve Proxy 要处理,难度与复杂度大幅下降,平民(? )许多。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注