lightsail上に自前でWordpressを構築する(CentOS編)

投稿日:2020-02-18

環境

  • CentOS Linux release 7.6.1810 (Core)
  • nginx 1.1.17
  • php 7.4.2
  • MySQL 8.0.19

以前の記事でAmazon Linux上でWordpressを構築しましたが、
lightsailのAmazon Linux上だとなぜかcertbotが正常に動かなくなったので
CentOSで再構築することにしました。

インスタンス作成

lightsailのインスタンスを作成します。

プラットフォーム:Linux/Unix
設計図の選択:OSのみ CentOS

インスタンス設定

作成したインスタンスの設定をします。

対象インスタンスのネットワーキングを開き、静的IPをアタッチしておきます。
また、HTTPSで公開する場合はファイアウォールにてTCPの443ポートを開けておきます。

サーバーへのログイン&初期設定

インスタンスにSSHにて接続し、以下コマンドを実行していきます。

まずrootになります。
以降のコマンドはrootで実行するものとします。

$ sudo -i

タイムゾーンを日本にします。

# timedatectl set-timezone Asia/Tokyo

基本的なアプリケーションを入れておきます。

yum install git vim

SELinuxの無効化

SELinuxがあると色々動かないことがあるので無効にしてしまいます。
(nginxが403になったり)
ちゃんとセキュアな環境を作りたい場合はSELinuxが有効でもちゃんと諸々動く環境を作った方がいいですが、
今回はそこまででは無かったので割愛しています。

現在有効か確認します。
以下コマンドで「Enforcing」と出たら有効です。

# getenforce
Enforcing

設定ファイルを修正して無効にします。

# vim /etc/selinux/config
以下部分を修正します。
SELINUX=disabled

これでlightsailのコンソールからインスタンスを再起動をすると反映されます。

nginxのインストール

公式の手順を参考にします。
http://nginx.org/en/linux_packages.html#RHEL-CentOS

# yum install yum-utils

# vim /etc/yum.repos.d/nginx.repo
〜空のファイルが開くので以下を記載する〜
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
〜ここまで〜

# yum-config-manager --enable nginx-mainline
# yum install nginx

nginxの設定

nginxの設定ファイルを追加します。
ファイル名の.confより前は任意です。

vim /etc/nginx/conf.d/wordpress.conf

以下のように記載します。
(Wordpressおきまりのやつです)

server {
    listen 80;
    listen [::]:80;
    server_name  your-domain.jp;

    root   /usr/share/nginx/html;
    index  index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~\.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include fastcgi_params;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass unix:/var/run/php-fpm/www.sock;
    }
}

phpのインストール

以下のコマンドを実行します。
この例ではphp7.4をインストールしていますが、別のバージョンにする場合は
yum install時にenableするリポジトリのremi-phpxx部分を変更してください。

# yum install epel-release
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php74 -y php-fpm php-bcmath php-cli php-common php-devel php-gd php-json php-mbstring php-mysqlnd php-pdo php-xml

phpの設定

設定ファイルを開きます。

# vim /etc/php.ini

画像アップロードが難なくできるよう、以下の箇所を修正します。

upload_max_filesize = 16M
post_max_size = 16M

php-fpmの設定

設定ファイルを開きます。

# vim /etc/php-fpm.d/www.conf

nginxで動くように以下の箇所を修正します。

user = nginx
group = nginx

listen = /var/run/php-fpm/www.sock

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

貧弱インスタンスを作成した場合はpm.max_〜をインスタンスのパワーに合わせて変更してください。

pm.max_children = 15
pm.max_spare_servers = 10

nginx & php-fpmの起動

起動

# systemctl start nginx.service
# systemctl start php-fpm.service

自動起動を有効化

# systemctl enable nginx.service
# systemctl enable php-fpm.service

MySQLのインストール

CentOSではデフォルトでmariaDBがインストールされているので削除しておきます。

# yum remove mariadb-libs
# rm -rf /var/lib/mysql ※もしあれば削除しておく。1度も起動したことがなければ無いかも。

MySQLをインストールします。

# yum install https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
# yum install mysql-community-server

このままMySQLを起動すると以下のエラーが出ます。

Cannot allocate memory for the buffer pool

これはlightsailだとSwap領域が無い事が原因です。
確認するとSwapがゼロになっていると思います。

# free -m
              total        used        free      shared  buff/cache   available
Mem:            485          74         247           8         163         358
Swap:             0           0           0

Swap領域を確保します。
以下例では1MBブロックを512個=512MBのSwapを生成しています。

# dd if=/dev/zero of=/swapfile bs=1M count=512
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile

確認するとSwapが生成されています。

# free -m
              total        used        free      shared  buff/cache   available
Mem:            485          73           5           8         406         359
Swap:           511           0         511

このままだとサーバー再起動時にSwapが開放されてしまうので、fstabにも記載しておきます。

# vim /etc/fstab
〜以下行を追記〜
/swapfile                                 swap                    swap    defaults        0 0

MySQLの起動&自動起動設定有効

systemctl start mysqld.service
systemctl enable mysqld.service

MySQLのrootパスワード変更

rootの初期パスワードはログ内にあります。
以下のhogehoge部分を確認してください。

# grep "temporary password" /var/log/mysqld.log
A temporary password is generated for root@localhost: hogehoge

rootのパスワード設定をします。

mysql -u root -p
Enter password: (確認した初期パスワードを入れる)
ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';

let's encrypt設定

let's encryptで無料SSL証明書を取得します。
こちらの記事を参考にしてください。
【Let'sEncrypt】Certbotの使い方(CentOS7 + nginx)


これでインフラ部分はできました。
後はWordpressの公式サイトなどを見ながらWordpressをDownload&設定するだけです。