LoginSignup
5
5

More than 3 years have passed since last update.

Centos7にNginx + Unicornで構築したRedmine3.3をLet's EncryptでSSL化対応

Last updated at Posted at 2016-10-06

[概要]

Redmineを無料SSLであるLet's Encryptに対応させる

[事前準備]

下記が構築であること
Centos7にNginx + UnicornでRedmine3.3構築方法

[作業内容]

Let's Encrypt クライアントをクローン

$ cd /opt
$ sudo git clone https://github.com/certbot/certbot

Let's Encrypt クライアントで必要なパッケージをインストール

$ cd certbot/
$ sudo ./certbot-auto

Let's Encrypt の設定を追記

$ sudo vi /etc/nginx/conf.d/redmine.conf

下記のようにlocationを追加する。

/etc/nginx/conf.d/redmine.conf
upstream unicorn-redmine {
    server unix:/opt/redmine/tmp/unicorn_redmine.sock;
}

server {
    listen 80;
    server_name Servername;

    root /opt/redmine/public;
    client_max_body_size 1G;

    location / {
        try_files $uri/index.html $uri.html $uri @app;
    }

    location @app {
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_connect_timeout 60;
        proxy_read_timeout 60;
        proxy_send_timeout 600;
        proxy_pass http://unicorn-redmine;
    }

    error_page 500 502 503 504 /500.html;

  location ^~ /.well-known/acme-challenge/ {
    root /usr/share/nginx/html;
  }
}

nginxの設定反映

$ sudo systemctl restart nginx

証明書取得のためのスクリプトを作成 1

下記を参考に適宜変更してください。

$ sudo vim /opt/letsencrypt.sh
#!/bin/bash

#証明書のドメイン(,区切りで複数のドメインも指定可能)
DOMAIN=example.com

#ドキュメントルート(上のドメインで接続可能である必要がある)
WEBROOT=/var/www/example.com/public_html

#メールアドレス(トラブル時にメールが届く)
EMAIL=info@example.com

/opt/certbot/certbot-auto certonly --webroot -w $WEBROOT -d $DOMAIN -m $EMAIL --agree-tos --non-interactive $*

スクリプトに実行権限付与

$ sudo chmod 755 /opt/letsencrypt.sh 

テスト実行

$ sudo /opt/letsencrypt.sh --dry-run
### --dry-run テストで実行する

下記のように表示されれば OK です。

 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/gitlab/fullchain.pem. Your cert
   will expire on 2016-12-25. To obtain a new or tweaked version of
   this certificate in the future, simply run certbot-auto again. To
   non-interactively renew *all* of your certificates, run
   "certbot-auto renew"

本番実行

$ sudo /opt/letsencrypt.sh

SSL設定ファイル

元からあったredmine.confを削除し、ssl設定ファイルを作成する。

$ sudo vim /etc/nginx/conf.d/ssl.redmine.conf
/etc/nginx/conf.d/ssl.redmine.conf
upstream unicorn-redmine {
    server unix:/opt/redmine/tmp/unicorn_redmine.sock;
}


server {
    listen 443 ssl;
    server_name {ドメイン};

    ssl_certificate     /etc/letsencrypt/live/{ドメイン}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/{ドメイン}/privkey.pem;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    root /opt/redmine/public;
    client_max_body_size 1G;

    access_log /var/log/nginx/ssl_access.log;
    error_log /var/log/nginx/ssl_error.log;

    location / {
        try_files $uri/index.html $uri.html $uri @app;
    }

    location @app {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header http:// https://;
        proxy_connect_timeout 60;
        proxy_read_timeout 60;
        proxy_send_timeout 600;
        proxy_pass http://unicorn-redmine;
    }

    error_page 500 502 503 504 /500.html;

    location ^~ /.well-known/acme-challenge/ {
      root /usr/share/nginx/html;
    }
}

設定ファイル確認

$ sudo nginx -t

設定ファイル反映

$ sudo systemctl restart nginx

[事後確認・作業]

下記にアクセスして表示されるのを確認する
https://{ドメイン} 

[参考サイト]

5
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5