RhodeCode 4.27.1 配置参数详解
逐段解析 RhodeCode 4.27.1 双实例配置文件(rhodecode.ini 与 vcsserver.ini):gunicorn 服务器段、数据库连接、dogpile 缓存与 beaker 会话、Celery 任务队列、VCS 接线与 SSH/SVN 参数、日志配置;附三组「改参数→重启→验证」实测闭环(监听端口/gzip 压缩/界面语言)与常见配置问题排查。
RhodeCode 4.27.1 配置参数详解
目标:逐段解析 RhodeCode 4.27.1 的配置文件体系——Community 实例的
rhodecode.ini与 VCSServer 实例的vcsserver.ini,覆盖 gunicorn 应用服务器、数据库连接、缓存与会话、Celery 任务队列、VCS 接线、SSH/SVN、日志等全部常用参数段;并给出三组「修改参数 → 重启实例 → 验证生效」的实测闭环,讲清每个参数改在哪里、怎么生效、如何验证。安装过程与环境准备见 《RhodeCode 4.27.1 Ubuntu 22.04 安装指南》。
一、环境信息
本篇参数与实测基于以下环境(与安装篇同一台实验机):
| 项 | 值 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS(x86_64) | 与安装篇一致 |
| RhodeCode Community | 4.27.1(build20221012_1600) | 实例名 community-1 |
| RhodeCode VCSServer | 4.27.1(build20221012_1600) | 实例名 vcsserver-1 |
| rccontrol | 1.24.4 | 实例与进程管理工具 |
| 应用服务器 | gunicorn/19.9.0 | 参数由 ini 文件下发 |
| 数据库 | PostgreSQL 14.24 | 库名/用户名 rhodecode |
| Community 端口 | 10020(0.0.0.0) | 实测验证后恢复 |
| VCSServer 端口 | 10010(127.0.0.1) | 仅本机接线 |
参数溯源说明:本篇所有参数表均取自实验机上由安装器生成的两份配置文件原文(/root/.rccontrol/community-1/rhodecode.ini,818 行;/root/.rccontrol/vcsserver-1/vcsserver.ini,199 行),未做美化;「本机值」列即文件中的实际生效值。配置文件选型与版本背景见 《RhodeCode 介绍与选型指南》。
二、配置文件体系总览
2.1 四个配置文件的分工
rccontrol 安装完成后,配置分散在四个 ini 文件中,层级如下:
| 文件 | 路径 | 职责 | 谁来改 |
|---|---|---|---|
| rhodecode.ini | /root/.rccontrol/community-1/rhodecode.ini | Community 全部应用参数 + gunicorn 参数 + 日志 | 管理员,改后 restart |
| vcsserver.ini | /root/.rccontrol/vcsserver-1/vcsserver.ini | VCSServer 应用参数 + gunicorn 参数 + 日志 | 管理员,改后 restart |
| supervisord.ini | /root/.rccontrol/supervisor/supervisord.ini | 进程守护配置,include 各实例进程组 | 不建议手改,由 rccontrol 管理 |
| gunicorn_conf.py | 各实例目录下 | gunicorn 钩子扩展(内存监控、日志格式) | 文件头明确警告:由安装器管理,不应修改 |
⚠️ 注意:gunicorn_conf.py 文件头原文为 "This file is managed by the installer. It shouldn't be modified. If you still wish to make changed create a empty file called
gunicorn_conf.py.keepIn the same location so installer will not override it on upgrades."——即升级会被覆盖,确需定制时在同目录放一个空的gunicorn_conf.py.keep文件阻止覆盖。
2.2 两个特殊变量
%(here)s:ini 文件所在目录的绝对路径。例如cache_dir = %(here)s/data在 community-1 上展开为/root/.rccontrol/community-1/data。迁移实例目录时用相对写法可以少改配置。{ENV_变量名}:app:main 段支持环境变量注入,原文注释示例:sqlalchemy.db1.url = {ENV_RC_DB_URL}——密码不出现在文件里的做法。
2.3 生效机制
所有 [server:main] 与 [app:main] 参数在 gunicorn 启动时读取一次,运行期不热加载;改动后必须重启实例:
# 改 community-1 的参数后
/root/.rccontrol-profile/bin/rccontrol restart community-1
# 改 vcsserver-1 的参数后
/root/.rccontrol-profile/bin/rccontrol restart vcsserver-1
重启动作的逐命令实测与回显见 《RhodeCode 4.27.1 常用 CLI 与运维命令详解》;本篇第十章给出三组「改参数 → restart → 验证」的完整闭环。
三、[server:main]:gunicorn 应用服务器参数
两个实例的 [server:main] 段结构相同,差异在 worker 模型。以下参数对两个实例都有效,表内「本机值」列同时给出 community-1 / vcsserver-1:
| 参数 | 本机值(community-1 / vcsserver-1) | 语义与调优建议 |
|---|---|---|
| host | 0.0.0.0 / 127.0.0.1 | 监听地址。VCSServer 必须保持 127.0.0.1(仅本机接线);Community 直接对外时 0.0.0.0,走反代时可收回 127.0.0.1 |
| port | 10020 / 10010 | 监听端口。第十章实测改 10021 一次性生效 |
| use | egg:gunicorn#main | 固定值,勿改 |
| workers | 6 / 8 | worker 进程数。官方推荐 2 × CPU核数 + 1,2 核即 5,大部署不超过 8-10;每 worker 独立缓存,内存随数线性涨 |
| loglevel | info | gunicorn 错误日志级别 |
| proc_name | gunicorn-community-1 / gunicorn-vcsserver-1 | 进程列表中显示名,ps 与 pstree 靠它识别 |
| worker_class | gevent / sync | worker 模型。Community 用 gevent(协程高并发),VCSServer 注释原文 "currently sync is the only option allowed" |
| worker_connections | 10 | 每 worker 并发客户端数,仅对 gevent 有效 |
| max_requests | 1000 | worker 处理 N 个请求后优雅重启,防内存泄漏 |
| max_requests_jitter | 30 | 重启时机加随机抖动,避免所有 worker 同时重启 |
| timeout | 21600 | 单请求最长处理时间(6 小时),默认值考虑了大仓库操作;不建议低于长 clone/push 耗时 |
| limit_request_line | 0 | 请求行长度上限,0 不限(Mercurial 长 URL 场景) |
| limit_request_fields | 32768 | 请求头字段数上限 |
| limit_request_field_size | 0 | 单个请求头大小上限,0 不限 |
| graceful_timeout | 3600 | 收到重启信号后 worker 的收尾时限(1 小时),超时强杀 |
| keepalive | 2 | Keep-Alive 连接保持秒数,官方注释建议 1-5 秒 |
| memory_max_usage | 0 | 单 worker 内存阈值,超过触发优雅重启;0 关闭(配合 gunicorn_conf.py 的钩子生效,单位字节) |
| memory_usage_check_interval | 60 | 内存检查周期(秒) |
| memory_usage_recovery_threshold | 0.8 | 触发 GC 后仍高于阈值×该系数才重启 worker |
配套的 [filter:proxy-prefix] 段(子路径部署用):
| 参数 | 本机值 | 语义 |
|---|---|---|
| use | egg:PasteDeploy#prefix | 启用 PasteDeploy 前缀中间件 |
| prefix | / | 应用挂载前缀,如 /rhodecode;需同时取消 app:main 段 filter-with = proxy-prefix 注释,并同步设置 beaker.session.cookie_path |
💡 调优点:
timeout = 21600(6 小时)看似夸张,实为大仓库 HTTP 协议操作的保护值——clone/push 走的 HTTP 请求周期极长,Nginx 侧的proxy_read_timeout需与之对齐(安装篇反代配置取 3600 秒即覆盖大多数场景)。
四、[app:main] 应用核心参数(全局与安全)
4.1 应用身份与全局行为
| 参数 | 本机值 | 语义 |
|---|---|---|
| use | egg:rhodecode-enterprise-ce | 应用入口 egg,勿改 |
| debug | false([DEFAULT] 段) | 开启后全部日志转 debug 并启用请求跟踪,仅排障用 |
| app_instance_uuid | 8fe70ea860bb406b9126b5ae21cef852 | 应用唯一 ID,安装时随机生成,多实例部署不可重复 |
| app.base_url | http://rhodecode.local | 无 Web 请求上下文时的自引用地址,用于 ishell、SSH 回调与事件通知里的链接生成 |
| lang | en | 界面语言,可用值 en/be/de/es/fr/it/ja/pl/pt/ru/zh;第十章实测改 zh 登录页即时切换中文 |
| gzip_responses | false | 应用层 gzip 压缩响应;第十章实测开启后响应头出现 content-encoding: gzip |
| generate_js_files | false | 启动时重新生成前端路由文件,一般关闭 |
| startup.import_repos | false | 每次启动全量扫描仓库目录导入,仓库多时严重拖慢启动,保持 false |
| instance_id | 空 | 多实例共享缓存时的实例前缀键,单实例留空;多 worker 时官方注释要求此处为通配默认值 |
4.2 大对象与展示
| 参数 | 本机值 | 语义 |
|---|---|---|
| cut_off_limit_diff | 512000 | 提交/PR 整体 diff 超过 512KB 截断展示 |
| cut_off_limit_file | 128000 | diff 内单文件超过 128KB 截断展示 |
| rss_cut_off_limit | 256000 | RSS/Atom 订阅条目 diff 截断阈值 |
| rss_items_per_page | 10 | 订阅每页条数 |
| rss_include_diff | false | 订阅内嵌 diff 内容 |
| gist_alias_url | 空 | Gist 短域名别名,空用站内地址 |
| archive_cache_dir | 注释态 | 归档下载缓存目录;启用后 zip/tar 请求二次命中直接读缓存,下载密集站点建议打开 |
4.3 协议与安全
| 参数 | 本机值 | 语义 |
|---|---|---|
| force_https | false | 强制按 https 处理重定向;走 Nginx 终结 TLS 时配合 X-Forwarded-Proto 头开启(安装篇反代已带该头) |
| use_htsts | false | 发送 Strict-Transport-Security 头 |
| vcs_full_cache | true | 全量使用仓库对象缓存,官方注释 Recommended |
| git_update_server_info | false | 仓库是否以 dumb 协议暴露,智能协议下保持 false |
| default_encoding | UTF-8 | 编码转换默认值,支持逗号分隔多编码按序探测(老仓库 GBK 混杂场景用) |
| auth_ret_code | 空 | 认证失败返回码,默认 401;注释说明 Mercurial 客户端对 401 处理有问题时可改 403 |
| auth_ret_code_detection | false | 先 401 触发凭据弹窗再回退 auth_ret_code 的探测模式 |
| lock_ret_code | 423 | 仓库被锁定时返回的 HTTP 码,4XX 会中断事务 |
| api_access_controllers_whitelist | 空 | 允许用 ?auth_token= 查询串认证的视图白名单(glob 语法,逗号分隔),如 RepoFilesView:repo_file_raw@TOKEN |
| auth_plugin.import_legacy_plugins | true | 是否加载旧式 py:/path 插件 |
| rhodecode.auth_plugin_fallback | 注释态 | 认证插件兜底:自建认证配置搞坏锁死登录时,回退内置 rhodecode 插件救场 |
| rhodecode.encrypted_values.secret | 注释态 | 加密密钥(加密仓库远程地址中的凭据等),默认复用 beaker.session.secret |
| rhodecode.encrypted_values.algorithm | 注释态 | 加密算法 aes(默认)或 fernet(官方更推荐,但需全量重加密迁移) |
| rhodecode.encrypted_values.strict | 注释态 | 解密失败是否抛错(默认 true) |
4.4 管理面限制与许可
| 参数 | 本机值 | 语义 |
|---|---|---|
| allow_repo_location_change | true | 允许管理员在设置页改仓库存储路径 |
| allow_custom_hooks_settings | true | 允许在设置页配置自定义钩子 |
| license_token | 35ed-621c-d269-11f1 | EE 许可令牌(CE 下仅展示用) |
| license.hide_license_info | false | 在许可页隐藏 token 等敏感信息 |
| supervisor.uri | 127.0.0.1:10000 | 应用连 supervisord 的内部地址(管理界面看进程/日志靠它) |
| supervisor.group_id | community-1 | 本实例对应的 supervisord 进程组名 |
| labs_settings_active | true | 显示实验性设置面板 |
| exception_tracker.store_path | 注释态 | 异常转储目录,默认 TMPDIR |
| exception_tracker.send_email | 注释态 | 异常邮件通知,收件人留空发全体超级管理员 |
五、数据库连接参数(sqlalchemy.db1.*)
| 参数 | 本机值 | 语义 |
|---|---|---|
| sqlalchemy.db1.url | postgresql://rhodecode:q1w2e3r4@127.0.0.1:5432/rhodecode | 数据库连接串。支持三种方言:sqlite:///%(here)s/rhodecode.db?timeout=30、postgresql://、mysql://(MySQL 问题驱动备选 mysql+pymysql://) |
| sqlalchemy.db1.echo | false | 打印全部 SQL 语句,排障开 |
| sqlalchemy.db1.pool_recycle | 3600 | 连接池回收周期(秒),防 MySQL "gone away" 类断连 |
| sqlalchemy.db1.convert_unicode | true | Unicode 转换开关 |
| sqlalchemy.db1.pool_size | 5(注释默认) | 池内常驻连接数,0 不限 |
| sqlalchemy.db1.max_overflow | 10(注释默认) | 溢出连接上限 |
| sqlalchemy.db1.ping_connection | true(注释默认) | 取连接前 ping 检测,断连自愈 |
⚠️ 注意:连接串中的数据库密码是明文。两个缓解手段:把 url 改成
{ENV_RC_DB_URL}环境变量注入;对文件收权chmod 600 /root/.rccontrol/community-1/rhodecode.ini。换数据库密码时同步改此处并 restart(安装篇实测 PostgreSQL SCRAM/MD5 认证兼容问题即发生在这条链路上)。
六、缓存与会话参数
6.1 dogpile 缓存(rc_cache.*)
四个缓存命名空间 + VCSServer 侧一个,本机值如下:
| 参数 | 本机值 | 语义 |
|---|---|---|
| cache_dir | %(here)s/data | 文件缓存根目录,官方注释提示放 ramdisk 可提速 |
| rc_cache.sql_cache_short.backend | dogpile.cache.rc.memory_lru | 重 SQL 查询短缓存,仅支持 memory_lru |
| rc_cache.sql_cache_short.expiration_time | 30 | 30 秒 |
| rc_cache.cache_repo_longterm.backend | dogpile.cache.rc.memory_lru | 仓库对象长缓存 |
| rc_cache.cache_repo_longterm.expiration_time | 2592000 | 30 天,push 时仍会主动失效 |
| rc_cache.cache_repo_longterm.max_size | 10000 | LRU 最大条目,内存紧张调小 |
| rc_cache.cache_perms.backend | dogpile.cache.rc.file_namespace | 权限树缓存,文件后端 |
| rc_cache.cache_perms.expiration_time | 300 | 5 分钟(权限变更敏感,TTL 短) |
| rc_cache.cache_repo.backend | dogpile.cache.rc.file_namespace | 文件树/ReadMe/订阅缓存 |
| rc_cache.cache_repo.expiration_time | 2592000 | 30 天 |
多实例/大规模部署的演进路径(ini 内注释原文即给出模板):cache_perms 与 cache_repo 可切换 dogpile.cache.rc.redis 后端(带分布式锁),Redis 参数经 rc_cache.*.arguments.host/port/db/socket_timeout/redis_expiration_time/distributed_lock 下发;VCSServer 侧 rc_cache.repo_object 同理(本机为 file_namespace,30 天,Redis 备选后端名为 dogpile.cache.rc.redis_msgpack)。
6.2 beaker 会话(beaker.session.*)
| 参数 | 本机值 | 语义 |
|---|---|---|
| beaker.session.type | file | 会话存储类型,可选 file / ext:redis / ext:database / ext:memcached / memory;官方注释:最快是 Redis 与 ext:database |
| beaker.session.data_dir | %(here)s/data/sessions | 文件会话目录 |
| beaker.session.key | community-1 | Cookie 名 |
| beaker.session.secret | 19ef27c611d44137ac9a483e2ca7c61d | 会话签名密钥(也是 encrypted_values 的默认密钥),泄露即等于会话伪造风险 |
| beaker.session.lock_dir | %(here)s/data/sessions/lock | 会话锁目录 |
| beaker.session.timeout | 2592000 | 30 天无访问即失效并登出 |
| beaker.session.httponly | true | Cookie 禁 JS 读取 |
| beaker.session.secure | false | 仅 HTTPS 传 Cookie;上 TLS 后应改 true |
| beaker.session.cookie_path | 注释态 | 子路径部署时设为前缀 |
💡 技术拓展:session 存储选型——file 型会话与本地磁盘绑定,多实例负载均衡时无法共享;切
ext:redis只需beaker.session.type = ext:redis+beaker.session.url = redis://127.0.0.1:6379/2两行(注释模板原文),是横向扩展的第一步。
七、异步任务与扩展模块参数
7.1 Celery 任务队列
| 参数 | 本机值 | 语义 |
|---|---|---|
| use_celery | false | false 时任务在请求进程内同步执行;true 后走 broker。ini 注释给出手动起 worker 的完整命令行(celery worker -E --beat --app rhodecode.lib.celerylib.loader --scheduler ...RcScheduler --ini ...) |
| celery.broker_url | redis://localhost:6379/8 | 消息代理地址;RabbitMQ 备选 amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost(注释模板) |
| celery.max_tasks_per_child | 100 | worker 执行 N 个任务后重启防泄漏 |
| celery.task_always_eager | false | true 时不入队、本地立即执行(测试用) |
7.2 全文搜索
| 参数 | 本机值 | 语义 |
|---|---|---|
| search.module | rhodecode.lib.index.whoosh | 检索后端;Whoosh 免外部服务,官方注释 "works good with few dozen repos" |
| search.location | %(here)s/data/index | 索引目录;重建索引命令 rhodecode-index 直接消费这两个值(命令实操见命令篇) |
7.3 文件存储与实时通道
| 参数 | 本机值 | 语义 |
|---|---|---|
| file_store.enabled | true | 上传二进制(附件/Artifact)总开关 |
| file_store.backend | local | 存储后端,本版本可选 local |
| file_store.storage_path | %(here)s/data/file_store | 上传文件落盘目录 |
| channelstream.enabled | false | 长连接实时通知/聊天服务开关(需独立 channelstream 进程,rccontrol enable-module channelstream 负责) |
| channelstream.server | 127.0.0.1:9800 | channelstream 后端地址 |
| channelstream.ws_url | ws://rhodecode.yourserver.com/_channelstream | 对外 WebSocket 地址,需 Nginx/Apache 转发 |
| channelstream.proxy_path | /_channelstream | 前端连接的应用内路径 |
| channelstream.history.location | %(here)s/channelstream_history | 历史消息存储路径 |
| appenlight | false | 错误聚合上报(官方 SaaS),内网隔离环境保持关闭 |
八、VCS 接线与协议参数
8.1 VCSServer 连接
| 参数 | 本机值 | 语义 |
|---|---|---|
| vcs.server.enable | true | Web 应用经 VCSServer 操作仓库的总开关 |
| vcs.server | 127.0.0.1:10010 | VCSServer 地址;VCSServer 单独部署到其他机器时改这里 |
| vcs.server.protocol | http | 连接协议,http-rpc |
| vcs.scm_app_implementation | http | push/pull 操作协议 |
| vcs.hooks.protocol | http | 钩子回调协议 |
| vcs.hooks.host | 127.0.0.1 | 钩子监听主机,VCSServer 异地部署时需调整 |
| vcs.start_server | false | 随应用内嵌启动 VCSServer(开发用) |
| vcs.backends | hg, git, svn | 启用的版本控制系统,可裁剪,如只留 git |
| vcs.connection_timeout | 3600 | 到 VCSServer 的连接超时(秒) |
| vcs.svn.compatible_version | 注释态 | 新建 SVN 仓库的格式版本(如 1.8),默认最新 |
8.2 Subversion 代理(mod_dav_svn)
| 参数 | 本机值 | 语义 |
|---|---|---|
| svn.proxy.generate_config | false | 生成 Apache mod_dav_svn 配置开关(SVN 走 Apache dav 网关的场景) |
| svn.proxy.list_parent_path | true | 生成配置含 SVNListParentPath On |
| svn.proxy.config_file_path | %(here)s/mod_dav_svn.conf | 生成配置落点 |
| svn.proxy.location_root | / | Location 块前缀 |
| svn.proxy.reload_cmd | 注释态 | 配置变更后的重载命令(如 /etc/init.d/apache2 reload),需应用运行用户有权执行 |
| svn.proxy.reload_timeout | 10(注释默认) | 重载命令超时秒数,0 不限 |
8.3 SSH 协议
| 参数 | 本机值 | 语义 |
|---|---|---|
| ssh.generate_authorized_keyfile | false | 用户在网页添加 SSH 公钥时同步写 authorized_keys 文件;false 时网页添加入口对普通用户隐藏(超管仍可管) |
| ssh.authorized_keys_file_path | ~/.ssh/authorized_keys_rhodecode | 生成的公钥文件路径(可与 sshd 的 AuthorizedKeysFile 多文件并存) |
| ssh.wrapper_cmd | ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper | SSH 接管的包装命令(认证后按仓库权限放行/拒绝) |
| ssh.wrapper_cmd_allow_shell | false | 是否允许包装命令进 shell,生产必须 false |
| ssh.enable_debug_logging | false | SSH 操作调试日志回显给客户端,官方注释 "shouldn't be used in production" |
| ssh.executable.hg / git / svn | ~/.rccontrol/vcsserver-1/profile/bin/{hg,git,svnserve} | SSH 操作调用的二进制路径 |
| ssh.enable_ui_key_generator | true | 网页内生成密钥对入口(关闭后仍可粘贴外部公钥) |
| ssh.authorized_keys_ssh_opts | 注释态 | 追加限制项,默认 no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding |
SSH 模块的启用还依赖系统侧动作(rccontrol enable-module ssh + sshd 配置),完整启用流程见命令篇。
九、日志配置段
rhodecode.ini 尾部是标准 Python logging 配置,三段式(vcsserver.ini 同构,logger 只有 root 与 vcsserver 两项):
| 段/键 | 本机值 | 语义 |
|---|---|---|
| [loggers] keys | root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper | 声明 6 个 logger |
| [logger_rhodecode] level / propagate | DEBUG / 1 | 应用主日志级别;生产调 INFO 可显著降噪 |
| [logger_sqlalchemy] level / handlers | INFO / console_sql | SQL 日志通道 |
| [handler_console] level | INFO | 标准错误输出 handler(进程日志经 supervisord 进 community.log) |
| [handler_console_sql] level | WARN | SQL handler,注释原文:DEBUG 打全 SQL、INFO 只打语句、WARN 全不打(生产推荐) |
| [formatter_generic] class | rhodecode.lib.logging_formatter.ExceptionAwareFormatter | 通用格式器,格式 %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s |
| [formatter_color_formatter] class | ...ColorFormatter | 带色格式器(终端) |
日志落点:gunicorn 的 stdout/stderr 由 supervisord 重定向到 /root/.rccontrol/community-1/community.log 与 /root/.rccontrol/vcsserver-1/vcsserver.log(supervisord.ini 中 stdout_logfile 指定),应用自身不再写独立日志文件——这也是「看日志必须经 supervisord」的原因。
十、参数修改与生效验证(三组实测)
以下三组实验全部在本实验机完成:改参数 → rccontrol restart community-1 → curl 验证 → 改回原值 → 复核 diff 为空。原始输出存档于实验记录(此处回显为照抄)。
10.1 实测一:改监听端口([server:main] port)
# 1. 修改端口(用编辑器或一行替换均可)
grep -n '^port = ' /root/.rccontrol/community-1/rhodecode.ini
sed -i 's/^port = 10020/port = 10021/' /root/.rccontrol/community-1/rhodecode.ini
grep -n '^port = ' /root/.rccontrol/community-1/rhodecode.ini
# 2. 重启实例
/root/.rccontrol-profile/bin/rccontrol restart community-1
重启与验证回显(实测照抄):
31:port = 10020
31:port = 10021
Stopping instance: community-1
Starting instance: community-1
--- curl new port 10021:
200
--- curl old port 10020 (expect refused):
000
exit=7 (connection refused)
改回 10020 并 restart 后 restored 10020: 200。结论:监听端口以 rhodecode.ini 的 port = 为准,supervisord.ini 里 _port = 10020 只是安装器写入的记录值,改端口不需要动 supervisord.ini。
10.2 实测二:开启响应压缩(gzip_responses)
sed -i 's/^gzip_responses = false/gzip_responses = true/' /root/.rccontrol/community-1/rhodecode.ini
/root/.rccontrol-profile/bin/rccontrol restart community-1
curl -s -D - -o /dev/null -H 'Accept-Encoding: gzip' http://127.0.0.1:10020/_admin/login
实测回显(响应头):
HTTP/1.1 200 OK
content-encoding: gzip
结论:gzip_responses 开启后应用层压缩即时生效;上 Nginx 反代后压缩通常交给 Nginx 的 gzip 模块,该参数应保持 false 避免双重压缩。
10.3 实测三:界面语言(lang)
sed -i 's/^lang = en/lang = zh/' /root/.rccontrol/community-1/rhodecode.ini
/root/.rccontrol-profile/bin/rccontrol restart community-1
curl -s http://127.0.0.1:10020/_admin/login | grep -oE '登录|用户名|密码' | sort | uniq -c
实测回显(登录页命中中文文案):
1 密码
2 登录
改回 lang = en 并 restart 后,diff 对原文件校验为空(实测末行回显 INI RESTORED OK),三个参数(port/gzip_responses/lang)全部还原,服务恢复正常(final 10020: 200)。
10.4 生效路径小结
| 步骤 | 命令/动作 | 说明 |
|---|---|---|
| 1 | 编辑 rhodecode.ini / vcsserver.ini | 只改对应实例的文件 |
| 2 | rccontrol restart <实例名> | 全量读入新参数(无热加载) |
| 3 | curl / 界面 / 日志验证 | 参照上面三组实验 |
| 4 | 保留原文件备份 | restart 前先 cp rhodecode.ini /tmp/rhodecode.ini.bak,diff 复核 |
十一、常见配置问题与排查
| 现象 | 原因 | 处理 |
|---|---|---|
| 改了参数不生效 | 未 restart,或改错实例文件(vcsserver 的参数写到 rhodecode.ini) | rccontrol restart <实例>;确认文件路径(rhodecode.ini 在 community-1 目录,vcsserver.ini 在 vcsserver-1 目录) |
| 登录后反复跳登录页 | beaker.session.secret 被改或多实例共享 cookie 名冲突 | 恢复 secret,或多实例部署时统一 secret 并区分 beaker.session.key |
| 大仓库 push 报 413 | Nginx client_max_body_size 限制 | 反代侧放开(安装篇 Nginx 配置取 0 不限) |
| 长时间 clone 中断 | 反代 proxy_read_timeout 小于传输耗时,或 gunicorn timeout 过小 | 反代取 3600s 以上;gunicorn timeout 保持默认 21600 |
| 界面英文想换中文 | lang = en | 改 lang = zh 后 restart(10.3 实测) |
| 忘记数据库密码/密码轮换 | 连接串明文存于 ini | 同步改 sqlalchemy.db1.url 并 restart;先 ALTER USER rhodecode WITH PASSWORD '...' 再改 ini 顺序反了会导致实例起不来 |
| 权限改了不刷新 | cache_perms 缓存 TTL 300 秒 | 等过期或 restart 清空(文件后端缓存在 cache_dir 下,删除即清) |
| 认证配置错锁死登录 | 外部认证插件故障 | 启用 rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode 回退内置认证救场 |
⚠️ 注意:rccontrol 本身没有开机自启机制(安装篇实测 /etc/init.d 与 systemd 均无),服务器重启后需 systemctl/手工拉起 rccontrol 进程守护,配置篇不再重复,见安装篇第六章的 systemd 单元方案。
十二、参考链接
- 配置参数逐条出处:实验机
/root/.rccontrol/community-1/rhodecode.ini(4.27.1 安装器生成原文,818 行)与/root/.rccontrol/vcsserver-1/vcsserver.ini(199 行) - 官方文档站:https://docs.rhodecode.com(Configuration / rhodecode-tools 章节)
- 下载与 MANIFEST:https://dls.rhodecode.com/linux/MANIFEST
- 选型与版本背景:《RhodeCode 介绍与选型指南》
- 安装与排障实录:《RhodeCode 4.27.1 Ubuntu 22.04 安装指南》
- 启停/升级/索引/备份命令实操:《RhodeCode 4.27.1 常用 CLI 与运维命令详解》