尝试使用Docker在WordPress项目中的经历

首先

从现在开始,我决定在充满热情的文章中加入公司名称。

先不管那个,我们公司接到了一个 WordPress 的项目。
在我加入公司后,很少有做 WordPress 或者 Movable Type 的工作,但作为前端开发者,我还是想尝试一次,所以我决定去做。

事件的概况

    • wordpress を使った会員制のサイトをつくりたい

 

    別途 rails を用いて会員の管理は行う

所以,如果用图表来表示的话

test.jpg

感觉就像那样。

PHP和Rails的合作,再加上使用Node进行CSS和JavaScript的编写,使得前端成为了一种令人赞叹的构架。

被分配的人

    • フロントエンドエンジニア


PHP 歴ほぼない
昔 wordpress 2~3 系ぐらいのときに少し触った程度
mac

バックエンドエンジニア

私と同い年
rails とか node とかやっている
docker 導入は初めて
mac

他 フロントエンドアシスト、PM など

因此,尽管怀有不安,但仍然决心挑战这个项目。

Docker 导入的经过

WordPress主题开发所面临的担忧

这里所说的不安,是指个人的感受。

    • 実環境(Production)との誤差をなくす

 

    • テーマファイルの同期

 

    • DBの同期

 

    • 手元の環境を汚さない

 

    別案件との両立性

我认为这次DB的同步是一个非常重要的主题。这次的前端开发不仅有我一个人,那个他对WordPress的开发也不是很熟悉。

在WordPress主题构建中的选择项

总之,为了构建主题,还有很多其他选择。

    • MAMP

およそ個人で製作をやられている方はこれを使用している方が多いのでは

DBの同期,実環境との誤差をなくす らへんで選択肢から除外しました。あと、せっかくの機会に MAMP でやるのはもったいない気が、、、

VCCW

dockerと同じく VM 上に wordpress 環境を構築してくれる。
環境のカスタマイズが非常にやりずらいため選択肢から除外

手元(mac)で wordpress 環境 をつくる

以外とこれが一番よかったのかもしれない(他の会社ではこれでも十分とのこと、、、くっそー)

手元の環境を汚さないという点でハナから選択肢に入ってなかったのですが、

无论如何,由于这些选项被排除,所以我们开始使用docker构建WordPress环境。

关于 Docker

Kobito.6EpZlt.png

以下是对于Docker的介绍及环境配置流程,因为有很多比我解释得更易懂的网站,就省略了有关Docker技术概要的解释。

统一主机环境

在所谓的docker-machine create创建的机器(可以称为主机吗?)中,我们可以部分指定环境。
例如

docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "192.168.123.1/24" $APP_NAME

とすれば、ホストの IP を 192.168.123.(初期は100)で統一できます。
すると、自分の環境と他人の環境が同じになるので ローカル環境同士の DBの同期 が楽ですね。

统一安装环境

当准备好主机后,我们将创建容器。Docker提供了WordPress官方镜像文件,因此只需执行此操作便可完成环境设置。太棒了。

关于PHP的扩展

尽管如此,提供的镜像文件并不支持使用 mb_string 等函数。
在这种情况下,我们需要准备一个 docker 文件并进行补充。
由于 docker 中也准备了一个名为 docker-php-ext-install 的镜像文件,我们可以利用它来解决问题。

我会为您准备一个用于整个流程的shell脚本。

首先是文件夹结构(尽管还有其他各种形式,但这是最基本的单位)。

.
├── Makefile  // こいつに bin/bootstrap を叩く関数を用意してあげると初心者に優しい
│
├── bin
│   └── bootstrap // 環境構築の一連の処理を書く
│
├── docker-compose.yml // image ファイルの設定の準備
│
├── docker-images
│   └── wordpress_custom_php // PHP extention 系の設定を書く
│     └── Dockerfile
│
└── wp  //この中のフォルダが VM 上で読み込まれるファイル、この中をいじれば wordpress の表示が変わる

这是如何的。

引导程序/ 初始化程序

APP_NAME=hoge

docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "192.168.123.1/24" $APP_NAME
docker-machine start $APP_NAME
eval "$(docker-machine env $APP_NAME)"
docker-compose up -d
open http://`docker-machine ip $APP_NAME`

ホストを作って docker-compose.yml に書かれている処理を実行するという文章。
おまけで 最後に 見れるかどうかチェックします。
こんだけで wordpress 環境ができます。最高

docker-compose.yml 文件

wordpress:
  container_name: wordpress
  build: docker-images/wordpress_custom_php
  links:
    - db:mysql
  ports:
    - "80:80"
  volumes:
    - ./wp:/var/www/html

db:
  image: mysql
  container_name: db
  ports:
    - "3306:3306"
  environment:
    MYSQL_ROOT_PASSWORD: 'password'

これがVMにインストールされる環境です。
ほぼ、公式が用意してくれているファイルのままです(今回 php-extentionをインストールするので buidl プロパティがあります。)、詳しい設定は 元ファイルを読みましょう。
ちなみに volumes には wp というフォルダを設定しますが、
ここに同名のフォルダがあるときは、上書きされないので、wpフォルダ をgitで共有しておけば 立ち上がり同時にほぼ全ての環境が同期できます(DB以外)

wordpress の設定に build という項目がありますが、これに Dockerfile のあるフォルダを指定すると、
そのスクリプトがビルド時に実行される具合です

docker-images/wordpress_custom_php/Dockerfile的中文翻译(“只需要一种选项”):

FROM wordpress:4.3.1-apache
RUN docker-php-ext-install mbstring

这是WordPress容器的内容。
在执行官方发布的WordPress处理之后,我们安装了mbstring。

构建文件

说这句话

make bootstrap

可以将其修改为可以在中国本地运行。

数据库的同步

好吧,對於這個問題,我並不是專家,但基本上就是從VM中的數據庫導出數據,然後再恢復即可。

在这里,我们可以在之前的 docker-compose.yml 文件中的 db 部分设置 volumes,以便轻松进行数据交换非常方便。

使用 sed 命令进行替换

如果不更改数据库的域名等,就无法看到像常见谈论的那样处理这个问题。

sed -i '.tmp' -e "s|$0|$1|g" dump.sql

准备使这个能在不考虑Makefile的情况下使用

如果我们将预览环境称为开发环境(本地),将暂存环境称为开发环境,那就方便了。此外,如果同时进行转储处理,就不会有任何问题了。

以下是总结以及利弊的内容。

好了,这样就完成了。

    • docker で wp 環境を構築することができた

 

    Makefile に全ての処理をラップさせることで 導入障壁を限りなく低くした

在这个方面,可能是这样吧。

现在,我们来总结一下优点和缺点。

优点

git clone して make bootstrap で環境構築
何か大きな変更を加えた場合も一旦環境を捨てて再構築してもらえればok
手元も汚れない
ソース読むと shell script の理解が進むよ

弊端

    • 重い

VM で動かしているのでやっぱし重い。PCの機嫌にもよる

一人だと無理ぽ

もちろん一人ならこんな構成でやらないけどバックエンドを普段やっているひとが一人はいないと諸々辛くなりがち

学習コスト

こういう風にまとめたりしないと辛い
ともあれ、少しは docker の公式サイトとかを読まないといけないかな
あとは使用するイメージファイルを理解しないと怖いかも

謎のバグ

まだまだ docker は発展途上 vertual box のバージョンに左右されることもあるし、つらい

嗯,大概就是这样吧。这次只是讨论环境,没有涉及WordPress的构建本身。可以说是好是坏的话,项目进展得很顺利,这一点很好,但也许没有必要花那么多精力在这样的环境上。我这么想了。

无论如何,如果有在尝试相似事情的人,请务必共享一下。

感谢

感谢您读到这里!我认为Docker是一项很酷的技术,但考虑到性能和操作体验,我觉得未来还有很大的期待空间。
关于如何在前端有效地控制项目状态,这就是我们要讨论的内容。

请给我一份工作。

bannerAds