Skip to content

配置项说明

对 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 配置文件内容及详细说明。

/opt/tacport/data/etc/config.yaml
yaml
# =============================================================================
# 非常重要!!请修改所有标记为“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_INITno是否允许运行初始化
TP_MODErelease运行模式,为 test/release 之一
TP_LOG_LEVELinfo日志等级,为 debug/verbose/info/warn/error 之一
TP_LOG_TO_FILEyes是否要将日志输出到日志文件
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_LANGUAGEzh-Hans默认语言,当未能根据环境检测到语言时,将使用此默认语言
TP_DB_ADDR127.0.0.1:3306数据库地址
TP_DB_USERtacport数据库的用户名
TP_DB_NAMEtacport数据库的库名
TP_DB_PASS必须设置数据库的密码
TP_SECRET_KEY必须设置私密数据加密存放到数据库时所用的密钥
TP_LOG_SQLno是否记录每一条SQL语句到日志中,注意这会有安全风险
TP_REDIS_MODEstandaloneredis的部署模式
TP_REDIS_MASTER哨兵模式必须设置redis实例组的主节点名称,仅用于redis哨兵模式
TP_REDIS_ADDR127.0.0.1:6379redis地址,可以为单独地址,或者多个用逗号分割的redis地址
TP_REDIS_PASSredis密码
TP_REDIS_INDEX0redis数据库编号(0~15),在集群模式下此配置项被忽略。
TP_NODE_ID1节点ID为大于0的整数,部署多个节点时要确保各节点ID不重复
TP_NODE_ADDR必须设置此节点的外部访问地址(IP或域名)
TP_NODE_SERVICEapi一到多个由此节点承载的服务,多个服务需用逗号分割,例如 api,ssh
TP_API_INSTANCE1此节点上运行api服务的实例数量
TP_API_LISTEN_PORT52100监听端口,用户通过此端口访问api服务
TP_API_MAPPING_PORT0映射端口,用于容器化部署时,指明映射到此api服务端口的宿主机端口
TP_API_LOG_LEVELinherit日志等级,inherit: 继承使用全局设置中的日志等级
TP_API_LOG_HTTPno是否记录每一个HTTP请求
TP_API_USE_BUILTIN_WEByes是否使用内建的前端WEB-UI服务
TP_API_WEB_PATH{%EXEC_PATH%}/web前端文件的路径
TP_SSH_INSTANCE1此节点上运行ssh协议转发服务的实例数量
TP_SSH_LISTEN_PORT52101监听端口,用户通过此端口访问ssh协议转发服务
TP_SSH_MAPPING_PORT0映射端口,用于容器化部署时,指明映射到此ssh协议转发服务端口的宿主机端口
TP_SSH_LOG_LEVELinherit日志等级,inherit: 继承使用全局设置中的日志等级

检查配置有效性

TacPort节点服务程序提供了配置检查的功能,可以使用命令行参数 -t-T 来检查配置有效性:

shell
# -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 的开发者也无能为力。因此,请妥善保管好您的主控密钥,建议您将此密钥记下来,并存放到一处安全所在。