lightsail上に自前でWordpressを構築する(CentOS編)
投稿日:
環境
- 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&設定するだけです。