![見出し画像](https://assets.st-note.com/production/uploads/images/145532719/rectangle_large_type_2_8a490d48bed58416f55fc54644cc5633.png?width=1200)
LNMP環境構築—クラウドサーバ(Ubuntu)
1.LNMP アーキテクチャの概要
LNMP は、現在主流の Web サイト サーバー アーキテクチャの 1 つで、電子商取引 Web サイト、ソーシャル ネットワーク、コンテンツ管理システムなど、大規模で同時実行性の高い Web サイト アプリケーションの実行に適しています。 LNMP は、それぞれ Linux、Nginx、MySQL、PHP の略である。
2.LNMP アーキテクチャの原理プロセス
![](https://assets.st-note.com/img/1720102416861-LIZrUd2GZP.png)
1.ブラウザがHTTPリクエストを送信
まず、ユーザーがブラウザに URL を入力して Enter キーを押すと、ブラウザは HTTP リクエストをサーバーに送信する。このリクエストには、特定の URL、クエリ パラメータ、リクエスト メソッド (GET、POST など)、およびその他のヘッダー情報を含めることができる。
2.Nginx サーバーがリクエストを処理する
Nginx は、多数の同時接続を処理できる高性能 Web サーバーである。 Nginx は HTTP リクエストを受信すると、設定ファイル内のルールに従ってリクエストを処理する。一般的な処理方法には、静的リソースの提供やリバース プロキシなどがある。要求されたリソースが静的リソース (HTML ページ、画像、CSS ファイルなど) の場合、Nginx はこれらのリソースをローカル ファイル システムから直接提供する。リクエストされたリソースが動的である場合 (PHP ページなど)、Nginx はリクエストをバックエンド サーバーに転送して処理する。
3.PHP-FPM により PHP コードを処理
PHP-FPM は、PHP スクリプトの実行を処理する PHP FastCGI プロセス マネージャーである。 Nginx がリクエストを PHP-FPM に転送すると、PHP-FPM は PHP スクリプトを実行する新しいプロセスを作成する。このプロセスは、FastCGI プロトコルを使用して Nginx と通信し、スクリプトの出力を Nginx に返す。
4.MySQLデータベースへのアクセス
PHP スクリプトを処理する場合、データベース アクセスが関係する場合がある。 LNMP アーキテクチャでは、MySQL がデータベース サーバーとして使用される。 PHP スクリプトは、PDO や MySQLi などのデータベース拡張機能を介して MySQL データベースに接続し、操作できる。
5.ブラウザに応答を返す
最後に、PHP スクリプトが実行されると、PHP-FPM はスクリプトの出力を Nginx に返す。 Nginx はこの応答をブラウザに送り返し、ブラウザは応答の内容を解析してレンダリングする。応答が HTML ページの場合、ブラウザは HTML ドキュメント内のタグとスタイルに従ってページをレンダリングする。応答が画像やビデオなどのリソースの場合、ブラウザはこれらのリソースを直接表示する。
3.LNMP構築
前提条件
LNMP 環境をデプロイする場合、既存の クラウド サーバ インスタンスは次の条件を満たす必要がある:
手动部署LNMP环境时,已有云服务器实例必须满足以下条件:
インスタンスにはPbulic IP アドレスが割り当てられているか、Elastic Public IP に関連付けられているか。实例已分配公网IP地址或绑定弹性公网IP。
OSは必ずUbantu。 操作系统必须为Ubuntu。
インスタンス セキュリティ グループのインバウンドルールでは、ポート 22、80、および 443 が許可されている。实例安全组的入方向规则已放行22、80、443端口。
3.1 Linux
まず、システムが最新であることを確認:
更新Ubuntu系统内的软件包:
sudo apt update
sudo apt upgrade
3.2 Nginx
Nginx は、高性能 HTTP サーバーおよびリバース プロキシ サーバーである。Nginxは静的コンテンツの配信や動的コンテンツの処理、負荷分散、SSL/TLS終端、キャッシュなど、さまざまな用途に広く使われている。特に大規模なウェブサイトやアプリケーションのインフラストラクチャーでの利用が一般的である。
3.2.1 Nginx のインストール
以下のコマンドでNginx をインストール:
运行以下命令,安装Nginx:
sudo apt install nginx
インストールが成功したかどうかを確認:
sudo systemctl status nginx
Nginx が正常にインストールされ実行されている場合は、次のような出力が表示される:
![](https://assets.st-note.com/img/1719587297311-KTkbmTkfNk.png?width=1200)
3.2.2 Nginx バージョン確認
运行以下命令,查看Nginx版本:
nginx -v
Nginx が正常にインストールされた場合は、次のような出力が表示される:
返回结果类似如下所示,表示Nginx已成功安装:
![](https://assets.st-note.com/img/1719587345240-0Jg1sSnhDP.png?width=1200)
3.2.3 Nginx デフォルトページテスト
ブラウザでサーバーの IP アドレスまたはドメイン名 (http://your_server_ip など) にアクセスし、 Nginx が正常にインストールされ、正常に実行されている場合は、Nginx のデフォルトのようこそページが表示され、次のような内容が表示される:
![](https://assets.st-note.com/img/1719553404600-OYKZ7W57IQ.png?width=1200)
3.2.4 Nginx 配置ファイル確認
次のコマンドを使用して、Nginx 配置ファイルが有効かどうかを確認:
sudo nginx -t
配置ファイルに問題がない場合は、次のような出力が表示される:
![](https://assets.st-note.com/img/1719587444280-DKunDZMq3E.png?width=1200)
配置ファイルのパスは /etc/nginx/nginx.conf 。
3.2.5 nginx.conf 確認
cat /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
/etc/nginx/conf.dに配置ファイルが含まれるということが分かった。
3.3 MySQL
3.3.1 MySQL インストール
次のコマンドを実行して MySQL をインストール:
sudo apt install mysql-server mysql-client
y を入力すると、システムは MySQL サーバーとそれに関連する依存パッケージをインストールする:
![](https://assets.st-note.com/img/1719590925645-W0LajfgWkV.png?width=1200)
3.3.2 MySQL ステータス確認
systemctl コマンドを使用して、MySQL サービスのステータスを確認:
sudo systemctl status mysql
MySQL が正常にインストールされ実行されている場合は、次のような出力が表示される:
![](https://assets.st-note.com/img/1719553709923-EgJagYv2L8.png?width=1200)
3.3.3 MySQL バージョン確認
mysql --version
出力:
![](https://assets.st-note.com/img/1719553763092-SKvbyx18Ua.png?width=1200)
3.3.4 MySQL ポート確認
デフォルトでは、MySQL はポート 3306 で待機する。次のコマンドを使用して、MySQL がこのポートでListenしているかどうかを確認する:
sudo netstat -tulnp | grep mysql
sudo ss -tuln | grep 3306
出力:
![](https://assets.st-note.com/img/1719591019092-PJdoPlZD5Y.png?width=1200)
出力は、MySQL がポート 3306 および 33060 でListenしていることを示している。これは、MySQL が正常にインストールされ、実行されていることを意味する。
3.3.5 MySQL 自動的開始
sudo systemctl start mysql
sudo systemctl enable mysql
3.3.6 MySQL セキュリティインストール
sudo mysql_secure_installation
コマンドラインプロンプトに従って、次の設定項目を順番に完了する。
1.y を入力して VALIDATE PASSWORD コンポーネントを有効にする。これには、パスワードを設定するときに特定の複雑さの要件が必要となる。
输入Y,设置密码验证策略
![](https://assets.st-note.com/img/1719591186709-61OLIAFTMJ.png?width=1200)
2.プロンプトに従って、パスワード検証戦略を選択する。
![](https://assets.st-note.com/img/1719591252249-BB1TKpOps2.png?width=1200)
3.y を入力し、匿名ユーザを削除
![](https://assets.st-note.com/img/1719591646808-HMTJojuLfG.png?width=1200)
4.y を入力して、MySQL root ユーザーのリモート ログイン権限を無効
![](https://assets.st-note.com/img/1719591681005-tm8nAZqd8h.png?width=1200)
5.y を入力して、test データベースを削除
![](https://assets.st-note.com/img/1719591727857-9OVRsr87Vd.png?width=1200)
6.y を入力して認可テーブルをリロード
![](https://assets.st-note.com/img/1719591757567-IBmimbZPOp.png?width=1200)
7.All done! 表示したら、配置完成
![](https://assets.st-note.com/img/1719591830817-4PUYv6fCA7.png?width=1200)
3.3.7 MySQL パスワード設定
sudo mysql
root ユーザーのパスワードを設定して終了する:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '<password>';
exit;
パスワードを入力し、MySQL ログイン
sudo mysql -uroot -p
3.4 PHP
3.4.1 PHP インストール
次のコマンドを実行して PHP をインストール:
sudo apt install php-fpm php-mysql php-gd php-xml
3.4.2 PHP バージョン確認
php -v
返される結果は以下のようになり、PHP が正常にインストールされたことがわかりる:
![](https://assets.st-note.com/img/1719587706415-LhbDRs03b7.png?width=1200)
3.4.3 PHP-FPM ステータス確認
次のコマンドを使用し、PHP-FPM のステータスを表示する:
systemctl status php8.3-fpm
PHP-FPM が実行されている場合は、次のような出力が表示される:
![](https://assets.st-note.com/img/1719587773085-qNhahsF6Y0.png?width=1200)
実行されていない場合は、次のコマンドを使用して起動できる:
sudo systemctl start php8.3-fpm
3.4.4 Nginx 構成ファイルをバックアップ
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.back
3.4.5 Nginx 配置ファイル変更
sudo vim /etc/nginx/sites-available/example.com
# or
sudo vim /etc/nginx/conf.d/example.conf
i を押して編集モードに入り、Nginx 構成ファイルを変更する
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Esc キーを押して編集モードを終了し、「wq」と入力して Enter キーを押してファイルを保存して終了する。
3.4.6 Nginx サービス再起動
次のコマンドを実行して、Nginx サービスを再起動する:
sudo systemctl restart nginx
# or
sudo nginx -s reload
3.4.7 仮想ホスト構成読み取る
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
3.4.8 Nginx 配置ファイルテスト
sudo nginx -t
3.4.9 PHP テスト
次のコマンドを実行して、Nginx Web サイトのルート ディレクトリ「/var/www/html」に新しい 「phpinfo.php」 ファイルを作成する:
sudo vim /var/www/html/info.php
次の内容をファイルに追加:
<?php
phpinfo();
Nginx を再起動し、変更を有効にする
sudo systemctl restart nginx.service
設定ファイルをリロード
sudo nginx -s reload
3.4.10 PHP ページ
ホストでブラウザを開く。
ブラウザのアドレスバーに http://<クラウドサーバのパブリック IP アドレス>/phpinfo.php と入力してアクセスする。
アクセス結果は次の図のようになる。PHP 構成情報ページが正常に表示され、LNMP 環境が正常に展開されたことがわかる。
![](https://assets.st-note.com/img/1719590151385-IYP9148pGR.png?width=1200)
LNMP 環境のセットアップが正常に完了したら、データ漏洩のリスクを排除するために「 phpinfo.php」 テスト ファイルを削除することをお勧めする。
sudo rm -rf /var/www/html/phpinfo.php
3.5 Pure-FTPd
Pure-FTPd は、無料 (BSD)、安全、高品質、標準準拠の FTP (ファイル転送プロトコル) サーバー。ホスティングプロバイダーだけでなく一般ユーザーのニーズを満たすシンプルなソリューションを提供する。
3.5.1 FTP インストール
sudo apt update
sudo apt install pure-ftpd
3.5.2 FTPステータス確認
sudo systemctl status pure-ftpd
Active: active (running),これは、Pure-FTPd が正常にインストールされ、実行されている。
![](https://assets.st-note.com/img/1720106443356-YBrkYaPvMA.png?width=1200)
3.5.3 リスニングポート
Pure-FTPd が FTP をリッスンするデフォルトのポートは 21 。
sudo ss -tuln | grep 21
![](https://assets.st-note.com/img/1720106536758-YxPkehhiqV.png?width=1200)
3.5.4 ユーザーとグループを作成
ftpuser という名前のユーザーを作成し、ftpgroup グループに追加し、そのルート ディレクトリを /var/www/html として指定し、ログイン シェルを /sbin/nologin に設定する。
sudo groupadd ftpgroup
sudo useradd -g ftpgroup -d /var/www/html -s /sbin/nologin ftpuser
# or
sudo useradd -g ftpgroup -d /usr/share/nginx/html/wordpress -s /sbin/nologin ftpuser
sudo passwd ftpuser
3.5.5 Pure-FTPd セットアップ
sudo vim /etc/pure-ftpd/pure-ftpd.conf
次のように設定する。
# 匿名ユーザーのログインを無効
NoAnonymous yes
# ローカルユーザーのログインを許可
UnixAuthentication yes
# 仮想ユーザーを有効
PureDB /etc/pure-ftpd/pureftpd.pdb
# chrootを有効
ChrootEveryone yes
# パッシブモードを有効にしポート範囲を指定
PassivePortRange 30000 35000
# TLS起動
TLS 1
3.5.6 TLSセットアップ
SSL/TLS証明書を生成:
sudo mkdir -p /etc/ssl/private
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
sudo chmod 600 /etc/ssl/private/pure-ftpd.pem
openssl req コマンドを実行すると、SSL/TLS 証明書のサブジェクトの作成に使用される情報の入力を求めるプロンプトが表示される。
これらのフィールドでは、特定の情報を入力したくない場合は、プロンプトが表示されたら Enter キーを押してスキップするか、 と入力して空白のままにする。 (明示的に必要な場合を除き、お勧めしない)。
![](https://assets.st-note.com/img/1720107357590-8vX1u7zGoa.png?width=1200)
3.5.7 仮想ユーザーデータベースを作成
sudo pure-pw useradd wpuser -u ftpuser -g ftpgroup -d /var/www/html
sudo pure-pw mkdb
ルートディレクトリが /var/www/html である仮想ユーザー wpuser を作成しする。
3.5.8 ファイル権限設定
sudo chown -R ftpuser:ftpgroup /var/www/html
sudo chmod -R 755 /var/www/html
3.5.9 Pure-FTPd 再起動
sudo systemctl restart pure-ftpd
3.5.10 FTPクライアントを使用して接続
3.6 phpMyAdmin
筆者はDjangoの専門家なので、今回phpMyAdminを割愛する。
3.9 SSL認証
3.9.1 Certbot インストール
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx
3.9.2 SSL 申請
sudo certbot --nginx -d yourdomain.com
3.9.3 Nginx セットアップ
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/wordpress;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
3.9.4 Nginx テスト
sudo nginx -t
3.9.5 SSL 自動更新
Let’s Encrypt の証明書の有効期限は 90 日間で、Certbot は自動更新機能を提供している。 cron ジョブを追加して、証明書を定期的に確認および更新する。
sudo systemctl status certbot.timer
自動更新タスクがない場合は、cron ジョブを手動で作成。
sudo crontab -e
Certbot 更新チェックを毎日実行。
0 0 * * * /usr/bin/certbot renew --quiet
3.8 まとめ
sudo apt update
sudo apt upgrade
sudo apt install nginx
sudo systemctl status nginx
nginx -v
sudo nginx -t
sudo apt install mysql-server mysql-client
sudo systemctl status mysql
mysql --version
sudo systemctl start mysql
sudo systemctl enable mysql
sudo mysql_secure_installation
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '<password>';
exit;
sudo apt install php-fpm php-mysql php-gd php-xml
php -v
systemctl status php8.3-fpm
sudo systemctl restart nginx
# or
sudo nginx -s reload
4.LNMP ワンクリックインストール
インストール
sudo wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && sudo ./install.sh lnmp
or
sudo wget https://soft.lnmp.com/lnmp/lnmp2.1.tar.gz -O lnmp2.1.tar.gz && tar zxf lnmp2.1.tar.gz && cd lnmp2.1 && ./install.sh lnmp
LNMPA または LAMP をインストールする必要がある場合は、./install.sh の後のパラメータ lnmp を lnmpa または lamp に置き換える。
上記の LNMP インストール コマンドを実行すると、次のプロンプトが表示さる:
![](https://assets.st-note.com/img/1719822059313-7XcrdUqAhE.png?width=1200)
現在、より多くの MySQL および MariaDB バージョンが提供されており、データベースをインストールしないオプションも用意されている。MySQL 5.6、5.7、および MariaDB 10 は、1G を超えるメモリのより高いスペクで選択する必要があることに注意してください。
対応する MySQL または MariaDB バージョンの前にシリアル番号を入力し、Enter キーを押して次の手順に進む。
MySQLのrootパスワードを設定する必要がある
![](https://assets.st-note.com/img/1719822113507-A79FpYTw8Y.png?width=1200)
MySQL InnoDB を有効にする必要があるかどうかを尋ねる。InnoDB エンジンはデフォルトで有効になっており、Enter キーを押すか、エンジンが必要ない場合は y を入力することを推薦する。入力が完了したら Enter キーを押して次のステップに進む。
![](https://assets.st-note.com/img/1719822176994-5yBYp4LHFM.png?width=1200)
PHP7 などの上位バージョンを選択する場合は、それがプログラムと互換性があるかどうかを確認する必要がある。選択する PHP バージョンのシリアル番号を入力する。
![](https://assets.st-note.com/img/1719822381403-VgCFqSauX7.png?width=1200)
対応するシリアル番号を入力して Enter キーを押すと、デフォルトではインストールしない。
![](https://assets.st-note.com/img/1719822241025-8qPpwUwJs5.png?width=1200)
Nginx: OK,MySQL: OK,PHP: OK
![](https://assets.st-note.com/img/1719596784229-Dsteuhf5OM.png)
Nginx、MySQL、および PHP がすべて実行されており、ポート 80 と 3306 が存在し、インストール時間が表示され、「Install lnmp V1.4」が完了したことを意味する。