そうだ!手間を減らすため共通の開発環境を構築しよう!!
と思い立って、GitHubにDevBaseリポジトリを作りました。
気になった人はぜひ使ってみてください。使用するだけなら、紹介記事を書いていますのでそちらを見てお試しください。
この本では、DevBaseの仕組みについて解説しています。
何個かのプロジェクト作業をしていると、同じツールを立ち上げることがありました。その際ポート番号で各プロジェクトのサービスを振り分けていたのですが、ポート番号の一覧がなく被ったり、どのポートか忘れたりしたのでその解決策としてTraefikを導入しました。
またプロジェクトでメール送信のテストをする場合に自分のメールアドレスに送るのが面倒だし、宛先変更の機能がうまく動いているか見たくてMailHogのダミーメールボックスを使っています。
メール送信つながりで、社内サービスを構築しているのですが、間違えて社外にメールしてしまわないように宛先ドメインを絞りたくてExim4でドメインごとに送信先SMTPサーバーを切り替えるしくみを構築しました。
ついでに"http://*.localhost"ではなくコンテナからホストと同じURLで別コンテナにアクセスできるようにDnsmasqでローカルDNSを構築し、HTTPSを使うため自己証明書も作ってみました。
これらをまとめたものがdevbaseリポジトリとなっています。本書はここで使った各ツールの説明をしつつ、最終的にdevbaseを使ってもらうのを目的に書きました。
devbaseを使うことで、皆さんの開発初期の環境セットアップが楽になることを願っています。
提供するサービス
ツール | 提供サービス |
---|---|
Docker | コンテナ環境としてDocker Engineを利用。 コンテナを使うとホストの環境が汚れないし、他マシンへのポータビリティも高いのでなるべく使うようにしています。 いずれはクラウドを意識してKubernatesを勉強し、Dockerなしで環境を構築したいところです。 |
OpenSSL | 自己認証局・証明書を作るためOpenSSLを利用。 マルチドメイン&ワイルドカードに対応した証明書を作成し、ブラウザからアクセスで警告が出ないようにします。 OpenSSLの勉強としてコマンドを直接叩いていますが、世の中にはmkcertという便利なツールもあるようです。 |
Dnsmasq | 簡易DNSとしてDnsmasqを利用。 "*.test"の名前解決をして、ホストのIPアドレスを返すようにします。 もし"http://*.localhost/"だけであればChromeを使えばDNS不要です。(Safariはダメでした) |
socat | UDPトンネルとしてsocatを利用。 ColimaのSSHトンネルがUDPに対応していなかったので、回避策とします。 TCPトンネルのように自動でできるようになると便利ですが、そこまでの機能はまだありません。 |
Traefik | リバースプロキシとしてTraefikを利用。 "*.dev.test"のホスト名から対象のサービスを切り替えるようにします。 |
MailHog | Fake SMTPとしてMailHogを利用。 ダミーメールボックスとしてブラウザからメールを読めるようにします。 |
Exim4 | SMTPリレーとしてExim4を利用。 特定ドメイン宛のみ正規SMTPへリレーして、それ以外はMailHogにリレーします。 |
動作確認した環境
🍎Mac | 🪟Windows | 🐧Linux | |
---|---|---|---|
OS | macOS Monterey (12.3) | Windows 10 Home (21H2) | Ubuntu 20.04.4 LTS |
マシン | Mac mini (M1, 2020) | CHUWI LakeBox Pro (Celeron J4125) | WSL2 |
仮想マシン | Colima version 0.3.4 | WSL2 Ubuntu 20.04.4 LTS | - |
Docker | client: v20.10.13 server: v20.10.11 |
client: v20.10.14 server: 20.10.14 |
client: v20.10.14 server: 20.10.14 |
LinuxはWSL2上のUbuntuでしか確認していませんが、ほかのLinuxでも動くといいな。(パスは読み替える必要がありそう)
フォルダ構成
📂 devbase/
├── 📄.env(必要なら作る)
├── 📄compose.override.yaml(必要なら作る)
├── 📄compose.yaml
├── 📄sample.env
├── 📁dnsmasq/
├── 📁exim4/
├── 📁sslcert/
├── 📁traefik/
├── 📁udptunnel/
├── 📁util/
└── 📁wsl2/
各フォルダを以降の章で説明していきます。
各章の概要
Dockerの導入と各種設定
ベースとなるDockerのインストールやその後の設定を書いています。
インストール手順は公式に任せてここではチェックリスト的なまとめにしてあります。
その後の設定では、composeプラグイン、起動スクリプト、ルートフォルダ変更、プロキシ設定、ルートレスモード、ログローテーション、ポートフォワーディング、と実際の運用時に行った作業を書きました。
オレオレ証明書の作成とOSへの登録
TLS通信のために、opensslコマンドを利用して、自己認証局の作成&自己証明書の作成をするone-shotコンテナを作ります。
いわゆるオレオレ認証局やオレオレ証明書と呼ばれるものです。
作成した自己認証局をOSに登録して、ブラウザでアクセスしても警告が出ないようにします。
Dnsmasqの構築とOSへの登録
Traefikで使うための簡易DNSを設置します。ワイルドカードDNSとして、"*.dev.test"のホスト名解決をします。
構築したDNSサーバーをOSに登録して、実際に使えるようにします。
socatを使用したUDPトンネル
MacのColimaがUDPポートフォワーディングに対応していないので、socatを使って対応します。
WindowsのWSL2では不要ですが、こういうソフトがあるというのを知っておくと役に立つことがあるでしょう。
WSL2スタートアップ
Windows起動時にWSL2用の固定IPアドレス設定やデーモン起動する方法について書いています。
TraefikでのTLSリバースプロキシ
本書のメイン、Traefikについて書いています。TLSを有効にし、"https://*"で各サービスへアクセスできるようにします。
ここまでの章のオレオレ証明書、Dnsmasqが必要になります。
MailHogの起動
ダミーのメールアドレスを受信するメールボックスとして構築します。ブラウザからメール内容を確認できるので便利です。
Exim4の構築と特定ドメイン転送
一部のドメインに対してのみ正規のSMTPサーバーへリレーするためにExim4を構築します。
社内サービスでメール宛先設定ミスにより外部にメールしてしまうのを防ぐために使用しています。
免責事項
私の環境では動作確認をしていますが、作業をしながらの確認のため新規環境では正しくうごかないこともあるでしょう。
その際はGitHubのIssuesなどでご連絡いただけると幸いです。