Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

設定檔

本章節描述 Sylvia-IoT 的設定格式和用途。

Sylvia-IoT 的設定支援四種來源,優先權依序為(高到低):

  • JSON5 設定檔
  • 命令列參數
  • 環境變數
  • 內部預設值(不一定存在,如為必填且不提供則會有錯誤訊息)

JSON5 可以參考範例檔案,該檔案提供了完整的設定項目。 本章節將會提供對應的說明。以下為設定的慣例:

  • JSON5 的巢狀形式會以 . 來表示。
  • 命令列參數遇到 JSON5 的巢狀會以 . 來表示。
  • 命令列參數遇到 JSON5 為駝峰的情形,會以全小寫或是 - 尾隨小寫來表示。以下為例子:
    • JSON5 的 server.httpPort 對應 --server.httpport
    • JSON5 的 broker.mqChannels 對應 --broker.mq-channels
  • 環境變數全大寫。
  • 環境變數遇到 JSON5 的巢狀會以 _ 來表示。
  • 環境變數遇到 JSON5 為駝峰的情形,會以全大寫或是 _ 分開來表示。以下為例子:
    • JSON5 的 server.httpPort 對應 SERVER_HTTP_PORT
    • JSON5 的 broker.mqChannels 對應 BROKER_MQCHANNELS

接下來是完整的表格說明。

如有標示 參照範例 表示範例的 JSON5 有提供,或是可以使用 CLI help 指令查看支援的選項。

共同設定

JSON5命令列參數環境變數預設值說明
log.levellog.levelLOG_LEVELinfoLog 等級。參照範例
log.stylelog.styleLOG_STYLEjsonLog 樣式。參照範例
server.httpPortlog.httpportSERVER_HTTP_PORT1080HTTP 監聽連接埠
server.httpsPortlog.httpsportSERVER_HTTPS_PORT1443HTTPS 監聽連接埠
server.cacertFilelog.cacertfileSERVER_CACERT_FILEHTTPS 根憑證擋位置
server.certFilelog.certfileSERVER_CERT_FILEHTTPS 憑證擋位置
server.keyFilelog.keyfileSERVER_KEY_FILEHTTPS 私鑰位置
server.staticPathlog.staticSERVER_STATIC_PATH靜態檔案目錄位置

詳細說明

  • 目前還未使用根憑證。
  • 必須同時使用憑證和私鑰才能啟用 HTTPS 服務。

API Scopes

所有的 API 都需要透過在系統註冊的客戶端(client)以及訪問令牌(access token)才能存取。每一個令牌會記錄所屬的客戶端,只有經過授權的客戶端才能存取 API。

當某個 API 對應的 apiScopes 的設定被開啟時,除非客戶端在註冊的時候有啟用這些 scope 並被使用者授權,取得的令牌才能存取該 API。

命令列參數和環境變數都要是 JSON string,舉例:

--auth.api-scopes='{"auth.tokeninfo.get":[]}'

您可以自行定義 scope 名稱,並套用到各個 API scope 中。可以參考下面認證服務的範例。

認證服務(auth)

JSON5命令列參數環境變數預設值說明
auth.db.engineauth.db.engineAUTH_DB_ENGINEsqlite使用的資料庫種類
auth.db.mongodb.urlauth.db.mongodb.urlAUTH_DB_MONGODB_URLmongodb://localhost:27017MongoDB 連線的 URL
auth.db.mongodb.databaseauth.db.mongodb.databaseAUTH_DB_MONGODB_DATABASEauthMongoDB 資料庫名稱
auth.db.mongodb.poolSizeauth.db.mongodb.poolsizeAUTH_DB_MONGODB_POOLSIZEMongoDB 最大連線數量
auth.db.sqlite.pathauth.db.sqlite.pathAUTH_DB_SQLITE_PATHauth.dbSQLite 檔案位置
auth.db.templates.loginauth.db.templatesAUTH_TEMPLATES登入頁面樣板位址
auth.db.templates.grantauth.db.templatesAUTH_TEMPLATES授權頁面樣板位址
auth.db.apiScopesauth.api-scopesAUTH_API_SCOPESAPI 權限設定

詳細說明

  • templates(樣板)
    • 使用 OAuth2 authorization code 授權流程需要使用的網頁。sylvia-iot-auth 有提供預設的頁面,而 Sylvia-IoT 允許您自訂符合自己風格的網頁。
    • 樣板使用 Jinja2 格式(相依 tera 套件)。
    • 命令列參數和環境變數都要用 JSON string,比如
      --auth.templates='{"login":"xxx"}'
      
    • 詳細說明請參考 OAuth2 認證
  • API scopes
    • auth 模組提供了以下幾個 scope 可供設定給對應的 API,限制 client 可以存取的範圍:
      • auth.tokeninfo.get: 授權 client 讀取令牌的資料。
        • GET /api/v1/auth/tokeninfo
      • auth.logout.post: 授權 client 將令牌登出。
        • POST /auth/api/v1/auth/logout
      • user.get: 授權 client 存取目前使用者的個人資料。
        • GET /api/v1/user
      • user.path: 授權 client 修改目前使用者的個人資料。
        • PATCH /api/v1/user
      • user.get.admin: 授權 client 取得系統所有使用者的資料。
        • GET /api/v1/user/count
        • GET /api/v1/user/list
        • GET /api/v1/user/{userId}
      • user.post.admin: 授權 client 在系統建立新的使用者。
        • POST /api/v1/user
      • user.patch.admin: 授權 client 修改系統任意使用者的資料。
        • PATCH /api/v1/user/{userId}
      • user.delete.admin: 授權 client 刪除系統任意使用者的資料。
        • DELETE /api/v1/user/{userId}
      • client.get: 授權 client 存取得系統所有客戶端資料。
        • GET /api/v1/client/count
        • GET /api/v1/client/list
        • GET /api/v1/client/{clientId}
      • client.post: 授權 client 在系統建立新的客戶端。
        • POST /api/v1/client
      • client.patch: 授權 client 修改系統任意客戶端的資料。
        • PATCH /api/v1/client/{clientId}
      • client.delete: 授權 client 刪除系統任意客戶端的資料。
        • DELETE /api/v1/client/{clientId}
      • client.delete.user: 授權 client 刪除系統任意使用者的所有客戶端。
        • DELETE /api/v1/client/user/{userId}
    • 舉例,在您的服務定義如下的 scope:
      • api.admin: 僅能授權移除使用者的所有客戶端。
      • api.rw: 可以讀寫除了 DELETE /api/v1/client/user/{userId} 的所有 API。
      • api.readonly: 只能存取 GET API。
      • 取得令牌資料和登出,這兩個動作開放所有客戶端可以使用。
      "auth": {
          ...
          "apiScopes": {
              "auth.tokeninfo.get": [],
              "auth.logout.post": [],
              "user.get": ["api.rw", "api.readonly"],
              "user.patch": ["api.rw"],
              "user.post.admin": ["api.rw"],
              "user.get.admin": ["api.rw", "api.readonly"],
              "user.patch.admin": ["api.rw"],
              "user.delete.admin": ["api.rw"],
              "client.post": ["api.rw"],
              "client.get": ["api.rw", "api.readonly"],
              "client.patch": ["api.rw"],
              "client.delete": ["api.rw"],
              "client.delete.user": ["api.admin"],
          },
          ...
      }
      
      • 以這個例子,註冊的客戶端可以任意勾選這三種 scope。之後使用者會在授權頁面得知這些訊息,並且決定是否授權客戶端。

消息代理服務(broker)

JSON5命令列參數環境變數預設值說明
broker.authbroker.authBROKER_AUTHhttp://localhost:1080/auth認證服務位址
broker.db.enginebroker.db.engineBROKER_DB_ENGINEsqlite使用的資料庫種類
broker.db.mongodb.urlbroker.db.mongodb.urlBROKER_DB_MONGODB_URLmongodb://localhost:27017MongoDB 連線的 URL
broker.db.mongodb.databasebroker.db.mongodb.databaseBROKER_DB_MONGODB_DATABASEauthMongoDB 資料庫名稱
broker.db.mongodb.poolSizebroker.db.mongodb.poolsizeBROKER_DB_MONGODB_POOLSIZEMongoDB 最大連線數量
broker.db.sqlite.pathbroker.db.sqlite.pathBROKER_DB_SQLITE_PATHauth.dbSQLite 檔案位置
broker.cache.enginebroker.cache.engineBROKER_CACHE_ENGINEnone使用的快取種類
broker.cache.memory.devicebroker.cache.memory.deviceBROKER_CACHE_MEMORY_DEVICE1,000,000Memory 對裝置的快取數量
broker.cache.memory.deviceRoutebroker.cache.memory.device-routeBROKER_CACHE_MEMORY_DEVICE_ROUTE1,000,000Memory 對裝置路由的快取數量
broker.cache.memory.networkRoutebroker.cache.memory.network-routeBROKER_CACHE_MEMORY_NETWORK_ROUTE1,000,000Memory 對網路路由的快取數量
broker.mq.prefetchbroker.mq.prefetchBROKER_MQ_PREFETCH100AMQP 消費者最大同時消費的數量
broker.mq.persistentbroker.mq.persistentBROKER_MQ_PERSISTENTfalseAMQP 產生者使用持久性傳送
broker.mq.sharedPrefixbroker.mq.sharedprefixBROKER_MQ_SHAREDPREFIX$share/sylvia-iot-broker/MQTT shared subscription 的前綴
broker.mqChannels.unit.urlbroker.mq-channels.unit.urlBROKER_MQCHANNELS_UNIT_URLamqp://localhost單位的控制訊息位址
broker.mqChannels.unit.prefetchbroker.mq-channels.unit.prefetchBROKER_MQCHANNELS_UNIT_PREFETCH100單位的控制訊息 AMQP 消費者最大同時消費的數量
broker.mqChannels.application.urlbroker.mq-channels.application.urlBROKER_MQCHANNELS_APPLICATION_URLamqp://localhost應用的控制訊息位址
broker.mqChannels.application.prefetchbroker.mq-channels.application.prefetchBROKER_MQCHANNELS_APPLICATION_PREFETCH100應用的控制訊息 AMQP 消費者最大同時消費的數量
broker.mqChannels.network.urlbroker.mq-channels.network.urlBROKER_MQCHANNELS_NETWORK_URLamqp://localhost單位的控制訊息位址
broker.mqChannels.network.prefetchbroker.mq-channels.network.prefetchBROKER_MQCHANNELS_NETWORK_PREFETCH100單位的控制訊息 AMQP 消費者最大同時消費的數量
broker.mqChannels.device.urlbroker.mq-channels.device.urlBROKER_MQCHANNELS_DEVICE_URLamqp://localhost裝置的控制訊息位址
broker.mqChannels.device.prefetchbroker.mq-channels.device.prefetchBROKER_MQCHANNELS_DEVICE_PREFETCH100裝置的控制訊息 AMQP 消費者最大同時消費的數量
broker.mqChannels.deviceRoute.urlbroker.mq-channels.device-route.urlBROKER_MQCHANNELS_DEVICE_ROUTE_URLamqp://localhost裝置路由的控制訊息位址
broker.mqChannels.deviceRoute.prefetchbroker.mq-channels.device-route.prefetchBROKER_MQCHANNELS_DEVICE_ROUTE_PREFETCH100裝置路由的控制訊息 AMQP 消費者最大同時消費的數量
broker.mqChannels.networkRoute.urlbroker.mq-channels.network-route.urlBROKER_MQCHANNELS_NETWORK_ROUTE_URLamqp://localhost網路路由的控制訊息位址
broker.mqChannels.networkRoute.prefetchbroker.mq-channels.network-route.prefetchBROKER_MQCHANNELS_NETWORK_ROUTE_PREFETCH100網路路由的控制訊息 AMQP 消費者最大同時消費的數量
broker.mqChannels.data.urlbroker.mq-channels.data.urlBROKER_MQCHANNELS_DATA_URL資料訊息位址
broker.mqChannels.data.persistentbroker.mq-channels.data.persistentBROKER_MQCHANNELS_DATA_PERSISTENTfalse資料訊息使用持久性傳送
broker.db.apiScopesbroker.api-scopesBROKER_API_SCOPESAPI 權限設定

詳細說明

  • 指定認證服務位址(broker.auth)的用意在檢查呼叫 API 的令牌的合法性,包含使用者帳號與客戶端。

  • MQ channels:

    • 由於 Sylvia-IoT 訊息代理服務是決定效能的關鍵模組,會將許多設定放在記憶體中。這些設定需要透過 控制訊息(control channel message) 將 API 變更的內容透過訊息佇列傳遞到叢集的各個執行個體中。
      • 相關訊息請見 快取 章節。
    • data資料訊息(data channel message),將所有資料記錄到 sylvia-iot-data 模組中。
      • 不指定參數(或是 JSON5 設定 null)就會不儲存任何資料。
      • 相關訊息請見 資料流 章節。
  • API scopes: 請參考認證服務的說明。

核心管理服務(coremgr)

JSON5命令列參數環境變數預設值說明
coremgr.authcoremgr.authCOREMGR_AUTHhttp://localhost:1080/auth認證服務位址
coremgr.brokercoremgr.brokerCOREMGR_BROKERhttp://localhost:2080/broker訊息代理服務位址
coremgr.mq.engine.amqpcoremgr.mq.engine.amqpCOREMGR_MQ_ENGINE_AMQPrabbitmqAMQP 種類
coremgr.mq.engine.mqttcoremgr.mq.engine.mqttCOREMGR_MQ_ENGINE_MQTTemqxMQTT 種類
coremgr.mq.rabbitmq.usernamecoremgr.mq.rabbitmq.usernameCOREMGR_MQ_RABBITMQ_USERNAMEguestRabbitMQ 管理者帳號
coremgr.mq.rabbitmq.passwordcoremgr.mq.rabbitmq.passwordCOREMGR_MQ_RABBITMQ_PASSWORDguestRabbitMQ 管理者密碼
coremgr.mq.rabbitmq.ttlcoremgr.mq.rabbitmq.ttlCOREMGR_MQ_RABBITMQ_TTLRabbitMQ 預設佇列訊息存活長度(秒)
coremgr.mq.rabbitmq.lengthcoremgr.mq.rabbitmq.lengthCOREMGR_MQ_RABBITMQ_LENGTHRabbitMQ 預設佇列訊息最多個數
coremgr.mq.rabbitmq.hostscoremgr.mq.rabbitmq.hostsCOREMGR_MQ_RABBITMQ_HOSTS(保留)
coremgr.mq.emqx.apiKeycoremgr.mq.emqx.apikeyCOREMGR_MQ_EMQX_APIKEYEMQX 管理 API key
coremgr.mq.emqx.apiSecretcoremgr.mq.emqx.apisecretCOREMGR_MQ_EMQX_APISECRETEMQX 管理 API secret
coremgr.mq.emqx.hostscoremgr.mq.emqx.hostsCOREMGR_MQ_EMQX_HOSTS(保留)
coremgr.mq.rumqttd.mqttPortcoremgr.mq.rumqttd.mqtt-portCOREMGR_MQ_RUMQTTD_MQTT_PORT1883rumqttd MQTT 連接埠
coremgr.mq.rumqttd.mqttsPortcoremgr.mq.rumqttd.mqtts-portCOREMGR_MQ_RUMQTTD_MQTTS_PORT8883rumqttd MQTTS 連接埠
coremgr.mq.rumqttd.consolePortcoremgr.mq.rumqttd.console-portCOREMGR_MQ_RUMQTTD_CONSOLE_PORT18083rumqttd 管理 API 連接埠
coremgr.mqChannels.data.urlcoremgr.mq-channels.data.urlCOREMGR_MQCHANNELS_DATA_URL資料訊息位址
coremgr.mqChannels.data.persistentcoremgr.mq-channels.data.persistentCOREMGR_MQCHANNELS_DATA_PERSISTENTfalse資料訊息使用持久性傳送

詳細說明

  • MQ channels:
    • data資料訊息(data channel message)
      • 目前 coremgr 支援紀錄 GET API 以外的 HTTP 請求內容,開啟資料通道即可紀錄 API 使用歷程。
      • 不指定參數(或是 JSON5 設定 null)就會不儲存任何資料。

核心管理服務管理介面(coremgr-cli)

JSON5命令列參數環境變數預設值說明
coremgrCli.authcoremgr-cli.authCOREMGRCLI_AUTHhttp://localhost:1080/auth認證服務位址
coremgrCli.coremgrcoremgr-cli.coremgrCOREMGRCLI_COREMGRhttp://localhost:3080/coremgr核心管理服務位址
coremgrCli.datacoremgr-cli.dataCOREMGRCLI_DATAhttp://localhost:4080/data資料服務位址
coremgrCli.clientIdcoremgr-cli.client-idCOREMGRCLI_CLIENT_ID命令列客戶端 ID
coremgrCli.redirectUricoremgr-cli.redirect-uriCOREMGRCLI_REDIRECT_URI命令列客戶端重轉向網址

資料服務(data)

JSON5命令列參數環境變數預設值說明
data.authdata.authDATA_AUTHhttp://localhost:1080/auth認證服務位址
data.brokerdata.brokerDATA_BROKERhttp://localhost:2080/broker訊息代理服務位址
data.db.enginedata.db.engineDATA_DB_ENGINEsqlite使用的資料庫種類
data.db.mongodb.urldata.db.mongodb.urlDATA_DB_MONGODB_URLmongodb://localhost:27017MongoDB 連線的 URL
data.db.mongodb.databasedata.db.mongodb.databaseDATA_DB_MONGODB_DATABASEdataMongoDB 資料庫名稱
data.db.mongodb.poolSizedata.db.mongodb.poolsizeDATA_DB_MONGODB_POOLSIZEMongoDB 最大連線數量
data.db.sqlite.pathdata.db.sqlite.pathDATA_DB_SQLITE_PATHdata.dbSQLite 檔案位置
data.mqChannels.broker.urldata.mq-channels.broker.urlDATA_MQCHANNELS_BROKER_URLamqp://localhost資料訊息位址
data.mqChannels.broker.prefetchdata.mq-channels.broker.prefetchDATA_MQCHANNELS_BROKER_PREFETCH100資料訊息 AMQP 消費者最大同時消費的數量
data.mqChannels.broker.sharedPrefixdata.mq-channels.broker.sharedprefixDATA_MQCHANNELS_BROKER_SHAREDPREFIX$share/sylvia-iot-data/MQTT shared subscription 的前綴
data.mqChannels.coremgr.urldata.mq-channels.coremgr.urlDATA_MQCHANNELS_COREMGR_URLamqp://localhost資料訊息位址
data.mqChannels.coremgr.prefetchdata.mq-channels.coremgr.prefetchDATA_MQCHANNELS_COREMGR_PREFETCH100資料訊息 AMQP 消費者最大同時消費的數量
data.mqChannels.coremgr.sharedPrefixdata.mq-channels.coremgr.sharedprefixDATA_MQCHANNELS_COREMGR_SHAREDPREFIX$share/sylvia-iot-data/MQTT shared subscription 的前綴