もともとロリポップのホスティングサービスを利用していましたが、
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
下記のような内容を記述します。
1 2 3 4 5 6 7 8 9 |
NameVirtualHost *:80 <VirtualHost *:80> ServerName サーバのドメイン DocumentRoot /var/www/任意のワードプレスのディレクトリ名 ErrorLog logs/サーバのドメイン-error_log CustomLog logs/サーバのドメイン-access_log common </VirtualHost> |
Apacheをリロードして設定を有効にします。
$ sudo systemctl reload httpd
SELinuxの設定
CentOS7ではSELinuxが有効です。
無効化する方法もありますが、有効のままで動くように設定をしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sudo setsebool -P httpd_can_network_connect_db 1 $ sudo setsebool -P httpd_dbus_avahi 1 $ sudo setsebool -P httpd_tty_comm 1 $ sudo setsebool -P httpd_unified 1 $ sudo yum provides */semanage $ sudo yum install policycoreutils-python $ sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/ワードプレスのディレクトリ(/.*)?" $ sudo restorecon -R -v /var/www/ワードプレスのディレクトリ $ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/ワードプレスのディレクトリ/wp-content(/.*)?" $ sudo restorecon -R -v /var/www/ワードプレスのディレクトリ/wp-content $ sudo setsebool -P allow_ftpd_full_access 1 |
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
1 2 3 |
<Directory "/var/www/www.macchan-dev.com"> AllowOverRide All </Directory> |
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オプションで更新後にコマンドを実行できます。
以上です。