script day.log

大学生がなんとなく始めた、趣味やら生活のことを記録していく。

WordPressの構築

こんにちは。
先日、ownCloudを構築したので、
次にすべきはWordPressの設置でしょう。
ちゃちゃっと終わるつもりだったのですが、
手こずったのでメモします。

前回行ったownCloudの構築

makose3p1229.hatenablog.com



Let's WordPress

まず環境としては、
WordPress & ownCloud on nginx + MariaDB + PHP7 + Let's Encrypt
です。

WordPressのダウンロード
$ cd 
$ wget http://ja.wordpress.org/latest-ja.tar.gz
$ tar -xzvf latest-ja.tar.gz
WordPress用のデータベースとユーザの作成
$ mysql
MariaDB[(none)]> CREATE DATABASE wordpress;
MariaDB[(none)]> GRANT ALL PRIVILEGES ON wordpress.* TO "admin"@"localhost" IDENTIFIED BY "adminpass";
MariaDB[(none)]> FLUSH PRIVILEGES;
MariaDB[(none)]> EXIT;
WordPressをインストー

WordPressをインストールするために、wp-config.phpを作成する。

$ cd wordpress
$ cp wp-config-sample.php wp-config.php
$ vi wp-config.php
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wordpress');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'admin');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'adminpass');

/** MySQL のホスト名 */
define('DB_HOST', 'localhost');

WordPressインストール!

cp -fr wordpress/ /usr/share/nginx/html

その後、WebブラウザにてWordPressサーバにアクセスしようとすると…
f:id:makose3p1229:20170716133906p:plain
これです。

先日の記事をしっかり読んで、内容を
理解している方なら、分かると思いますが、
nginxは.confにlocationを書く必要がありましたね。
ということで書くわけですが、ここにかなり苦労しました。
そして妥協もしました。
とりあえずはrootでなくaliasを書くことですね。
試行錯誤の末、以下のようになりました。

upstream php-handler {

    #server 127.0.0.1:9000;

    server unix:/var/run/php-fpm/php-fpm.sock;

}



server {

    listen 80;

    server_name cloud.example.com;

    # enforce https

    return 301 https://$server_name$request_uri;

}



server {

    listen 443 ssl http2;

    server_name cloud.example.com;



    ssl_certificate /etc/letsencrypt/live/cloud.example.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem;

    # Use 2048 bit Diffie-Hellman RSA key parameters

    # (otherwise Nginx defaults to 1024 bit, lowering the strength of encryption # when using PFS)

    # Generated by OpenSSL with the following command:

    # openssl dhparam -outform pem -out /etc/nginx/ssl/dhparam2048.pem 2048

    ssl_dhparam /etc/nginx/ssl/dhparam2048.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_prefer_server_ciphers on;

    ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !DH !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';

    ssl_session_cache    shared:SSL:10m;

    ssl_session_timeout  10m;

    ssl_stapling on;

    ssl_stapling_verify on;

    ssl_trusted_certificate /etc/letsencrypt/live/cloud.example.com/fullchain.pem;

    resolver 8.8.8.8;

    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';

    # Path to the root of your installation

    root /usr/share/nginx/html/owncloud;

    # set max upload size

    client_max_body_size 10G;

    fastcgi_buffers 64 4K;



    # Disable gzip to avoid the removal of the ETag header

    gzip off;



    # Uncomment if your server is build with the ngx_pagespeed module

    # This module is currently not supported.

    #pagespeed off;



    rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;

    rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;

    rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;



    index index.php;

    error_page 403 /core/templates/403.php;

    error_page 404 /core/templates/404.php;



    location = /robots.txt {

        allow all;

        log_not_found off;

        access_log off;

    }



    location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){

        deny all;

    }



    location / {

        # The following 2 rules are only needed with webfinger

        rewrite ^/.well-known/host-meta /public.php?service=host-meta last;

        rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;



        rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;

        rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;



        rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;



        try_files $uri $uri/ /index.php;

    }

    location /wordpress {
        alias /usr/share/nginx/html/wordpress;
        index  index.php;
        add_header X-Content-Type-Options nosniff;
        if (!-e $request_filename) {
            rewrite ^/wordpress(.+)$  /wordpress/index.php?q=$1 last;
            break;
        }
    }

    location ~ ^/wordpress/.+\.php$ {
        fastcgi_pass   php-handler;
        fastcgi_index  index.php;
        fastcgi_split_path_info ^/wordpress(.+\.php)(.*)$;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html/wordpress$fastcgi_script_name;
        fastcgi_intercept_errors on;
	fastcgi_param HTTPS on;
        include        fastcgi_params;
    }

    location ~ \.php(?:$|/) {

        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_param PATH_INFO $fastcgi_path_info;

        fastcgi_param HTTPS on;

        fastcgi_pass php-handler;

    }

    #Optional: set long EXPIRES header on static assets

    # location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {

    #     expires 30d;

    #     # Optional: Don't log access to assets

    #     access_log off;

    # }

    
}

キャッシュの設定などが不完全ですが、これで一応動作します。
正規表現などがいまいち理解できていないため、
非常に苦労しました。時間があるときに正規表現
マスターしておかないと困ると思いました。

さあ気を取り直して、WordPressサーバにアクセスします。

https://[WordPressサーバのIPアドレス]/wordpress/wp-admin/install.php

サイト名、ユーザ名、パスワード、メールアドレス入力画面を入力します。
最後のチェックボックスはチェックを入れることで
検索エンジンに引っからないようです。
ログインすると下記ダッシュボードが表示されました。

https://[WordPressサーバのIPアドレス]/wordpressにアクセスすると、
無事ブログサイトができていました。
ownCloudと同じserver nameに置くことで、このサイト自体にも、
Let's Encryptの恩恵が得られました。
ちなみにこの設定でSSL評価がA+を得られました。

いつかはキャッシュの設定を…

いまのところ、自分のnginxの設定ファイル(.conf)では、
キャッシュの設定をすべてコメントアウトしてあります。

問題と思われる部分

# Optional: set long EXPIRES header on static assets
  location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
    expires 30d;
    # Optional: Don't log access to assets
    access_log off;
  }
}

有効にすると、私の場合、WordPressのjsファイルやcssファイルが
読み込まれなかったからです。
近いうちに設定したいとは考えていますが、その前に一度サーバの
再構築が来そうな気がします。

WordPressを設定したってことは…

そうですね、このブログをお引っ越しするということですか?
とお考えの方もいらっしゃると思いますが、
いいえ、このブログを更新し続けますよ。
今回はただ設置したかっただけなのです。
ですので、これからもよろしくお願いします。