Web系未経験で転職活動を現在しています。
ポートフォリオのデプロイ構成を悩んでいる人向けに、私の構成を参考がてら載せます。
また私の面接対策に向けて、選定理由などもメモがてら載せておきます。
Node.jsを使っていてAWS上に公開したいけど、できるだけ構成は簡単にしたい人向けです。
ポートフォリオのレベル感は大目に見てください...。
作成ポートフォリオ
使用技術
| Category | Technology Stack |
|---|---|
| Frontend | TypeScript, Next.js |
| Backend | TypeScript, NestJS, Prisma |
| Infrastructure | AWS Lightsail, Nginx, PM2 |
| Database | PostgreSQL |
| Development Environment | Docker(PostgreSQL のみ) |
| CI/CD | GitHub Actions |
| Design | Tailwind CSS |
| Others | ESLint, Prettier, Git, GitHub |
Amazon Lightsail
初心者でも簡単に使いやすい仮想プライベートサーバー(VPS)サービス。
特徴
- コンピューティング、ストレージ、ネットワークといったWebアプリ構築に必要なものを1つのパッケージとして提供
- 月額固定料金でコスト管理しやすい
- 設定が簡単な分、自由度は低い
選定理由
- パッケージ化されていて、構築がシンプルで学習コストも低い
- EC2などの他サービスへの移行も可能
関連用語
-
VPS
1台の物理サーバーを仮想的に分割して使用するサーバー
コンピューティング・ストレージ・ネットワークなどの要素で構成 -
コンピューティング(CPU / メモリ)
プログラムを実行するためのリソース
サービス例:Amazon EC2、AWS Lambda -
ストレージ
データの保存や共有
サービス例:Amazon S3 -
ネットワーク
外部との通信
サービス例:Amazon VPC -
EC2構成
コンピューティングにEC2を使用して、ストレージやネットワークなどのサービスを組み合わせた構成
インスタンス構成
OS:Ubuntu
インストールしたミドルウェア:
- Node.js / npm(アプリ実行環境)
- Nginx(リバースプロキシ / HTTPS 終端)
- PM2(プロセス管理)
- PostgreSQL(データベース)
- Certbot(SSL 証明書管理)
Nginx(エンジンエックス)
高性能な Web サーバー / リバースプロキシ として広く利用されるミドルウェア。
Node.jsとの違い
Nginxは主にWebサーバやリバースプロキシとして、リクエストの受付や振り分け、通信制御を担当する。
一方、Node.jsはJavaScriptをサーバー側で実行するための実行環境であり、アプリケーションのロジックを担当する。
使用目的
リバースプロキシとして利用し、Node.jsアプリを前段で制御する。
これによって、フロントエンドとバックエンドのアプリを同一ドメイン・同一ポート(同一オリジン)で提供できる。
Nginxを使用しない場合、別オリジンとなり、CORS設定やCookieの扱いが複雑になる。
Node.jsだけでもWebサーバーとして使用できるが、リバースプロキシやSSL終端などもアプリケーション側で実装することになり構成が複雑。Webサーバソフトウェアに任せたほうが構成がシンプルかつ簡単。
選定理由
Apache(アパッチ)と比較して
- リバースプロキシ用途の場合の設定がシンプル
- Node.jsとの組み合わせでのドキュメントや事例が多い
PM2(ピーエムツー)
Node.jsのアプリケーションを永続化し、異常終了時の再起動やログ管理などを行うプロセスマネージャー。
使用目的
本番環境で Node.jsアプリを安定して運用するため。
ないと異常終了時に自動再起動ができない。
選定理由
- Node.jsアプリのプロセス管理に特化
- ドキュメントや事例も豊富
その他
certbot(サートボット)について
Let’s Encrypt の SSL/TLS証明書 を自動で取得・更新するツール
HTTPのままだとブラウザで警告が表示される、通信内容が暗号化されない。HTTPS対応するのが一般的。
無料で使えて、個人開発でのドキュメントや事例も豊富。
Dockerについて
本番環境で使用しない理由
・構成をシンプルにしたかった
・Linuxやミドルウェアの理解を優先したかった
開発環境でDBのみ使用した理由
・学何かしらは触っておきたい
・データの初期化を行いやすく、使用するメリットが大きい