LEMP(Linux+Nginx+MySQL+PHP)環境の構築(1)

前回までの流れもそうでしたが、「me-el作ってみた」カテゴリの一連の記事は me-el の開発後(まだまだやりたいことが残っていますが)に振り返って書いています。

ぼんやりと考えていた構成(要件)は以下です。

  • Apache はリクエストごとにプロセスが起動されると聞いていたので Nginx にしたい。
  • Nginx は軽快だが動的サイトは苦手という情報がある。が、初期画面表示後は REST API で情報を取得し、グラフを更新する程度なので問題ないと思う。
  • 毎回 GUI (Web 画面)から「統計ダッシュボード」へ通信してデータ抽出すると、負荷コントロールがしづらくなるので(さほど利用者が増えるとも思わないが)、都道府県レベルの情報はすべてバッチ処理で抽出して DB に登録したい。
  • バッチ処理は勉強を兼ねて Python を利用したい。
  • レンタルサーバーに載せて公開することを視野に入れているが、PhpMyAdmin も同じ Web サーバーで動かしたい。
  • 必然的に Web サイトは PHP で開発する。PHP の勉強も兼ねる。

というわけでまずはローカル開発環境に Nginx + PHP と入れていきます。

Nginx

インストールだけであれば簡単です。(そろそろ sudo は割愛していきます。)

$ apt update
$ apt upgrade
$ apt install nginx

インストール後、ブラウザから http://localhost へアクセスし、Nginx の Welcome 画面がでることを確認します。

Nginx のインストールによって、/var/www/html フォルダが作成され、中に index.nginx-debian.html が配置されます。この .html がブラウザに表示されています。

ここで、Nginx の設定周りを理解しておきましょう。/etc/nginx/nginx.conf をエディタで開きます。VSCode で開いても OK

$ cd /etc/nginx
$ nano nginx.conf

以下が中身で(後半に続くコメントのみ行は割愛)、ひとまず抑えておくべきポイントを後述します。

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


#mail {
#	# See sample authentication script at:
説明
1実行ユーザが www-data
4/etc/nginx/modules-enabled/*.conf を読み込んで利用
39access_log の出力先
40error_log の出力先
59/etc/nginx/conf.d/*.conf を読み込んで利用(仮想ホスト設定用)
60/etc/nginx/sites-enabled/* を読み込んで利用(仮想ホスト設定用)

以下を抑えておくとよさそうです。

  • access_log や error_log の出力先
  • 実行ユーザを意識する必要があるケースがでてくるかもしれない(サーバ上のファイルI/Oなど)
  • 他にも読み込まれるファイルがあり、その結果最終的な構成となる

また Nginx では /etc/nginx/sites-availables/ 下に設定ファイルを書いて、/etc/nginx/sites-enabled 下にはリンクを貼ることでメンテナンス時に一部の仮想ホストを無効化する、という形で制御をしやすくする流儀になっています。

次回 PHP をインストールし設定をしていきます。