公開用のWordPressサーバをCentOS 7 + Apache 2.4 + PHP 7.1 + MariaDB 5.5の組み合わせで構築します。サーバは、設定や操作の自由度の高いVPSを使用します。VPSは「ConoHa」、DNSは「Sakura Internet」のサービスを利用します。
記事の目次
VPSとドメイン名の準備
作業開始前に、VPSの契約とドメイン名を取得しておきます。本サイトでは、以下のVPSとDNSのサービスを利用しています。
- VPSの契約(ConoHa)
- ドメイン名の取得(Sakura Internet)
設定項目と設定値の準備
主要な設定項目の設定値を決めておきます。
- サイトのURL
- サーバ設定用のパラメータ
- WordPressのDB接続設定用パラメータ
- WordPressのサイト設定用パラメータ
サイトのURL(例)
マルチサイトを考慮して、サイト全体のURLとサイト個別のURLを決定します。
設定項目 | 設定値 |
---|---|
サイト全体のURL | https://lab4ict.com/ |
サイト個別のURL | https://lab4ict.com/system/ |
サーバ設定用のパラメータ(例)
サーバ名を決めておきます。IPアドレスは、サーバ作成後に確認して控えておきます。
設定項目 | 設定値 |
---|---|
ホスト名 | server001 |
IPアドレス | 133.130.127.128(VPSでサーバ作成後に確認) |
WordPressのDB接続設定用の設定値(例)
DB作成用および接続用の情報を決めておきます。
設定項目 | 設定値 |
---|---|
データベース名 | db01 |
データベースのユーザー名 | db01admin |
データベースのパスワード | ********** |
データベースホスト | localhost |
データベースの接頭辞 | wp_ |
WordPressのサイト設定用の設定値(例)
WordPressサイト作成用の情報を決めておきます。
設定項目 | 設定値 |
---|---|
サイトのタイトル | Laboratory for Personal ICT |
サイトのユーザー名 | admin001 |
サイトのユーザーのパスワード | ********** |
サイトのメールアドレス | admin001@lab4ict.com |
VPSでCentOS 7サーバを作成
VPSでCentOS 7のサーバの作成を行います。本稿では、VPSとして「ConoHa」を使用しました。
VPSでSSH鍵生成
VPSのメニューからrootユーザ用のSSHの鍵生成を行い、秘密鍵をサイト管理用のPCダウンロードします。Linuxの場合、ダウンロードした鍵のファイルの権限は、600にします。
$ chmod 600 ~/.ssh/id_rsa_root.pem
VPSでサーバ作成
VPSのメニューから、作成したSSH用の鍵を使用可に設定して、CentOS 7のサーバを作成します。作成完了後、SSHでログインします。以下は、Linuxの例ですが、Windowsの場合は、Tera Term Pro等を使用してください。
$ ssh -l root -i ~/.ssh/id_rsa_root.pem 133.130.127.128
管理者ユーザの追加
rootユーザをリモートログイン不可にするため、作業用の管理者ユーザを2ユーザ作成しておきます。
# useradd -u 1001 -g wheel admin001 # passwd admin001 # useradd -u 1002 -g wheel admin002 # passwd admin002
サイト管理用のSSH接続設定
サイト管理用のPC上で、SSH接続のための鍵を生成します。以下は、Linuxの例ですが、Windowsの場合は、Tera Term Pro等を使用してください。
$ ssh-keygen -t rsa -b 2048 -C "admin001@server001 serialno=1" $ mv id_rsa id_rsa_admin001 $ mv id_rsa.pub id_rsa_admin001.pub $ ssh-keygen -t rsa -b 2048 -C "admin002@server001 susralno=1" $ mv id_rsa id_rsa_admin002 $ mv id_rsa.pub id_rsa_admin002.pub
管理者ユーザそれぞれについて、公開鍵をSSHでサーバに転送し、各ユーザ用に配置します。(admin001の例)
# mkdir /home/admin001/.ssh # chown admin001:wheel /home/admin001/.ssh # chmod 700 /home/admin001/.ssh # mv /root/id_rsa.pub_admin001 /home/admin001/.ssh/authorized_keys # chmod 600 /home/admin001/.ssh/authorized_keys
SSHのセキュリテイ対策を行います。rootユーザのログインを禁止し、パスワード認証を不可に設定します。
# vi /etc/ssh/sshd_config ... PermitRootLogin no ... PasswordAuthentication no ...
SSHの設定を再読み込みし、鍵認証のみでログイン可とします。
# systemctl reload sshd
SSHで接続を試みると、サーバのパスワード無しでログインできます。
$ ssh -l admin001 -i 133.130.127.128
VPSの通信許可ポートの設定
通信制御は、CentOSで行うため、VPSの通信許可ポートの設定は、全て許可に設定します。
CentOS 7の初期設定
サーバへのログイン環境が整ったところで、CentOS 7の初期設定を行います。
CentOS 7のバージョン確認
インストールされているCentOS 7のバージョンを確認します。
$ cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
ネットワークの設定
ホスト名の設定を行います。
$ sudo hostnamectl set-hostname server001
ネットワークデバイスの状態を確認します。
$ nmcli device DEVICE TYPE STATE CONNECTION eth0 ethernet connected eth0 lo loopback unmanaged --
IPアドレスの設定を確認します。
$ ip a 1: lo: ... 2: eth0: ...
SELinuxの設定
SELinuxによるセキュリティは設定を見極めるまで無効化しますが、セキュリティ違反があったことをログで確認できるように"Permissive"モードで動作させます。再起動して変更が有効であるか確認します。
$ sudo vi /etc/selinux/config ... SELINUX=permissive ...
サーバを再起動します。
$ sudo systemctl reboot
再起動後ログインして、"Permissive"モードであることを確認します。
$ getenforce Permissive
ドメイン名の取得とDNSの設定
ConoHaのVPSで作成したサーバのIPアドレスを確認し、Sakura InternetのDNS設定ページで、取得したドメインに対して以下のレコード(例)の追加を行います。
エントリ名 | タイプ | データ | 説明 |
---|---|---|---|
@ | A | 133.130.127.128 | 名前解決用 |
@ | MX | 10 mail.lab4ict.com. | メール受信用 |
@ | TXT | "v=spf1 ip4:133.130.127.128 -all" | SPF用 |
@ | CAA | 0 issue "letsencrypt.org" | DNS CAA用 |
@ | CAA | 0 iodef "admin001@lab4ict.com" | DNS CAA用 |
A | 133.130.127.128 | 名前解決用 |
CentOS 7の外部リポジトリの登録
PHP等、標準リポジトリより新しいバージョンのソフトウェアをインストールするため、外部リポジトリを登録します。
yum-prioritiesのインストール
リポジトリ間の優先順位を設定するパッケージを、インストールします。
$ sudo yum -y install yum-priorities
EPELリポジトリの登録
EPELリポジトリを登録します。
$ sudo yum -y install epel-release
一時利用に設定します。
$ sudo vi /etc/yum.repos.d/epel.repo [epel] ... enabled=0
Remi's RPM repositoryの登録
Remi's RPM repositoryを登録します。
$ sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
一時利用に設定します。
$ sudo vi /etc/yum.repos.d/remi-safe.repo [remi-safe] ... enabled=0
CentOS 7のユーティリティのインストール
以後の作業等で必要になるユーティリティを、インストールします。
wgetコマンドのインストール
WordPress等のモジュールのダウンロードするため、wgetコマンドをインストールします。
$ sudo yum -y install wget
Apacheのインストールと初期設定
Apacheをインストールします。SSLが使用できるようにmod_sslもインストールします。
$ sudo yum -y install httpd mod_ssl $ httpd -version #Listen 80 Listen 133.130.127.128:80 #ServerName www.example.com:80 ServerName lab4ict.com:80 #ServerAdmin root@localhost ServerAdmin root@lab4ict.com
Apacheの初期設定を行います。
$ sudo cp -p /etc/httpd/conf/httpd.conf ~/httpd.conf_org $ sudo vi /etc/httpd/conf/httpd.conf <ifModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] </ifModule>
".htaccess"を使用可にする設定を行います。
$ sudo vi /etc/httpd/conf.d/htmldir.conf <Directory "/var/www/html"> AllowOverride All </Directory>
通信制御の設定変更を行い、80/tcpと443/tcpの通信を許可します。
$ sudo firewall-cmd --add-port=80/tcp --zone=public --permanent $ sudo firewall-cmd --add-port=443/tcp --zone=public --permanent $ sudo firewall-cmd --reload $ sudo firewall-cmd --list-all --zone=public | grep tcp ports: 80/tcp 443/tcp
Apacheを起動します。
$ sudo systemctl start httpd.service $ sudo systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2017-11-23 17:36:36 JST; 7s ago ...
ブラウザからアクセスして、トップページが表示されることを確認します。
http:/133.130.127.128/
サーバ証明書の取得
Let' Encryptをインストールします。
$ sudo yum -y install --enablerepo=epel certbot certbot-apache
Let' Encryptでサーバ証明書取得します。
$ sudo certbot certonly --webroot -w /var/www/html/ -d lab4ict.com ... - Congratulations! Your certificate and chain have been saved at: ...
取得したサーバ証明書が存在するか確認します。証明書の有効期限は3ヶ月になります。
$ sudo ls -l /etc/letsencrypt/live/lab4ict.com total 4 lrwxrwxrwx. 1 root root 35 Dec 29 19:50 cert.pem -> ../../archive/lab4ict.com/cert1.pem lrwxrwxrwx. 1 root root 36 Dec 29 19:50 chain.pem -> ../../archive/lab4ict.com/chain1.pem lrwxrwxrwx. 1 root root 40 Dec 29 19:50 fullchain.pem -> ../../archive/lab4ict.com/fullchain1.pem lrwxrwxrwx. 1 root root 38 Dec 29 19:50 privkey.pem -> ../../archive/lab4ict.com/privkey1.pem -rw-r--r--. 1 root root 543 Dec 29 19:50 README
サーバ証明書の自動更新のため、サーバ証明書を自動更新するコマンドが正常終了するか確認します。
$ sudo certbot renew --pre-hook "sudo systemctl stop httpd.service" --post-hook "sudo systemctl start httpd.service"
サーバ証明書を自動更新するため、上記で確認したコマンドをcronに登録します。以下は、週1回、月曜日の朝1:00に実行する例になります。
$ su - root # crontab -e 0 1 * * 1 certbot renew --pre-hook "sudo systemctl stop httpd.service" --post-hook "sudo systemctl start httpd.service" # crontab -l
ApacheのSSL/TLSの設定
SSL通信用の設定を行います。
$ sudo vi /etc/httpd/conf.d/rewrite.conf <ifModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] </ifModule> $ sudo cp -p /etc/httpd/conf.d/ssl.conf ~/ssl.conf_org $ sudo vi /etc/httpd/conf.d/ssl.conf SSLCertificateFile /etc/letsencrypt/live/lab4ict.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/lab4ict.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/lab4ict.com/chain.pem
Apacheを起動します。
$ sudo systemctl stop httpd.service $ sudo systemctl start httpd.service $ sudo systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2017-11-23 17:36:36 JST; 7s ago ...
ブラウザからアクセスして、httpsにリダイレクトされてトップページが表示されることを確認します。
http:/lab4ict.com/
PHPのインストールと初期設定
Remi's RPM repositoryより最新のPHP 7をインストールします。
PHP 7のインストールと初期設定
Remi's RPM repositoryとEPELリポジトリを使用してPHP 7.1をインストールします。
$ sudo yum -y install --enablerepo=remi-safe,remi-php71,epel php php-mbstring php-mcrypt php-mysql php-gd $ php --version php --version PHP 7.1.12 (cli) (built: Dec 1 2017 13:53:12) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
PHPの初期設定を行います。タイムゾーン、PHPのバージョン出力、日本語に関連する設定を行います。
$ sudo cp -p /etc/php.ini ~/php.ini_org $ sudo vi /etc/php.ini expose_php = Off date.timezone = "Asia/Tokyo" mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = none; mbstring.func_overload = 0 mbstring.strict_detection = Off
動作確認を行います。
$ cd /var/www/html $ sudo vi phpcheck.php <?php phpinfo(); ?> $ sudo chmod 755 phpcheck.php $ sudo systemctl stop httpd.service $ sudo systemctl start httpd.service $ sudo systemctl status httpd.service ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2017-11-23 17:36:36 JST; 7s ago ...
ブラウザからアクセスして、PHPのインストール情報のページが表示されることを確認します。
http://133.130.127.128/phpcheck.php
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
MariaDBを自動起動するように設定します。
$ sudo systemctl enable mariadb.service $ sudo systemctl is-enabled mariadb.service enabled
MariaDBを起動します。
$ sudo systemctl start mariadb.service
$ sudo systemctl status mariadb.service
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2017-11-23 19:15:41 JST; 6s ago
...
MariaDBのインストール後の設定を行います。
$ cd $ mysql_secure_installation Set root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
MariaDBの設定を変更します。
$ sudo cp -p /etc/my.cnf.d/server.cnf ~/server.cnf_org $ sudo vi /etc/my.cnf.d/server.cnf ... [mysqld] character-set-server=utf8
MariaDBを再起動します。
$ sudo systemctl stop mariadb.service $ sudo systemctl start mariadb.service $ sudo systemctl status mariadb.service ● mariadb.service - MariaDB database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2017-11-23 19:15:41 JST; 6s ago ...
MariaDBにログインし、DBの一覧と文字コードの設定を出力してみます。
$ mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 5.5.56-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.05 sec) MariaDB [(none)]> show variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.01 sec) MariaDB [(none)]> exit Bye
Postfixの設定
ドメイン名のメールアドレス(admin001@lab4ict.com等)で、メールの送受信を可能に設定します。WordPressで指定したメールアドレスからも受信可能なようにalias設定も行います。
通信制御の設定変更を行い、25/tcpの通信を許可します。
$ sudo firewall-cmd --add-port=25/tcp --zone=public --permanent $ sudo firewall-cmd --reload $ sudo firewall-cmd --list-all --zone=public | grep tcp ports: 80/tcp 443/tcp 25/tcp
Postfixの設定
Gmailにメール送受信を可能にするため、Postfixの設定を変更します。
3行目:メールサーバ名
4行名:ドメイン名
5行目:ドメイン名
6行目:受信を許可するインターフェース
7行目:自ドメイン名のメールを受信可
8行目:存在しないユーザ宛のメールを受信拒否
9行目:メールの保存先をMaildirに変更
$ sudo cp -p /etc/postfix/main.cf ~/main.cf_org $ sudo vi /etc/postfix/main.cf myhostname = mx.lab4ict.com mydomain = lab4ict.com myorigin = $mydomain inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain local_recipient_maps = unix:passwd.byname $alias_maps
SASLのインストールを行います。
$ sudo yum install cyrus-sasl-plain cyrus-sasl-md5
PostfixにSASLの設定を行います。
$ sudo vi /etc/postfix/main.cf relayhost = [smtp.gmail.com]:587 smtp_use_tls = yes smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_password smtp_sasl_tls_security_options = noanonymous smtp_sasl_mechanism_filter = plain
SMTP認証の設定を行います。
$ sudo vi /etc/postfix/sasl_password [smtp.gmail.com]:587 XXXX@gmail.com:XXXXXXXX $ sudo chmod 600 /etc/postfix/sasl_password $ sudo postmap hash:/etc/postfix/sasl_password
Posfixを再起動します。
$ sudo systemctl stop postfix.service $ sudo systemctl start postfix.service $ sudo systemctl status postfix.service ● postfix.service - Postfix Mail Transport Agent Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled) Active: active (running) ...
Gmail側で「安全性の低いアプリの許可」を「有効」に設定します。
おわりに
以上で、WordPress用サーバのOSとDBのインストールと初期設定が完了しました。
次の記事
次は、以下の記事にお進みください。
関連記事