アプリ公開戦記⚔️
こんちくわー
タイトルがガンダムシリーズみたいですが
Linux(Ubuntu)にアプリをデプロイして、ドメインに公開したので、それの手順を備忘録として残したいでっす。
こういうの書かないと頻繁にやる作業でないとスッポリと忘れるんでね
Cloud flareでドメイン購入とか、VPSサーバーの起動とかそういうのは省きます
今回は運用メインで記載します!
今回やること
TypeScriptアプリケーションをUbuntuで起動して、ネット公開まで実行する
技術選定
言語:TypeScript
フレームワーク:Hono
ランタイム:bun
OS:Ubuntu
なんで、Tsかって?
流行りですから〜
というかもうTs使ってない現場ないんじゃないかってくらいTsは使用されていますよね
そして、ランタイムはBunを採用したいと思います。
はえーので。
同じ理由でHonoもチョイス
OSはUbuntuで。使い慣れているからですっ!...あと情報も豊富なので
余談ですが、Oracle Cloudを使用したときOracleLinuxを選定し色々と苦戦したのがトラウマで、男は黙ってUbuntuって感じで迷わず選ぶようになりましたね。(クールポコ的な)
お借りしているサーバーはWebARENA Indigo ってやつ使っています。お安いので😊
ま、今回の実装ではそんな関係ないですかね
実装するー
typescript実装
でーわー、sshとかでVPSにログインしてください
ssh -i "${key} ${username}@${address}"
作業ディレクトリへ移動
mkdir work || cd work
bun をInstallしていく
curl -fsSL https://bun.com/install | bash
bun --version
honoプロジェクト作成する
質問があるので、
which template?-> bun
としてください
``
bun create hono my-hono-app
cd my-hono-app
bun install
これで起動します
bun run dev
# http://localhost:3030
動作チェック
curl http://localhost:3000
# Hello Hono!!
systemd実装
Ubuntuなどで採用されている、システム起動・管理の中心的役割を果たすツール群です。
編集する
sudo vi /etc/systemd/system/my-hono-app.service
[Unit]
Description=My Hono App
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/work/my-hono-app
ExecStart=/home/ubuntu/.bun/bin/bun run dev
Restart=always
RestartSec=2
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
my-hono-app.serviceをsystemdに反映
# systemd 反映
sudo systemctl daemon-reload
# 起動
sudo systemctl start my-hono-app
状態確認
sudo systemctl status my-hono-app
# このようになっていればOK
# Active: active (running) since
caddy実装
Go言語で開発された、モダンで高速、かつ設定が非常に簡単なオープンソースのWebサーバー
caddyファイルを編集
sudo vi /etc/caddy/Caddyfile
内容
example.com {
reverse_proxy localhost:3030
}
Caddyファイル確認
# errorとかなければOK
sudo caddy validate --config /etc/caddy/Caddyfile
Caddyリロード
sudo systemctl reload caddy
監視コマンド
sudo journalctl -u caddy -f
ログ確認
ログはjournalctlで確認する
Linuxのシステム管理ツールsystemdによって記録されたシステムログ(ジャーナル)を検索・閲覧・管理するためのツール
honoサービスのログを見る
journalctl -u my-hono-app
リアルタイムログを見る
journalctl -u my-hono-app -f
# ログが発火するごとに出現する
今日のログ
journalctl -u my-hono-app --since today
外部から公開されているか確認
chromeなどのブラウザでexample.com(設定してあるドメイン)にアクセスし、Hello Hono!!と出ればOK!!
まとめ
だいぶ最小限の実装でしたが、
普段使わないSystemdとかCaddyとかjournalctlなど色々壁がありましたねぇ
今はオンプレ運用が減り、AWS, GCP, Azureなどのサーバーマネージドサービスや、Datadogなどのログマネジメントサービスも多いので、このように生のCLIコマンドで確認する機会は減りましたし、技術者としてもこのようなコマンドを知っていることの価値は以前よりも減ったかとおもいますが、依然この先もLinuxベースのコンピュータが使われてるということは変わらないと思います。
Linuxの思想や、設計を知るという意味では大事かなと思います!
これからもよろしくなLinux!!(ピカチュウ的な)
おわり
Discussion