From 9e800083a96b1267117c714ff982ccaaaeafe859 Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Wed, 13 Jul 2022 21:25:41 +0900 Subject: [PATCH 01/11] optimize Dockerfile --- Dockerfile | 27 +++++++++++++++++++-------- package.json | 1 - 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index cdd2162..4ff40e6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,10 +7,19 @@ RUN apt-get update -y&&apt-get install -y openssl\ FROM base AS builder WORKDIR /app -COPY ./package*.json ./tsconfig.json ./prisma/schema.prisma ./ + +RUN apt-get update -y&&apt-get install -y curl \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +COPY ./package*.json ./ RUN npm ci --ignore-scripts +COPY ./script ./script +RUN npm run compile-dict + +COPY ./tsconfig.json ./prisma/schema.prisma ./ COPY ./src ./src RUN npm run build @@ -19,20 +28,22 @@ FROM base AS runner WORKDIR /app ENV NODE_ENV production -COPY --from=builder /app/dist ./dist +RUN apt-get update -y&&apt-get install -y python3 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + COPY ./prisma ./prisma -COPY ./script ./script COPY ./package*.json ./ RUN sed '/prepare/d' -i package.json - -RUN apt-get update -y&&apt-get install -y python3 curl g++ make \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* RUN npm ci -RUN apt-get remove -y python3 curl g++ make \ + +RUN apt-get remove -y python3 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/dictionary ./dictionary + CMD ["npm", "start"] diff --git a/package.json b/package.json index f02fc04..0c731ec 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "test": "jest --passWithNoTests", "compile-dict": "sh ./script/dict.sh", "prisma-setup": "prisma generate", - "postinstall": "npm run compile-dict", "prebuild": "npm run prisma-setup" }, "name": "vutd-shovel", From 14a6f72b2f2cb5fa5636d6c99a2ac1f8df7f6ba7 Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Thu, 14 Jul 2022 11:54:43 +0900 Subject: [PATCH 02/11] faster ci --- Dockerfile | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4ff40e6..8413fd9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,13 @@ -FROM node:16-bullseye-slim AS base -RUN apt-get update -y&&apt-get install -y openssl\ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - - -FROM base AS builder +FROM --platform=$BUILDPLATFORM node:16-bullseye-slim AS builder WORKDIR /app -RUN apt-get update -y&&apt-get install -y curl \ +RUN apt-get update -y&&apt-get install -y curl python3 \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* COPY ./package*.json ./ +RUN sed '/prepare/d' -i package.json RUN npm ci --ignore-scripts @@ -23,27 +18,33 @@ COPY ./tsconfig.json ./prisma/schema.prisma ./ COPY ./src ./src RUN npm run build -FROM base AS runner -WORKDIR /app -ENV NODE_ENV production -RUN apt-get update -y&&apt-get install -y python3 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* +ARG TARGETARCH COPY ./prisma ./prisma -COPY ./package*.json ./ -RUN sed '/prepare/d' -i package.json -RUN npm ci +RUN ARCH=$(echo $TARGETARCH|sed s/arm64/x64/) +RUN npm ci --target_arch=$ARCH -RUN apt-get remove -y python3 \ + + + +FROM node:16-bullseye-slim + +WORKDIR /app +ENV NODE_ENV production + +RUN apt-get update -y&&apt-get install -y openssl \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* +COPY ./prisma ./prisma +COPY ./package*.json ./ COPY --from=builder /app/dist ./dist COPY --from=builder /app/dictionary ./dictionary +COPY --from=builder /app/node_modules ./node_modules + CMD ["npm", "start"] From 1eabb5457652780162d7da42e3b903477244aa0f Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Thu, 14 Jul 2022 19:14:00 +0900 Subject: [PATCH 03/11] fix sed --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8413fd9..74fe56a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ ARG TARGETARCH COPY ./prisma ./prisma -RUN ARCH=$(echo $TARGETARCH|sed s/arm64/x64/) +RUN ARCH=$(echo $TARGETARCH|sed s/amd64/x64/) RUN npm ci --target_arch=$ARCH From 53c022a53c7a514a6e538d3f7160336b9abc49b6 Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Thu, 14 Jul 2022 20:48:27 +0900 Subject: [PATCH 04/11] fix architecture specification --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 74fe56a..bc6aa56 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,8 +24,7 @@ ARG TARGETARCH COPY ./prisma ./prisma -RUN ARCH=$(echo $TARGETARCH|sed s/amd64/x64/) -RUN npm ci --target_arch=$ARCH +RUN npm ci --target_arch=$(echo "$TARGETARCH"|sed s/amd64/x64/) From 4ff949ef43b201fbcfd91895695b37b35b1de549 Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Thu, 14 Jul 2022 21:19:00 +0900 Subject: [PATCH 05/11] specify binary target --- prisma/schema.prisma | 1 + 1 file changed, 1 insertion(+) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index fb12761..ab35003 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -3,6 +3,7 @@ generator client { provider = "prisma-client-js" + binaryTargets= ["native", "debian-openssl-1.1.x", "linux-arm64-openssl-1.1.x"] } datasource db { From 375897da37746a3454ab1fa9d694d3130fcfb769 Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Fri, 15 Jul 2022 08:20:13 +0900 Subject: [PATCH 06/11] fix dictionary not built --- Dockerfile | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index bc6aa56..0fcb663 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,21 +11,22 @@ RUN sed '/prepare/d' -i package.json RUN npm ci --ignore-scripts -COPY ./script ./script -RUN npm run compile-dict - COPY ./tsconfig.json ./prisma/schema.prisma ./ COPY ./src ./src RUN npm run build +FROM builder AS modules ARG TARGETARCH +RUN npm ci --target_arch=$(echo "$TARGETARCH"|sed s/amd64/x64/) -COPY ./prisma ./prisma -RUN npm ci --target_arch=$(echo "$TARGETARCH"|sed s/amd64/x64/) +FROM builder AS dict +RUN npm --prefix node_modules/node-openjtalk-binding/ run install +COPY ./script ./script +RUN npm run compile-dict @@ -38,12 +39,10 @@ RUN apt-get update -y&&apt-get install -y openssl \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* - COPY ./prisma ./prisma COPY ./package*.json ./ COPY --from=builder /app/dist ./dist -COPY --from=builder /app/dictionary ./dictionary -COPY --from=builder /app/node_modules ./node_modules - +COPY --from=dict /app/dictionary ./dictionary +COPY --from=modules /app/node_modules ./node_modules CMD ["npm", "start"] From 65e93f2700e74d820e5a7257dee2a6583cd1f535 Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Fri, 15 Jul 2022 08:20:32 +0900 Subject: [PATCH 07/11] clean dict.sh output --- script/dict.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/dict.sh b/script/dict.sh index 769576f..3635066 100755 --- a/script/dict.sh +++ b/script/dict.sh @@ -1,6 +1,6 @@ #!/bin/sh -rm -r dictionary>/dev/null +rm -r dictionary 2> /dev/null mkdir -p dictionary/tmp cd dictionary/tmp From c33af21ca8c7cb8948f732094449b0c56c9d1154 Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Fri, 15 Jul 2022 08:38:40 +0900 Subject: [PATCH 08/11] Update CONTRIBUTING.md Because I changed npm scripts --- CONTRIBUTING.md | 98 ++++++++++++++++++++++++++++--------------------- 1 file changed, 56 insertions(+), 42 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1512d40..b20a435 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,11 +3,13 @@ ## Setup ### commit/pushさえできればいい人 + 1. このリポジトリをクローンします(`main`ブランチにいることを確認してください)。 2. クローン先のディレクトリで`npm i --ignore-script`を実行し、パッケージ類をインストールします。 3. `npx prisma generate`も実行します。これによりデータベース関係の型が生成されます。 ### 自分のPCで動かしたい人(VSCode DevContainerを使う) + VSCode DevContainerを用いると面倒な環境構築をスキップすることができます(Node.jsすらインストールする必要がありません)。詳細は[VSCodeのドキュメント](https://code.visualstudio.com/docs/remote/containers)を参照してください。 事前にVSCodeとDockerを入れておいてください。 @@ -25,25 +27,30 @@ Windowsを使っている場合、Hyper-Vを有効にするとDockerが効率的 8. `PUBLIC BOT`は`OFF`にします(別にしなくてもいいですがPUBLICにする必要はないので…) 9. `TOKEN`をコピーします。 10. `.env` というファイルをプロジェクトの最上部に作成し、トークンを次のように`.env`に追記します。 -``` -BOT_TOKEN=トークン -``` + + ```text + BOT_TOKEN=トークン + ``` + 11. `OAuth2`->`URL Generator`を開き、 `SCOPES`では`bot`と`applications.commands`、`BOT PERMISSIONS`では`Send Messages`、`Send Messages in Threads`、`Embed Links`、`Connect`、`Speak`にチェックを入れ、一番下の`GENERATED URL`をコピーします。 12. ブラウザのアドレスバーに`GENERATED URL`を貼り付けて開きます(その後は普通にテストに使うDiscordサーバーにボットを追加してください)。 13. 次にデータベースをセットアップします。`npx prisma migrate deploy`を実行してください。 14. 音声データをセットアップします。[tohoku-f01](https://github.com/icn-lab/htsvoice-tohoku-f01)を使う場合、voiceフォルダを次のように作成します。 -``` -/voice - └ tohoku-f01 - ├ tohoku-f01-angry.htsvoice - ├ tohoku-f01-happy.htsvoice - ├ tohoku-f01-neutral.htsvoice - └ tohoku-f01-sad.htsvoice -``` -15. ここまでの作業が終われば、`npm run dev:watch`でボットを実行できるはずです。お疲れさまでした。 + ```text + /voice + └ tohoku-f01 + ├ tohoku-f01-angry.htsvoice + ├ tohoku-f01-happy.htsvoice + ├ tohoku-f01-neutral.htsvoice + └ tohoku-f01-sad.htsvoice + ``` + +15. 辞書をセットアップします。`npm run compile-dict`を実行してください。 +16. ここまでの作業が終われば、`npm run dev:watch`でボットを実行できるはずです。お疲れさまでした。 ### 自分のPCで動かしたい人(VSCode DevContainerを使わない) + PCのパフォーマンスの都合などによりDevContainerを使わない場合はこちらを参照してください。 1. このリポジトリをクローンします(`main`ブランチにいることを確認してください)。 @@ -52,49 +59,56 @@ PCのパフォーマンスの都合などによりDevContainerを使わない場 4. (ここからは`.env`ファイルを作っていきます) 5. Postgresqlをインストール・設定します。 -- dockerを使う場合(手軽だがやや重いかも) + - dockerを使う場合(手軽だがやや重いかも) - 1. dockerをインストールします。 - 2. `docker pull postgres`でpostgresのdockerイメージを取ってきます。 - 3. `docker run --rm -d -p 5432:5432 -v postgres-tmp:/var/lib/postgresql/data -e POSTGRES_DB=vutd-shovel-dev -e POSTGRES_USER=vutd-shovel-devuser -e POSTGRES_PASSWORD=change_me postgres`を実行するとpostgresが動き始めます(危ないので外部からアクセスできる状態にしてはいけません)。 - 4. データベースの接続文字列を次のように`.env`に追記します(ユーザー名、パスワード、データベース名を変えたらそれに応じて変更してください)。 - ``` - DATABASE_URL="postgresql://vutd-shovel-devuser:change_me@localhost:5432/vutd-shovel-dev?schema=public" - ``` + 1. dockerをインストールします。 + 2. `docker pull postgres`でpostgresのdockerイメージを取ってきます。 + 3. `docker run --rm -d -p 5432:5432 -v postgres-tmp:/var/lib/postgresql/data -e POSTGRES_DB=vutd-shovel-dev -e POSTGRES_USER=vutd-shovel-devuser -e POSTGRES_PASSWORD=change_me postgres`を実行するとpostgresが動き始めます(危ないので外部からアクセスできる状態にしてはいけません)。 + 4. データベースの接続文字列を次のように`.env`に追記します(ユーザー名、パスワード、データベース名を変えたらそれに応じて変更してください)。 -- dockerを使わない場合(dockerより軽く、細かい設定が可能だが面倒) + ```text + DATABASE_URL="postgresql://vutd-shovel-devuser:change_me@localhost:5432/vutd-shovel-dev?schema=public" + ``` - 1. Postgresqlをインストールします。 - 2. pgAdminかpsqlで + - dockerを使わない場合(dockerより軽く、細かい設定が可能だが面倒) - - ボット用のユーザー(パスワードも設定してください。ログイン権限もつけてね!) - - ボット用のデータベース(上のユーザー向けのアクセス権限をお忘れなく) + 1. Postgresqlをインストールします。 + 2. pgAdminかpsqlで - を作成します。 - 3. データベースの接続文字列を次のように`.env`に追記します。 - ``` - DATABASE_URL="postgresql://ユーザー名:パスワード@localhost:5432/データベース名?schema=public" - ``` + - ボット用のユーザー(パスワードも設定してください。ログイン権限もつけてね!) + - ボット用のデータベース(上のユーザー向けのアクセス権限をお忘れなく) + + を作成します。 + 3. データベースの接続文字列を次のように`.env`に追記します。 + + ```text + DATABASE_URL="postgresql://ユーザー名:パスワード@localhost:5432/データベース名?schema=public" + ``` 6. ボットを準備していきます。まずは[Discord Developer Portal](https://discord.com/developers/applications)からテスト用のボットを作成します。 7. `Bot`を開き、`Add Bot`を押します(確認画面が出たらそのまま進んで、Botを追加してください)。 8. `PUBLIC BOT`は`OFF`にします(別にしなくてもいいですがPUBLICにする必要はないので…) 9. `TOKEN`をコピーします。 10. トークンを次のように`.env`に追記します。 -``` -BOT_TOKEN=トークン -``` + + ```text + BOT_TOKEN=トークン + ``` + 11. (ここまでで`.env`は書き終わりました) 12. `OAuth2`->`URL Generator`を開き、 `SCOPES`では`bot`と`applications.commands`、`BOT PERMISSIONS`では`Send Messages`、`Send Messages in Threads`、`Embed Links`、`Connect`、`Speak`にチェックを入れ、一番下の`GENERATED URL`をコピーします。 13. ブラウザのアドレスバーに`GENERATED URL`を貼り付けて開きます(その後は普通にテストに使うDiscordサーバーにボットを追加してください)。 14. 次にデータベースをセットアップします。`npx prisma migrate deploy`を実行してください。 15. 音声データをセットアップします。[tohoku-f01](https://github.com/icn-lab/htsvoice-tohoku-f01)を使う場合、voiceフォルダを次のように作成します。 -``` -/voice - └ tohoku-f01 - ├ tohoku-f01-angry.htsvoice - ├ tohoku-f01-happy.htsvoice - ├ tohoku-f01-neutral.htsvoice - └ tohoku-f01-sad.htsvoice -``` -16. ここまでの作業が終われば、`npm run dev:watch`でボットを実行できるはずです。お疲れさまでした。 + + ```text + /voice + └ tohoku-f01 + ├ tohoku-f01-angry.htsvoice + ├ tohoku-f01-happy.htsvoice + ├ tohoku-f01-neutral.htsvoice + └ tohoku-f01-sad.htsvoice + ``` + +16. 辞書をセットアップします。`npm run compile-dict`を実行してください。 +17. ここまでの作業が終われば、`npm run dev:watch`でボットを実行できるはずです。お疲れさまでした。 From d26752e2843c3890c0045bb48b26d3da57d74118 Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Fri, 15 Jul 2022 09:59:28 +0900 Subject: [PATCH 09/11] add comment to Dockerfile --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index 0fcb663..fd4a121 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,6 @@ +# Please use `buildx` instead of normal `build` to build this Dockerfile. +# e.g. `docker buildx build --platform=linux/arm64,linux/amd64 .` + FROM --platform=$BUILDPLATFORM node:16-bullseye-slim AS builder WORKDIR /app From f6d82243ee610b72b9bc7a5246f9c074b76a60bf Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Fri, 15 Jul 2022 10:06:27 +0900 Subject: [PATCH 10/11] update comment --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index fd4a121..e26fa31 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -# Please use `buildx` instead of normal `build` to build this Dockerfile. +# Please use `docker buildx build` instead of normal `docker build` to build this Dockerfile. # e.g. `docker buildx build --platform=linux/arm64,linux/amd64 .` FROM --platform=$BUILDPLATFORM node:16-bullseye-slim AS builder From 284d19c0fe8e0f192eabbfe7760d1c22fb06b87b Mon Sep 17 00:00:00 2001 From: femshima <49227365+femshima@users.noreply.github.com> Date: Fri, 15 Jul 2022 10:27:54 +0900 Subject: [PATCH 11/11] reformat CONTRIBUTING.md --- CONTRIBUTING.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b20a435..a9fbb2c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -66,9 +66,9 @@ PCのパフォーマンスの都合などによりDevContainerを使わない場 3. `docker run --rm -d -p 5432:5432 -v postgres-tmp:/var/lib/postgresql/data -e POSTGRES_DB=vutd-shovel-dev -e POSTGRES_USER=vutd-shovel-devuser -e POSTGRES_PASSWORD=change_me postgres`を実行するとpostgresが動き始めます(危ないので外部からアクセスできる状態にしてはいけません)。 4. データベースの接続文字列を次のように`.env`に追記します(ユーザー名、パスワード、データベース名を変えたらそれに応じて変更してください)。 - ```text - DATABASE_URL="postgresql://vutd-shovel-devuser:change_me@localhost:5432/vutd-shovel-dev?schema=public" - ``` + ```text + DATABASE_URL="postgresql://vutd-shovel-devuser:change_me@localhost:5432/vutd-shovel-dev?schema=public" + ``` - dockerを使わない場合(dockerより軽く、細かい設定が可能だが面倒) @@ -81,9 +81,9 @@ PCのパフォーマンスの都合などによりDevContainerを使わない場 を作成します。 3. データベースの接続文字列を次のように`.env`に追記します。 - ```text - DATABASE_URL="postgresql://ユーザー名:パスワード@localhost:5432/データベース名?schema=public" - ``` + ```text + DATABASE_URL="postgresql://ユーザー名:パスワード@localhost:5432/データベース名?schema=public" + ``` 6. ボットを準備していきます。まずは[Discord Developer Portal](https://discord.com/developers/applications)からテスト用のボットを作成します。 7. `Bot`を開き、`Add Bot`を押します(確認画面が出たらそのまま進んで、Botを追加してください)。