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


【2022-04-05 追々記】

つい先日、再度無料で構築すべく、同じ工程をやってみました。
下記リンクのほうが新しいコンソール画面にもなっているので、こちらも参考にして下さい。
https://daylifehack.com/gcp-redmine-371/

【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プロジェクトを作成。

インスタンス作成

Compute Engine ページで VM 作成。

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

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

ここで注意したいのが、ディスクの容量はデフォルト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 で中に入り証明書を作成。

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

$ 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) <[email protected]>
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で貼り付けようとすると (少なくとも私は) 上手くいかなかったので、右上の歯車アイコンから、作成したファイルを直接アップロードすると楽でした。

~/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のところをクリックしてアクセスすると…

オレオレ証明書のワンクッション。
詳細設定から「~ にアクセスする(安全ではありません)」を選択。

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

管理者
初期ID:admin
初期PW:admin

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