LoginSignup
8
3

More than 1 year has passed since last update.

Dockerを使ってLivebookとGrafanaをサーバ上でイゴかす(もちろんHTTPS)

Last updated at Posted at 2021-09-15

はじめに

スクリーンショット 2021-09-15 22.34.01.png

できあがったもの

  • どうぞご自由にお使いください
  • Time4VPSLinux VPS - Linux 2 でイゴかしています
    • RAM: 2GB
    • OS: Ubuntu 20.04 LTS
    • 月額 3.99EUR
  • だれも使っていないであろう状態でメモリは以下のようになっていました
$ free -m
              total        used        free      shared  buff/cache   available
Mem:           1987         588         115          52        1283        1177
Swap:             0           0           0

Livebook

Grafana

構成図

docker-compose.yml

  • ここで、いきなり、docker-compose.yml.envを書いておきます
  • ここがこの記事のハイライトです
  • たったの2ファイルです
  • これだけでイゴきます
docker-compose.yml
version: "3.3"

services:
  nginx-proxy:
    image: nginxproxy/nginx-proxy
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - certs:/etc/nginx/certs
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro

  nginx-proxy-acme:
    image: nginxproxy/acme-companion
    container_name: nginx-proxy-acme
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - acme:/etc/acme.sh
      - certs:/etc/nginx/certs
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
    environment:
      - DEFAULT_EMAIL=${EMAIL}
      - NGINX_PROXY_CONTAINER=nginx-proxy
    depends_on:
      - nginx-proxy

  grafana:
    image: grafana/grafana
    container_name: grafana
    environment:
      - VIRTUAL_HOST=${GRAFANA_HOST}
      - VIRTUAL_PORT=3000
      - LETSENCRYPT_HOST=${GRAFANA_HOST}
      - LETSENCRYPT_EMAIL=${EMAIL}
    depends_on:
      - nginx-proxy-acme

  livebook:
    image: livebook/livebook:0.2.3
    container_name: livebook
    environment:
      - VIRTUAL_HOST=${LIVEBOOK_HOST}
      - VIRTUAL_PORT=8080
      - LETSENCRYPT_HOST=${LIVEBOOK_HOST}
      - LETSENCRYPT_EMAIL=${EMAIL}
      - LIVEBOOK_PASSWORD=enjoyelixirwearethealchemists
    depends_on:
      - nginx-proxy-acme

volumes:
  certs:
  vhost:
  html:
  acme:
.env
EMAIL=torifuku.kaiou@gmail.com
GRAFANA_HOST=grafana.torifuku-kaiou.app
LIVEBOOK_HOST=livebook.torifuku-kaiou.tokyo,livebook.torifuku-kaiou.app

Dockerのインストール

実行

  • 適当なディレクトリにdocker-compose.yml.envを格納しておきます
  • DNSの設定は済んでいるものとします
  • docker-compose configで正しく環境変数が埋め込まれてていることを確認しておきましょう
$ sudo docker-compose config

$ sudo docker-compose up -d

docker-compose.yml を書くまでにやったこと

  • 思い出を書いておきます
  • https://github.com/nginx-proxy/acme-companion/tree/7f1b75460d2a4ba9aa81e6da06c3119b41ef94db#readme に書いてあるdockerコマンドのサンプルをそのまままずサーバ上で実行してみました
  • そうすると、あっけなく成功したので自信を得て、docker-compose.ymlにしてみました
  • 一発で動いたわけではなく、エラーが発生してログとの格闘はあるにはありましたが、ここでは最終成果のみ書いておきます
  • 最初の実験はAzure 仮想マシンで実施しました
  • その公式に書いてあるコマンドは以下のようなもので、メールアドレスとホスト名は自分が使うものに置き換えました
$ sudo docker run --detach \
    --name nginx-proxy \
    --publish 80:80 \
    --publish 443:443 \
    --volume certs:/etc/nginx/certs \
    --volume vhost:/etc/nginx/vhost.d \
    --volume html:/usr/share/nginx/html \
    --volume /var/run/docker.sock:/tmp/docker.sock:ro \
    nginxproxy/nginx-proxy

$ sudo docker run --detach \
    --name nginx-proxy-acme \
    --volumes-from nginx-proxy \
    --volume /var/run/docker.sock:/var/run/docker.sock:ro \
    --volume acme:/etc/acme.sh \
    --env "DEFAULT_EMAIL=torifuku.kaiou@gmail.com" \
    nginxproxy/acme-companion

$ sudo docker run --detach \
    --name grafana \
    --env "VIRTUAL_HOST=docker-study-ip.westus.cloudapp.azure.com" \
    --env "VIRTUAL_PORT=3000" \
    --env "LETSENCRYPT_HOST=docker-study-ip.westus.cloudapp.azure.com" \
    --env "LETSENCRYPT_EMAIL=torifuku.kaiou@gmail.com" \
    grafana/grafanaa
  • ここでいろいろ詰まってしまうのではないかとヒヤヒヤしていたのですが、公式の記述がしっかりしているおかげで何も詰まることはなくすんなり成功体験ができました :tada::tada::tada::tada::tada:
  • $\huge{ありがとうございます!}$

スクリーンショット 2021-09-15 20.59.48.png

後記

  • 以前からLivebookhttps://livebook.torifuku-kaiou.tokyo にて全世界に公開していました
  • けっこう手動でやっていました
    • asdfによるErlang, Elixirのインストール
      • Erlangのインストールがけっこうハマりがち
    • Nginxのインストール
    • certbotのインストール
    • SSL証明書の取得(期限が近くなったら更新)
    • Livebookgit clone
    • Livebookが新しくなったらgit pull
    • とかとか
  • nginx letsencrypt docker composeでググってみて見つかった先人の方々の記事を読みました
    • ありがとうございます!
  • jwilder/nginx-proxyというDocker Imageを使うといいよという記事をたくさん目にしました
  • jwilder/nginx-proxyへアクセスすると、nginx-proxy/nginx-proxyにリダイレクトされました
  • あとは、nginx-proxy/nginx-proxyのほうを読み込みました
  • というか私にとってはむしろnginx-proxy/acme-companionのREADMEがとてもわかりやすかったです
  • docker-compose.ymlを書くときのImage名は最新のREADMEにあわせて書いてみました

Wrapping Up :lgtm::lgtm::lgtm::lgtm::lgtm:

  • 次は自作のPhoenixアプリをぶら下げてみようとおもいます2
  • Enjoy Elixir :rocket::rocket::rocket:

  1. イゴかす = 動かす。西日本の一部の方言(たぶん)。NervesJPではおなじみ 

  2. あくまでもおもっています 

8
3
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
8
3