📝

アプリ公開戦記⚔️

に公開

こんちくわー

タイトルがガンダムシリーズみたいですが

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
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

内容

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!!(ピカチュウ的な)

おわり

GitHubで編集を提案

Discussion