CentOS7系にLEMP環境(Linux + Nginx + MySQL + PHP)を構築
2024/02/22
先日KAGOYAのVPSからIndigoに移行した際にCentOS6から7へバージョンアップし、CentOS7.5でLAMP環境を構築した。今回はCentOS7でLEMP環境を、さらにPHPは7系ではなく8系を導入してみたい。以下に対応方法をメモ。
目次
作業内容
基本的に全ての作業はrootユーザで行う。rootユーザでログインするには以下コマンドを打つ。
#rootログイン sudo su -
各種サーバ設定
#swap設定 dd if=/dev/zero of=/swapfile bs=1M count=1024 mkswap /swapfile #設定ファイルを開く vi /etc/fstab #再起動時にswap領域が認識されるよう以下を追記 /swapfile swap swap defaults 0 0 #selinuxの状態を確認 getenforce #設定ファイルを書き換え vi /etc/selinux/config #変更前 SELINUX=enforcing #変更後 SELINUX=disabled #設定ファイルを開く vi /etc/ssh/sshd_config #書き換え前 #Port 22 #書き換え後(任意の数値に変更) Port 7777 #許可するポートを追加(任意の数値を追加) semanage port --add --type ssh_port_t --proto tcp 7777 #許可中のポートを確認 semanage port --list #再起動 systemctl start sshd #日時設定 timedatectl set-timezone Asia/Tokyo #日時確認 date #日本語関連のパッケージをインストール yum -y install ibus-kkc vlgothic-* #文字セットを変更 localectl set-locale LANG=ja_JP.UTF-8 #設定を反映させる source /etc/locale.conf #文字セットを確認 echo $LANG #以下が表示されればOK en_US.UTF-8 #適当なコマンドで言語を確認 date #日本語で表示される 2021年 8月 6日 金曜日 14:40:08 JST #サーバ再起動 reboot
以前とは違い日本語設定を導入した。
PHPインストール
#yumのアップデート yum update #Remiリポジトリのインストール yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #PHPのインストール yum -y install --enablerepo=remi,remi-php80 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql #バージョンの確認 php -v
当方の環境ではPHP8.0.9がインストールできた。
Nginxインストール
#レポジトリを追加
vi /etc/yum.repos.d/nginx.repo
#以下をファイルに記述する
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
#Nginxインストール
yum -y install nginx
#バージョン確認
nginx -v
nginx version: nginx/1.21.1
#設定ファイルを編集
vi /etc/nginx/conf.d/default.conf
#変更前
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
#変更後
server_name test.com;
location / {
root /usr/share/nginx/html;
# index index.html index.htm;
index index.php;
}
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#自動起動設定
systemctl enable nginx
#Nginxの起動
systemctl start nginx
この時点でブラウザからIPアドレスを入力するとページが表示される。ただ、PHPは動かなかったので調べてみるとphp-fpmというものを導入しないといけないらしい。以下で導入する。
php-fpmインストール
#php-fpmインストール yum -y install --enablerepo=remi,remi-php80 php-fpm #設定ファイルの編集 vi /etc/php-fpm.d/www.conf #変更前 user = apache group = apache #変更後 user = nginx group = nginx #自動起動設定 systemctl enable php-fpm #php-fpmの起動 systemctl start php-fpm
この時点でPHPが動作した。
MySQLインストール
#MariaDB削除 yum -y remove mariadb-libs #リポジトリのインストール yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm #MySQLのインストール yum -y install --enablerepo=mysql80-community mysql-community-server mysql-community-devel #バージョン確認 mysqld --version #MySQLの起動 systemctl start mysqld #ステータス確認 systemctl status mysqld #自動起動設定 systemctl enable mysqld #自動起動確認 systemctl list-unit-files -t service | grep mysqld #初期パスワードを確認 cat /var/log/mysqld.log | grep 'temporary password' #以下のように表示される(xxxxxxxxxxx部分がパスワード) A temporary password is generated for root@localhost: xxxxxxxxxxx #MySQLにログイン mysql -u root -p #パスワードポリシーをLOWに変更する mysql> set global validate_password.policy=LOW; mysql> exit; #初期設定 mysql_secure_installation #MySQLユーザを追加 mysql -u root -p mysql> CREATE USER 'testuser' IDENTIFIED BY 'testpass'; #ユーザの確認 mysql> SELECT user, host FROM mysql.user; mysql> exit;
Let's Encryptインストール
#certbotのインストール yum -y install epel-release yum -y install certbot-nginx #証明書インストールのテスト certbot certonly --webroot -w /usr/share/nginx/html -d test.com --email test@test.com --dry-run #問題無ければ証明書インストール certbot certonly --webroot -w /usr/share/nginx/html -d test.com --email test@test.com #自動更新設定 systemctl start certbot-renew.timer systemctl enable certbot-renew.timer systemctl list-timers --all
apacheではドキュメントルートは「/var/www/html」だけどNginxだと「/usr/share/nginx/html」になるようなので注意する。尚、証明書が正常に導入できても以下設定を行わないとhttpsで接続できない。
Nginxの再設定
#設定ファイルを編集
vi /etc/nginx/conf.d/default.conf
#変更前
listen 80;
#変更後
listen 80 default_server;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/test.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem;
#php-fpmの再起動
systemctl restart php-fpm
トラブル
Let's Encryptインストール時のエラー
過去の記事を参考に以下でcerbotを導入しても証明書インストール時にエラーとなった。
yum -y install certbot python-certbot-apache
以下でインストールすること。
yum -y install certbot-nginx
ファイルをアップロードしてもブラウザで表示できない
「/var/www/html」直下にファイルをアップロードしてもブラウザで表示できなかった。調べてみるとNginxだと「/usr/share/nginx/html」がドキュメントルートになるので、こちらにアップロードしないといけない。
所感
Nginxは全く触ったことが無いので、ひとまずはPHPプログラムやWordPressを設置したり等、色々試してみたい。また、Apacheとの共存も可能らしいのでそちらも試してみたいところ。
参考サイト
関連記事
-
-
Nginxのバーチャルホスト設定とLet's Encryptの導入
NginxでVirtualHostの設定し、複数のドメインを同一サーバに割り当て ...