【さくらVPS】LAMP環境構築手順

さくらVPSでLAMP環境構築手順の説明します。

LAMP環境構築ですが 、 プラスアルファとしてSSL化、 Git・phpMyAdmin・Wordpressのインストールもします。

各バージョンは以下のよう。

  • CentOS 7
  • Apache 2.4
  • MySQL 5.7
  • PHP 7

その他に入れるもの

  • SSL
  • Git
  • phpMyAdmin
  • WordPress
  1. 事前にさくらのVPSを契約
  2. CentOS 7のインストール
  3. ターミナルからサーバーへログイン
  4. ソフトフェアのアップデート
  5. 一般ユーザーの作成と設定
    1. 一般ユーザーでsudoを使えるようにする
    2. 一般ユーザーでログイン確認
    3. 一般ユーザーからrootユーザーになるには
  6. SSH公開鍵認証の設定
    1. 鍵の作成
    2. 公開鍵をサーバに転送
    3. 鍵を使ってログインする
  7. SSHのセキュリティ設定
    1. SSHの設定ファイルのバックアップ
    2. 設定ファイルの編集
    3. ファイアウォールの設定
    4. SSHの接続確認
  8. Apacheのインストール
    1. 80番ポートと443番ポートをあける
    2. ブラウザで確認
    3. 自動起動設定
    4. ドキュメントルートの権限の設定
    5. index.htmlの作成して「Hello World!」の表示
  9. EPELリポジトリとremiリポジトリのインストール
    1. EPELリポジトリのインストール
    2. remiリポジトリのインストール
  10. PHPのインストール
    1. php.iniの設定
    2. ブラウザでの確認
  11. MySQLのインストール
    1. MariaDBの削除
    2. MySQLインストール
    3. MySQLの設定
    4. 自動起動の設定
  12. DNSの設定
  13. SSL化の設定
    1. バーチャルホストの設定
    2. certbotのインストール
    3. 証明書のインストール
    4. ブラウザで確認
    5. SSLの更新
  14. phpMyAdminのインストール
    1. 設定ファイルの編集
    2. ブラウザでアクセス
  15. WordPressのインストール
    1. DBの作成
    2. MySQLユーザの作成
    3. WordPressをダウンロード
    4. ドキュメントルートの変更
    5. バーチャルホストの方もドキュメントルートを修正
    6. ブラウザで確認
  1. 事前にさくらのVPSを契約
  2. CentOS 7のインストール
  3. ターミナルからサーバーへログイン
  4. ソフトフェアのアップデート
  5. 一般ユーザーの作成と設定
    1. 一般ユーザーでsudoを使えるようにする
    2. 一般ユーザーでログイン確認
    3. 一般ユーザーからrootユーザーになるには
  6. SSH公開鍵認証の設定
    1. 鍵の作成
    2. 公開鍵をサーバに転送
    3. 鍵を使ってログインする
  7. SSHのセキュリティ設定
    1. SSHの設定ファイルのバックアップ
    2. 設定ファイルの編集
    3. ファイアウォールの設定
    4. SSHの接続確認
  8. Apacheのインストール
    1. 80番ポートと443番ポートをあける
    2. ブラウザで確認
    3. 自動起動設定
    4. ドキュメントルートの権限の設定
    5. index.htmlの作成して「Hello World!」の表示
  9. EPELリポジトリとremiリポジトリのインストール
    1. EPELリポジトリのインストール
    2. remiリポジトリのインストール
  10. PHPのインストール
    1. php.iniの設定
    2. ブラウザでの確認
  11. MySQLのインストール
    1. MariaDBの削除
    2. MySQLインストール
    3. MySQLの設定
    4. 自動起動の設定
  12. DNSの設定
  13. SSL化の設定
    1. バーチャルホストの設定
    2. certbotのインストール
    3. 証明書のインストール
    4. ブラウザで確認
    5. SSLの更新
  14. phpMyAdminのインストール
    1. 設定ファイルの編集
    2. ブラウザでアクセス
  15. WordPressのインストール
    1. DBの作成
    2. MySQLユーザの作成
    3. WordPressをダウンロード
    4. ドキュメントルートの変更
    5. バーチャルホストの方もドキュメントルートを修正
    6. ブラウザで確認

事前にさくらのVPSを契約

当たり前ですが、事前にさくらのVPSを契約しておいてください。

契約後に登録したメルアドに送られてくる自動メールにログイン情報がありますので、それを使ってVPSにログインします。

ちなみに、さくらのVPSは最初の2週間無料でお試しできます。

CentOS 7のインストール

まずは、OSのインストールから。

さくらのVPSの契約が終わったら、さっそく「VPSコントロールパネル」へログインしましょう。

コントロールパネルの右上の「各種設定」から「OSインストール」を選びます。

次に、OSのセレクトでは「CentOS7 x84_64」を選んで、管理ユーザのパスワードを入力。

今回、パケットフィルタの設定は、SSH(22)とWeb(80/443)のポートを許可しておきます。

入力が終わったら、設定内容を確認するをクリック。

確認のポップアップがでるので、確認したら「インストールを実行する」をクリック。

そうすると、インストールがはじまるので終わるまで待ちます。

インストールが完了すると、コントールパネルに「稼働中」というサインがでます。

ターミナルからサーバーへログイン

ターミナルを起動します。

今回、Windows10で、Git bashのターミナルを使っています。

以下のコマンドでサーバにログインします。

ssh [email protected]

※ xxx.xxx.xxx.xxx は、契約したIPアドレス

「Are you sure you want to continue connecting (yes/no)?」と聞かれるのyesを入力。そのあと、パスワードも聞かれるので、CentOS7をインストールしたときのパスワードを入力。

ソフトフェアのアップデート

最新のソフトウェアを使用したいので、アップデートコマンドを入力。

yum -y update

途中、「Is this ok?」とでたらyを入力。

最後に「Complete!」とでたらアップデート完了

一般ユーザーの作成と設定

普段、rootでログインして作業するにはセキュリティ上よくないので、一般ユーザーを作成して、その一般ユーザでログインして作業を進めていきます。

好きな名前でいいので、一般ユーザーを作成

adduser user

一般ユーザーのパスワード設定。以下のコマンドを入力してパスワードを入力

passwd user
New password:

一般ユーザーでsudoを使えるようにする

wheelグループに追加することでsudoが使えるようになる。

以下のコマンドを入力

visudo

以下の箇所がコメントアウトされていないことを確認。

%wheel  ALL=(ALL)  ALL

#がついていた場合は、#を削除して保存

一般ユーザーをwheelグループに追加。

usermod -aG wheel user

追加されたか確認

groups user
user : user wheel

wheelグループに属するユーザーのみsuを実行できるようにするために設定する

以下の、設定ファイルを編集していく

vi /etc/pam.d/su

ファイル内の「auth required pam_wheel.so use_uid」からコメント(#)を外して保存。

これで、wheelグループ以外のユーザーがsuコマンドを実行しても拒否される。

一般ユーザーでログイン確認

ログアウトする。

exit

再度、一般ユーザーでログイン

ssh [email protected]

パスワードを聞かれたら、入力してログイン

先頭が一般ユーザーを示す「$」マークになっていることを確認

一般ユーザーからrootユーザーになるには

一般ユーザーあらrootユーザーになるには、以下を入力。

su -

rootユーザーのパスワード聞かれるので入力。

一般ユーザーに戻るときは「exit」で戻れる。

次で鍵をローカルで作成するため、exitでサーバーがログアウトしておく。

SSH公開鍵認証の設定

パスワード認証はセキュリティ的に危険なので、公開鍵認証設定をするのが一般的。

鍵の作成

ターミナルから、以下コマンド鍵を作成。

ssh-keygen -t rsa -v
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\wingm/.ssh/id_rsa):

デフォルトの名前で鍵作成するので、上記のようになったら、エンター。

以下のように、鍵にパスフレーズを設定するよう言われるが、

今回は無しにしたいので何も入力しないで、エンター、エンター。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

これで公開鍵と秘密鍵ができました。

作成された鍵の確認します。

ls ~/.ssh
id_rsa  id_rsa.pub

「id_rsa」は秘密鍵。「id_rsa.pub」は公開鍵。

公開鍵をサーバに転送

サーバに一般ユーザーでログイン

ssh [email protected]

公開鍵をいれるディレクトリを作成し、一般ユーザーだけが読み込み、書き込み、実行できるように権限を設定。

mkdir .ssh
chmod 700 .ssh

ログアウトする。

exit

以下コマンドで、公開鍵をサーバへ転送する。

scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys

鍵を使ってログインする

秘密鍵をつかってログインできるか確認します。

ssh -i ~/.ssh/id_rsa [email protected]

これで、鍵認証によるログイン設定ができました。

SSHのセキュリティ設定

SSHのセキュリティ設定します。

今回行うのは以下

  • ポート番号の変更
  • パスワード認証の禁止
  • 空白パスワードの禁止
  • rootによるSSH接続禁止

SSHの設定ファイルのバックアップ

設定ファイルのバックアップをとっておきます。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org

設定ファイルの編集

sudo vi /etc/ssh/sshd_config

以下の箇所を変更

//ポートの変更
#Port 22
↓
Port 45454

//空白パスワードの禁止
#PermitEmptyPasswords no
↓
PermitEmptyPasswords yes

//パスワード認証の禁止
PasswordAuthentication yes
↓
PasswordAuthentication no

//rootによるSSH接続禁止
#PermitRootLogin yes
↓
PermitRootLogin no

保存したら、構文が正しいか確認コマンド入力

sudo sshd -t

何もなければOK

設定を反映させるためsshdの再起動

 sudo systemctl restart sshd

ファイアウォールの設定

ファイルのコピー

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-45454.xml

xmlファイルの編集。

sudo vi /etc/firewalld/services/ssh-45454.xml

以下の箇所を変更

  <port protocol="tcp" port="22"/>
↓
  <port protocol="tcp" port="45454"/>

ファイアウォールの設定を反映させる。

sudo firewall-cmd --reload
success

sudo firewall-cmd --permanent --add-service=ssh-45454
success

sudo firewall-cmd --reload
success

変更を確認。

sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http ssh https ssh-45454
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

servicesに、ssh-45454に追加されているのを確認します。

SSHの接続確認

SSHのセキュリティ設定が上手くいっているか、接続確認します。

万が一、設定が間違えてログインできないというのを防ぐために、もう一つ別のターミナルで起動して接続確認を行います。

sshコマンドでログイン接続します。

ssh -p 45454 -i ~/.ssh/id_rsa [email protected]

ファイアウォールで22番ポート(ssh)接続の設定をはずすため、以下のコマンドを入力。

sudo firewall-cmd --permanent --remove-service=ssh

sudo firewall-cmd --reload

確認します。

sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh-45454
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

servicesにsshが削除されていることを確認します。

最後に、ログアウトしてSSH接続ができることを確認します。

exit

ssh -p 45454 -i ~/.ssh/id_rsa [email protected]

ちなみに、秘密鍵名を「id_rsa」にしている場合、以下のように鍵の指定コマンドを省略して接続することができる。

ssh -p 45454 [email protected]

これで、SSHのセキュリティ設定は一通り終わり。

Apacheのインストール

Apacheのインストールをします。

sudo yum install httpd

Apacheの起動をします。

sudo systemctl start httpd

起動しているか確認します。

sudo systemctl status httpd

Active: active (running)となっていればOK。

80番ポートと443番ポートをあける

http接続に使う80番ポートと、https接続で使う443番ポートがファイアウォールで閉じられいるので、開ける設定をします。

sudo firewall-cmd --add-service=http --zone=public --permanent
sudo firewall-cmd --add-service=https --zone=public --permanent

firewalldを再起動します。

sudo systemctl restart firewalld.service

設定の確認をします。

sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh-45454 http https
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

services:にhttpとhttps追加されていることを確認。

ブラウザで確認

ブラウザで確認をするため、ブラウザを起動。

契約したIPアドレスをブラウザで表示確認。

Apacheのテストページが確認できればOK

自動起動設定

Apacheが自動起動になるよう設定。

sudo systemctl enable httpd

設定確認します。

sudo systemctl list-unit-files -t service | grep httpd
httpd.service                                 enabled

httpd.service enabledと表示されればOK

ドキュメントルートの権限の設定

/var/www/のhtmlディレクトリの中に、htmlファイルを置くことでWEBアプリを公開できます。

しかし、現在、権限がroot:rootになっているので所有権の設定を変更します。

まず、 htmlディレクトリを扱えるグループを新規作成します。

sudo groupadd webusers

このグループに一般ユーザの「user」も追加します。

sudo usermod -aG webusers user

所有権の設定を変更します。

sudo chown apache:webusers /var/www/html/
sudo chmod -R 775 /var/www/html/

設定を反映させるために、一度ログアウトしてから、ログインしてください。

index.htmlの作成して「Hello World!」の表示

ドキュメントルートである/var/www/html/は、まだ空なのでhtmlファイルを作成します。

sudo vi /var/www/html/index.html

index.htmlを開いたら、以下のように記述

<html>
<body>
Hello World!
</body>
</html>

契約したIPアドレスをブラウザで表示確認します。

「Hello World!」と表示さればOK

「Forbidden You don’t have permission to access」と出る場合は、SELinuxの無効化します。

一時的に無効化する場合は以下

setenforce 0

永続的に無効化する場合は以下

sudo vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled

EPELリポジトリとremiリポジトリのインストール

EPELリポジトリとremiリポジトリがインストールされているか確認

yum repolist

EPELリポジトリのインストール

sudo yum install epel-release

remiリポジトリのインストール

remiレポジトリの公式サイトからURLを確認して、以下のコマンドを入力。

 sudo yum localinstall https://rpms.remirepo.net/enterprise/remi-release-7.rpm

完了したら、インストールされているリポジトリを確認します。

yum repolist

PHPのインストール

インストールできるPHPのバージョンを確認する。

yum list available | grep php-

php-commonの箇所からバージョンを確認。

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

sudo yum --enablerepo=remi-php71 install php php-devel php-mysql php-gd php-mbstring

バージョンの確認。

php -v

Apacheの再起動

sudo systemctl restart httpd

php.iniの設定

バックアップを取って、開く、

sudo cp /etc/php.ini /etc/php.ini.org
sudo vi /etc/php.ini

以下の箇所を変更

post_max_size = 8M
↓
post_max_size = 128M

upload_max_filesize = 2M
↓
upload_max_filesize = 128M

設定を反映をさせるため、Apacheの再起動

sudo systemctl restart httpd

ブラウザでの確認

index.phpを作成する

sudo vi /var/www/html/index.php

index.phpを以下のように編集。

<?php
phpinfo();

契約したIPアドレスでindex.phpへブラウザアクセスする。

http://xxx.xxx.xxx.xxx/index.php

PHP の設定情報を出力されていればOK。

MySQLのインストール

MariaDBの削除

MariaDBがインストールされているか確認。

rpm -qa | grep maria

競合を避けるため、MariaDBの削除

sudo yum remove mariadb-libs
sudo rm -rf /var/lib/mysql

MySQLインストール

MySQLにyumリポジトリをインストールします。

MySQLの公式サイトで最新リポジトリURLをコピーしてきます。

公式サイトで以下の「Download」ボタンクリック

次のページの下にある「」のリンクURLをコピーします。

今回の最新版は、「https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm」だったので、以下のようにリポジトリをインストールします。

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

このままインストールすると、最新の8.0がインストールされます。

5.7のバージョンをインストールしたい場合は、以下のコマンドを入力。

sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community

インストールされるバージョンを確認。

sudo yum repolist enabled | grep mysql

MySQLインストールします。

sudo yum install mysql-community-server

バージョンの確認します。

mysqld --version

MySQLを起動します。

sudo systemctl start mysqld

MySQLの設定

MySQLのrootのパスワードを確認します。

cat /var/log/mysqld.log | grep 'temporary password'
A temporary password is generated for root@localhost: xxxxxxxxxxx

xxxxxxxxxxxの部分がrootユーザの初期パスワードです。

あたらしくパスワードを設定します。

 mysql_secure_installation

初期パスワードを使って、新しいパスワードを新しく設定します。

MySQLにログインします。

mysql -u root -p

パスワードを聞かれたら、新しく設定したパスワードを入力してログイン。

データベースー覧の表示してみます。

mysql> show databases;

一旦、「exit」でログアウトします。

文字コードをUTF-8にしておきます。

sudo vi /etc/my.cnf

ファイルを開いたら、最後の行に以下内容を追記。

character-set-server=utf8

mysqldを再起動します。

sudo systemctl restart mysqld

自動起動の設定

OS起動時に自動起動するように設定しまうs。

sudo systemctl enable mysqld

設定の確認をします。

systemctl list-unit-files -t service | grep mysql

mysqld.service enabledとなっていればOK。

ここまでで、ひととおりLAMP環境構築は完了。

DNSの設定

各自、ドメイン取得サービスでドメインを購入などしておいてください。

ドメイン取得サービスの管理画面でDNSの設定を行ってください。

やり方は、 ドメイン取得サービスごとに異なるので割愛します。

SSL化の設定

SSLは、Let’s Encryptは使用します。

バーチャルホストの設定

バーチャルホストの設定ファイルを作成します。

sudo vi /etc/httpd/conf.d/ドメイン名.conf

以下のように記述してください。

<Virtualhost *:80>
DocumentRoot /var/www/html
ServerName ドメイン名
</Virtualhost>

設定ファイルの構文が正しいかチェック

apachectl configtest
Syntax OK

Apacheの再起動

sudo systemctl restart httpd

certbotのインストール

sudo yum install certbot-apache

証明書のインストール

sudo certbot --apache

メールアドレスを入力して、同意文書に(A)greeし、メールが送られていいかの有無を選択します。

ドメインの選択では、該当の番号入力してエンター。

リダイレクト(httpをhttpsへ)の設定に関しては、2番を選択。

ブラウザで確認

ブラウザへhttpsでちゃんと表示できる確認。また、httpでアクセスしてhttpsへリダイレクトされるか確認します。

SSLの更新

まずは、証明書の期限の確認。

sudo certbot certificates

Expiry date:のVALID: ●● daysの部分が残りの日数です。

証明書の期限が30日未満場合に更新をする場合は、以下のコマンドを入力

sudo certbot renew

もし、強制的に更新したい場合は以下のように入力

sudo certbo renew --force-renew

cronで自動更新する設定を行います。

sudo vi /etc/crontab

ファイルが開いたら以下のように記述します。今回は毎日午前3時にcertbotコマンドを実行するに設定します。

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
0 3 *  *  * root /usr/bin/certbot renew

phpMyAdminのインストール

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

remiリポジトリにしかないphp7.1系のパッケージをあわせてインストールをするため、以下のコマンドを入力します。

sudo yum -y install --enablerepo=remi,remi-php71 phpMyAdmin

設定ファイルの編集

バックアップをとって編集する。

cp /etc/httpd/conf.d/phpMyAdmin.conf /etc/httpd/conf.d/phpMyAdmin.conf.org
sudo vi /etc/httpd/conf.d/phpMyAdmin.conf

「/usr/share/phpMyAdmin/」ディレクティブを変更

まず、どこからでもアクセスできるようにします。

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
↓
<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require all granted

また、SSL通信のみ許可できるように設定します。

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
↓
<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8
   SSLRequireSSL
   <IfModule mod_authz_core.c>

ApacheがSSLを使用できるように、モジュールがインストールされていいなければインストールします。

以下コマンドでインストールの確認。

sudo httpd -M | grep ssl_module

インストールしていなければ、以下でインストールします。

yum install mod_ssl

Apacheの再起動

sudo systemctl restart httpd

ブラウザでアクセス

契約したIPアドレスの「/phpMyAdmin/」にアクセスする。

http://xxx.xxx.xxx.xxx/phpMyAdmin/

phpMyAdminのログイン画面が表示されればOK。

WordPressのインストール

WordPressをインストールしていきます。

まず、WordPress用のデータベースを作成していきます。

DBの作成

MySQLにログインします

mysql -u root -p

データベースを作成

create database wp;

MySQLユーザの作成

create user 'wp_user'@'localhost' identified with mysql_native_password by 'password';

‘wp_user’と’password’は、各自好きなように設定。

作成したユーザーが、先ほど作成した「wp」データべースを扱えるようにします。

grant all privileges on wp.* to 'wp_user'@'localhost';

設定の反映を行います。

flush privileges;

確認して、ログアウト。

show databases;

exit

WordPressをダウンロード

wgetがインストールされているか確認。

yum list installed | grep wget

インストールされていなければ、以下でインスール。

sudo yum install wget

WordPressの公式サイトで、.tar.gz形式のURLをコピーしてくる。

tmpディレクトリへダウンロードします。

cd /tmp
wget https://ja.wordpress.org/latest-ja.tar.gz

展開して、ドキュメントルートに移動する。

sudo tar -zxvf latest-ja.tar.gz -C /var/www/

権限の変更をします。

sudo chown -R apache:webusers /var/www/wordpress

ドキュメントルートの変更

ドキュメントルートを変更します。

sudo vi /etc/httpd/conf/httpd.conf

以下の箇所を変更します。

DocumentRoot "/var/www/html"
↓
DocumentRoot "/var/www/wordpress"

<Directory "/var/www/">
↓
<Directory "/var/www/wordpress">

バーチャルホストの方もドキュメントルートを修正

80番ポートの方の設定をします。

sudo vi /etc/httpd/conf.d/ドメイン名.conf

以下のように編集

DocumentRoot /var/www/html
↓
DocumentRoot /var/www/wordpress

同様に443番ポートの方の設定をします。

sudo vi /etc/httpd/conf.d/ドメイン名-le-ssl.conf

以下のように編集

DocumentRoot /var/www/html
↓
DocumentRoot /var/www/wordpress

Apacheの設定ファイルの構文が正しいかチェック

sudo apachectl configtest
Syntax OK

Apacheの再起動

sudo systemctl restart httpd

ブラウザで確認

契約したIPアドレスにアクセスする。

http://xxx.xxx.xxx.xxx/

WordPressの設定画面が表示されればOK。

「さぁ、始めましょう!」のボタンクリックして、各種設定したデーターベース情報を入力すればWordPressを使用できるようになります。

コメント