API サーバーホスティング
Frourio ではクライアントとサーバーを別々にデプロイすることができます。
- npm
- yarn
API サーバーは以下のコマンドで起動します。
npm install --prefix server
npm run build:server
npm run start:server
API サーバーは以下のコマンドで起動します。
yarn install --cwd server
yarn run build:server
yarn run start:server
以下はいくつかの例です。 もちろん、ここに書かれていない方法でデプロイすることもできますので、試してみてください!
Dockerfile
- npm
- yarn
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
Dockerfile
FROM node:15
RUN mkdir /src
RUN mkdir /src/server
WORKDIR /src
COPY /server/package.json /server/yarn.lock ./server/
RUN yarn install --cwd server
COPY . .
EXPOSE 8080
CMD yarn run build:server && yarn run start:server
専用サーバー (with PM2)
question in create-frourio-app | choice |
---|---|
Daemon process manager | PM2 |
Serverless service | Dedicated 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 秘密鍵。
例:ssh-keygen -t rsa -b 4096 -m PEM -f frourio-ci.key
をローカルマシンで実行します。frourio-ci.key
の中身をコピーして secret の値として貼り付けます。frourio-ci.key.pub
をホストマシンに送信し、~/.ssh/known_hosts
に追加します。
API_UPLOAD_DIR
: ユーザーコンテンツ(アイコンなど)をアップロードするためのディレクトリ。
例:/mnt/efs-1/upload
,/srv/upload
- デフォルトのサンプルでは、アップロードされたアイコンを保存するために使用されます。
AWS Lambda(静的ホスティング)
question in create-frourio-app | choice |
---|---|
API server hosting | Serverless |
Serverless service | AWS Lambda |
これは 設定が複雑 なので、create-frourio-app で上記の選択肢を選んで、自動で設定するようにしましょう。
create-frourio-app で AWS Lambda を選択した際に表示される説明文の日本語訳は以下の通りです。
注意
AWS Lambda にデプロイするためには、最低限以下のものを用意する必要があります。
- ユーザーからのリクエストに応答するための Lambda 関数。
- この Lambda の名前を GitHub Actions Secrets
LAMBDA_FUNCTION_NAME_SERVER
にセットします。
- この Lambda の名前を GitHub Actions Secrets
- マイグレーションを実行するための Lambda 関数。
- この Lambda の名前を GitHub Actions Secrets
LAMBDA_FUNCTION_NAME_MIGRATION
にセットします。 - NOTE: 長めの時間制限を設定することを推奨します。
- この Lambda の名前を GitHub Actions Secrets
- ビルド済みバンドルスクリプトや node_modules などのデプロイアーティファクトをアップロードするための Amazon S3。
- この S3 バケットの名前を GitHub Actions Secrets
S3_BUCKET
にセットします。 - オプション: S3 キーのプレフィックスを指定する場合は、secrets に S3_PREFIX` も追加してください。
- 詳しく説明すると、
${S3_BUCKET}/${S3_PREFIX}deployment_server.zip
キーがデータを保管するために使用されます。
- この S3 バケットの名前を GitHub Actions Secrets