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
3
Help us understand the problem. What are the problem?
Organization

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

はじめに

スクリーンショット 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. あくまでもおもっています 

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
3
Help us understand the problem. What are the problem?