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

環境変数の一覧

ACCESS_CONTROL_ALLOW_ORIGIN (省略可)

API サーバーから送信される値にAccess-Control-Allow-Originヘッダーを設定します。通常は、EMBUPLOADER_ENABLEDを有効化していない場合は設定する必要はありません。

入力例

ACCESS_CONTROL_ALLOW_ORIGIN="https://example.com"

AUTO_MIGRATION (省略可)

trueにすることで、データベースのマイグレーションが自動的に行われます。

備考

もしこれをtrueにすると、API サーバーをアップデートした後に API サーバープログラムを動かした際にデータベースが自動的にマイグレーションされます。データベースにすでに存在するデータはほぼ全て保持されますが、もし万が一データ損失が発生すると困る場合は、事前にデータベースをバックアップしておいたほうが無難です。

入力例

AUTO_MIGRATION="true"

DATABASE_URL (v0.7.8 で仕様変更)

備考

この環境変数の解説は API サーバー v0.7.8 以上を前提としています。v0.7.7 以前には対応していません。v0.7.7 以前の解説は HEROKU をご覧ください。

データベースの URL を指定できます。PostgreSQL の場合は postgresql://、MySQL の場合は mysql://、SQLite の場合は file:// で書き始めます。

POSTGRESQLMYSQLSQLITE が設定されている場合はそちらが優先されます。それらは JSON で入力しますが、DATABASE_URL では URL のみからなる文字列で入力しますのでご注意ください。

入力例

PostgreSQL

DATABASE_URL="postgresql://user:password@localhost:5432/dbname"

この値には、慎重に扱うべきデータが一般的に含まれるため、fly.tomlで設定することは推奨されません。fly.io にデプロイする場合は、代わりにflyctl secrets setコマンドを利用することを推奨します。

なお、Heroku にデプロイしたうえで Heroku Postgres を利用する場合は自動的に値が設定されるため、手動で設定する必要はありません。

MySQL

DATABASE_URL="mysql://user:password@localhost:3306/dbname"

この値には、慎重に扱うべきデータが一般的に含まれるため、fly.tomlで設定することは推奨されません。fly.io にデプロイする場合は、代わりにflyctl secrets setコマンドを利用することを推奨します。

SQLite

DATABASE_URL="file://./dbname.sqlite"

EMBUPLOADER_ENABLED (省略可)

trueにすることで、API サーバー内蔵アップローダーが有効化されます。

備考

API サーバー内蔵アップローダーは、Firebase Storage 版アップローダーとは異なります。

EMBUPLOADER_COUNT_QUOTA (省略可)

EMBUPLOADER_ENABLED が有効化されているときにのみ使われます。

1 ユーザーが API サーバーにアップロードできるファイルの個数の上限を設定できます。値がない場合は上限は設けられません。

EMBUPLOADER_MAX_SIZE (省略可)

EMBUPLOADER_ENABLED が有効化されているときにのみ使われます。

アップローダーに保存するファイルの合計サイズの上限を設定できます。単位はバイトです。値がない場合は上限は設けられません。

EMBUPLOADER_PATH (省略可)

EMBUPLOADER_ENABLED が有効化されているときにのみ使われます。

API サーバー内蔵アップローダーのファイルを保存するパスを設定します。値がない場合は API サーバー内蔵アップローダーは無効化されます。

EMBUPLOADER_PATH="./uploader"

EMBUPLOADER_SIZE_QUOTA (省略可)

EMBUPLOADER_ENABLED が有効化されているときにのみ使われます。

1 ユーザーが API サーバーにアップロードできる合計ファイルサイズの上限を設定できます。単位はバイトです。値がない場合は上限は設けられません。

ENTRY_PASSWORD (必須)

エントリーパスワード(サイトを利用するために必要なパスワード)を設定できます。JSON フォーマットで入力する必要があります。

注記

エントリーパスワードの設定し忘れを防ぐため、ENTRY_PASSWORDに値がセットされていない場合は API サーバーは稼働せずエラーとなるようにしています。

入力例

パスワードを設定しない場合

ENTRY_PASSWORD='{"type":"none"}'

平文でパスワードを設定する場合

ENTRY_PASSWORD='{"type":"plain","value":"******"}'

******の部分はユーザーに要求するパスワードに置き換えてください。

bcrypt のハッシュ値でパスワードを設定する場合

ENTRY_PASSWORD='{"type":"bcrypt","value":"$2b$10$ABC.defgh.igklmnopq/qwertyuiopasdfghjklzxcvbnm0123"}'

$2b$10$ABC.defgh.igklmnopq/qwertyuiopasdfghjklzxcvbnm0123の部分は bcrypt のハッシュ値に置き換えてください。

bcrypt のハッシュ値は様々な方法で生成できます。どの方法を用いても構いません。Flocon では次の 2 つの方法を提供しています。

  • https://tools.flocon.app/bcrypt で生成する。最も手軽ですが、このページには npm の bcryptjs パッケージ を使っているため、API サーバーに使用している bcrypt パッケージでは認識できないハッシュ値が生成される可能性があります。その場合は、日本語などを用いない、もしくはパスワードを短くすることで解決できる可能性があります。
  • Flocon のソースコードに付属しているbcrypt-interactiveスクリプトを利用する。apps/api-serverディレクトリで yarn run bcrypt-interactiveを実行すると、bcrypt ハッシュ値生成プログラムが起動します。bcrypt パッケージ が使われますが、事前に Node.js と yarn のインストールおよび、yarn install コマンドを実行して数百 MB のファイルをダウンロードする必要があります。

FIREBASE_ADMIN_SECRET (省略可)

備考

2022 年 8 月頃までこの設定は必須と書かれていましたが、確認したところ実際は必要ないことが判明しました。よって、**FIREBASE_ADMIN_SECRET の設定の有無は現時点では Flocon の動作に影響を及ぼさないと考えられるため、設定する必要はありません。**すでに FIREBASE_ADMIN_SECRET に値をセットしている場合は、値を削除しても構いません。同様に、Firebase Admin SDK の秘密鍵ファイルの生成も行う必要はありません。

ただし、将来 Flocon に新機能が追加された際に、この環境変数を設定しなければその新機能を使えない、といった状況が生じる可能性はあります。そのため、現在の Flocon のソースコードにもFIREBASE_ADMIN_SECRETを読み取る機能は残されており、FIREBASE_ADMIN_SECRETの値が存在すればそれが Firebase Admin SDK の初期化に引き続き用いられるようになっています。

Firebase 管理ページから生成した Firebase Admin SDK の秘密鍵の値を設定できます。

Firebase Admin SDK の秘密鍵ファイルは次の方法で取得できます。

Firebase の プロジェクトの設定(Firebase 管理ページ左上にある歯車アイコンから開けます) の サービスアカウント タブの下の方にある新しい秘密鍵の生成ボタンをクリックすることで秘密鍵ファイルのダウンロードが開始されます。

1.png

危険

秘密鍵を生成する際に表示されるメッセージにもあるとおり、秘密鍵のデータは第三者に漏洩しないように注意して管理してください。

入力例

FIREBASE_ADMIN_SECRET='{"private_key":"-----BEGIN PRIVATE KEY-----\n********************\n-----END PRIVATE KEY-----\n","client_email":"************.iam.gserviceaccount.com"}'

*の部分を適切な文字列に置き換えてください。なお、実際のprivate_keyの値はこの例と比べて非常に長いです。

FLOCON_ADMIN (省略可) (v0.7.2 で追加)

管理者権限を与えるユーザーを指定できます。ユーザーを指定するには、Firebase Authentication のユーザー UID を記述します。複数のユーザーを指定する場合は、半角カンマで区切ります。

API サーバー v0.7.2 の時点では、管理者には部屋一覧を表示する画面から任意の部屋を削除できる権限が与えられます。これ以外の機能もおいおい追加するかもしれません。

管理者は必ずしもサーバーの運用者と一致させる必要はありません。また、管理者は 0 人でも構いません。

公開サーバーでは管理者がいると便利な場面があるかもしれませんが、身内サーバーではあまり必要ないかと思われます。

入力例

FLOCON_ADMIN="abcDEFghiJKL123,MNOpqrSTUvwx456"

FIREBASE_PROJECTID (省略可) (v0.7.10 で追加)

FIREBASE_PROJECT_ID をご覧ください。

FIREBASE_PROJECT_ID (省略可) (v0.7.11 で追加)

利用する Firebase プロジェクトの ID を設定できます。

API サーバー v0.7.11 以上では、FIREBASE_PROJECT_IDFIREBASE_PROJECTID のいずれかを利用することができます。どちらを同じ動作をします。v0.7.10 では FIREBASE_PROJECTID のみが利用できます。

備考

FIREBASE_ADMIN_SECRET を設定しない場合は、FIREBASE_PROJECT_IDFIREBASE_PROJECTID のいずれかを必ず設定する必要があります。

プロジェクト ID の取得方法

Firebase の設定情報にアクセスします。

1.png

このページの下部に、下のようにconst firebaseConfig = {で始まるコードがあります。この中からprojectId:で始まる行を探し、その右の文字列を確認します。下の例ですと"my-firebase-project-id"が該当します。

const firebaseConfig = {
apiKey: '*************',
authDomain: '*****.firebaseapp.com',
databaseURL: 'https://*****.firebaseio.com',
projectId: 'my-firebase-project-id',
storageBucket: '*****',
messagingSenderId: '*****',
appId: '************',
measurementId: '*****',
};

入力例

FIREBASE_PROJECT_ID="my-firebase-project-id"

HEROKU (省略可)

true をセットすることで、Heroku に適したモードで API サーバーが稼働します。具体的には、次のような挙動になります。

  • API サーバー v0.7.7 以下ならば、DATABASE_URLという環境変数がある場合、データベースの URL として利用されます(v0.7.8 以上ならば HEROKUtrueでなくともDATABASE_URLを使用できます)。
  • Heroku Postgres に対応した方法でデータベースに接続されます。

LOG_FORMAT (省略可) (v0.7.10 で追加)

default をセットすると、シンプルな形式でログが出力されます。値がセットされていない場合は default がセットされたときと同じ動作をします。

json もしくは pino をセットすることで、代わりに pino の JSON の形式でログが出力されます。また、API 実行に関わるログが出力されるようにもなります。API 実行に関わるログは大量に出力されますのでご注意ください。jsonpino はどちらも同じ動作をします。

ヒント

JSON 形式のログは、pino-pretty を使うことで人間が読みやすい形に変換できます。使い方は、まず npm install -g pino-pretty でインストールしてから、yarn run start | pino-pretty などのように組み合わせます1。pino のモジュールには pino-pretty 以外にも様々なものが存在します。

入力例

LOG_FORMAT="json"

LOG_LEVEL (省略可) (v0.7.10 で追加)

出力するログのレベルを設定できます。fatalerrorwarninfodebugtracesilent のいずれかの値をセットできます。値がセットされていない場合は info がセットされたときと同じ動作をします。

silent の場合、一切のログ出力を行いません。silent 以外の場合は、セットされたレベル以上のログのみを出力します。例えば warn をセットした場合、fatalerrorwarn のレベルのログのみが出力されます。

注記

API の実行に関わるログは、LOG_LEVEL の値に関わらず、LOG_FORMATjson などにしない限り出力されません。

入力例

LOG_LEVEL="warn"

MySQL (省略可) (v0.7.2 で追加)

MySQL の設定を行うことができます。

備考

API サーバー v0.7.8 以上の場合

通常の用途の場合、これではなくDATABASE_URLを用いてデータベースを指定するのが最も手軽です。 もしDATABASE_URLを使わない場合は、POSTGRESQLMYSQLSQLITEのうち、少なくとも 1 つの値を設定する必要があります。

API サーバー v0.7.7 以下の場合

HEROKUをtrueにしていない場合は、POSTGRESQLMYSQLSQLITEのうち、少なくとも 1 つの値を設定する必要があります。

入力例

MYSQL='{"clientUrl":"mysql://myuser:mypassword@localhost:5432/mydbname"}'

この値には、慎重に扱うべきデータが一般的に含まれるため、fly.tomlで設定することは推奨されません。fly.io にデプロイする場合は、代わりにflyctl secrets setコマンドを利用することを推奨します。

NODE_ENV (省略可)

productionをセットすると、API サーバーが本番環境のモードで実行されるようになります。デバッグ目的などでない限りはproductionをセットするほうが望ましいです。

注記

これは正確には Flocon の API サーバーではなく Node.js の機能です。

入力例

NODE_ENV="production"

PORT (省略可)

ポート番号を設定できます。

注意

Heroku にデプロイする場合は設定しないでください。

入力例

PORT="8080"

POSTGRESQL (省略可)

PostgreSQL の設定を行うことができます。

備考

API サーバー v0.7.8 以上の場合

通常の用途の場合、これではなくDATABASE_URLを用いてデータベースを指定するのが最も手軽です。 もしDATABASE_URLを使わない場合は、POSTGRESQLMYSQLSQLITEのうち、少なくとも 1 つの値を設定する必要があります。

API サーバー v0.7.7 以下の場合

HEROKUをtrueにしていない場合は、POSTGRESQLMYSQLSQLITEのうち、少なくとも 1 つの値を設定する必要があります。

入力例

POSTGRESQL='{"clientUrl":"postgresql://myuser:mypassword@localhost:5432/mydbname"}'

この値には、慎重に扱うべきデータが一般的に含まれるため、fly.tomlで設定することは推奨されません。fly.io にデプロイする場合は、代わりにflyctl secrets setコマンドを利用することを推奨します。

ROOMHIST_COUNT (省略可)

部屋の変更履歴を保持する個数を設定できます。設定しないか負の値を指定すると、変更履歴がすべて保持されるようになります。なお、ROOMHIST_COUNT の設定の有無に関わらず、部屋が削除される際は同時にその部屋の変更履歴もすべて削除されます。

使用しているデータベースの列やファイルサイズに大きな制限がない場合は、よほど長期間同じ部屋を使いまわしたりしない限り ROOMHIST_COUNT は設定しなくても問題ないと思われます。

注意

Heroku Postgres の Hobby Dev プランを使用する際は、1 ~ 20 程度の値を指定することを推奨します。

備考

変更履歴が保持される理由は、部屋の編集で衝突が起こった際に解決できるようにするためです。そのため 0 などを指定すると編集の衝突を解決できなくなる可能性が高くなります。また、現時点では変更履歴をブラウザなどから閲覧する機能はありません。

入力例

ROOMHIST_COUNT="10"

SQLITE (省略可)

SQLite の設定を行うことができます。

備考

API サーバー v0.7.8 以上の場合

通常の用途の場合、これではなくDATABASE_URLを用いてデータベースを指定するのが最も手軽です。 もしDATABASE_URLを使わない場合は、POSTGRESQLMYSQLSQLITEのうち、少なくとも 1 つの値を設定する必要があります。

API サーバー v0.7.7 以下の場合

HEROKUをtrueにしていない場合は、POSTGRESQLMYSQLSQLITEのうち、少なくとも 1 つの値を設定する必要があります。

入力例

SQLITE='{"dbName":"./flocon-api.sqlite3"}'

Footnotes

  1. 代わりに yarn dlx などを用いても構いません。