🎷

Dockerで作るおうちLAN遊び場 - シリーズ投稿1/7

2022/12/26に公開約4,400字

Introduction

シリーズで投稿していくこの記事では、Dockerを用いていろいろなサービスを走らせて遊んでいるおうちLAN上のセットアップを紹介します。Dockerでいろいろ試してみたい、またGitLabやGitLab Runner、GitLab Pagesも触ってコーディングなり書物なりいろいろ遊んでみたいという方に楽しんで頂けると思います。

シリーズを通していろいろなサービスを走らせていきますが、私はすべて立ち上げっぱなしの小さなファンレスPCで実行しています。シリーズで紹介するものの半分は2万円あたりで購入した4GBメモリのPCで記事の内容を追って同じように実行できます。シリーズ後半、GitLabを走らせる段になると16GBメモリの2台目PCを登場させますが、8GBでも十分でしょう。いろいろ遊べる、身につく、立ち上げたサービスは日常でずっと使えるということを考え、個人的にはとてもお得だと感じており、1, 2台でどれだけ遊べるかという点で参考にしてもらえると嬉しいです。

なおシリーズで紹介していくセットアップと私の現実のセットアップで一つ大きな違いを予め紹介すると、私はドメインを買っているのでインターネット越しに、外出していてもおうちLAN上のサービスを利用できるようにしています。このシリーズ内ではプライベートなCA、self-signed certificateを用いたセットアップで紹介していきますので、ドメイン購入は不要です。

End-state Illustration

こちらがシリーズ完了後のセットアップです。サービスはすべてDocker上で走らせます。

Docker Containers

以下がシリーズ内でセットアップしていくサービスとなり、利用するDockerイメージ名は記事の中で都度記載します。

  • DNS
  • Jupyter Notebook
  • GitLab
  • GitLab Runner
  • Nginx
  • Authelia

Series Overview

シリーズの大枠としては次のような流れとなります。

  • DNS and Jupyter Notebook Using Docker
    • Jupyter Notebook立ち上げ
    • DNSサービス立ち上げ
    • DNSレコードを追加して、名前でJupyter Notebookサービスに接続
  • Nginx Using Docker
    • Nginxでリバースプロキシサーバ構築
    • 追加のJupyter NotebookやGhostブログサービスなどを立ち上げ、リバースプロキシ経由でアクセスできるよう設定
  • Enabling https access on Nginx reverse proxy
    • CA、自己署名証明書など用意し、リバースプロキシ経由のサービスアクセスを全てhttps化
  • Adding authentication for web service access
    • MFA認証サービス立ち上げ
    • リバースプロキシに認証を組み込み、リバースプロキシ経由のサービスアクセスに認証を追加
  • Running GitLab on Docker
    • GitLab立ち上げ、リバースプロキシ経由でアクセスできるよう設定
  • GitLab Runner and GitLab Pages
    • GitLab CI/CDを回してくれるGitLab Runner立ち上げ、いくつか例を紹介
    • GitLab Pages立ち上げ、リバースプロキシ経由でアクセスできるよう設定
    • GitLab RunnerでStatic Site Generatorを用いてウェブサイトを生成し、GitLab Pagesでサーブさせる例を紹介

Machine Setup

シリーズの内容を追っていくにはDockerおよびDocker ComposeをインストールしたPCを1, 2台用意すればよいです。私の場合はDebianをsshを有効にした状態の最小インストールで利用しており、デスクトップサービスは用意せず、普段使いのラップトップよりsshでアクセスして利用しています。以下で私がいじった設定を簡単に紹介し、最後にDockerとDocker Composeのインストール手順も紹介します。

sudo

Ubuntuはsudoが最初からあった気がしますが、今回利用するDebianではsudoをインストールし、普段遣いのユーザでsudoできるよう設定しました。

su -
apt install sudo
gpasswd -a {your username} sudo

IP Address

固定IPアドレスを設定するのにsudo vi /etc/network/interfacesでコンフィグファイルを編集します。以下の私の例ではインタフェース名がenp2s0で、固定IPアドレスは192.168.1.56としています。このLANのゲートウェイは192.168.1.1です。

# The primary network interface
allow-hotplug enp2s0
#iface enp2s0 inet dhcp
iface enp2s0 inet static
address 192.168.1.56
netmask 255.255.255.0
gateway 192.168.1.1

DNS

DNS設定ファイルをsudo vi /etc/resolv.confで編集して、どのDNSサーバを利用するか設定します。シリーズ早々にDNSサーバを立ち上げて、後にそちらを利用するよう向けかえますが、まずはISPが提供しているものなりCloudflare, Googleが提供している1.1.1.1, 8.8.8.8なりを設定しておきます。

options rotate
nameserver 1.1.1.1
nameserver 8.8.8.8

Docker

Dockerのインストール手順は公式ドキュメントの通りです。ここで参照しているのはDebianの分ですが、他のOS向けの手順も公式ドキュメントにあります。

https://docs.docker.com/engine/install/debian/

https://docs.docker.com/compose/install/

まずは必要なパッケージをインストール。

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

GPG keyを追加。

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Stableパッケージを利用するよう設定。

echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker, Docker Composeをインストールし、通常ユーザでdockerを実行できるよう設定。

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo groupadd docker
sudo usermod -aG docker $USER

Closing

1つ目の投稿は以上です。次の投稿ではDockerを使ってDNSサーバとJupyter Notebookを動かします。

next: DNS and Jupyter Notebook Using Docker

Discussion

ログインするとコメントできます