カテゴリー: Server

WordPressとRailsアプリケーションを相乗りさせた時の話


はじめに

先日、現在開発中のアプリケーションのステージング環境の構築を行ないました。

ステージング環境はこのブログのサーバと相乗りさせています。
今回はその際に行ったNginxの設定とSSL化を中心に紹介します。

デプロイ設定は下記をご確認ください。
https://re-engines.com/2017/07/14/capistrano3/

前提条件

CentOS 7.3
nginx 1.10.2

ruby 2.4.1
rails 5.1.0
unicorn 5.3.0
 

サブドメインを設定する

お名前.comでサブドメインを設定しました。

サブドメインの取得は「DNS関連機能の設定」でドメインを選択後、「DNSレコード設定を利用する」から設定できます。

今回は仮に「my-app.re.enines.com」としておきます。
 

Nginxの設定

ステージング環境用の設定

/etc/nginx に sites_enabled というディレクトリを作成し、そこにステージング環境用のNginxの設定ファイルを作成します。

注意点として、unicornのpidの場所は /tmp 以外のディレクトリにします。
http://blog.tnantoka.com/posts/49/versions/current

server {
    listen 80;
    listen [::]:80;
    server_name my-app.re-engines.com;
    root  /home/engines/www/my-app-server/current/public;

    proxy_buffers 64 16k;
    proxy_max_temp_file_size 1024m;
    proxy_temp_path /dev/shm/nginx_proxy_temp;

    proxy_connect_timeout 5s;
    proxy_send_timeout 10s;
    proxy_read_timeout 10s;

    location ~ ^/assets/ {
        root /home/engines/www/my-app-server/shared/public;
    }

    location / {
        try_files $uri @app;
    }

    location @app {
        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-Host  $host;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # NginxとUnicorn間で/tmpを共有できない
        proxy_pass http://unix:/home/engines/www/my-app-server/shared/tmp/sockets/unicorn.sock;
    }
}

ステージング環境の設定を読み込ませる

設定ファイルを作成後、既存のNginxの設定ファイルに作成した設定ファイルを読み込むようにします。

http {
  # 省略
  include sites-enabled/*.conf;
}

Nginxの再起動

設定後、設定ファイルの確認を行います。

$ sudo nginx -t -c /etc/nginx/nginx.conf
[sudo] password for engines:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

問題がなければNginxを再起動します。

$ sudo systemctl restart nginx.service

 

SSL化する

ブログサーバはすでにLet’s Encryptでサーバ証明書を取得しています。
ステージング環境用のサーバ証明書を取得することもできますが、今回はブログとステージング環境を一つの証明書でまかないます。

ルーティングの追加

ステージング環境用のNginxの設定ファイルを修正します。
Let’s Encryptは指定されたパスに認証ファイルを作成し、それをLet’s EncryptのサーバからGETリクエストで取得することで認証を行なっていそうなので、
ルートディレクトリの設定を行います。
http://qiita.com/kamemory/items/958fdbc220359c341a23

server {
    # 追加
    location ^~ /.well-known/acme-challenge/ {
        root /home/engines/www/my-app-server/;
    }
}

設定後、Nginxを再起動します。

サーバ証明書の発行

下記のコマンドを実行し、証明書を発行します(事前にLet’s Encryptをインストールしておきます)

$ /home/engines/tools/letsencrypt/certbot-auto certonly --webroot -w /home/engines/www/re-engines -d re-engines.com -w /home/engines/www/my-app-server -d my-app.re-engines.com

ステージング環境をSSL化

ステージング環境用のNginxの設定ファイルを修正します。

# 追加
server {
    listen 80;
    liste [::]:80;
    server_name my-app.re-engines.com;
    rewrite ^(.*) https://my-app.re-engines.com$1 permanent;
}

server {
    # 修正
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name my-app.re-engines.com;
    root  /home/engines/www/my-app-server/current/public;

    # 追加
    ssl_certificate "/etc/letsencrypt/live/re-engines.com/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/re-engines.com/privkey.pem";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
    ssl_prefer_server_ciphers on;

    # 省略
}

修正後、Nginxを再起動します。
これでステージング環境にhttpsでアクセスできるようになります。
 

さいごに

WordPressとRailsアプリケーションを相乗りさせ、SSL化しました。

Hiroki Ono

シェア
執筆者:
Hiroki Ono

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前