配置项说明
对 TacPort 服务的配置,可以通过 配置文件 或者 环境变量 的方式进行,也可二者结合进行。
重要
配置项的优先级为环境变量
优先级高于配置文件
。例如,在配置文件中设置了日志等级 log_level=info
,但同时设置了环境变量 TP_LOG_LEVEL=debug
,那么最终服务运行时日志等级为 debug
。
配置文件常用于常规部署,而环境变量则常用于容器化部署,例如,在 docker compose 的配置文件中为多个 TacPort 服务实例配置不同的环境变量。
配置文件
TacPort 的配置文件使用 YAML 格式。安装后默认的配置文件位于 /${安装目录}/data/etc/config.yaml
,例如您在安装过程中使用默认安装路径,则配置文件会位于 /opt/tacport/data/etc/config.yaml
。
提醒
配置文件中未进行设置的配置项,会使用默认值。但因为一些配置项无法定义默认值,例如数据库密码、主控密钥等,所以首次安装过程中会提示您编辑配置文件,您需要修改值为--PLEASE-CHANGE-THIS--
的配置项以适合您的系统环境。
简单来说,默认安装的情况下,必须要修改的配置项有:
node_addr
节点的外部访问地址(IP或域名)db_pass
数据库密码secret_key
主控密钥,数据加密存放到数据库所用的密钥
以下为 TacPort 配置文件内容及详细说明。
# =============================================================================
# 非常重要!!请修改所有标记为“PLEASE-CHANGE-THIS”的配置项!
# =============================================================================
# ==================================================
# 节点设置
# ==================================================
# node_id: 节点ID为大于0的整数,部署多个节点时要确保各节点ID不重复。默认为 1。
#node_id: 1
# node_addr: 此节点的外部访问地址(IP或域名),无默认值。
node_addr: "--PLEASE-CHANGE-THIS--"
# allow_init: [yes|no]
# 是否允许进行系统初始化,仅在首次部署系统时,需要对数据库进行初始化时设置
# 为ture。默认为 no。一旦系统初始化完成,请设置为 no 以避免出现安全隐患。
#allow_init: no
# mode: [test|release]
# 服务运行模式,默认为 "release"。
#mode: "release"
# log_level: [debug|verbose|info|warn|error]
# 日志等级,级别由低到高,系统不会记录低于设置的日志等级的日志输出,默认为 "info"。
#log_level: "debug"
# log_to_file: [yes|no]
# 是否要将日志输出到日志文件,默认为 "yes"。
#log_to_file: yes
# data_path:
# 数据存储路径,默认为 "{%EXEC_PATH%}/data",其中 {%EXEC_PATH%} 将被替换为
# 服务主程序所在路径。
#data_path: "{%EXEC_PATH%}/data"
# log_path:
# 日志文件存储路径,默认为 "{%DATA_PATH%}/log",其中,{%DATA_PATH%} 将被
# 替换为数据存储路径。
#log_path: "{%DATA_PATH%}/log"
# record_path:
# 录像文件存储路径,默认为 "{%DATA_PATH%}/record"。
#record_path: "{%DATA_PATH%}/record"
# default_language: [zh-Hans|zh-Hant|en-US]
# 默认语言,当未能根据环境检测到语言时,将使用此默认语言。默认为 "zh-Hans"。
# zh-Hans 简体中文
# zh-Hant 繁体中文(开发中)
# en-US English
#default_language: "zh-Hans"
#------------------------------------------------------
# 数据库配置
# 数据库可以使用 MySQL 或 MariaDB。
#------------------------------------------------------
# db_addr:
# 数据库地址,默认为 "127.0.0.1:3306"。
#db_addr: "127.0.0.1:3306"
# db_user:
# 数据库用户名,默认为 "tacport"。
#db_user: "tacport"
# db_name:
# 数据库的库名,默认为 "tacport"。
#db_name: "tacport"
# db_pass:
# 数据库密码,无默认值,必须设置
db_pass: "--PLEASE-CHANGE-THIS--"
# secret_key:
# 私密数据加密存放到数据库时所用的密钥,无默认值,必须设置。
# 注意:您应当将此密钥记下来,并存放到一处安全所在。
# 如果您丢失/遗忘了此密钥,您的系统将无法迁移/恢复。
secret_key: "--PLEASE-CHANGE-THIS--"
# log_sql: [yes|no]
# 是否记录每一条SQL语句到日志中,默认为 no。
# 小心,SQL中可能包含私密信息,打开"log_sql"设置可能会将私密信息输出到控制台或写入日
# 志文件,请斟酌其中的风险。出于风险考虑,在"release"模式下,"log_sql"总是会被禁用。
#log_sql: no
#------------------------------------------------------
# redis 配置
#------------------------------------------------------
# redis_mode: [standalone|sentinel|cluster]
# redis服务的部署模式,默认为 standalone。
# standalone: 单机模式
# sentinel: 哨兵模式
# cluster: 集群模式
#redis_mode: standalone
# redis_master:
# redis实例组的主节点名称,仅用于redis哨兵模式(sentinel),无默认值。
#redis_master: ""
# redis_addr:
# redis地址,可以为单独地址,或者多个用逗号分割的redis地址。默认为 "127.0.0.1:6379"
# 示例:
# 单机模式: "127.0.0.1:6379"
# 哨兵/集群模式: "192.168.0.2:6379, 192.168.0.3:6379, 192.168.0.4:6379"
#redis_addr: "127.0.0.1:6379"
# redis_pass:
# redis密码,默认为无密码。
#redis_pass: ""
# redis_index:
# redis数据库编号(0~15,默认为0),在集群模式下此配置项被忽略。
#redis_index: 0
# ==================================================
# 业务服务设置
# ==================================================
# service: [api,ssh,rdp,vnc,telnet,...]
# 此节点承载的业务服务,数组形式。内容为以下业务服务的组合,默认为 ["api"]。
# api: API服务(含前端WEB-UI服务)
# ssh: SSH/SFTP转发服务
# rdp: 远程桌面RDP协议的转发服务(开发中)
# vnc: 虚拟远程控制台VNC协议的转发服务(开发中)
# telnet: Telnet远程协议转发服务(开发中)
#
# 示例:此节点同时提供api服务和ssh转发服务,则设置为 [ "api", "ssh" ]。
#service: [ "api" ]
# --------------------------------------------------
# API服务配置
# --------------------------------------------------
# api_instance:
# 此节点上运行api服务的实例数量,默认为 1。
#api_instance: 1
# api_listen_port:
# 监听端口,用户通过此端口访问api服务,默认为 52100。
#api_listen_port: 52100
# api_mapping_port:
# 映射端口,用于容器化部署时,指明映射到此api服务端口的宿主机端口。
# 默认为0,表示宿主机端口与服务监听端口一致。
#api_mapping_port: 0
# api_log_level: [inherit|debug|verbose|info|warn|error]
# 日志等级,默认为 inherit,表示继承全局设置中的日志等级。
#api_log_level: inherit
# api_log_http: [yes|no]
# 是否记录每一个HTTP请求,默认为 no。
#api_log_http: no
# api_use_builtin_web: [yes|no]
# 是否使用内建的前端WEB-UI服务,默认为 yes。
#api_use_builtin_web: yes
# api_web_path:
# 仅当设置了 use_builtin_web 时有效,用于指定前端文件的路径,
# 默认为 "{%EXEC_PATH%}/web"
#api_web_path: "{%EXEC_PATH%}/web"
# --------------------------------------------------
# SSH协议转发服务配置
# --------------------------------------------------
# ssh_instance:
# 运行SSH协议转发服务的实例数量,默认为 1。
#ssh_instance: 1
# ssh_listen_port:
# 监听端口,用户通过此端口访问ssh协议转发服务,默认为 52101。
#ssh_listen_port: 52101
# ssh_mapping_port:
# 映射端口,用于容器化部署时,指明映射到此ssh协议转发服务端口的宿主机端口。
# 默认为0,表示宿主机端口与服务监听端口一致。
#ssh_mapping_port: 0
# ssh_log_level: [inherit|debug|verbose|info|warn|error]
# 日志等级,默认为 inherit,表示继承全局设置中的日志等级。
#ssh_log_level: inherit
环境变量
在使用容器化部署时,仍然可以使用配置文件的方式进行设置,但更推荐使用环境变量来为每个节点指定不同的设置。
TacPort 支持与配置文件配置项一一对应的环境变量,如下表所示:
环境变量名 | 默认值 | 说明 |
---|---|---|
TP_ALLOW_INIT | no | 是否允许运行初始化 |
TP_MODE | release | 运行模式,为 test/release 之一 |
TP_LOG_LEVEL | info | 日志等级,为 debug/verbose/info/warn/error 之一 |
TP_LOG_TO_FILE | yes | 是否要将日志输出到日志文件 |
TP_DATA_PATH | {%EXEC_PATH%}/data | 数据存储路径,其中 {%EXEC_PATH%} 将被替换为服务主程序所在路径 |
TP_LOG_PATH | {%DATA_PATH%}/log | 日志文件存储路径,其中,{%DATA_PATH%} 将被替换为数据存储路径 |
TP_RECORD_PATH | {%DATA_PATH%}/record | 录像文件存储路径,其中,{%DATA_PATH%} 将被替换为数据存储路径 |
TP_DEFAULT_LANGUAGE | zh-Hans | 默认语言,当未能根据环境检测到语言时,将使用此默认语言 |
TP_DB_ADDR | 127.0.0.1:3306 | 数据库地址 |
TP_DB_USER | tacport | 数据库的用户名 |
TP_DB_NAME | tacport | 数据库的库名 |
TP_DB_PASS | 必须设置 | 数据库的密码 |
TP_SECRET_KEY | 必须设置 | 私密数据加密存放到数据库时所用的密钥 |
TP_LOG_SQL | no | 是否记录每一条SQL语句到日志中,注意这会有安全风险 |
TP_REDIS_MODE | standalone | redis的部署模式 |
TP_REDIS_MASTER | 哨兵模式必须设置 | redis实例组的主节点名称,仅用于redis哨兵模式 |
TP_REDIS_ADDR | 127.0.0.1:6379 | redis地址,可以为单独地址,或者多个用逗号分割的redis地址 |
TP_REDIS_PASS | 空 | redis密码 |
TP_REDIS_INDEX | 0 | redis数据库编号(0~15),在集群模式下此配置项被忽略。 |
TP_NODE_ID | 1 | 节点ID为大于0的整数,部署多个节点时要确保各节点ID不重复 |
TP_NODE_ADDR | 必须设置 | 此节点的外部访问地址(IP或域名) |
TP_NODE_SERVICE | api | 一到多个由此节点承载的服务,多个服务需用逗号分割,例如 api,ssh |
TP_API_INSTANCE | 1 | 此节点上运行api服务的实例数量 |
TP_API_LISTEN_PORT | 52100 | 监听端口,用户通过此端口访问api服务 |
TP_API_MAPPING_PORT | 0 | 映射端口,用于容器化部署时,指明映射到此api服务端口的宿主机端口 |
TP_API_LOG_LEVEL | inherit | 日志等级,inherit: 继承使用全局设置中的日志等级 |
TP_API_LOG_HTTP | no | 是否记录每一个HTTP请求 |
TP_API_USE_BUILTIN_WEB | yes | 是否使用内建的前端WEB-UI服务 |
TP_API_WEB_PATH | {%EXEC_PATH%}/web | 前端文件的路径 |
TP_SSH_INSTANCE | 1 | 此节点上运行ssh协议转发服务的实例数量 |
TP_SSH_LISTEN_PORT | 52101 | 监听端口,用户通过此端口访问ssh协议转发服务 |
TP_SSH_MAPPING_PORT | 0 | 映射端口,用于容器化部署时,指明映射到此ssh协议转发服务端口的宿主机端口 |
TP_SSH_LOG_LEVEL | inherit | 日志等级,inherit: 继承使用全局设置中的日志等级 |
检查配置有效性
TacPort节点服务程序提供了配置检查的功能,可以使用命令行参数 -t
或 -T
来检查配置有效性:
# -t 测试配置有效性,然后退出
tpnode -t -c CONFIG_FILE
# -T 测试配置有效性,输出各配置项到控制台,然后退出
tpnode -T -c CONFIG_FILE
以下是一次配置有效性测试结果:
$ tpnode -T -c ./data/etc/config.yaml
test config file `/opt/tacport-4.0.7-preview/data/etc/config.yaml` ok
configuration:
node-id: 1
node-addr: tpv4.tp4a.com
config file: /opt/tacport-4.0.7-preview/data/etc/config.yaml
exec path: /opt/tacport-4.0.7-preview
log level: info
log to file: true
data path: /opt/tacport-4.0.7-preview/data
log path: /opt/tacport-4.0.7-preview/data/log
record path: /opt/tacport-4.0.7-preview/data/record
default lang: zh-hans
database: tacport@127.0.0.1:3306/tacport
redis: 127.0.0.1:6379/0
log SQL: no
node service: api, ssh
api:
instance: 1
listen port: 52100
log level: info
log HTTP: false
use builtin web: true
web file path: /opt/tacport-4.0.7-preview/web
ssh:
instance: 1
listen port: 52101
log level: info
配置项重点说明
secret_key (TP_SECRET_KEY)
配置项 secret_key
(或者环境变量 TP_SECRET_KEY
),我们可称之为「主控密钥」,是数据加密存放到数据库时所用的密钥。TacPort 使用高强度的加密算法 AES-256-CBC 来对所有需要存放的私密数据进行加密,此算法使用的密钥就是主控密钥。
如果您丢失/遗忘了此密钥,您的系统将无法迁移/恢复——即使是 TacPort 的开发者也无能为力。因此,请妥善保管好您的主控密钥,建议您将此密钥记下来,并存放到一处安全所在。