ubuntu20.04 LEMP環境構築

linux

最近ubuntuの20.04にLEMPを入れたので、その記録。

既存パッケージのアップグレード

まずは既存のパッケージをアップグレードする。

# apt update
# apt upgrade

mysqlのインストール。デフォルトで8.xがインストールされるので、5.x系を使いたい場合は注意。

# apt install -y mysql-server

起動の確認。

# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1326
Server version: 8.0.23-0ubuntu0.20.04.1 (Ubuntu)

php-fpmのインストール

php-fpmとphp関連パッケージをインストールする。今回は7.4系をインストール。

# apt install php7.4-fpm php7.4-cli php7.4-mysql php7.4-mbstring php7.4-curl php7.4-xml php7.4-json php7.4-gd php7.4-zip phpunit

設定ファイルを変更する必要がある場合は変更し、php-fpmを起動する。

# vi /etc/php/7.4/fpm/php-fpm.conf
# service php7.4-fpm restart

SSL証明書の作成

Lets Encryptを使って証明書を作成する。ドメイン名はIPでは認証を通してくれないので、事前にサーバのIPをDNSに登録しておく必要がある。何等かのwebサーバが起動している場合、もしくは80ポートを使用しているサービスがある場合は停止しておく。SSLを使わない場合はここは不要。

# apt-get install certbot
# certbot certonly --standalone -t --register-unsafely-without-email

nginxのインストール

続いてnginxのインストール。

# apt install nginx

設定ファイルを変更する。

# cd /etc/nginx
# cp nginx.conf nginx.conf.org
# vi nginx.conf

今回はphp-fpmに関連する部分とログフォーマットをLTSV(タブ区切り出力)にする部分を追加。

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;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        server_tokens off;
        client_max_body_size 20M;

        # 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
        ##
        log_format  ltsv  'time:$time_iso8601\t'
                          'host:$remote_addr\t'
                          'method:$request_method\t'
                          'uri:$request_uri\t'
                          'status:$status\t'
                          'size:$body_bytes_sent\t'
                          'reqtime:$request_time\t'
                          'apptime:$upstream_response_time\t'
                          'referer:$http_referer\t'
                          'ua:$http_user_agent\t';
                          #'request_body:$request_body\t';

        access_log /var/log/nginx/access.log ltsv;
        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;

        upstream phpfpm {
            server unix:/run/php/php7.4-fpm.sock fail_timeout=0;
        }

        ##
        # Virtual Host Configs
        ##

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


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
# 
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}

次にドメインの個別サーバ設定ファイルを作成。

# vi /etc/nginx/sites-available/www.example.com

以下の例ではドメインは「www.example.com」としている。

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.example.com;

    access_log  /var/log/nginx/www.example.com.access.log  ltsv;
    error_log   /var/log/nginx/www.example.com.error.log;

    #ssl on;
    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

    root /var/www/www.example.com;

    location / {
        index index.php index.html;
        try_files $uri $uri/ $uri?$args /index.php?$uri&$args /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass  phpfpm;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

有効にする為、site-enabledにシンボリックリンクを張る。

# cd /etc/nginx/sites-enabled/
# ln -s /etc/nginx/sites-available/www.example.com www.example.com

設定ファイルの内容を確認後、起動する。

# nginx -t
# service nginx start

適当な起動確認用のファイルを置いて、動作すれば完了。

$ cd /var/www/www.example.com
$ vi test.php
<?php phpinfo();

コメント

タイトルとURLをコピーしました