紫の開発日記。

同人サークルサイトを運営するにあたっての作業内容等を書きます。

【第4回】Docker上のWordpressの日本語化 & ダッシュボードからの更新

このシリーズの概略については、こちら↓をお読みください。
yukari-n-u.hatenablog.com

これは私個人の備忘録なので、内容については保証しかねます。
ただ、間違っている箇所があれば教えいただけると嬉しいです。

環境

ConoHa VPS
CentOS 7.7.1908
Docker 19.03.5
Docker-compose 1.25.0

症状

  • Docker上でWordpressを起動したら、他の解説サイトのように言語選択画面にならず、いきなりアカウント作成画面に進まされた。
  • 管理画面上から言語を変更しようとしても、英語以外存在しない
  • Wordpressのコンテナに入ってwp-config.phpを無理やり変更してみたが、Wordpress管理画面からWordpressの更新が失敗する

※以降の作業はバックアップを取って行うことを強くお勧めします。私は取らなかったけど。Dockerだし。

作業

1. wordpressコンテナのbashに入る

まずは、docker psコマンドでwordpressコンテナのIDを調べます。

$ docker ps

で出てきたコンテナのうち、imageがwordpress、名前がそれっぽいものを見つけ、IDをコピーします(12桁?)。その後、

$ docker exec -it <コンテナのID> bash

とすることでそのコンテナのbashを起動できます。

2. wp-config.phpの編集

コンテナのbashではvi・vimなどが使えません。なので、echoコマンドの出力をリダイレクトし、ファイルの末尾に追加書き込みします。

# echo "define('WPLANG', 'ja');" >> wp-config.php

本当はsed?とか使った方がいいと思います。使えるかどうかは試してないけど。

これでWordpressの管理画面上で日本語に設定を変更するという選択肢が出現しました。しかしこの変更を行いWordpress自体の更新をしようとしたところ、エラーが発生しました。これはどうやらコンテナ内のパーミッションが関係しているようです。

3. htmlディレクトリのオーナーの変更

↓を参考にしました。
Docker版WordPressのアップデートでFTP画面になってしまうとき

オーナーの確認等はこの記事を見ながらやってもらうとして、最終的に実行すべきコマンドは以下のものです。htmlディレクトリにいる場合の話。

# chown -R www-data.www-data .

最後の.はゴミではなく、二番目の引数として与えたカレントディレクトリです。多分ね。

この変更を行うことで、管理画面上から日本語版Wordpressのインストールが可能になりした。多分最新版への更新も可能になります。

所感

そもそもどうしてこういう事態になったのかがわからない。
そしてこの対処が適切だったかどうかはわからない。
そもそも別にWordpressくらい日本語で使ってもいいんだけど。

ていうかマウントをもう一個上にしとけば、vimが使えないと悩む必要なかったですね。

【第3回】DockerでVPS上に独自ドメイン・SSLなWordpressサイトを立ち上げる

このシリーズの概略については、こちら↓をお読みください。
yukari-n-u.hatenablog.com

これは私個人の備忘録なので、内容については保証しかねます。
ただ、間違っている箇所があれば教えいただけると嬉しいです。

はじめに

Dockerの導入に関しては、前回の記事をお読みください。
yukari-n-u.hatenablog.com

今回は、Docker上にnginx(Let's Encrypt)+MySQL+Wordpressの環境を作りました。
正直これを本番環境にするのはいろいろどうなの?とは思いますが、一応これで動いたからヨシ!

環境

ConoHa VPS
CentOS 7.7.1908
Docker 19.03.5
Docker-compose 1.25.0

ドメインの準備

取得したドメインのゾーン編集をし、VPSIPアドレスと紐付けしておきます。これはドメインの管理者によっていろいろだと思うので割愛。まだドメインがなければ、localhostIPアドレスを直書きすれば動くと思います。

フォルダ、ファイルの準備

まず適当なところにデータの置き場所となるフォルダを作成します。
私は「nu_style」という名前で、一般ユーザのホームディレクトリ直下に作りました。

$ mkdir nu_style
$ cd nu_style

そのフォルダ内に、以下のような「docker-compose.yml」というファイルを作成します。<>内の内容は適当に書き換えてください。また、サービス名がwpとかtest_wpとかになってますが、これも対応さえ変えなければ自由に書き換えて大丈夫です。
私の場合は本番サイトとそのテスト環境という想定をしているので、サービス名にtest_をつけた二つ目のMySQLWordpressコンテナも作成しています。複数サイトの必要がない場合は、test_db以降を削除してください。また3つ以上のサイトを立ち上げたいときは、同じようなノリでサービスを付け加えればいいと思います。

version: '2'
services:
  proxy:
    image: jwilder/nginx-proxy
    privileged: true
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./data/docker-compose.d/certs:/etc/nginx/certs:ro
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: always
  letsencrypt-proxy:
    image: jrcs/letsencrypt-nginx-proxy-companion
    privileged: true
    volumes:
      - ./data/docker-compose.d/certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - proxy
  db:
    image: mysql:5.7.25
    environment:
      MYSQL_DATABASE: db
      MYSQL_USER: <一つ目のサイトのMySQLのユーザ名>
      MYSQL_PASSWORD: <一つ目のサイトのMySQLのパスワード>
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
  wp:
    image: wordpress
    environment:
      WORDPRESS_DB_USER: <一つ目のサイトのMySQLのユーザ名>
      WORDPRESS_DB_PASSWORD: <一つ目のサイトのMySQLのパスワード>
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: db
      VIRTUAL_HOST: <一つ目のサイトのドメイン名>
      VIRTUAL_PORT: 80
      LETSENCRYPT_HOST: <一つ目のサイトのドメイン名>
      LETSENCRYPT_EMAIL: <メールアドレス>
    volumes:
      - ./data/<一つ目のサイト名>/wp-content:/var/www/html/wp-content
    links:
      - db
  test_db:
    image: mysql:5.7.25
    environment:
      MYSQL_DATABASE: test_db
      MYSQL_USER: <二つ目のサイトのMySQLのユーザ名>
      MYSQL_PASSWORD: <二つ目のサイトのMySQLのパスワード>
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
  test_wp:
    image: wordpress
    environment:
      WORDPRESS_DB_USER: <二つ目のサイトのMySQLのユーザ名>
      WORDPRESS_DB_PASSWORD: <二つ目のサイトのMySQLのパスワード>
      WORDPRESS_DB_HOST: test_db:3306
      WORDPRESS_DB_NAME: test_db
      VIRTUAL_HOST: <二つ目のサイトのドメイン名>
      VIRTUAL_PORT: 80
      LETSENCRYPT_HOST: <二つ目のサイトのドメイン名>
      LETSENCRYPT_EMAIL: <メールアドレス>
    volumes:
      - ./data/<二つ目のサイト名>/wp-content:/var/www/html/wp-content
    links:
      - test_db

※インデントの位置も重要っぽいです。ズレてる箇所があったらすみません。

このファイルの作成には、↓のサイトを参考にしました。
はじめてのDocker その2 〜SSLに対応した複数ドメイン環境を作る方法〜 | WebNAUT
ただこれだけは動かず、いろいろと付け加えたい機能もあったので以下の点を修正しました。

  • MySQLのバージョンを5.7.25に指定する(最新版だとWordpressが動かない)
  • wp-contentを、data/<サイト名>/wp-contentにマウントする(いじりやすい)
  • MySQLのログインをrootで行わない(よくわからんけどその方がいいのでは?)

環境定数を直で記述していたり、そもそもバージョン2で書いてたり、いろいろセキュリティ上問題があるようなないような気がしますが、動いたからええんじゃよ。

コンテナの作成と起動

以下のコマンドを実行します。

$ docker-compose up -d

Let's Encryptの設定が終わるまで少し(数分~数時間)待ち、指定したドメインにアクセスすると、wordpressの初期設定画面が表示されると思います。

ファイルをアップロードしたい場合は、<最初に作ったフォルダ>/data/<サイト名>にマウントの設定をしたので、この下アップロードすれば普通のレンタルサーバみたいな感じで使えると思います。

コンテナの管理なんかは、↓とかを見ながらやるといいかと思います。
docker &amp; docker-compose コマンド集 - Qiita

トラブルシューティングメモ

  • 先の記事で述べたようにDockerを起動したにもかかわらず、「couldn't connect to docker daemon」というメッセージが表示された場合、一回ターミナルを閉じ接続し直すといけた。
  • ブラウザで「Bad Gateway」と(nginxの画面で)の表示が出たときは、まだコンテナが立ち上がっていない(?)ので、2、30秒待つ。
  • ブラウザで「Error Establishing a Database Connection」と(Wordpressの画面で)出たら、データベースへのログインに失敗している。ユーザ名やパスワードを見直す。
  • ブラウザで「このサイトにアクセスできません」と(ブラウザのメッセージとして)出たら、ドメインの設定が間違っているか、Let's Encryptの設定待ち。前者の場合は設定を見直し、後者の場合は数十分~数時間程待つ。

所感

これでついにWordpressサイトが立ち上がりました!
まとめてみると意外とやることは少なくて、コツさえつかめば数分で環境が整いそうですね。
気に入らなかったらすぐ潰せますし、やっぱDockerはステキです。

ただ、これでほんとにいいのか?という疑問はやっぱり残りますね。個人開発者なら問題が起きたところでダメージはないんですが、実務で使うとなるといろいろ考慮すべき点が多そうです。

次回はおまけで、なぜかWordpress起動時に言語選択画面が出なかった場合の対策を書きます。
yukari-n-u.hatenablog.com

【第2回】ConoHa VPS(CentOS7.7)にDocker, Docker-composeをインストール

このシリーズの概略については、こちら↓をお読みください。
yukari-n-u.hatenablog.com

これは私個人の備忘録なので、内容については保証しかねます。
ただ、間違っている箇所があれば教えいただけると嬉しいです。

はじめに

タイトルまんまです。Dockerだけでなく、Docker-composeも入れることで一発で環境が立ち上げられるようになります。
導入にはConoHa公式同人誌を参考にしましたが、乗ってる情報はCentOS6.4(64bit)なので、CentOS7.7では多少読み替える必要があります。

環境

ConoHa VPS
CentOS 7.7.1908
Docker 19.03.5
Docker-compose 1.25.0

作業内容

↓の記事の内容を参考にしました。
https://www.conoha.jp/download/books/conoha-book-03-docker.pdf
VPSにdocker環境構築 - Qiita

インストール

$ sudo yum -y update
$ sudo yum -y install docker-io

起動・自動起動設定

$ sudo systemctl enable docker
$ sudo systemctl start docker

一般ユーザでDockerを使えるようにする

意外と大切です。これ。

$ sudo groupadd docker
$ sudo gpasswd -a <ユーザ名> docker
$ sudo systemctl restart docker

Docker Composeのインストール

↓を参考にしました。
dockerとdocker-composeのインストール(Linux編) - Qiita

最新バージョンの確認

Releases · docker/compose · GitHub
↑にアクセスし、docker-composeの最新バージョンを確認します。Pre releaseではなく、Latest releaseがいいんじゃないでしょうか。

コマンドの入力

下記のURLのうち、1.25.0の部分を確認したバージョンに読み替えて実行します。

$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version

バージョンが表示されればインストール成功です。

所感

分かってしまえば簡単なのですが、いろいろ探すのに時間がかかりました。

次回はいよいよ、Wordpressを立ち上げます。とはいえ、一瞬で終わるのですが。
yukari-n-u.hatenablog.com

【第1回】ConoHa VPSの初期設定

このシリーズの概略については、こちら↓をお読みください。
yukari-n-u.hatenablog.com

これは私個人の備忘録なので、内容については保証しかねます。
ただ、間違っている箇所があれば教えいただけると嬉しいです。

今回の作業内容

  1. ConoHaでVPSを契約する
  2. 一般ユーザを追加・sudoの設定
  3. 公開鍵を設定する

はっきり言って、ConoHaに書いてある内容をそのまま実行しただけです。
VPSスタートアップガイド|ConoHa VPSサポート

ConoHaでVPSを契約する

以下の内容で契約しました。

サービス VPS
CPU 2Core
メモリ 1GB
SSD 50GB
リージョン 東京
オプション -
イメージタイプ CentOS 7.7
月額 900円

オプションは特になし。月額は最初の一年は720円に割引されるらしい。
WordpressKUSANAGI、Dockerは、それだけ入れるならそういうイメージタイプがあるみたいなので、それを選んでもいいかもしれませんね。

一般ユーザを追加・sudoの設定

一般ユーザーを追加する|ConoHa VPSサポート
sudoを設定する|ConoHa VPSサポート
↑を読んでやった。以上。

というわけにもいかないので、少しは書きます。

Tera Termのダウンロード

ターミナルソフトとして、Tera Termをダウンロードしました。PuTTYのが好きなんですが、公開鍵の設定をするのにはTera Termの方が少し楽だったのでこちらを選びました。ConoHaもこっちを使ってますしね。
ダウンロードファイル一覧 - Tera Term - OSDN
こちらのリンクからteraterm-4.105.exeをダウンロードし、あとは流れに身を任せれば大丈夫です。

起動後、
ホストにConoHaコントロールパネルから確認したサーバのIPアドレスを入力しOKボタン
→ユーザ名にroot、パスフレーズに契約時入力したパスワードを入力しOKボタン
でサーバに接続できます。

一般ユーザの追加

以下のコマンドを入力しました。

# useradd <ユーザ名>
# passwd <ユーザ名>
New password: <任意のパスワード>
Retype new password: <上記と同じパスワード>

Tera Termを用いたサーバ接続時にこのユーザ名とパスワードを入れることで、一般ユーザとしてログインできるようになります。
ただ、次の作業はrootで行うので、ログアウトすると二度手間になります。

sudoを設定する

# usermod -G wheel jukari

これでOK。

公開鍵を設定する

公開鍵認証を設定する|ConoHa VPSサポート
一般ユーザーで公開鍵認証を使用してSSHログインする|ConoHa VPSサポート
↑を参考にしました。
ただ、一番目のリンクはサーバー契約時にしかできないものっぽいので今回はスルーし、rootに関しても二番目のリンクの方法を取りました。

鍵の生成・設置

リンク先の通り。

入力したコマンドは以下。

$ mkdir .ssh
$ chmod 700 .ssh
$ mv id_rsa.pub .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys

rmコマンドを打つまでもなく、id_rsa.pubは消えてた気がします。

これを一般ユーザとrootユーザーに関してやればいいんだと思います。rootに関してはすでにauthorized_keysが存在しているので、それを上書きします。

rootログインの禁止

vimで設定ファイルをいじります。管理者権限で実行してください。

# vim /etc/ssh/sshd_config

iキーで挿入モードに入り、以下の二項目をyes→noに変えます。

PermitRootLogin no
PasswordAuthentication no

escキーで挿入モードを終了し、:→w→qキーを押し上書き保存しvim終了します。
最後に、以下のコマンドでSSHの設定を反映させます。

# systemctl reload sshd

所感

この辺はまあサポートページに書いてあるまんまですよね。SSH周辺でゴニョゴニョしましたが、問題があったところでデータがぶっこ抜かれる程度で済むので大丈夫です。本当かよ。

次回はDockerをインストールします。
yukari-n-u.hatenablog.com

【第0回】VPS + Docker + WordpressでWebサイトを作るまで

目的

「えーマジVPS触ったことないの!?キモーイ」「VPS童貞が許されるのは高校までだよね」とか言われないようにするために、表題の環境を作ります。
このブログは私個人の備忘録として書くので、「このサイトの内容をやりました」だの「こっちのコードを貼っつけました」だのといった表記が主になると思われます。参考にする方がいれば……まぁいないか。一応、実行したコードだけは抜粋して載せておきます。
また、私はサーバ構築素人なので、間違っている箇所があればお教えいただけると嬉しいです。

各レイヤーの導入意義

Wordpress

ブログ書くならこれでいいんじゃないかな。他のCMS知らんし。

Docker

仮想環境を作ることができるらしい。↓この辺の記事を見て導入を決定しました。
knowledge.sakura.ad.jp
qiita.com

仮想化って素晴らしいですよね。ミスっても簡単に潰せるので、好き放題いじくりまわしたい趣味グラマにはもってこいです。
本番環境にDockerを使うのっていろいろと問題があったりなかったりするらしいですが、どうせほとんど誰もアクセスしてこないサイトなので、まあいいんじゃないでしょうか。

VPS(ConoHa, CentOS7.7)

以前はさくらのレンタルサーバを利用していたのですが、Webアプリケーションの開発等も後々していきたかったのでVPSに乗り換えました。
わざわざさくらから乗り換えたのは、ついこの間あった炎上騒ぎのせいもあります。まさか本当の話だったとは思わなんだ。
CentOS8もリリースされていますが、Dockerが8でまだ正式リリースされていない?とからしいので、CentOS7.7を使いました。

所感

新年テンションでえいニャ!えいニャ!とVPSを契約してしまったのですが、本当にこんな見切り発車で大丈夫なんですかね。

次回はConoHa VPSの初期設定をします。
yukari-n-u.hatenablog.com