Soyukke.Dev

2020-07-19

docker-composeでhttps対応させてGenieアプリを公開する

作成したGenieアプリをdocker-composeでhttps対応させて公開しているので方法を紹介.

コードはここ

https://github.com/Soyukke/DockerGenieApp

ディレクトリ構成

├── GenieApp # Genieアプリ
├── Dockerfile # Genieアプリを実行するためのイメージ作成用Dockerfile
├── docker-compose.yml # サーバでデプロイする用
└── docker-compose.dev.yml # ローカルで実行する用

Dockerfile

FROM julia:1.3.1

# 日本語表示用
RUN mkdir /GenieApp && \
    apt-get update && \
	apt-get install -y locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8

ENV LANG="ja_JP.UTF-8"
ENV LANGUAGE="ja_JP:ja"
ENV LC_ALL="ja_JP.UTF-8"

# Genieアプリの環境変数.ここでは"dev"でポートは8000にしておく.
ENV GENIE_ENV "dev"
ENV HOST "0.0.0.0"
ENV PORT "8000"

# 作業ディレクトリ
WORKDIR /GenieApp

# パッケージ情報だけあらかじめコピーしてPkg.instantiate()して必要なパッケージをダウンロードしておく
COPY ["./GenieApp/Project.toml", "./GenieApp/Manifest.toml", "/GenieApp/"]
RUN julia --project=. -e "using Pkg; Pkg.instantiate(); Pkg.precompile()"

# 残りのGenieアプリのファイルをコピーしてくる
COPY ./GenieApp /GenieApp

# 起動時にサービス実行
CMD ["bin/server"]

デプロイ用の docker-compose.yml

version: "3"
services:

    certfront:
        image: hoto17296/certfront
        ports:
            - 80:80
            - 443:443
        environment:
            DOMAIN: example.com # Change this
            EMAIL: example@example.com # Change this
            APP_HOST: genieapp
        volumes:
            - certs:/etc/letsencrypt
        depends_on:
            - genieapp
    
    genieapp:
        build: .
        volumes:
            - ./GenieApp:/GenieApp
        environment:
            - GENIE_ENV=prod
            - HOST=0.0.0.0
            - PORT=80

volumes:
    certs:
        driver: local

サーバーへのHTTPリクエストをcertfrontがリバースプロキシしてくれるのでgenieappの80ポートを使ってサービスを公開すれば,https化が可能です.

genieappの環境変数に改めてGENIE_ENV=prodPORT=80でポートを指定しなおしている.

デプロイ

開発したファイルたちをすべてDockerがインストールされているサーバに置く.

docker-compose.ymlがあるフォルダへ移動し

docker-compose up -d

で起動する.これでドメインにアクセスできる.

ローカル実行用のdocker-compose.yml

version: "3"
services:

    genieapp:
        build: .
        volumes:
            - ./GenieApp:/GenieApp
        environment:
            - GENIE_ENV=dev
            - HOST=0.0.0.0
            - PORT=8000
        ports: 
            - 8000:8000

docker-composeでこのファイルを指定すればGenieアプリを起動できる.

docker-compose -f .\docker-compose.dev.yml up -d  

ポート8000にポートフォワーディングしているのでlocalhost:8000にアクセスして動作確認できる.

volumeを共有しているのでホスト側でコーディングしながらDockerで実行して動作確認しながら開発できる.

参考

certfront

https://qiita.com/hoto17296/items/773fe3cc001a610dbb96

カテゴリー