Docker-ComposeでWordPressを立ててみる
docker-compose wordpress
Published: 2015-09-06

まだDocker-Composeでupできたというレベル

wordpressを持ってくる

このコマンドでまずもってくる。けどもしかしてこれrootじゃないとできないのかな。
自分はsudoしてもダメだったのでsudo su - でrootでやった

$ cd /tmp
$ curl https://wordpress.org/latest.tar.gz | tar -xvzf -

wordpressっていうディレクトリができるので、気に入らなければ適当に名前変更する
とりあえずtmpじゃあれなので、移動しておく

# 個人的に/srv/dockerにDocker周りをおいてるのでそこにディレクトリ作る
$ [sudo] mkdir -p /srv/docker
$ mv /tmp/wordpress /srv/docker/wordpress

持ってきた中に設定ファイルがあるのでそれを設定する

  • wp-config.php
$ cd /srv/docker/wordpress
$ cp wp-config-sample.php wp-config.php
$ vi wp-config.php

wp-config.php の一部

  • rootなん?とか、DB名それなん? とかは思うところですが、とりあえずこれで。
    後々出てくるdocker-compose.ymlと相談してください。
define('DB_NAME', 'wordpress');
define('DB_USER', 'root');
define('DB_PASSWORD', 'YOUR_PASSWROD');
define('DB_HOST', 'db:3306');

router.php というものを作っておく(これ必要なのかな…)

router.php

<?php

$root = $_SERVER['DOCUMENT_ROOT'];
chdir($root);
$path = '/'.ltrim(parse_url($_SERVER['REQUEST_URI'])['path'],'/');
set_include_path(get_include_path().':'.__DIR__);
if(file_exists($root.$path))
{
    if(is_dir($root.$path) && substr($path,strlen($path) - 1, 1) !== '/')
        $path = rtrim($path,'/').'/index.php';
    if(strpos($path,'.php') === false) return false;
    else {
        chdir(dirname($root.$path));
        require_once $root.$path;
    }
}else include_once 'index.php';

docker-compose.yml 作って起動

さっきまでと同じパスに、docker-compose.yml を作る

$ cd /srv/docker/wordpress
$ vi docker-compose.yml

docker-compose.yml

ここで、rootとWordPress用のパスワード変えたけど、なんかうまく行かなかったから…
まだ別に公開してるものじゃなく、docker-compose upできたもの…ということで…

  • 40080ポートにしてます。好きな設定で良いのですが、後述のNginxでの設定で利用しますので覚えておいてください
web:
    image: tutum/wordpress:latest
    links:
        - db:mysql
    environment:
        - WORDPRESS_DB_PASSWORD=YOUR_PASSWROD
    ports:
        - "40080:80"
    volumes:
        - .:/code
db:
    image: mysql
    environment:
        - MYSQL_ROOT_PASSWORD=YOUR_PASSWROD
        - MYSQL_DATABASE=wordpress

ここまできたらもうきっと平気。
パーミッションとか言われたら素直にdocker-compose実行権限のあるグループユーザとかでパーミッション上書きしましょう。

$ docker-compose up

ホスト側nginx

他のDockerコンテナを扱ってる時と何も変わらないですが、一応。

$ sudo vi /etc/nginx/sites-available/WP.YOUR_FQDN

/etc/nginx/sites-available/WP.YOUR_FQDN

  • ここで、Docker-Composeで指定したポートを使います
server {
    listen 80;
    listen [::]:80;

    server_name WP.YOUR_FQDN;
    server_tokens off;

    location / {
        proxy_pass    http://127.0.0.1:40080;
    }
}

configのテストをして問題なければリロード

$ cd /etc/nginx/sites-enabled
$ sudo ln -s /etc/nginx/sites-available/WP.YOUR_FQDN

# nginxのConfigテスト
$ sudo nginx -t
$ sudo service nginx reload

あとはブラウザからアクセスしてみると見えるかと。