メインコンテンツまでスキップ

API サーバーホスティング

Frourio ではクライアントとサーバーを別々にデプロイすることができます。

API サーバーは以下のコマンドで起動します。

npm install --prefix server
npm run build:server
npm run start:server

以下はいくつかの例です。 もちろん、ここに書かれていない方法でデプロイすることもできますので、試してみてください!

Dockerfile

Dockerfile
FROM node:15

RUN mkdir /src
RUN mkdir /src/server

WORKDIR /src

COPY /server/package.json /server/package-lock.json ./server/
RUN npm install --prefix server

COPY . .

EXPOSE 8080
CMD npm run build:server && npm run start:server

専用サーバー (with PM2)

question in create-frourio-appchoice
Daemon process managerPM2
Serverless serviceDedicated server

Step 1. GitHub Actions Workflow を追加

備考

プロジェクトの作成時に Serverless service として Dedicated server を選択していた場合は、Step 2 に進んでください!

プロジェクト作成時に Dedicated server を選択していなかった場合は、以下の workflow を参考に、デプロイ用 workflow を追加してください。

.github/workflows/deploy-server.yml

.github/workflows/deploy-server.yml
name: Deploy server

on:
push:
branches:
- main

jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 14
- uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.API_DEPLOY_SSH_KEY }}
name: id_rsa
# If known_hosts needs to be set, use this.
# known_hosts: ${{ secrets.API_DEPLOY_KNOWN_HOSTS }}
- run: |
npm install -g pm2@^4.5.1
npx pm2 deploy production setup || true
npx pm2 deploy production update
env:
API_DEPLOY_USER: ${{ secrets.API_DEPLOY_USER }}
API_DEPLOY_HOST: ${{ secrets.API_DEPLOY_HOST }}
API_DEPLOY_REPO: https://github.com/${{ github.repository }}.git
API_DATABASE_URL: ${{ secrets.API_DATABASE_URL }}
API_JWT_SECRET: ${{ secrets.API_JWT_SECRET }}
API_USER_ID: ${{ secrets.API_USER_ID }}
API_USER_PASS: ${{ secrets.API_USER_PASS }}
API_ORIGIN: ${{ secrets.API_ORIGIN }}
API_BASE_PATH: ${{ secrets.API_BASE_PATH }}
API_SERVER_PORT: ${{ secrets.API_SERVER_PORT }}
API_UPLOAD_DIR: ${{ secrets.API_UPLOAD_DIR }}

Step 2. リポジトリに Secrets を追加

以下の secrets を GitHub リポジトリに追加してください。

  • API_BASE_PATH: API の basepath。
    例: /api
  • API_DATABASE_URL: MySQL の本番 URL。
    例: mysql://mysql-instance1.123456789012.us-east-1.rds.amazonaws.com:3306
  • API_DEPLOY_HOST: 専用サーバーのホスト。
    例: ec2-public-ipv4-address.compute-1.amazonaws.com
  • API_DEPLOY_USER: SSH ユーザー名。
    例: ci
  • API_DEPLOY_SSH_KEY: ホストに接続可能な SSH 秘密鍵。
    例:
    1. ssh-keygen -t rsa -b 4096 -m PEM -f frourio-ci.key をローカルマシンで実行します。
    2. frourio-ci.key の中身をコピーして secret の値として貼り付けます。
    3. frourio-ci.key.pub をホストマシンに送信し、~/.ssh/known_hosts に追加します。
  • API_UPLOAD_DIR: ユーザーコンテンツ(アイコンなど)をアップロードするためのディレクトリ。
    例: /mnt/efs-1/upload, /srv/upload
    • デフォルトのサンプルでは、アップロードされたアイコンを保存するために使用されます。

AWS Lambda(静的ホスティング)

question in create-frourio-appchoice
API server hostingServerless
Serverless serviceAWS Lambda

これは 設定が複雑 なので、create-frourio-app で上記の選択肢を選んで、自動で設定するようにしましょう。

create-frourio-app で AWS Lambda を選択した際に表示される説明文の日本語訳は以下の通りです。

注意

初心者の方にはやや難しいオプションです。より具体的な例はこちらにあります。

サーバーレスアプリケーションを開発する際は、モジュールやバンドルされるファイルがどの程度巨大かを考慮する必要があります。 AWS Lambda には 250MBサイズ制限があるのでご注意ください。

AWS Lambda にデプロイするためには、最低限以下のものを用意する必要があります。

  • ユーザーからのリクエストに応答するための Lambda 関数。
    • この Lambda の名前を GitHub Actions Secrets LAMBDA_FUNCTION_NAME_SERVER にセットします。
  • マイグレーションを実行するための Lambda 関数。
    • この Lambda の名前を GitHub Actions Secrets LAMBDA_FUNCTION_NAME_MIGRATION にセットします。
    • NOTE: 長めの時間制限を設定することを推奨します。
  • ビルド済みバンドルスクリプトや node_modules などのデプロイアーティファクトをアップロードするための Amazon S3。
    • この S3 バケットの名前を GitHub Actions Secrets S3_BUCKET にセットします。
    • オプション: S3 キーのプレフィックスを指定する場合は、secrets に S3_PREFIX` も追加してください。
    • 詳しく説明すると、${S3_BUCKET}/${S3_PREFIX}deployment_server.zip キーがデータを保管するために使用されます。