環境変数の一覧
ACCESS_CONTROL_ALLOW_ORIGIN (省略可)
API サーバーから送信される値にAccess-Control-Allow-Origin
ヘッダーを設定します。通常は、EMBUPLOADER_ENABLEDを有効化していない場合は設定する必要はありません。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
ACCESS_CONTROL_ALLOW_ORIGIN="https://example.com"
flyctl secrets set ACCESS_CONTROL_ALLOW_ORIGIN=https://example.com
ACCESS_CONTROL_ALLOW_ORIGIN=https://example.com
KEY: ACCESS_CONTROL_ALLOW_ORIGIN
VALUE: https://example.com
AUTO_MIGRATION (省略可)
true
にすることで、データベースのマイグレーションが自動的に行われます。
もしこれをtrue
にすると、API サーバーをアップデートした後に API サーバープログラムを動かした際にデータベースが自動的にマイグレーションされます。データベースにすでに存在するデータはほぼ全て保持されますが、もし万が一データ損失が発生すると困る場合は、事前にデータベースをバックアップしておいたほうが無難です。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
AUTO_MIGRATION="true"
flyctl secrets set AUTO_MIGRATION=true
AUTO_MIGRATION=true
KEY: AUTO_MIGRATION
VALUE: true
DATABASE_URL (v0.7.8 で仕様変更)
この環境変数の解説は API サーバー v0.7.8 以上を前提としています。v0.7.7 以前には対応していません。v0.7.7 以前の解説は HEROKU をご覧ください。
データベースの URL を指定できます。PostgreSQL の場合は postgresql://
、MySQL の場合は mysql://
、SQLite の場合は file://
で書き始めます。
POSTGRESQL、MYSQL、SQLITE が設定されている場合はそちらが優先されます。それらは JSON で入力しますが、DATABASE_URL
では URL のみからなる文字列で入力しますのでご注意ください。
入力例
PostgreSQL
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
DATABASE_URL="postgresql://user:password@localhost:5432/dbname"
この値には、慎重に扱うべきデータが一般的に含まれるため、fly.toml
で設定することは推奨されません。fly.io にデプロイする場合は、代わりにflyctl secrets set
コマンドを利用することを推奨します。
flyctl secrets set DATABASE_URL=postgresql://user:password@localhost:5432/dbname
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
KEY: DATABASE_URL
VALUE: postgresql://user:password@localhost:5432/dbname
なお、Heroku にデプロイしたうえで Heroku Postgres を利用する場合は自動的に値が設定されるため、手動で設定する必要はありません。
MySQL
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
DATABASE_URL="mysql://user:password@localhost:3306/dbname"
この値には、慎重に扱うべきデータが一般的に含まれるため、fly.toml
で設定することは推奨されません。fly.io にデプロイする場合は、代わりにflyctl secrets set
コマンドを利用することを推奨します。
flyctl secrets set DATABASE_URL=mysql://user:password@localhost:3306/dbname
DATABASE_URL=mysql://user:password@localhost:3306/dbname
この環境変数は、Heroku に対応していないか、Heroku での設定が推奨されていません。
SQLite
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
DATABASE_URL="file://./dbname.sqlite"
flyctl secrets set DATABASE_URL=file://./dbname.sqlite
DATABASE_URL=file://./dbname.sqlite
この環境変数は、Heroku に対応していないか、Heroku での設定が推奨されていません。
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 サーバー内蔵アップローダーは無効化されます。
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
EMBUPLOADER_PATH="./uploader"
flyctl secrets set EMBUPLOADER_PATH=./uploader
EMBUPLOADER_PATH=./uploader
KEY: EMBUPLOADER_PATH
VALUE: ./uploader
EMBUPLOADER_SIZE_QUOTA (省略可)
EMBUPLOADER_ENABLED が有効化されているときにのみ使われます。
1 ユーザーが API サーバーにアップロードできる合計ファイルサイズの上限を設定できます。単位はバイトです。値がない場合は上限は設けられません。
ENTRY_PASSWORD (必須)
エントリーパスワード(サイトを利用するために必要なパスワード)を設定できます。JSON フォーマットで入力する必要があります。
エントリーパスワードの設定し忘れを防ぐため、ENTRY_PASSWORD
に値がセットされていない場合は API サーバーは稼働せずエラーとなるようにしています。
入力例
パスワードを設定しない場合
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
ENTRY_PASSWORD='{"type":"none"}'
flyctl secrets set ENTRY_PASSWORD={"type":"none"}
ENTRY_PASSWORD={"type":"none"}
KEY: ENTRY_PASSWORD
VALUE: {"type":"none"}
平文でパスワードを設定する場合
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
ENTRY_PASSWORD='{"type":"plain","value":"******"}'
flyctl secrets set ENTRY_PASSWORD={"type":"plain","value":"******"}
ENTRY_PASSWORD={"type":"plain","value":"******"}
KEY: ENTRY_PASSWORD
VALUE: {"type":"plain","value":"******"}
******
の部分はユーザーに要求するパスワードに置き換えてください。
bcrypt のハッシュ値でパスワードを設定する場合
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
ENTRY_PASSWORD='{"type":"bcrypt","value":"$2b$10$ABC.defgh.igklmnopq/qwertyuiopasdfghjklzxcvbnm0123"}'
flyctl secrets set ENTRY_PASSWORD={"type":"bcrypt","value":"$2b$10$ABC.defgh.igklmnopq/qwertyuiopasdfghjklzxcvbnm0123"}
ENTRY_PASSWORD={"type":"bcrypt","value":"$2b$10$ABC.defgh.igklmnopq/qwertyuiopasdfghjklzxcvbnm0123"}
KEY: ENTRY_PASSWORD
VALUE: {"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 管理ページ左上にある歯車アイコンから開けます) の サービスアカウント
タブの下の方にある新しい秘密鍵の生成
ボタンをクリックすることで秘密鍵ファイルのダウンロードが開始されます。
秘密鍵を生成する際に表示されるメッセージにもあるとおり、秘密鍵のデータは第三者に漏洩しないように注意して管理してください。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
FIREBASE_ADMIN_SECRET='{"private_key":"-----BEGIN PRIVATE KEY-----\n********************\n-----END PRIVATE KEY-----\n","client_email":"************.iam.gserviceaccount.com"}'
flyctl secrets set FIREBASE_ADMIN_SECRET={"private_key":"-----BEGIN PRIVATE KEY-----\n********************\n-----END PRIVATE KEY-----\n","client_email":"************.iam.gserviceaccount.com"}
FIREBASE_ADMIN_SECRET={"private_key":"-----BEGIN PRIVATE KEY-----\n********************\n-----END PRIVATE KEY-----\n","client_email":"************.iam.gserviceaccount.com"}
KEY: FIREBASE_ADMIN_SECRET
VALUE: {"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 人でも構いません。
公開サーバーでは管理者がいると便利な場面があるかもしれませんが、身内サーバーではあまり必要ないかと思われます。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
FLOCON_ADMIN="abcDEFghiJKL123,MNOpqrSTUvwx456"
flyctl secrets set FLOCON_ADMIN=abcDEFghiJKL123,MNOpqrSTUvwx456
FLOCON_ADMIN=abcDEFghiJKL123,MNOpqrSTUvwx456
KEY: FLOCON_ADMIN
VALUE: abcDEFghiJKL123,MNOpqrSTUvwx456
FIREBASE_PROJECTID (省略可) (v0.7.10 で追加)
FIREBASE_PROJECT_ID をご覧ください。
FIREBASE_PROJECT_ID (省略可) (v0.7.11 で追加)
利用する Firebase プロジェクトの ID を設定できます。
API サーバー v0.7.11 以上では、FIREBASE_PROJECT_ID
と FIREBASE_PROJECTID
のいずれかを利用することができます。どちらを同じ動作をします。v0.7.10 では FIREBASE_PROJECTID
のみが利用できます。
FIREBASE_ADMIN_SECRET
を設定しない場合は、FIREBASE_PROJECT_ID
と FIREBASE_PROJECTID
のいずれかを必ず設定する必要があります。
プロジェクト ID の取得方法
Firebase の設定情報にアクセスします。
このページの下部に、下のように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: "*****",
};
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
FIREBASE_PROJECT_ID="my-firebase-project-id"
flyctl secrets set FIREBASE_PROJECT_ID=my-firebase-project-id
FIREBASE_PROJECT_ID=my-firebase-project-id
KEY: FIREBASE_PROJECT_ID
VALUE: my-firebase-project-id
HEROKU (省略可)
true
をセットすることで、Heroku に適したモードで API サーバーが稼働します。具体的には、次のような挙動になります。
- API サーバー v0.7.7 以下ならば、
DATABASE_URL
という環境変数がある場合、データベースの URL として利用されます(v0.7.8 以上ならばHEROKU
がtrue
でなくともDATABASE_URLを使用できます)。 - Heroku Postgres に対応した方法でデータベースに接続されます。
LOG_FORMAT (省略可) (v0.7.10 で追加)
default
をセットすると、シンプルな形式でログが出力されます。値がセットされていない場合は default
がセットされたときと同じ動作をします。
json
もしくは pino
をセットすることで、代わりに pino の JSON の形式でログが出力されます。また、API 実行に関わるログが出力されるようにもなります。API 実行に関わるログは大量に出力されますのでご注意ください。json
と pino
はどちらも同じ動作をします。
JSON 形式のログは、pino-pretty を使うことで人間が読みやすい形に変換できます。使い方は、まず npm install -g pino-pretty
でインストールしてから、yarn run start | pino-pretty
などのように組み合わせます1。pino のモジュールには pino-pretty 以外にも様々なものが存在します。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
LOG_FORMAT="json"
flyctl secrets set LOG_FORMAT=json
LOG_FORMAT=json
KEY: LOG_FORMAT
VALUE: json
LOG_LEVEL (省略可) (v0.7.10 で追加)
出力するログのレベルを設定できます。fatal
、error
、warn
、info
、debug
、trace
、silent
のいずれかの値をセットできます。値がセットされていない場合は info
がセットされたときと同じ動作をします。
silent
の場合、一切のログ出力を行いません。silent
以外の場合は、セットされたレベル以上のログのみを出力します。例えば warn
をセットした場合、fatal
、error
、warn
のレベルのログのみが出力されます。
API の実行に関わるログは、LOG_LEVEL
の値に関わらず、LOG_FORMAT
を json
などにしない限り出力されません。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
LOG_LEVEL="warn"
flyctl secrets set LOG_LEVEL=warn
LOG_LEVEL=warn
KEY: LOG_LEVEL
VALUE: warn
MySQL (省略可) (v0.7.2 で追加)
MySQL の設定を行うことができます。
API サーバー v0.7.8 以上の場合
通常の用途の場合、これではなくDATABASE_URLを用いてデータベースを指定するのが最も手軽です。 もしDATABASE_URLを使わない場合は、POSTGRESQLとMYSQLとSQLITEのうち、少なくとも 1 つの値を設定する必要があります。
API サーバー v0.7.7 以下の場合
HEROKUをtrueにしていない場合は、POSTGRESQLとMYSQLとSQLITEのうち、少なくとも 1 つの値を設定する必要があります。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
MYSQL='{"clientUrl":"mysql://myuser:mypassword@localhost:5432/mydbname"}'
この値には、慎重に扱うべきデータが一般的に含まれるため、fly.toml
で設定することは推奨されません。fly.io にデプロイする場合は、代わりにflyctl secrets set
コマンドを利用することを推奨します。
flyctl secrets set MYSQL={"clientUrl":"mysql://myuser:mypassword@localhost:5432/mydbname"}
MYSQL={"clientUrl":"mysql://myuser:mypassword@localhost:5432/mydbname"}
KEY: MYSQL
VALUE: {"clientUrl":"mysql://myuser:mypassword@localhost:5432/mydbname"}
NODE_ENV (省略可)
production
をセットすると、API サーバーが本番環境のモードで実行されるようになります。デバッグ目的などでない限りはproduction
をセットするほうが望ましいです。
これは正確には Flocon の API サーバーではなく Node.js の機能です。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
NODE_ENV="production"
flyctl secrets set NODE_ENV=production
NODE_ENV=production
KEY: NODE_ENV
VALUE: production
PORT (省略可)
ポート番号を設定できます。
Heroku にデプロイする場合は設定しないでください。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
PORT="8080"
flyctl secrets set PORT=8080
PORT=8080
この環境変数は、Heroku に対応していないか、Heroku での設定が推奨されていません。
POSTGRESQL (省略可)
PostgreSQL の設定を行うことができます。
API サーバー v0.7.8 以上の場合
通常の用途の場合、これではなくDATABASE_URLを用いてデータベースを指定するのが最も手軽です。 もしDATABASE_URLを使わない場合は、POSTGRESQLとMYSQLとSQLITEのうち、少なくとも 1 つの値を設定する必要があります。
API サーバー v0.7.7 以下の場合
HEROKUをtrueにしていない場合は、POSTGRESQLとMYSQLとSQLITEのうち、少なくとも 1 つの値を設定する必要があります。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
POSTGRESQL='{"clientUrl":"postgresql://myuser:mypassword@localhost:5432/mydbname"}'
この値には、慎重に扱うべきデータが一般的に含まれるため、fly.toml
で設定することは推奨されません。fly.io にデプロイする場合は、代わりにflyctl secrets set
コマンドを利用することを推奨します。
flyctl secrets set POSTGRESQL={"clientUrl":"postgresql://myuser:mypassword@localhost:5432/mydbname"}
POSTGRESQL={"clientUrl":"postgresql://myuser:mypassword@localhost:5432/mydbname"}
KEY: POSTGRESQL
VALUE: {"clientUrl":"postgresql://myuser:mypassword@localhost:5432/mydbname", "driverOptions":{"connection": {"ssl": {"rejectUnauthorized": false}}}}
Heroku の場合は、この例のように"driverOptions":{"connection": {"ssl": {"rejectUnauthorized": false}}}
も JSON に書き加えないと正常に動作しない可能性があります。
ROOMHIST_COUNT (省略可)
部屋の変更履歴を保持する個数を設定できます。設定しないか負の値を指定すると、変更履歴がすべて保持されるようになります。なお、ROOMHIST_COUNT
の設定の有無に関わらず、部屋が削除される際は同時にその部屋の変更履歴もすべて削除されます。
使用しているデータベースの列やファイルサイズに大きな制限がない場合は、よほど長期間同じ部屋を使いまわしたりしない限り ROOMHIST_COUNT
は設定しなくても問題ないと思われます。
Heroku Postgres の Hobby Dev プランを使用する際は、1 ~ 20 程度の値を指定することを推奨します。
変更履歴が保持される理由は、部屋の編集で衝突が起こった際に解決できるようにするためです。そのため 0 などを指定すると編集の衝突を解決できなくなる可能性が高くなります。また、現時点では変更履歴をブラウザなどから閲覧する機能はありません。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
ROOMHIST_COUNT="10"
flyctl secrets set ROOMHIST_COUNT=10
ROOMHIST_COUNT=10
KEY: ROOMHIST_COUNT
VALUE: 10
SQLITE (省略可)
SQLite の設定を行うことができます。
API サーバー v0.7.8 以上の場合
通常の用途の場合、これではなくDATABASE_URLを用いてデータベースを指定するのが最も手軽です。 もしDATABASE_URLを使わない場合は、POSTGRESQLとMYSQLとSQLITEのうち、少なくとも 1 つの値を設定する必要があります。
API サーバー v0.7.7 以下の場合
HEROKUをtrueにしていない場合は、POSTGRESQLとMYSQLとSQLITEのうち、少なくとも 1 つの値を設定する必要があります。
入力例
- fly.toml
- flyctl secrets set コマンド
- .env.local, .env
- Heroku
SQLITE='{"dbName":"./flocon-api.sqlite3"}'
flyctl secrets set SQLITE={"dbName":"./flocon-api.sqlite3"}
SQLITE={"dbName":"./flocon-api.sqlite3"}
KEY: SQLITE
VALUE: {"dbName":"./flocon-api.sqlite3"}
- 代わりに
yarn dlx
などを用いても構いません。↩