• 投稿日:2022年03月02日 21時32分27秒
  • 更新日:2022年03月16日 23時09分40秒

この記事は以下記事の後に続けて行っています。

また記載がない限り、管理者権限で実行しているものとします。
必要に応じてsudoコマンドを先頭に追加するなどしてください。

Nginxをインストール

apt install nginx

ufw app list
ufw allow 'Nginx HTTP'

systemctl status nginx.server

ufwコマンドはファイヤーウォールの設定です。app listで設定できるプロファイルの一覧が表示されますので、allowで有効にしたいものを指定してください。

もしhttpで接続出来るようにするのであれば上記のようになります。
もちろんファイヤーウォールが無効であれば不要です。

最後にnginxの状況を確認し、activeであればブラウザからipをたたくなどして接続出来ているか確認して下さい。
Welcome to Nginx!と表示されればOKです。

MySQLをインストール

apt install mysql-server

ufw allow 3306

mysql_secure_installation

mysql

ファイヤーウォールを有効にしている場合はufwコマンドでMySQLが使うポートの許可をしてください。

mysql_secure_installationはセキュリティスクリプトで、こちらを実行して質問に答えていくとMySQLの設定が完了します。絶対ではないのですが特別なことが無ければこちらを実行してください。
詳しくはSPECIAL THANKSの1をご参考にどうぞ。

最後にmysqlコマンドで接続を確認します。
接続が確認できた場合はそのまま外部から接続する用のユーザを作りす。

CREATE USER '[ユーザ名]'@'%' IDENTIFIED BY '[パスワード]';

GRANT ALL ON `*`.`*` TO `[ユーザ名]`;

exit

上記コマンドの通りに打つとどこからでも全てのテーブルにアクセスできるユーザが作成されます。
これについては開発や環境の状況に合わせて変えてください。

exitでmysqlから出て、最後に.cnfファイルの設定で特定の接続先からしか許可しない設定をコメントアウトして外します。

nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1
↓
#bind-address = 127.0.0.1

これで設定は完了です。
設定を反映させるためsystemctlコマンドで再起動しておきましょう。

systemctl restart mysql.server

phpのインストールとNginxの設定

必要なものをインストールして、Nginxにphpと連携するための設定を記載します。
php-fpmはphpを処理するため、php-mysqlはphpとMySQLを接続するために必要なものです。

apt install php-fpm php-mysql

mkdir /var/www/[ドメイン名]

chown -R $USER:$USER /var/www/[ドメイン名]

nano /etc/nginx/sites-available/[ドメイン名]
server {
    listen 80;
    server_name [ドメイン名] www.[ドメイン名];
    root /var/www/[ドメイン名];

    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
     }

    location ~ /\.ht {
        deny all;
    }

}

作成したファイルのシンボリックリンクをsites-enabledに作成します。
sites-availableディレクトリには使うかもしれない設定ファイルを置き、実際に使うものはsites-enabledディレクトリに配置します。ですが同じファイルを複数持つのは無駄でミスにつながるのでリンクを使うようにしましょう。

rm /etc/nginx/sites-enabled/*

ln -s /etc/nginx/sites-available/[ドメイン名] /etc/nginx/sites-enabled/

nginx -t

nginxコマンドを実行して成功すれば「successful」が記載された文章が表示されます。
それ以外の場合は記述ミスなどがありますので、エラーメッセージを読んで修正してください。

後はnginxを再起動して完了です。

systemctl restart nginx.server

ここまでくれば外部からブラウザで見ることが出来るはずです。
ドメイン名のディレクトリに適当なindex.phpを配置して確認しましょう。

php-fpmとNginxの実行ユーザ、グループを変更する

phpもNginxも既定のユーザ:グループが「www-data」で同じです。そのため変更しなくても動くのですが、実際にこのユーザのままにすると不便なので変更します。

php-fpmのアクセス権についてはwww.confファイルに記載されています。

nano /etc/php/8.0/fpm/pool.d/www.conf

実行ユーザ:グループの記述

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = www-data
group = www-data

ソケットのアクセス権について

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = www-data
listen.group = www-data

Nginxはnginx.confに記載されています。

nano /etc/nginx/nginx.conf
user www-data;

Nginxの場合は上記でユーザ:グループともに「www-date」で実行するとなります。

ともに指定したい場合は以下のように記述します

user [ユーザ名] [グループ名]

変更したらsystemctlコマンドで再起動をして下さい。

SPECIAL THANKS

  1. Linux、Nginx、MySQL、PHP(LEMP)スタックをUbuntu 20.04にインストールする方法 -Community-
  2. MySQL Serverに外部から接続する -Qiita-
  3. Ubuntu20.04にPHP8をインストールする方法 -Tutorial Crawler-