tessera

設定

設定從哪裡來,以及誰蓋過誰

設定在兩個地方,而且不重疊。

  • 環境變數放跑起來之後改不動的,以及幾個資料庫裡絕對不能有的秘密。
  • 後台在同一個網址的 /admin/,放其他全部。存在資料庫裡,改完不用重開。

後台裡看得到的,改了就會生效。要重開才會生效的設定,會顯示成唯讀並附上原因。

沒有設定檔

tessera.yaml 和 tessera.toml 不會被讀。還設著 TESSERA_CONFIG_FILE 的機器開得起來但會記一句警告,那個檔案裡寫什麼都不算數。

一定要走環境變數的

開機時就定了。 socket 已經 bind、連線池已經建好、log 的 subscriber 開機只裝一次。

  • server.host、server.port、server.data_dir、server.max_body_bytes、server.cors_allowed_origins、server.assets_dir
  • features.docs
  • database. 和 telemetry. 底下的全部

資料庫裡不能有的秘密。

  • database.url、auth.admin_password、security.secret_key

其他的跑著就能改。

放在後台的憑證

寄信中繼的帳密、掃毒服務的授權標頭、第三方登入的 client secret,還有儲存 backend 的位址,都跟其他設定一樣在後台設。後台會告訴你某一個有沒有設,但不會再顯示它,所以讀得到設定的人讀不到密碼。

封住憑證的那把金鑰

那些憑證是加密存的。金鑰是 security.secret_key;留空的話,機器會在第一次啟動時產生一把,存成 server.data_dir 底下的 secret.key。

金鑰弄丟,所有封起來的憑證就沒了

沒有它,資料庫的備份對那些值來說沒有用;在新機器上還原卻沒帶金鑰,就要把每一個 backend 和秘密重新輸入一次。secret.key 跟資料庫一起備份,或是設 TESSERA_SECURITY__SECRET_KEY(openssl rand -hex 32)並且放在備份不在的地方。

環境變數怎麼寫

TESSERA_SERVER__PORT=9000
TESSERA_DATABASE__URL=postgres://…

前綴 TESSERA_,巢狀用兩個底線。清單可以用逗號,也可以用 JSON 陣列:

TESSERA_SERVER__CORS_ALLOWED_ORIGINS='https://a.example, https://b.example'
TESSERA_SERVER__CORS_ALLOWED_ORIGINS='["https://a.example","https://b.example"]'

不是設定的 key 會讓它停下來,不會默默忽略,所以打錯字在開機時就抓到。

systemd 的 EnvironmentFile= 一樣是指一個檔案。repo 裡的 contrib/tessera.service 有一份能用的。

主 repo 有兩份可以直接拿來改:只有你和你信任的人用的,從 tessera.personal.env.example 開始;開放給陌生人上傳的,從 tessera.public.env.example 開始。

其他的怎麼改

三條路進同一個地方:

每一個設定、現在生效的值,以及它是從哪一層來的。只能走環境變數的會顯示成唯讀。

誰蓋過誰

由低到高:內建預設值,然後是環境變數,然後是存起來的設定。

存起來的設定蓋過環境變數

它是唯一有人在這台機器上刻意改過的一層。容器映像檔自己會設幾個變數,讓那些贏的話,後台就變成一個回報成功但什麼都沒改的畫面。

存起來的值如果這個版本不收(降版或改壞了),會被一個 key 一個 key 地丟掉並記進 log,由下面那一層決定,其他設定不受影響。

有些改動會毀掉東西

把保存期改短,已經超過新界線的東西就沒了。後台會先拒絕,要你確認,並且先告訴你會丟掉多少。

被蓋過 被蓋過 內建預設值 環境變數 後台存起來的值 實際生效的值

幾個會想先改的

設定

型別

匿名上傳沒有配額

features.anonymous_upload 開著而 storage.max_total_bytes 沒設的話,任何連得到的人都能把磁碟塞滿。啟動時會警告。

server.request_timeout_secs 不管上傳。一個時鐘預算沒辦法同時讓 5 GB 的上傳傳完、又擋掉連上來就不送東西的客戶端,所以上傳改看 server.upload_stall_secs:可以多久沒有任何位元組進來。

本頁內容