お問い合わせ
話雲のご紹介3 ~ ローカル運用手順 ~
投稿日:2023-11-06
@prompta
(株)ブロックセブンスソフトウェア
Nuxt3
話雲

# ローカル運用のデモンストレーション

このセクションでは、話雲を使用したローカル(オンプレミス)運用のデモンストレーションをご紹介します。

# ローカル環境の構築

話雲をローカル運用するためには以下の内容にて適宜設定を行う必要があります。

  1. docker and docker-compose (インストール等の記載は省きます今回の例ではwsl環境にて構築致します。)
  2. sqlite3用のデータベースファイルを作成
  3. .env等の環境変数を記載するテキストファイル
  4. ファイルを保存する為のクラウド設定(今回の例ではminioを使用します)
  5. メールを送信する為のSMTP設定(今回の例ではmailcatcherを使用します。)
  6. データベースの初期設定
  7. 一番初めにログインするユーザーの設定
  8. 外部に公開する場合は固定ドメイン、SSLの設定など(今回は簡易的にngrokを使用して疑似的に話雲の公開設定を行います)

# ファイル構成

├── database
│   └── main.db # データベースファイル名はmain.dbとして下さい
├── docker-compose.yml # docker-composeで読み込むための構成ファイル
├── minio # アップロードしたファイルを保存する為のフォルダ―
│   └── data
└── .env # 環境変数用のファイル

# docker-compose.ymlのファイル内容

version: '3.9'
services:
  wakumo:
    image: block7thsoftware/wakumo:latest
    container_name: wakumo
    command: node ./.output/server/index.mjs
    volumes:
     # データベースファイル名はmain.dbとして下さい
      - ./database/main.db:/workspace/prisma/main.db
      # minioで読むための設定ファイルです。設定情報を環境変数に含まずaws cliコマンドでminio用の設定情報を作成し、その情報を話雲に読み取らせています。
      - ~/.aws/credentials:/root/.aws/credentials
      - ~/.aws/config:/root/.aws/config 
    # 環境変数用ファイルを指定しています。
    env_file: ./.env
    ports:
      # ローカルで使用するポートをしています。特に3000ポートがふさがっていなければこのままにして下さい。
      - "3000:3000"
      # web socketで使用するポート番号を使用します。環境によって変わる可能性もありますので、websocketで通信出来ない場合は変更してください。
      - "24678:24678"
  # SMTPサーバのイメージを指定しています。http://localhost:1080で送信メール内容を確認出来ます。(実際にはメールは送信はせずブラウザ上で確認します。)
  email: 
    container_name: wakumo-email 
    image: schickling/mailcatcher
    ports:
      - "1080:1080"
      - "1025:1025"
  # ファイルを保存するための疑似クラウドファイルサーバのイメージです。今回は設定情報を環境変数に含まずaws cliコマンドでminio用の設定情報を作成し、その情報を話雲に読み取らせています。
  minio:
    image: quay.io/minio/minio:latest
    container_name: wakumo-minio
    environment:
      MINIO_ROOT_USER: root
      MINIO_ROOT_PASSWORD: password
    command: server --console-address ":9001" /data
    ports:
      - 9000:9000
      - 9001:9001
    volumes:
      - ./minio/data:/data

# sqlite3用のデータベースファイル作成

database/main.dbにデータベース用のファイルを作成します。
このデータベースファイルはwakumoからマウントされる設定をdocker-compose.ymlに記載しています。

# 環境変数用のファイルを作成

.env を作成します内容は以下の通りです。

NUXT_STORAGE_STYLE=S3

# プロファイル設定は各自で行ってください。

NUXT_AWS_PROFILE=minio
NUXT_S3_ENDPOINT=http://localhost:9000
NUXT_S3_DOCKER_ENDPOINT=http://minio:9000
NUXT_S3_BUCKET_NAME=wakumo-local
NUXT_FORCE_PATH_STYLE=true


DOMAIN=http://localhost:3000
AUTH_ORIGIN=http://localhost:3000

NUXT_JWT_SECRET=secret-secret

NUXT_PUBLIC_TAKE_BY=5
NUXT_PUBLIC_APP_NAME=wakumo


NUXT_MAIL_HOST=email
NUXT_MAIL_PORT=1025
NUXT_MAIL_SECURE=false
NUXT_MAIL_FROM=test@test.test


NUXT_JWT_SECRET=secret
NUXT_PUBLIC_FILE_LIMIT_SIZE=1048576

# minioの設定

こちらを参考にawsの設定を行います。
プロファイルを設定したらNUXT_AWS_PROFILEには設定したプロファイル名を環境変数に設定してください。
ファイルを保存するバケットが必要になりますので、まずはバケットを作ります。

docker-compose up minio

dockerが立ち上がったら
http://localhost:9001/login
にて管理画面にアクセスします。
usernameMINIO_ROOT_USERに設定した情報(今回はroot)パスワードにMINIO_ROOT_PASSWORDに設定した情報(今回はpassword)を入力してログインします。
左リストのBucketを選択して、Create Bucketにて
バケットを作成します。バケット名は.envに記載したNUXT_S3_BUCKET_NAMEに書いてある値を登録します。この例では(wakumo-local)を指定します。
バケットの作成が終わったらdockerを停止します。

docker-compose down -v

# SMTPの設定

今回の例では内部で疑似的にSMTPサーバを構築していますが、外部のSMTPサーバを使用する場合は.envファイルの以下の情報を設定します。

# メールサーバ名
NUXT_MAIL_HOST=email
# メールポート名
NUXT_MAIL_PORT=1025
# セキュア設定
NUXT_MAIL_SECURE=false
# 送信元メールアドレス
NUXT_MAIL_FROM=test@test.test

# データベースの初期設定

sqliteのファイルを作った直後はデータベースが存在しない為、以下のコマンドでデータベースを作成します。

docker-compose run wakumo npx prisma migrate deploy

以下の表示されたらyを押します。

Ok to proceed? (y) y

以下の様に表示されれば成功です。

Prisma schema loaded from prisma/schema.prisma
Datasource "db": SQLite database "main.db" at "file:/workspace/prisma/main.db"

13 migrations found in prisma/migrations

Applying migration `20230915001445_create`
Applying migration `20230929050143_message`
Applying migration `20230929071948_thread_user`
Applying migration `20231004024036_create_file`
Applying migration `20231013034636_last_read_date`
Applying migration `20231016050046_add_thread_type`
Applying migration `20231023055300_add_comment`
Applying migration `20231024072605_is_invited`
Applying migration `20231025015459_user_status`
Applying migration `20231025071756_delete_is_invited`
Applying migration `20231026013903_create_message_reaction`
Applying migration `20231026015303_create_messagereactionuser`
Applying migration `20231026054244_unique_reaction_user`

The following migrations have been applied:

migrations/
  └─ 20230915001445_create/
    └─ migration.sql
  └─ 20230929050143_message/
    └─ migration.sql
  └─ 20230929071948_thread_user/
    └─ migration.sql
  └─ 20231004024036_create_file/
    └─ migration.sql
  └─ 20231013034636_last_read_date/
    └─ migration.sql
  └─ 20231016050046_add_thread_type/
    └─ migration.sql
  └─ 20231023055300_add_comment/
    └─ migration.sql
  └─ 20231024072605_is_invited/
    └─ migration.sql
  └─ 20231025015459_user_status/
    └─ migration.sql
  └─ 20231025071756_delete_is_invited/
    └─ migration.sql
  └─ 20231026013903_create_message_reaction/
    └─ migration.sql
  └─ 20231026015303_create_messagereactionuser/
    └─ migration.sql
  └─ 20231026054244_unique_reaction_user/
    └─ migration.sql

次へ