RemineをHerokuにデプロイしたい人生でした
昔こんなエントリを書きました。
今回はそれをDockerでコンテナ作って Herokuにデプロイして みる。
MySQLのコンテナを使ったため、ClearDBというプラグインを入れないとHerokuにデプロイできず、
これを利用する際に無料ではあるが、クレジットカードの登録が必須になっている模様。
したがってデプロイは以前作成したRedmineプロジェクトを利用することにした。
ここではDockerでRedmineをローカル開発環境で立ち上げるところまで紹介します。
docker image
以下から取得します。
最新のバージョンにしました(4.2.1)。
dockerfileをローカルのディレクトリに保存して以下のコマンドを実行します。
docker build -t redmine .
以下のエラーになりました。
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
WSL2とDocker Desktopが連携できていない?(docker composeは動いていたのに。。。?)
一回すべてプロセス?を落として再起動します。
PS C:\Users\USER> wsl -l -v NAME STATE VERSION * Ubuntu Stopped 2 docker-desktop Stopped 2 docker-desktop-data Stopped 2 PS C:\Users\USER> wsl -l -v NAME STATE VERSION * Ubuntu Running 2 docker-desktop Running 2 docker-desktop-data Running 2
再度実行すると以下のエラーになります。
[+] Building 9.5s (13/13) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 3.83kB 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/ruby:2.7-slim-buster 9.3s => [auth] library/ruby:pull token for registry-1.docker.io 0.0s => CANCELED [1/8] FROM docker.io/library/ruby:2.7-slim-buster@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.0s => => resolve docker.io/library/ruby:2.7-slim-buster@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.0s => => sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1.86kB / 1.86kB 0.0s => => sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1.37kB / 1.37kB 0.0s => => sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 5.74kB / 5.74kB 0.0s => [internal] load build context 0.0s => => transferring context: 2B 0.0s => CACHED [2/8] RUN groupadd -r -g 999 redmine && useradd -r -g redmine -u 999 redmine 0.0s => CACHED [3/8] RUN set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates w 0.0s => CACHED [4/8] WORKDIR /usr/src/redmine 0.0s => CACHED [5/8] RUN set -eux; [ ! -d "/home/redmine" ]; mkdir -p "/home/redmine"; chown redmine:redmine "/hom 0.0s => CACHED [6/8] RUN set -eux; wget -O redmine.tar.gz "https://www.redmine.org/releases/redmine-4.2.1.tar.gz"; 0.0s => CACHED [7/8] RUN set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no 0.0s => ERROR [8/8] COPY docker-entrypoint.sh / 0.0s ------ > [8/8] COPY docker-entrypoint.sh /: ------ failed to compute cache key: "/docker-entrypoint.sh" not found: not found
DOCKER_BUILDKIT=0をつけて実行する。
DOCKER_BUILDKIT=0 docker build -t redmine .
Sending build context to Docker daemon 5.632kB Step 1/16 : FROM ruby:2.7-slim-buster 2.7-slim-buster: Pulling from library/ruby 69692152171a: Already exists 0a1f774fea41: Pull complete 3b32b9ebaa42: Pull complete 8115e4beca50: Pull complete f6fc87221cc8: Pull complete Digest: sha256:796bb81XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX5d7553e3b8e3006c Status: Downloaded newer image for ruby:2.7-slim-buster ---> 6a0c8bc5079b Step 2/16 : RUN groupadd -r -g 999 XXXXXX && useradd -r -g XXXXXX -u 999 XXXXXX ---> Running in dXXXXXXX5faf Removing intermediate container dXXXXXXX5faf ---> 7eXXXXXXXXX1 Step 3/16 : RUN set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates wget bzr git mercurial openssh-client subversion ghostscript gsfonts imagemagick gosu tini ; sed -ri 's/(rights)="none" (pattern="PDF")/\1="read" \2/' /etc/ImageMagick-6/policy.xml; rm -rf /var/lib/apt/lists/* ---> Running in 3aXXXXXXXXb8f + apt-get update Get:1 http://deb.debian.org/debian buster InRelease [121 kB] Get:2 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB] Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB] Get:4 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB] Reading package lists... E: Release file for http://security.debian.org/debian-security/dists/buster/updates/InRelease is not valid yet (invalid for another 6d 22h 27min 0s). Updates for this repository will not be applied. E: Release file for http://deb.debian.org/debian/dists/buster-updates/InRelease is not valid yet (invalid for another 6d 20h 34min 43s). Updates for this repository will not be applied. The command '/bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates wget bzr git mercurial openssh-client subversion ghostscript gsfonts imagemagick gosu tini ; sed -ri 's/(rights)="none" (pattern="PDF")/\1="read" \2/' /etc/ImageMagick-6/policy.xml; rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100
Release file for ~ is not valid yet
で調べたら以下が出た。
$ hwclock 2021-06-05 22:49:41.944759+09:00 $ sudo hwclock --hctosys $ hwclock 2021-06-05 22:50:31.948921+09:00
変わってなさそうだけど、とりあえず再実行すると先に進む。
Step 12/16 : VOLUME /usr/src/redmine/files ---> Running in XXXXXXXXX Removing intermediate container 5cb9ce07f1e0 ---> XXXXXXXXXX Step 13/16 : COPY docker-entrypoint.sh / COPY failed: file not found in build context or excluded by .dockerignore: stat docker-entrypoint.sh: file does not exist
$ touch docker-entrypoint.sh
Successfully built XXXXXXXXXX Successfully tagged redmine:latest
うまくいったっぽい。
あとで正式にdocker-entrypoint.shをコピーしておく。
前回もMySQL8系で落ちたところで躓いた。(全然覚えてないよね・・・)
MySQLのコンテナに入って、rootユーザの認証方法を従来のパスワードに変更する。
でーきた。
考察
今更かよって感じなのですが今回設定ファイル(Dockerfileとかdocker-compose.yml)でコンテナを起動しさえすれば最悪ファイル管理がいらないってのがメリットだと感じた。
なんで気が付いたのかというと、以前普通にredmineのディレクトリごとcloneしてきたんだけど、別にファイル自体はローカルにある必要性がないなと思っていて(ローカルで開発するわけじゃなくて箱として利用するだけだから)、今回Dockerfileとdocker-entrypoint.shだけでコンテナが立ち上がって普通にRedmineサービスを利用できたのに気が付いてこれがコンテナのメリットなんだと思った(ほんと今更)。
今まではdocker imagesも邪魔くさいと思って都度削除していたんだけど、imageがローカルにあるだけで起動、停止コマンドのみで環境が簡単に整備できちゃうのはやっぱりすごいなぁーって感じた。
インフラ知識は皆無なので引き続きがんばりたいしょぞんでございます。
ご覧いただきありがとうございました。
追記
今回のそもそもの目的は今のプロジェクトで端末管理をしたいという要望が出ていて、Redmineで簡単に管理できそうだなーって思ったから。
ただ無料で利用できるHerokuはDB制約があってpostgresのみのため、今回MySQLで簡単に作ったあとにデプロイできないじゃんって気がついたのでDockerでのHerokuデプロイはやめました。
で次に考えたのが以前Dockerなしで作ったRedmineのローカル環境を再度名前を変えてデプロイしようとおもったのだが、mimemagicのライセンス問題にここでぶつかってしまい、こちらも結構時間がかかりそうだなぁと思いつつダラダラ作業しています。
また進捗あれば報告したいと思います。
おわり。