Socialhome 0.24.0 配置参数详解

Socialhome 0.24.0 全部环境变量逐项详解:默认值对齐官方 running 文档,覆盖必配五项、邮件硬依赖、Redis 与进程伸缩、日志监控、缓存调优与扩展钩子,含 REDIS_URL 废弃报错等 2026-11-02 实测证据。

SocialhomeSocialhomeFediverseDjangoPythonDocker自托管2026/11/02

Socialhome 0.24.0 配置参数详解

目标:把 Socialhome 0.24.0 后端的全部环境变量配置逐项讲清——默认值、作用、什么时候必须动它。依据三层交叉:官方 running 文档 Configuration 一节(默认值权威)、后端 settings 源码(config/settings/common.py 735 行 / production.py 153 行)、以及 2026-11-02 在真实运行实例上的实测行为(含故意触发的报错原文)。部署上下文见 《Socialhome 0.24.0 Docker Compose 部署指南》。

一、配置机制:一个 .env 文件驱动全部

Socialhome 的配置面只有环境变量一个入口。官方 running 文档原文:「Configuration mainly happens through environment variables. Those are passed to Django via the file .env in the repository root.」settings 源码里每个可调项都写成 env("变量名", default=...) 的形式,加载顺序:

  1. 进程启动时读取环境(裸机从仓库根 .env;容器路线由编排的 env_file 注入);
  2. DJANGO_SETTINGS_MODULE 决定装配哪套 settings(生产用 config.settings.production,它继承 common.py 再叠加安全项);
  3. 改完配置需要重启应用进程才生效(裸机官方口径 sudo service socialhome restart;编排环境即重建后端服务单元)。

三个机制级注意点(均为实测):

  • No .env file found! 告警无害:后端制品启动时每个进程都会刷 UserWarning: !!! No .env file found!(settings 源码 common.py:32 行)——它期望 /app/.env 物理存在,用 env_file 注入时该告警必然出现,不影响任何功能;
  • REDIS_URL 已废弃且会直接起不来(实测报错原文见第八章);
  • 官方仓库根的 env.example 是开发机模板(DJANGO_SETTINGS_MODULE=config.settings.local),生产别照抄,按官方 Docker 页最小集来。

二、必配项(官方 Docker 页最小集)

官方文档 Docker 安装页「Backend configuration」列出的必改清单,加上数据库口令共五项:

变量默认值说明
DATABASE_URLpostgres:///socialhomePostgreSQL 连接 URI,形如 postgres://用户:口令@主机:5432/socialhome。编排环境主机名即服务名(本文实测用 db)
DJANGO_SECRET_KEY空会话签名密钥,必须长随机串;官方强调装好后不可再改(改全会话失效)。可用 CLI 的 generate_secret_key 生成
DJANGO_ALLOWED_HOSTSsocialhome.local实例域名,可逗号分隔多值。官方特别提醒:不要带 www 通配前导点,联邦对单一绝对域名更友好
SOCIALHOME_DOMAINsocialhome.local实例域名,用于生成出站链接与联邦身份:用户 handle 即 用户名@SOCIALHOME_DOMAIN(实测:admin@127.0.0.1:8135)
REDIS_HOSTlocalhostRedis 主机名(编排环境即服务名,实测用 redis)

三、HTTPS 与安全响应头

变量默认值说明
SOCIALHOME_HTTPSTrue强制 HTTPS,官方原文「There should be no reason to turn this off」。仅本地测试才关(本文实验环境设 False)
DJANGO_SECURE_SSL_REDIRECTTrue全部请求重定向 HTTPS(django-secure)。LB 终结 TLS 的形态下保持默认
DJANGO_SECURE_CONTENT_TYPE_NOSNIFFTrueX-Content-Type-Options: nosniff
DJANGO_SECURE_FRAME_DENYTrueX-Frame-Options: DENY
DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINSTrueHSTS 含子域

官方 Docker 页同时要求:TLS 必须在 LB 终结,且 LB 要向后端回写 X-Forwarded-Proto: https——后端据此判断协议,不要在应用层再堆证书。

四、注册与实例治理

变量默认值说明
DJANGO_ACCOUNT_ALLOW_REGISTRATIONTrue设 False 关闭注册
ACCOUNT_SIGNUP_REQUIRE_ADMIN_APPROVALFalse设 True 后新注册需管理员审批:通知邮件发到 SOCIALHOME_CONTACT_EMAIL,批准后系统再邮件告知用户可用
SOCIALHOME_NODE_LIST_URLhttps://the-federation.info/socialhome关闭注册时登录页「去哪注册」的引导链接
SOCIALHOME_CONTACT_EMAILinfo@socialhome.local管理员邮箱:ToS/隐私政策、服务器元数据、联系入口
SOCIALHOME_MAINTAINERPrivate individual维护者显示名/组织名(ToS、出站邮件、元数据)
SOCIALHOME_TOS_JURISDICTIONNoneToS 文档里写的司法辖区;不设则不出现
SOCIALHOME_SHOW_ADMINSFalse设 True 向用户与元数据展示管理员,配套读 DJANGO_ADMIN_NAME/DJANGO_ADMIN_MAIL
SOCIALHOME_STATISTICSFalse设 True 对外暴露节点匿名统计(本地用户/内容/回复数,含 30 天与 6 个月活跃用户数)。官方鼓励开它「为联邦社交网络贡献数字」并登记到 the-federation.info / podupti.me

💡 说明:治理面就这一张表——没有域联邦封禁、举报工作流之类的变量,公共大实例运营者请对照 《Mastodon 4.7.3 配置参数详解》 评估差距(选型结论见 《Socialhome 0.24.0 介绍与选型指南》 第六章)。

五、邮件:注册的硬依赖

官方 running 文档语气非常明确:「Note, email is required for signing up. Users will not be able to sign up if the instance does not have working email sending.」

变量默认值说明
DJANGO_EMAIL_BACKENDdjango.core.mail.backends.console.EmailBackend默认打到控制台——生产必须换成真实 SMTP 后端
DJANGO_EMAIL_HOST / PORTlocalhost / 587SMTP 服务器
DJANGO_EMAIL_HOST_USER / PASSWORD空凭据
DJANGO_EMAIL_USE_TLS / USE_SSLTrue / False加密方式
DJANGO_EMAIL_TIMEOUT / SSL_KEYFILE / SSL_CERTFILE空高级项
DJANGO_EMAIL_SUBJECT_PREFIX[Socialhome]主题前缀
DJANGO_DEFAULT_FROM_EMAILnoreply@socialhome.local发件人
DJANGO_SERVER_EMAIL取 DJANGO_DEFAULT_FROM_EMAILDjango 错误通知发件人

没有可用邮件服务时,初始管理员请按官方 shell 流程建号并用 EmailAddress.objects.filter(...).update(verified=True) 跳过邮件确认(部署篇第九节实测)。

六、联邦身份与匿名可见性

变量默认值说明
FEDERATION_USER未设设为一个有效的本地用户名后,该用户的私钥将用于签名联邦 GET 请求。不设的实测后果:每个进程启动都刷 ERROR ... get_user_private_key - no profile for http://127.0.0.1:8135/u/None/(本实验环境建号前的真实日志)。装好第一个用户后务必设置
SOCIALHOME_ROOT_PROFILE空设为本地用户名后,未登录访客访问 / 直接看到该用户主页——单用户实例的「个人主页即首页」模式开关
SOCIALHOME_STREAMS_PUBLIC_STREAM_WITHOUT_AUTH设了 SOCIALHOME_ROOT_PROFILE 则 True,否则 False匿名访客可否看公共时间线。官方注释点破安全考量:单用户实例若放开匿名公共流,可能泄露「这个唯一用户关注了谁」
SOCIALHOME_PROFILE_UPDATE_FREQ7远端 profile 超过 N 天未更新即进入刷新队列

七、Redis 与进程伸缩(资源大头)

变量默认值说明
REDIS_PORT / REDIS_DB / REDIS_PASSWORD6379 / 0 / 空与 REDIS_HOST 组成连接四件套
RQWORKER_NUM1RQ worker 进程数(每进程消费 highest/high/default/low/lowest 五级队列)
DAPHNE_WORKER_NUM1Daphne(HTTP+WebSocket)进程数;官方文档:站点响应变慢就加它,每个约 +320MB
DRAMATIQ_NPROCS等于宿主 vCPU 数Dramatiq 进程数,每进程约 +500MB。实测:6 vCPU 机器上进程行自动出现 --processes 6;内存紧张就显式调小
DRAMATIQ_NTHREADS8每个 Dramatiq 进程的线程数

实测进程行原文(/proc 核对,见部署篇第十节):

/usr/local/bin/python3.12 /usr/local/bin/dramatiq --path . --processes 6 --threads 8 --worker-shutdown-timeout 600000 django_dramatiq.setup django_dramatiq.tasks socialhome.tasks.apps ...

Circus 进程守护配置按 $(circus.env.daphne_worker_num)、$(circus.env.rqworker_num) 读取上述变量展开进程组,并给每个 worker 设了 rlimit_as 1.6GB 的内存上限保护。

八、实测:REDIS_URL 是配置雷区

历史版本曾支持 REDIS_URL 单串配置,现行版本改为检测到即拒绝启动。实测在 REDIS_URL 注入后执行任何 manage 命令:

  File "/app/config/settings/production.py", line 82, in <module>
    raise ImproperlyConfigured("Setting REDIS_URL as an environment variable has been removed. Please define "
django.core.exceptions.ImproperlyConfigured: Setting REDIS_URL as an environment variable has been removed. Please define REDIS_HOST, REDIS_PORT, REDIS_DB and/or REDIS_PASSWORD. See docs for the defaults.

从旧版升级或抄了老教程的部署,务必把 REDIS_URL 拆成四件套。

九、日志与监控

变量默认值说明
SOCIALHOME_LOG_TARGETfile(Docker 制品默认 console)三选一:file(多进程共写一文件,仅适合 tail 或单进程场景)、syslog、console(官方推荐容器环境)
SOCIALHOME_LOGFILE/tmp/socialhome.logfile 目标的落盘路径
SOCIALHOME_LOG_LEVELINFODEBUG/INFO/WARNING/ERROR
SOCIALHOME_SYSLOG_FACILITYlocal7syslog 目标用的 facility
SOCIALHOME_SYSLOG_LEVELINFO官方已标注 Deprecated,用 SOCIALHOME_LOG_LEVEL 代替
SOCIALHOME_LOG_DISABLE_ADMIN_EMAILSFalse设 True 关闭 Django 500 错误邮件(生产建议关,避免错误风暴轰炸管理员)
SENTRY_DSNNone设 Sentry 项目 DSN 后 error 级异常上报
SENTRY_LEVELERROR上报级别:DEBUG/INFO/WARNING/ERROR
SOCIALHOME_SILKYFalse设 True 启用 Django-Silk 性能剖析,访问 /_silk/。仅调试用

裸机还有第二份日志:Circus 进程日志(Upstart 系统在 /var/log/upstart/socialhome-circus.log),Daphne/worker 起不来先看它;应用日志(LOG_TARGET 所指)用来看联邦投递错误——官方 running 文档「Log files」一节的分工。

十、性能与缓存调优

时间线预缓存(Redis 占用直接相关):

变量默认值说明
SOCIALHOME_STREAMS_PRECACHE_SIZE100每用户每时间线预缓存条数。官方警告原文:调大它可以「radically increase Redis memory usage」;用户多建议调小;设 0 关闭预缓存任务。注意实际存量会临时超上限——裁剪是每日任务而非写入时同步做
SOCIALHOME_STREAMS_PRECACHE_INACTIVE_DAYS90距最后登录超过 N 天视为不活跃
SOCIALHOME_STREAMS_PRECACHE_INACTIVE_SIZE0不活跃与匿名用户的预缓存条数(默认每日维护直接清空)

AP 回复集合回刷(忙碌实例的资源大户):

变量默认值说明
SOCIALHOME_REPLY_COLLECTIONS_REFETCH_ENABLEDTrue周期性回刷 ActivityPub 回复集合,保证远端新回复能补到本地内容下。官方明说:入站 AP 内容多的忙碌实例上「can be very resource intensive」
SOCIALHOME_REPLY_COLLECTIONS_FETCH_UNTIL_DAYS3回刷覆盖的天数
SOCIALHOME_REPLY_COLLECTIONS_DELAY_BY_FACTOR2每轮延迟倍增因子
SOCIALHOME_REPLY_COLLECTIONS_INITIAL_REFETCH_MINUTES15首次回刷的初始延迟分钟数

十一、语言与时间

变量默认值说明
DJANGO_TIMEZONEUTC实例时区(settings 源码 common.py:157 行实查)
SOCIALHOME_LANGUAGE_CODEen-us界面语言(settings 源码 common.py:160 行实查)。翻译资源由 Codeberg Translate 社区维护(项目名 backendoldui),中文覆盖度有限

十二、扩展钩子:把 Django 生态接进来

变量默认值说明
SOCIALHOME_ADDITIONAL_APPSNone逗号分隔的第三方 app 列表,直接进 INSTALLED_APPS,如 django.contrib.gis,myapp
SOCIALHOME_ADDITIONAL_APPS_URLSNone两段逗号分隔「URL 前缀,urlpatterns 路径」,如 myapp/,myapp.urls;多个 app 需自建聚合 urls 的中转 app
SOCIALHOME_HOME_VIEWNone指定第三方视图路径(如 myapp.views.AwesomeHomeView)接管主页——前端解绑后旧 UI 的首页扩展点仍保留在后端

这三项让 Socialhome 本质上是「一个可挂载任意 Django app 的联邦平台」,二次开发友好度是它对比 BEAM/Go 系的最大配置优势。

十三、Matrix 集成(alpha,勿用于生产)

官方 running 文档自述「Note! Extremely alpha, work on progress, non-functional」。方向与 Diaspora/AP 不同:Socialhome 不做 Matrix homeserver,而是做「多人客户端」,需额外部署一套专用的 Dendrite(仅 0.3.11 实测过),假定 homeserver 域名是 matrix.<SOCIALHOME_DOMAIN>:443,well-known 委托由 Socialhome 自动生成。相关变量(settings 源码实查):

变量默认值说明
SOCIALHOME_MATRIX_ENABLEDFalse总开关
SOCIALHOME_MATRIX_APPSERVICE_TOKENNoneappservice 令牌
SOCIALHOME_MATRIX_APPSERVICE_IDNoneappservice 标识
SOCIALHOME_MATRIX_APPSERVICE_SHORTCODEsocialhomeappservice 短码
SOCIALHOME_MATRIX_HOMESERVER 等由 SOCIALHOME_DOMAIN 派生无需手配

十四、生效方式与变更纪律

  • 改 .env/env_file 后:裸机 sudo service socialhome restart;编排环境重建后端服务单元(本文环境 docker compose up -d --force-recreate backend),Circus 会按新变量重新展开 daphne/rqworker/dramatiq 进程组;
  • DJANGO_SECRET_KEY 永不再改;SOCIALHOME_DOMAIN/DJANGO_ALLOWED_HOSTS 决定联邦身份,实例开放联邦后不可安全变更;
  • 备份口径(官方 running 文档四件套):数据库、.env、socialhome/media/ 上传目录、Redis 数据——与部署篇持久化卷一一对应。

十五、小结与关联

Socialhome 的配置面可以一句话说完:必配五项定身份,邮件配置定生死,进程四件套定资源,其余默认即可跑。本文表格默认值全部对齐官方 running 文档 Configuration 一节(查询日期 2026-11-02),报错与进程行为为当日实例实测。

Socialhome 0.24.0 配置参数详解 - Quzuo