Nginx Webサーバーのインストール
Webページをサイト訪問者に表示するには、高性能WebサーバーであるNginxを使用します。APTパッケージマネージャーを使用して、このソフトウェアを取得します。
$ sudo apt update
$ sudo apt install nginx
プロンプトが表示されたら Y そして ENTER Nginxをインストールすることを確認します。インストールが完了すると、Nginx Webサーバーがアクティブになり、Ubuntu 22.04サーバーで実行されます。
同じLAN内のPCからサーバーのIPアドレスをウエブブラウザでみると、
ファイアウォール設定
ウエブサーバー LEMP の動作確認だけならば、ファイアウォールは、無効 inactive のままで、無理に有効にして設定する必要はない良いでしょう。
Ubuntu22.04を普通にインストールすると、ファイアウォールは無効になっていました。
$ sudo ufw status
Status: inactive
ファイアウォールを有効化するには、
$ sudo ufw enable
Firewall is active and enabled on system startup
ufw ファイアウォールが有効になっている場合、初期サーバーセットアップガイドで推奨されているように、Nginxへの接続を許可する必要があります。Nginxは、インストール時にいくつかの異なるUFWアプリケーションプロファイルを登録します。利用可能なUFWプロファイルを確認するには、次の手順を実行します:
$ sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
ポートで通常のHTTPトラフィックを許可する。
$ sudo ufw allow 'Nginx HTTP'
Rules updated
Rules updated (v6)
ufw を有効にするとssh の通信もできなくなるので、sshのトラフィック許可の設定をしておきます。
$ sudo ufw allow ssh
Rules updated
Rules updated (v6)
ステータスの確認
$ sudo ufw status
Status: active
To Action From
-- ------ ----
Nginx HTTP ALLOW Anywhere
22/tcp ALLOW Anywhere
Nginx HTTP (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
Status が active になって、
HTTP と Port22 が許可された。
どこからでも許可されているので、sshは制限した方が安全だな。
MySQLのインストール
Webサーバーを稼働させたので、データベースシステムをインストールして、サイトのデータを保存および管理する必要があります。MySQLは、PHP環境で使用される一般的なデータベース管理システムです。
$ sudo apt install mysql-server
インストールが完了したら、MySQLがプリインストールされたセキュリティスクリプトを実行することをお勧めします。このスクリプトは、安全でないデフォルト設定を削除し、データベースシステムへのアクセスをロックダウンします。次のコマンドを実行して、インタラクティブスクリプトを起動します:
$ sudo mysql_secure_installation
$ sudo mysql
mysql > exit
PHPのインストール
コンテンツを提供するためにNginxがインストールされ、データを保存および管理するためにMySQLがインストールされています。これで、PHPをインストールしてコードを処理し、Webサーバーの動的コンテンツを生成できます。
php8.1-fpm, これは“ PHP fastCGIプロセスマネージャー”の略で、現在のバージョンのPHP (を執筆時点で)使用して、処理のためにこのソフトウェアにPHPリクエストを渡すようにNginxに指示します。さらに php-mysql, PHPがMySQLベースのデータベースと通信できるようにするPHPモジュール。Core PHPパッケージは依存関係として自動的にインストールされます。
インストールするには php8.1-fpm そして php-mysql パッケージ、実行:
$ sudo apt install php8.1-fpm php-mysql
Nginxを設定してPHPプロセッサを使用する
Ubuntu 22.04では、Nginxはデフォルトで有効になっている1つのサーバーブロックを持ち、のディレクトリからドキュメントを提供するように構成されています。
/var/www/htmlがwebのデフォルトルートになっています。
新たにルートWebディレクトリを次のように作成します 。
ドメイン名を、dname とすると
$ sudo mkdir /var/www/dname
ディレクトリの所有権を $USER
現在のシステムユーザーを参照する環境変数:
インストールした Nginx のユーザー名は、www-dataだったので、
sudo chown -R www-data:www-data /var/www/dname
次に、Nginxの新しい構成ファイルを開きます 。
sites-available
優先コマンドラインエディターを使用したディレクトリ。
sudo nano /etc/nginx/sites-available/dname
内容は、
server {
listen 80;
server_name dmane www.dname;
root /var/www/dname;
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/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
/etc/nginx/nginx.conf にNginx の設定ファイルが記されている。
設定ファイルの中に、他の設定を include するように記されている。
nginx.conf に /etc/nginx/site-enable にある設定ファイルを include するようになっている。
直接/etc/nginx/site-enable に設定ファイルを置くこともできるのだけれど、
/etc/nginx/sites-available/ に設定ファイルを置いて、/etc/nginx/site-enable にリンクさせるようだ。
/etc/nginx/sites-enabled/default ファイルはサンプルなので、unlink しておく。
sudo ln -s /etc/nginx/sites-available/dname /etc/nginx/sites-enabled/
sudo unlink /etc/nginx/sites-enabled/default
Nginxの設定ファイルが正しいかテストする。
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Nginxの設定ファイルが正しかったら、設定をリロードして設定を有効化する。
sudo systemctl reload nginx
Nginx と PHP が正しく動作しているか確認しておく。
ウエブルートに
info.phpを作る
nano /var/www/dname/info.php
info.php の内容は下のように
ウエブブラウザからアクセスすると、PHPの情報が表示される。
http://dname/info.php
IP アドレスとサイト名の名前解決ができていない時は、IPアドレスでアクセスしてみる
http://192.168.0.30/info.php # アドレスはサンプル
PHPからのデータベース接続のテスト
PHPがMySQLに接続してデータベースクエリを実行できるかどうかをテストする。
adminという名前のユーザー , deta_dbというデータベースを作成しますしかし、これらの名前を異なる値に置き換えることができます。
$ sudo mysql
mysql> CREATE DATABASE deta_db;
Query OK, 1 row affected (0.02 sec)
mysql のユーザーを作成しパスワードを設定する。
mysql> CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'password';