• 20.04
  • 18.04

基本的に20.04を前提に記載する。

18.04の場合は適宜読み替える。 WordPress関連では18.04は以下の違いがある。

  • PHPバージョンが7.2
  • MySQL 5.7をインストール可能

以下AWS EC2を仮定するので、ほとんどsudoで実行する。 AWSの初期設定ではほとんどのコマンドをsudoをつけないと実行できない。 以下のようにrootにスイッチすることもできる(備忘録のために記載しているが、rootのままでいるのは危険なので推奨はしない)。

$ sudo su -

バージョン&アーキテクチャ確認

# バージョンを確認
$ sudo cat /etc/os-release
# DISTRIB_ID=Ubuntu
# DISTRIB_RELEASE=20.04
# DISTRIB_CODENAME=focal
# DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"
# アーキテクチャを確認
$ sudo arch
# x86_64

パッケージインストール

apt update -y && apt upgrade -y

  1. apt update:リポジトリから有効で更新可能なパッケージ一覧を取得
  2. apt upgrade:パッケージをアップデート
$ sudo apt update -y && sudo apt upgrade -y

Ubuntu – Ubuntu パッケージ検索

登録リポジトリを確認

$ sudo cat /etc/apt/sources.list

参考: https://kujira16.hateblo.jp/entry/2019/10/14/190008

インストール済みパッケージを確認

$ sudo apt list --installed

参考: https://news.mynavi.jp/article/20190222-775519/

パッケージをインストール

  1. Ubuntu – Ubuntu パッケージ検索で対象パッケージを検索
  2. $ apt install

Apache

$ sudo apt install apache2

PHP

$ sudo apt install php

以下のパッケージがインストールされる(バージョンは執筆時点の例)。

$ sudo apt list --installed | grep php

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

libapache2-mod-php7.4/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php-common/focal,now 2:75 all [installed,automatic]
php7.4-cli/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-common/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-json/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-opcache/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-readline/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 all [installed,automatic]
php/focal,now 2:7.4+75 all [installed]
WordPressに必要な拡張モジュール(extensions)をインストール

インストール済みの拡張モジュールを確認する。

$ php -m
calendar
Core
ctype
date
exif
FFI
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
openssl
pcntl
pcre
PDO
Phar
posix
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib

[Zend Modules]
Zend OPcache

WordPressに必要なモジュールは以下リンクを参照。 https://make.wordpress.org/hosting/handbook/server-environment/#php-extensions

足りない拡張モジュールをインストールする。

  • curl
  • dom
  • mbstring
  • mysqli
  • imagick
  • xml
  • zip
# Ubuntu 20.04
$ sudo apt install php7.4-curl php7.4-dom php7.4-mbstring php7.4-mysqli php7.4-imagick php7.4-xml php7.4-zip

※ Ubuntu 18.04は、上記をphp7.2に置き換える(ただしphp7.4-imagickはphp-imagick)。

imagickとGD

WordPressの画像関連処理では、imagickがインストールされていないときはフォールバックとしてGDが使用される。

imagick – Provides better image quality for media uploads. Smarter image resizing (for smaller images) and PDF thumbnail support, when Ghostscript is also available.

gd – If Imagick isn’t installed, the GD Graphics Library is used as a functionally limited fallback for image manipulation.

参考: https://make.wordpress.org/hosting/handbook/server-environment/

Ubuntu 18.04にphp-imagick、php-gdをインストールする方法は以下のとおり。

imagickインストール

$ sudo apt install php-imagick

※ バージョンを指定しない(php7.2-imagickはNG)

GDインストール

imagickがインストールできない場合にインストールする。

$ sudo apt install php7.2-gd

参考: https://packages.ubuntu.com/ja/bionic/php7.2-gd

Apache再起動
$ sudo apachectl graceful

以下メッセージが表示されたら/etc/apache2/apache2.confにServerName xxx.xxx.xxx.xxxを追記する。 (/etc/apache2/sites-available/000-default.confに追加してもエラーは解消されない)

sudo apachectl graceful
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using xxx.xxx.xxx.xxx. Set the 'ServerName' directive globally to suppress this message

MySQL

Ubuntu 20.04のリポジトリにはMySQL 5.7はないが、以下を参考にインストールする。 https://computingforgeeks.com/how-to-install-mysql-on-ubuntu-focal/

18.04

MySQL 5.7がインストール可能。

$ sudo apt install mysql-server

以下に留意。

  • MySQL 5.7はインストールした状態ではsudoなしではアクセスできない
  • セキュリティのためsudo mysql_secure_installationを実行する
  • sudo無しでアクセスできるように、sudoでログインした後に以下を実行する(sudo有りだと、WordPressから接続するときに面倒)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

参考: https://note.com/junf/n/na40fbca9e6ea

なにかあってMySQLを完全に削除したいときは、以下記事を参考にする。 https://qiita.com/King_kenshi/items/b6f217a8a3083c98904b

$ sudo apt-get remove --purge mysql-server* mysql-common
$ sudo apt-get autoremove --purge
$ sudo rm -r /etc/mysql
$ sudo rm -r /var/lib/mysql

権限変更

$ sudo usermod -a -G www-data ubuntu
$ sudo chown -R ubuntu:www-data /var/www

WordPressインストール

  1. 本体ダウンロード
  2. データベース作成
  3. htmlディレクトリの所有者・グループ変更
$ sudo wget https://ja.wordpress.org/latest-ja.tar.gz
$ sudo tar -xzvf latest-ja.tar.gz

WordPress用データベース作成

mysql> CREATE DATABASE <database> DEFAULT CHARACTER SET utf8mb4;

/var/www/htmlの所有者変更

$ sudo chown -R www-data:www-data /var/www/html

www-dataは、Ubuntu 20.04/18.04にインストールしたApacheの「ユーザー:グループ」。 /etc/apache2/apache2.confに下記記載がある。

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

/etc/apache2/envvarsの記載。

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
WordPressテストデータ挿入
  1. wp-cliインストール
  2. wordpress-importer有効化
  3. テストデータ(wordpress-theme-test-data-ja.xml)インポート
$ sudo curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
$ sudo chmod u+x wp-cli.phar
$ sudo mv ./wp-cli.phar /usr/bin/wp
$ cd /var/www/html/wordpress
$ sudo curl -O https://raw.githubusercontent.com/jawordpressorg/theme-test-data-ja/master/wordpress-theme-test-data-ja.xml
$ sudo wp plugin install wordpress-importer --activate
$ sudo wp import wordpress-theme-test-data-ja.xml --authors=create --allow-root

※ 上記でテストデータをインストールした場合、テストデータとして挿入されるuploads配下のファイル(およびディレクトリ)はユーザー・グループともにrootになる。 そのままでは画像編集ができないので、ユーザー・グループをwww-dataに変更する。

$ cd /path/to/wp-content
$ sudo chmod -R www-data uploads
$ sudo chgrp -R www-data uploads

パッケージアンインストール

Bad

$ apt remove php

Good

$ apt remove php-common

※ php(メタパッケージ)だけを削除しても依存関係にある各拡張パッケージ(php7.4-*など)が残ることがある。php-commonを削除すると、それに依存する関連パッケージが芋づる式に削除されるため、完全にアンインストールしたい場合はこちらの方法が確実。

SSL化(Let’s Encrypt)

以下を例に記載する。

  • Ubuntu 18.04
  • example.comドメイン

手順(概要)

  1. Let’s Encryptで証明書作成(/etc/letsencrypt/live/example.com/に作成)
  2. Apache設定ファイル作成
  3. Apache SSLモジュール有効化(OSによって異なる)
    • Debianはデフォルトで有効
    • Ubuntuは$ a2enmod sslで有効化

手順(詳細)

  1. /etc/apache2/sites-availableにバーチャルホスト用のconfファイルを作成(例としてexample.com.conf)
    • /etc/apache2/sites-available/default-ssl.confをコピーしてexample.com.confを作成
  2. confファイル名はexample.com.confにする(ドメイン名.conf)
    • 上記ファイル名でないと、$ a2ensite example.comでSite example.com does not exist!が発生する場合がある
  3. example.com.confにSSL用バーチャルホスト設定を記載
  4. $ apachectl configtest
  5. $ a2enmod ssl
  6. $ apachectl graceful(推奨)または$ service apache2 reload
    • apachectl gracefulは、AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.20.0.3. Set the 'ServerName' directive globally to suppress this messageが発生することがある

apachectl gracefulで上記メッセージが表示されたら、/etc/apache2/apache2.confにServerName xxx.xxx.xxx.xxxを追記する。 (/etc/apache2/sites-available/000-default.confに追加してもエラーは解消されない)

# example.com.conf
<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerAdmin webmaster@localhost
                ServerName example.com
                DocumentRoot /var/www/html

                SSLEngine on
                SSLCertificateFile      /etc/letsencrypt/live/example.com/fullchain.pem
                SSLCertificateKeyFile   /etc/letsencrypt/live/example.com/privkey.pem
        </VirtualHost>
</IfModule>

※ 元の設定例では、SSLCertificateFile側のパスのみexxample.com(xが1つ多い)という誤字になっており、SSLCertificateKeyFile側のexample.comと表記が一致していなかった。両方とも証明書を配置したドメイン名と一致させる必要があるため、example.comに統一した。また/etc/apache2/site-available/default-ssl.conという記載も、正しいパス/etc/apache2/sites-available/default-ssl.confに修正した。

用語

deb

deb(ディーイービー)は、Debianなどで利用されるソフトウェア・パッケージのフォーマット。

拡張子”.deb”のファイルは、Debian、Ubuntuなど多くのLinuxディストリビューションで利用されるバイナリのパッケージである。これらのパッケージはgzipやbzip2、LZMAで圧縮された2つのアーカイブで構成される。そのうち1つはコントロールの情報、もう1つはデータを含む。

dpkg、aptまたはaptitudeでコントロールすることができる。

出典: https://ja.wikipedia.org/wiki/Deb_(%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88)