Ubuntu 18.04LTSでWordPressを使うまでのメモ

過去に Ubuntu 14.04LTS,Ubuntu 16.04 LTSでLEMP環境で使う場合のメモ書きとして投稿しましたが、今回Ubuntu 18.04 LTSが出たので、最新の情報に更新しておきます。まず、構築する構成は以下のとおり
  • Ubuntu 18.04 LTS
  • Nginx(Let’s Encrypt で TLS 1.2 HTTP2対応)
  • PHP 7.2
  • MariaDB 10.3
今回はさくらのVPS上にカスタムOSとして Ubuntu 18.04をインストールした直後を想定します。

・NTPサーバーの設定

正確な時間は大事です

ntpdを入れる

sudo apt-get install ntp

ntpの設定

sudo vi /etc/ntp.conf
serverの項目に下記のものを入れておきましょう
server ntp.nict.jp
日本の標準時を作っているNICT(情報通信研究機構)のNTPサーバーなので正確かと。sakuraのVPSを使ってるなら ntp1.sakura.ad.jp が経路的に近いので良いかと。

・SSH周りの設定

ssh で、rootログインを無効にし、google Authenticatorの2段階認証を導入する。(注:2段階認証を設定する場合は、必ずNTPサーバー設定後にする)

Google Authentication を導入

sudo apt-get install libpam-google-authenticator

Google Authentication を有効化

sudo vi /etc/pam.d/sshd
@include common-authとなっている下の行辺りに以下を追記
auth required pam_google_authenticator.so

sshdの設定変更

sudo vi /etc/ssh/sshd_config
Port 10022 # ポート22から任意のポートへ
PermitRootLogin no # rootでのログインをオフに
PasswordAuthentication no #パスワードでのログインをオフ
ChallengeResponseAuthentication yes #google authenticatorを使う為
ここまでsshd_configの設定をしたら、今度はgoogleのキーを作成して2段階認証できるようにします
google-authenticator
画面の指示に従い、スマホにキーを登録できればOK、万が一の緊急キーも控えておくように。 ここまで設定したら一度マシンを再起動しましょう。
sudo shutdown -r now

・NGINXを導入

ubuntuのリポジトリにあるnginxはバージョンが古いため、最新のものを公式から拾うようapt-getにリポジトリ追加をする。
sudo vi /etc/apt/sources.list.d/nginx.list
ここで、開発中の最新版と安定版の2つのリポジトリが存在するため、使用用途や好みでどちらかを設定する。(私は最新版を利用)Stable version(安定板)
deb [arch=amd64] http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/ bionic nginx
Mainline version(最新版)
deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx
このままインストールをしようとすると、depパッケージのGPGキーエラーが出てインストールできない為、GPGキーをインポートしておく

GPGキーインポートのために gnupg2をインストール

sudo apt-get install gnupg2

GPGキーをインポート

wget -O - http://nginx.org/keys/nginx_signing.key | sudo apt-key add -

aptパッケージ一覧を更新し、nginxをインストール

sudo apt-get update
sudo apt-get install nginx

PHPインストール

sudo apt-get install php7.2-cgi php7.2-mysql php7.2-gd php7.2-apcu php7.2-fpm php-pear php7.2-xmlrpc php7.2-mbstring
まずはnginxでPHPを動かす為のphp-fpmの設定から

php-fpmの設定

sudo vi /etc/php/7.2/fpm/php-fpm.conf
下記の部分を書き換える
events.mechanism = epoll #コメントアウトする

php-fpmの設定2

sudo vi /etc/php/7.2/fpm/pool.d/www.conf
下記の部分を書き換える
user = nginx #ユーザーをnginxへ
group = nginx #グループもnginxへ
listen = /run/php/php7.2-fpm.sock
listen.owner = nginx #ソケットユーザーをnginxへ
listen.group = nginx #ソケットグループもnginxへ
listen.mode = 0660 #ソケットのアクセス制限をかける
現状ソケット利用が一番安定してるかと。 設定が終わったら、php-fpmを再起動
sudo systemctl restart php7.2-fpm
あとはnginxの設定をする(webのディレクトリは/var/www配下に任意のディレクトリを置く) web用のホームディレクトリを作成
sudo mkdir /var/www/ #/var/wwwを作成
sudo mkdir /var/www/html
sudo chown -R nginx:nginx /var/www
改めて、web設定
sudo vi /etc/nginx/conf.d/default.conf
あくまでも参考例です
server {
    listen 80;
    listen [::]:80;#ipv6
    server_name 自分のドメイン;
    root /var/www/html;
    index index.html index.htm index.php;

 # Let's Encrypt設定用
    location /.well-known/acme-challenge/ { allow all; }
 #httpsへのリダイレクト
    location / { return 301 https://$host$request_uri; }

    location ~ /.ht { deny all; #.htから始まるファイルのアクセス禁止 }
    location = /robots.txt { access_log off; log_not_found off; } #robots.txtへの404エラーを記録しない
    location = /favicon.ico { access_log off; log_not_found off; } #favicon.icoへの404エラーを記録しない } 
ssl設定
sudo vi /etc/nginx/conf.d/default_ssl.conf
あくまで参考例です
server {
    listen  443 ssl http2;
    listen [::]:443 ssl http2;#ipv6
    server_name  自分のドメイン;
    root        /var/www/html;

    ssl_protocols TLSv1.2;#TLS1.2のみ
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/dhparam.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout  10m;
    ssl_ecdh_curve X25519:secp521r1:secp384r1;

    ssl_certificate     /etc/letsencrypt/live/自分のドメイン/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/自分のドメイン/privkey.pem;


    ssl_stapling on;
    ssl_stapling_verify on;

    ssl_trusted_certificate /etc/letsencrypt/live/自分のドメイン/fullchain.pem;

    resolver 133.242.0.3 133.242.0.4 valid=30s; #サーバに設定してるDNSのIPを入れる
    resolver_timeout 10s;

    ssl_session_tickets     on;
    ssl_session_ticket_key     /etc/nginx/ticket.key;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;

    # Useful for Let's Encrypt
    location /.well-known/acme-challenge/ { allow all; }

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

    rewrite /wp-admin$ $scheme://$host$uri/ permanent;

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 24h;
        log_not_found off;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass    unix:/run/php/php7.2-fpm.sock;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
    location = /robots.txt  { access_log off; log_not_found off; }
    location = /favicon.ico { access_log off; log_not_found off; }
}
DH鍵交換に使用するパラメータファイルの生成
sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048
TLS Session Ticketsを有効にするため、48バイトのランダムデータの鍵ファイル生成
sudo openssl rand 48 > /etc/nginx/ticket.key

Let’s Encrypt導入

sudo apt-get install cartbot
nginxを止める
sudo systemctl stop nginx
鍵の生成
ertbot certonly --standalone -d 自分のドメイン
画面の指示通りメールアドレスの入力やライセンスの同意、広告メールの選択をするnginxの起動
sudo systemctl start nginx
鍵の更新ができるか確認
certbot certonly --webroot --must-staple --staple-ocsp -d 自分のドメイン -w /var/www/html/
選択が出るので2のRenewで鍵の自動更新スクリプトを作成
sudo vi /etc/cron.daily/letsencrypt-renew
ファイルの中身
#!/usr/bin/env bash
certbot renew
systemctl reload nginx
実行権限をつけて設定を読み込む
sudp chmod +x /etc/cron.daily/letsencrypt-renew
sudo systemctl restart cron

maria db

maria dbも公式からDLします。以下URLを参考にhttps://downloads.mariadb.org/mariadb/repositories/#mirror=yamagata-university&distro=Ubuntu&distro_release=bionic–ubuntu_bionic&version=10.3
sudo apt-get install software-properties-common sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/10.3/ubuntu bionic main'
リポジトリ登録が済んだら実際にインストールしましょう
sudo apt-get update
sudo apt-get install mariadb-server
インストール後は初期設定を
sudo mysql_secure_installation
あとは、レンタルサーバー同様にWordpressをインストールhttp://wpdocs.osdn.jp/WordPress_のインストールenjoy!
投稿日:
カテゴリー: IT

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください