LoginSignup
1
0

More than 1 year has passed since last update.

EC2(Ubuntu)上のRedmineコンテナをSSLで公開するまで

Last updated at Posted at 2022-03-06

EC2(Ubuntu)上で、RedmineコンテナをSSLで公開するまでの手順をまとめた。

環境

  • AWS EC2 (Ubuntu Server 20.04 LTS (HVM), SSD Volume Type)
  • Docker (version 20.10.12, build e91ed57)
  • docker-compose (version 1.29.2, build 5becea4c)
  • Apache 2.4.41 (Ubuntu)
  • Redmine 4.2.4.stable
  • certbot 0.40.0

EC2インスタンス作成

AMIにUbuntuを選択し、インスタンスタイプにt2.microを選択して起動する。
スクリーンショット 2022-03-06 23.32.32.png
スクリーンショット 2022-03-06 23.33.28.png

Elastic IP アドレスの関連付け

作成したEC2インスタンスにEIPを関連付け、パブリックIPを固定化する。
詳細はAWS公式サイト参照。

Apacheインストール

SSHでUbuntuにログインし、Apacheをインストールする。

$ sudo apt update && sudo apt upgrade -y && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
$ sudo apt install apache2 -y

Apacheがインストール後に起動確認していることを確認する。

$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
     Active: active (running) since Sat 2022-03-05 13:55:44 UTC; 21h ago
       Docs: https://httpd.apache.org/docs/2.4/
   Main PID: 39249 (apache2)
      Tasks: 55 (limit: 1147)
     Memory: 11.7M
     CGroup: /system.slice/apache2.service
             ├─39249 /usr/sbin/apache2 -k start
             ├─41392 /usr/sbin/apache2 -k start
             └─41393 /usr/sbin/apache2 -k start

curlコマンドで、HTTPリクエストが受け付けられることを確認する。

$ curl localhost

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <!--
    Modified from the Debian original for Ubuntu
    Last updated: 2016-11-16
    See: https://launchpad.net/bugs/1288690
  -->

: 省略

</html>

セキュリティグループでHTTPポート開放

セキュリティグループのインバウンドルールを編集して、HTTP(80)ポートを開放する。
詳細はAWS公式サイト参照。

ブラウザ上からの疎通確認

ブラウザ上から、EC2のパブリック IPv4 DNS名を指定して、Apacheサーバーへアクセスし、HTTPリクエストを受け付けることを確認する。
s3.png

ドメイン名取得

任意のドメイン名取得サービスを利用して、EIPと紐づけるドメイン名を取得する。今回は、無料のドメイン名を利用するため、Freenomを利用する。
Register a New Domainを選択
スクリーンショット 2022-03-06 23.40.11.png
任意のドメイン名を入力して、利用可能かをチェック
スクリーンショット 2022-03-06 23.41.23.png
トップレベルドメインの中から、任意のドメインを選択して、Get it now!選択
スクリーンショット 2022-03-06 23.41.56.png
Checkoutを押下
スクリーンショット 2022-03-06 23.43.01.png
Use DNSから、ドメイン名に対応するIPアドレスを入力してContinue
スクリーンショット 2022-03-06 20.41.40.png
I have read and agree to Teams & Conditionsにチェック後、Complete Order押下
スクリーンショット 2022-03-06 23.48.45.png

※DNS設定は反映まで数時間〜72時間程度かかる。

nslookupでDNS適用確認

nslookupコマンドで、DNS適用を確認する。
適用前

$ nslookup docker-redmine.tk
Server:		127.0.0.53
Address:	127.0.0.53#53

** server can't find docker-redmine.tk: NXDOMAIN

適用後

$ nslookup docker-redmine.tk
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
Name:	docker-redmine.tk
Address: 54.238.xx.xx

ドメイン名を指定してHTTPアクセス確認

curlコマンドで、ドメイン名を指定してHTTPリクエストを受け付けるか確認する。

$ curl http://docker-redmine.tk/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
: 以降、省略

certbotを利用してSSL証明書取得

certbotをインストールして、Let's Encryptの無料SSL証明書を取得する。

$ sudo apt install certbot python3-certbot-apache -y
$ #以下のコマンドを用いて、SSL証明書を取得する
$ #certbot-auto certonly --webroot -w [ApacheのDocumentRoot] -d [取得したドメイン名] --email [管理者メールアドレス] -n --agree-tos --debug
$ certbot-auto certonly --webroot -w /var/www/html -d docker-redmine.tk --email your-account@gmail.com -n --agree-tos --debug

SSL証明書の適用

Apacheの設定ファイルで、作成したSSL証明書を適用する。

$ sudo vim /etc/apache2/sites-available/docker-redmine.tk.conf

設定ファイル内容

<VirtualHost *:80>
  ServerName docker-redmine.tk
  RewriteEngine on
  RewriteRule (.*)?$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>

<VirtualHost *:443>
  ServerName docker-redmine.tk

  <Proxy *>
    Require all granted
  </Proxy>

  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/docker-redmine.tk/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/docker-redmine.tk/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/docker-redmine.tk/chain.pem
</VirtualHost>

設定ファイルのリロード

$ sudo systemctl reload apache2

セキュリティグループでHTTPSポート開放

セキュリティグループのインバウンドルールを編集して、HTTPS(443)ポートを開放する。
なお、HTTP(80)ポートのインバウンドルールについては、不要であればこのタイミングで削除する。

HTTPSリクエスト受付確認

curlコマンドを利用して、HTTPSリクエストを受け付けるか確認する。

$ curl https://docker-redmine.tk/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
: 以降、省略

dockerのインストール

dockerをインストールする。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
$ sudo apt install docker-ce -y

dockerサービス起動確認

$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
     Active: active (running) since Sun 2022-03-06 11:00:33 UTC; 1h 52min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 45440 (dockerd)
      Tasks: 12
     Memory: 62.4M
     CGroup: /system.slice/docker.service
             └─45440 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/con>

次回のログイン時からdockerコマンドをsudoなしに実行するための設定を行う。

$ sudo usermod -aG docker ${USER}

dockerコマンド実行確認

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

docker-composeのインストール

docker-compose(1.29.2)をインストールする。

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

Redmine用のdocker-compose.yml編集

Redmineのコンテナを作成するdocker-compose.ymlを編集する。

$ mkdir redmine && cd redmine
$ vim docker-compose.yml

docker-compose.ymlの内容

version: '3.1'

services:
  redmine:
    image: 'redmine:latest'
    restart: always
    ports:
      - '3000:3000'
    volumes:
      - './redmine-files:/usr/src/redmine/files'
    environment:
      REDMINE_DB_POSTGRES: redmine-db
      REDMINE_DB_DATABASE: redmine
      REDMINE_DB_USERNAME: redmine
      REDMINE_DB_PASSWORD: redmine
      TZ: Asia/Tokyo

  redmine-db:
    image: 'postgres:latest'
    restart: always
    volumes:
      - './redmine-db-data:/var/lib/postgresql/data'
    environment:
      POSTGRES_ROOT_PASSWORD: redmine
      POSTGRES_USER: redmine
      POSTGRES_PASSWORD: redmine
      POSTGRES_DATABASE: redmine
      TZ: Asia/Tokyo

Redmineコンテナ起動

docker-composeを使って、Redmineコンテナをバックグラウンドで起動する。

$ docker-compose up -d

コンテナ起動確認

docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                       NAMES
3a48fb781c59   redmine:latest    "/docker-entrypoint.…"   25 seconds ago   Up 23 seconds   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   redmine_redmine_1
a1ff7df30033   postgres:latest   "docker-entrypoint.s…"   25 seconds ago   Up 23 seconds   5432/tcp                                    redmine_redmine-db_1

curlコマンドで、3000ポート指定でRedmineサービスの起動を確認する。

$ curl localhost:3000
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>Redmine</title>
: 以降、省略

Apacheのmod_proxyでポートフォワード

Apacheの設定ファイルを編集し、コンテキストルート「/」にアクセスした際に、Redmineの3000ポートへフォワードさせる。

$ sudo vim /etc/apache2/mods-enabled/proxy.conf

設定ファイルの編集内容

<IfModule mod_proxy.c>
        ProxyRequests Off
        <Proxy *>
           AddDefaultCharset off
           Order deny,allow
           Deny from all
           Allow from all
        </Proxy>
        ProxyPass / http://localhost:3000/
        ProxyPassReverse / http://localhost:3000/
</IfModule>

Apacheのサービス再起動を実行する。

$ sudo systemctl restart apache2

curlコマンドで、コンテキストルートにHTTPSでアクセスした際、Redmineのページへフォワードされることを確認する。

$ curl https://docker-redmine.tk/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>Redmine</title>
: 以降、省略

ブラウザから、HTTPSでRedmineアクセス確認

HTTPS指定でブラウザからドメイン名を指定してアクセスする。
スクリーンショット 2022-03-06 23.01.23.png
スクリーンショット 2022-03-06 22.57.52.png
※Redmineの初期ログインID/パスワードは共に「admin」

注意事項

Redmineを快適にサービス提供するための動作環境は、メモリは最低4GB以上あったほうが良い。今回は無料で環境構築を済ませるため、EC2のインスタンスタイプをt2.micro(メモリ1GB)としたが、このままだと動作が非常に重く、使い物にならない。利用ユーザー数をもとに、適切なインスタンスタイプを選択する必要がある。

1
0
0

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
1
0