GCE上にワードプレスを移行しました


もともとロリポップのホスティングサービスを利用していましたが、
GCEの無料枠で運用できないかと思いまして、やってみました。

GCEでインスタンス作成

まずはGCPのコンソールにログインし、Compute Engineをクリックします。
インスタンスを作成します。

ゾーン:us-west1-b(us-から始まるものを選択します。)
マシンタイプ:micro
ブートディスク:CentOS 7
ブートディスクの種類:標準の永続ディスク、30GB
ファイアウォール:
下記2つを有効にする。
HTTP トラフィックを許可する
HTTPS トラフィックを許可する

作成ボタンをクリックし、インスタンスを作成します。

IPアドレスを静的に変更

VPCネットワーク – 外部IPアドレスを選択します。
GCEのインスタンスに紐付いているIPアドレスがあるので、タイプを「静的」に変更します。

sshの設定

Cloud SDKをインストールし、gcloudコマンドでログインすることもできますが、
sshクライアントから入れるようにします。
Compute Engineを選択し、インスタンスの名前をクリック、編集画面に移動します。
編集をクリックします。
下の方にSSHキーを登録するボタンがあるのでクリックし、公開鍵を貼り付けます。
保存ボタンをクリックします。

ssh ユーザ名@外部IPアドレス
でログインできます。

タイムゾーンの変更

GCEインスタンス起動した後はタイムゾーンを日本に変更します。
$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime

ワードプレスの導入

GCEのインスタンスが起動でき、sshでログインできるようになれば、必要なソフトウェアをインストールしていきます。

Apache2.4のインストール

とりあえずyumのアップデートをしておきます。
$ sudo yum update

インストールしていきます。
$ sudo yum install httpd
$ httpd -version
Server version: Apache/2.4.6 (CentOS)
Server built: Apr 20 2018 18:10:38
こんな感じでバージョンが出ます。

自動起動を有効にしておきます。
$ sudo systemctl enable httpd.service

Apacheの起動や停止は下記のコマンドです。
起動
$ sudo systemctl start httpd.service
停止
$ sudo systemctl stop httpd.service
再起動
$ sudo systemctl restart httpd.service

PHPのインストール

PHP7系を入れ他方が良いのですが、yumで入れられる5系にしておきます。
$ sudo yum -y install php-mysql php php-gd php-mbstring
$ php –version
PHP 5.4.16 (cli) (built: Apr 12 2018 19:02:01)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

MariaDBのインストール

MySQLですが、CentOS7ではMariaDBが標準になったのでMariaDBを入れます。

$ sudo yum -y install mariadb mariadb-server
$ mysql –version
mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1

自動起動を有効にします。
$ sudo systemctl enable mariadb.service

起動
$ sudo systemctl start mariadb.service
停止
$ sudo systemctl stop mariadb.service

MariaDBの設定ファイルを適用する

一旦止めます。
$ sudo systemctl stop mariadb.service

今回は個人サイトなのでスモールを使用します。
$ sudo cp -p /usr/share/mysql/my-small.cnf /etc/my.cnf.d/server.cnf
$ sudo vi /etc/my.cnf.d/server.cnf
[client]に下記を追記
default-character-set = utf8

起動します。
$ sudo systemctl start mariadb.service

MariaDBの初期設定

初期設定用のコマンドがあるので実行します。
いろいろ質問されるので入れて行きます。

$ sudo mysql_secure_installation
MariaDBのrootパスワードを設定します。
Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!

anonymousユーザを削除します。
Remove anonymous users? [Y/n] Y
… Success!

リモートからのrootログインを許可しません。
Disallow root login remotely? [Y/n] Y
… Success!

テスト用DBを削除します。
Remove test database and access to it? [Y/n] Y
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!

ユーザ権限が保存されているテーブルを読み直します。
Reload privilege tables now? [Y/n] Y
… Success!

DBにアクセスするユーザを作成する

rootで作業したくないのでDBへアクセスするユーザを作成します。
$ mysql -uroot -p

MariaDBのプロンプトで、下記を実行します。
アクセス元を制限していないので、パスワードの後ろが%になっています。

> create user ‘ユーザ名’@’%’ identified by ‘パスワード’;
> grant all privileges on wordpress.* to ‘パスワード’@’%’;

できているか確認します。
> select host, user from mysql.user;

データベースを作成します。
> create database wordpress;

ワードプレスをインストール

ワードプレスの公式サイトからtarボールをダウンロードします。
まずは、wgetを入れておきます。
$ sudo yum install wget

ホームディレクトリにワードプレスをダウンロードしておきます。
$ cd ~/
$ wget https://ja.wordpress.org/wordpress-4.9.6-ja.tar.gz

ダウンロードしたtarボールを展開し、DocumentRootの方へ移動します。
$ tar zxf wordpress-4.9.6-ja.tar.gz
$ sudo mv ~/展開したディレクトリ /var/www/任意のワードプレスのディレクトリ名

ワードプレスのディレクトリ名や所有者を変更します。
$ sudo chown -R apache:apache 任意のワードプレスのディレクトリ名

VirtualHostでApacheを設定します。
$ sudo vi /etc/httpd/conf.d/任意のワードプレスのディレクトリ名.conf

下記のような内容を記述します。

Apacheをリロードして設定を有効にします。
$ sudo systemctl reload httpd

SELinuxの設定

CentOS7ではSELinuxが有効です。
無効化する方法もありますが、有効のままで動くように設定をしてみます。

Apacheを再起動します。
$ sudo systemctl restart httpd.service

スワップの作成

Apacheを再起動しても起動してこない現象が発生しました。
ログを調べてみると、
$ sudo grep oom-killer /var/log/messages*
May 23 16:48:08 wordpress kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0

メモリ不足でoom-killerが発動していました。

メモリも少ないインスタンスなのでスワップを作成します。
$ sudo dd if=/dev/zero of=/swapfile bs=1024K count=1024
$ sudo mkswap /swapfile
$ sudo /sbin/swapon /swapfile

再起動しても有効になるように設定します。
$ sudo vi /etc/fstab
下記を記述します。
/swapfie swap swap defaults 0 0

DNSの設定

他にDNSを使っていれば不要ですが、今回はGCPを使用しました。

ネットワークサービス – Cloud DNSを選択します。
ゾーンを作成します。

ゾーン名は適当に。
ゾーン名は文字で始まり、文字または数字で終わるようにし、小文字、数字、ダッシュのみを使用してください。

DNS名:取得したドメイン。サブドメインは入れません。
DNSSEC:オフ

作成ボタンをクリックします。

お名前.comでドメインを取得したので、ネームサーバの設定をします。
お名前.comの管理画面にログインします。

ネームサーバの変更をクリックします。
ドメインをクリックします。
Cloud DNSのデータを入れます。

Cloud DNSに戻ってきて、レコードセットを作成します。
レコードセットを追加をクリックします。
DNS名にwwwを追加します。
リソースレコードのタイプ:A
TTL:5
TTLユニット:分
IPv4:GCEのIPアドレス
作成ボタンをクリックします。

.htaccessを有効にする

VirtualHostの設定に追加します。

$ sudo vi /etc/httpd/conf.d/任意のワードプレスのディレクトリ名.conf

macchan-dev.comからリダイレクトさせる

もともとwwwなしで作っていたので、wwwへリダイレクトさせます。
これもVirtualHostで設定します。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^macchan-dev\.com$
RewriteRule ^/(.*) http://www.macchan-dev.com/$1 [R=301,L]

Let’s Encrypt

SSL接続を有効にするためLet’s Encryptを導入します。
今回の移行の目的の1つです。ホスティングサービスでSSL化させると高いので。。。

$ sudo yum install epel-release
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.web-ster.com
* epel: mirrors.cat.pdx.edu
* extras: mirror.keystealth.org
* updates: mirrors.cmich.edu
Package epel-release-7-11.noarch already installed and latest version
Nothing to do
すでに設定されています。

インストールです。
$ sudo yum install certbot python-certbot-apache

certbotを実行します。
$ sudo certbot
いろいろ聞かれるので入力していきます。

  • メールアドレス
  • 利用規約に同意
  • Electronic Frontier Foundationにメールアドレスの共有するか
  • SSL化するドメイン
  • HTTPでアクセスされた場合、HTTPSへリダイレクトするか

1枚の証明書で両方のドメインをSSL対応させます。
$ sudo certbot –expand -d macchan-dev.com -d www.macchan-dev.com
サブドメインがない方を先に書きます。

HTTPSへのリダイレクト設定を行うと自動でApacheの設定ファイルが追加されます。

Let’s Encryptを自動更新するようにcronの設定をします。
$ sudo crontab -e
root権限で設定します。
例えば下記のように入力します。
25 3 10 * * sudo certbot renew –post-hook “sudo systemctl restart httpd.service”
–post-hookオプションで更新後にコマンドを実行できます。

以上です。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください