Things made after midnight.
Midnight Benchを始めることにした。
名前の通り、深夜に何かを作るための作業台。
Software / Hardware / Experiments.
Webサービスでもいい。ちょっとしたツールでもいい。 電子工作でも、キーボードでも、VUメーターでもいい。
完成品だけを並べる場所ではなく、 思いついたものを実際に作って、試して、 失敗も含めて記録する場所にしたい。
「Midnight Benchそのものを作る」 ことにした。
Domain
まず必要なのは名前と場所。
取得したドメインは、 midnightbench.com
ドメインの登録とDNS管理にはCloudflareを使用した。
今後、実験的サービスをサブドメインとして追加していける。
midnightbench.com
│
├── app1.midnightbench.com
├── app2.midnightbench.com
└── lab.midnightbench.com
実験して、本当に独立させる価値が出てきたサービスだけ 専用ドメインへ移す。
A Small Server
WebサーバはOracle Cloud Infrastructure(OCI)に作った。
Cloud Oracle Cloud Infrastructure
OS Ubuntu 24.04 LTS
Architecture ARM64 / aarch64
Shape VM.Standard.A1.Flex
CPU 1 OCPU
Memory 6 GB
静的なWebサイトや小さなWebサービス、 実験用アプリケーションを動かすところから始めるので、 まずはこれで十分。
Public IPv4は、構築途中でEphemeral Public IPから Reserved Public IPへ変更した。
Dockerize the Bench
OCIへSSH接続して、DockerとDocker Composeをインストール。
docker run --rm hello-world
ARM64用コンテナが正常に起動した。
Midnight Benchでは、 できるだけホストOSへ直接アプリケーションを積み重ねない。
一つのコンテナとして追加していく。
Internet
│
▼
Caddy
│
▼
nginx
│
▼
Midnight Bench
/opt/midnightbench
│
├── compose.yml
│
├── caddy/
│ └── Caddyfile
│
└── main/
└── html/
└── index.html
First Boot
最初のWebページは、ほとんど何もないHTMLだった。
<h1>MIDNIGHT BENCH</h1>
<p>Things made after midnight.</p>
<p>Software / Hardware / Experiments</p>
<p>Coming soon.</p>
docker compose up -d
ブラウザに表示されたのは、たったこれだけ。
MIDNIGHT BENCH
Things made after midnight.
Software / Hardware / Experiments
Coming soon.
ものすごく地味。
Midnight Benchで最初に動いたもの。
HTTPS
次はドメインとサーバをつなぐ。
Cloudflare DNSで midnightbench.com をOCIのReserved Public IPへ向ける。
midnightbench.com {
reverse_proxy main:80
}
Caddyを使った理由の一つが、 Automatic HTTPSだった。
証明書の取得・更新をCaddyに任せられる。
構築中にはTLS証明書取得時に一度challengeが失敗したが、 別方式へフォールバックして最終的に証明書取得に成功した。
http://midnightbench.com
↓
https://midnightbench.com
Put Everything in Git
ここまで作ったものをGitで管理する。
git init
git add .
git commit -m "Initial Midnight Bench site"
GitHub上のリポジトリ名は公開用に一般化すると、
<github-user>/midnightbench
認証情報や秘密鍵などはGitへ入れない。
Automate Deployment
毎回OCIへSSH接続して手動で更新するのも面倒だ。
GitHub main
│
│ push
▼
GitHub Actions
│
│ SSH
▼
OCI Compute
│
├── git pull
│
└── docker compose
cd /opt/midnightbench
git pull origin main
docker compose up -d
最初のWorkflowをpush。
GitHub Actionsが起動。
しばらく待つ。
Build a Local Workbench
ここまではOCI側で作業していた。
しかし、これから毎回サーバへSSHして コードを書くつもりはない。
Windows
Visual Studio Code
Git for Windows
OpenSSH
ssh-keygen -t ed25519
ssh -T [email protected]
git clone [email protected]:<github-user>/midnightbench.git
A Small Problem
Windowsのユーザープロファイル名に一部の特殊文字が 含まれていたため、Git for Windows側からSSHを実行すると、 .sshディレクトリのパスを正常に扱えない問題が発生した。
Windows標準OpenSSHではGitHubへ正常に接続できたため、 Git側でもWindows標準OpenSSHを使うように変更した。
git config --global core.sshCommand \
"C:/Windows/System32/OpenSSH/ssh.exe"
再度clone。
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
こういう予定外の小さな問題も含めてExperimentだと思う。
PC → GitHub → OCI
最後に、一連の流れが本当につながっているか試す。
Coming soon.
を、
Coming soon. Deployed from GitHub.
へ変更。
git add .
git commit -m "Test deployment from Windows PC"
git push
ここから先は何もしない。
GitHub Actionsが自動起動し、 OCIへデプロイされた。
変更が反映されていた。
The Pipeline
┌─────────────────────────┐
│ Windows PC │
│ Visual Studio Code │
└───────────┬─────────────┘
│
git push
│
▼
┌─────────────────────────┐
│ GitHub │
│ main branch │
└───────────┬─────────────┘
│
▼
┌─────────────────────────┐
│ GitHub Actions │
│ CI/CD │
└───────────┬─────────────┘
│
│ SSH
▼
┌─────────────────────────┐
│ OCI │
│ Ubuntu / ARM64 │
│ Docker Compose │
└───────────┬─────────────┘
│
▼
┌─────────────────────────┐
│ Caddy │
│ HTTPS │
└───────────┬─────────────┘
│
▼
┌─────────────────────────┐
│ nginx │
│ Midnight Bench │
└─────────────────────────┘
これから普段やることはかなり少ない。
git pull
# make something
git diff
git add .
git commit -m "Something new"
git push
Build the Bench
最後に仮ページも作り直した。
黒に近い背景。 オフホワイトの文字。 古い測定器を少し思わせるアンバー。
BENCH
その下に、
最初は単なる数行のHTMLだった場所が、 ようやく「作業台」らしくなった。
でも、中身はまだほとんどない。
それでいい。
作業台というものは、 最初から作品で埋まっているものではない。
これからここで、ソフトウェアを作る。 ハードウェアを作る。電子工作をする。 木を削るかもしれない。
役に立つものも作る。 まったく役に立たないものも作る。
完成したものだけでなく、 途中で失敗したものも残していく。