Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What are the problem?

posted at

updated at

【GCP】お手軽無料! HTTPS の Redmine docker

【2020/12/30 再び追記】結果的に無料だった

2020/03/14 に固定外部IP有料化と記事を更新しましたが、実質無料のようです。
有料に変更にはなったのですが、「無料」という扱いから「有料だけど、割引するよ」という形になったようです。
実質無料スタイルになったみたいですね。

概要

Redmine&docker-compose で、HTTPS を使いたいと思って調べたのですが、ドンピシャな情報がありませんでした。

Container-Optimized OS にて docker-compose コンテナなど使って試行錯誤しましたが、上手く行かなかったので通常のVMにて。

GCP上の無料枠で構築。証明書がオレオレなので、半分くらい真面目な構築です。

小さいインスタンスの割に意外とサクサク動く HTTPS 無料 Redmine。

GCP は新規作成でなくともよいが、GCE の Always Free 枠が空いていることが前提です。(無料がいいなら)

GCP登録

GCE は作成するにあたって、無料トライアルを登録必須。
GCPプロジェクトを作成。
1.png

インスタンス作成

Compute Engine ページで VM 作成。

2.png

さて、GCE の無料枠は以下のように (2019-06-13 現在) 書いてあるので、当てはまるように。

3.png

今回は↓のようにしました。

4.png

ここで注意したいのが、ディスクの容量はデフォルト10Gになっていますが、30Gまで無料 なのでせっかくなら30Gに変更しましょう。

「720時間が無料」ということは、30日間無料。

31日まである月は、ご丁寧にここが744時間になります。

まずはスワップファイル作成

無事に VM が作成完了。

メモリが非常に少ないので、スワップで補います。

$ sudo fallocate -l 4G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

オレオレ証明書作成

次に、SSH で中に入り証明書を作成。

5.png

サクッといきます。
最後の工程は結構時間がかかる(ことが多い)。

$ mkdir -p ~/redmine-docker/volumes/redmine/certs
$ cd ~/redmine-docker/volumes/redmine/certs
$ openssl genrsa -out redmine.key 2048
$ openssl req -new -key redmine.key -out redmine.csr
.
.
.
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shibuya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Redmine Test Corp.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:redmine.sample.local
Email Address []:
A challenge password []:
An optional company name []:

$ openssl x509 -req -days 3650 -in redmine.csr -signkey redmine.key -out redmine.crt
Signature ok
.
.
.
$ openssl dhparam -out dhparam.pem 2048
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.
.
.

タイムゾーンをJSTに

$ sudo apt-get install -y dbus
$ sudo timedatectl set-timezone Asia/Tokyo

docker と docker-compose をインストール

docker 公式手順 に従ってインストールします。

docker インストール

$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
$ sudo apt-get update
$ sudo apt-get install -y docker-ce docker-ce-cli containerd.io # ←気長に待つ
$ sudo usermod -aG docker $USER

ユーザーのdockerグループ追加の反映のために、ここで一旦SSHを抜ける (SSHウインドウを閉じる)。
そして再度SSHで中に。

$ docker run hello-world
.
.
.
Hello from Docker!
.
.
.

無事に docker のインストールが完了。
sudo なしで docker コマンドが実行できるようになりました。

ちなみに、docker グループへのユーザー追加はセキュリティの問題があるので注意しておきましょう。
詳しくは各自調べてください。

docker-compose インストール

$ sudo -i
# curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# exit
$ docker-compose --version
docker-compose version 1.24.0, build 0aa59064

無事に docker-compose もインストールが完了。

Redmine 用の docker-compose.yml 作成

~/redmine-docker/docker-compose.yml を作成します。

ブラウザ上のviで貼り付けようとすると (少なくとも私は) 上手くいかなかったので、右上の歯車アイコンから、作成したファイルを直接アップロードすると楽でした。

9.png

~/redmine-docker/docker-compose.yml
version: '2'
services:
  postgresql:
    image: sameersbn/postgresql:9.6-4
    environment:
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production

  redmine:
    image: sameersbn/redmine:4.0.3-2
    depends_on:
    - postgresql
    environment:
    - TZ=Asia/Tokyo

    - DB_ADAPTER=postgresql
    - DB_HOST=postgresql
    - DB_PORT=5432
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production

    - REDMINE_PORT=443
    - REDMINE_HTTPS=true
    - REDMINE_RELATIVE_URL_ROOT=
    - REDMINE_SECRET_TOKEN=
    - NGINX_HSTS_MAXAGE=2592000

    - REDMINE_SUDO_MODE_ENABLED=false
    - REDMINE_SUDO_MODE_TIMEOUT=15

    - REDMINE_CONCURRENT_UPLOADS=2

    - REDMINE_BACKUP_SCHEDULE=
    - REDMINE_BACKUP_EXPIRY=
    - REDMINE_BACKUP_TIME=

    ports:
    - 443:443
    - 80:80
    volumes:
    - ./volumes/redmine/certs:/home/redmine/data/certs

ホームにアップロードされるので、 ~/redmine-docker/ 内にファイルを移動します。

$ mv ~/docker-compose.yml ~/redmine-docker/docker-compose.yml

起動も気長に待ちましょう。

$ cd ~/redmine-docker/
$ docker-compose up -d

さて、GCEの外部IPのところをクリックしてアクセスすると…
7.png

オレオレ証明書のワンクッション。

詳細設定から「~ にアクセスする(安全ではありません)」を選択。
6.png

無事にオレオレ証明書を使用した Redmine が出来上がりました。

管理者
初期ID:admin
初期PW:admin
8.png

[参考]
https://sakura-bird1.hatenablog.com/entry/2019/03/12/034152
https://github.com/sameersbn/docker-redmine

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
12
Help us understand the problem. What are the problem?