基于 Hugging Face + Neon + Filebase 的全套解决方案
进入 Hugging Face Space -> Settings -> Variables and secrets,点击 New Secret 添加以下 6 个变量(注意全大写):
| Secret Name (变量名) | 示例 Value (值) | 说明 |
|---|---|---|
| NEON_USER | neondb_owner | Neon 数据库用户名 |
| NEON_PASSWORD | npg_... | Neon 数据库密码 |
| NEON_HOST | ep-xxx...neon.tech | Neon 数据库地址 (不带 postgres://) |
| S3_BUCKET | my-matrix-bucket | Filebase Bucket 名字 |
| AWS_ACCESS_KEY_ID | 066... | Filebase Access Key |
| AWS_SECRET_ACCESS_KEY | ... | Filebase Secret Key |
在 GitHub Codespaces 中,新建名为 Dockerfile 的文件,复制以下内容:
# 使用官方 Synapse 镜像
FROM matrixdotorg/synapse:latest
# 切换到 root 用户
USER root
# 1. 安装编译依赖 + gettext (用于替换环境变量)
RUN apt-get update && apt-get install -y \
git \
gcc \
python3-dev \
libffi-dev \
libxml2-dev \
libxslt-dev \
libjpeg-dev \
zlib1g-dev \
libpq-dev \
gettext-base \
&& rm -rf /var/lib/apt/lists/*
# 2. 升级 pip
RUN pip install --upgrade pip setuptools wheel
# 3. 安装 S3 插件
RUN pip install https://github.com/matrix-org/synapse-s3-storage-provider/archive/refs/heads/main.zip
# 4. 设置端口
ENV SYNAPSE_HTTP_PORT=7860
# 5. 复制配置文件 (作为模板)
COPY homeserver.yaml /data/homeserver.yaml.template
# 6. 修正权限
RUN chown -R 991:991 /data && chmod -R 755 /data
# 切换回 Synapse 用户
USER 991
# 7. 【核心修复】使用 ENTRYPOINT 覆盖默认启动脚本
# 这样 Docker 就不会去调原来的 /start.py,而是直接运行我们的 shell 命令
# 命令逻辑:先替换变量生成 yaml,然后手动调用 /start.py 启动服务
ENTRYPOINT ["/bin/sh", "-c", "envsubst < /data/homeserver.yaml.template > /data/homeserver.yaml && /start.py run"]
在 GitHub Codespaces 下方的 Terminal (终端) 中执行以下命令生成初始文件。
注意:请先修改下面的 SERVER_NAME 为你实际的空间地址。
# 替换这里(记得替换成你的真实域名)例如 sansc-chatserver.hf.space
# 注意:不带 https://
export SERVER_NAME="你的用户名-你的空间名.hf.space"
# 运行命令生成配置
docker run -it --rm \
-v "$(pwd):/data" \
-e SYNAPSE_SERVER_NAME=$SERVER_NAME \
-e SYNAPSE_REPORT_STATS=no \
matrixdotorg/synapse:latest generate
打开生成的 homeserver.yaml 文件,依次进行以下 5 步修改:
# 允许 Synapse Admin 等外部网页工具连接 enable_cors: true # 开启注册,家人注册完后建议改为 false enable_registration: true # 【关键】添加这一行:允许无验证(无邮箱/手机号)直接注册 enable_registration_without_verification: true # 【可选】顺手把日志里的另一个警告也消掉 suppress_key_server_warning: true
找到 listeners: 下的配置,确保端口是 7860 且开启转发:
listeners:
- port: 7860 # 必须是 7860
tls: false
type: http
x_forwarded: true # 必须开启
bind_addresses: ['0.0.0.0']
resources:
- names: [client, federation]
compress: false
找到 database: 部分,替换为以下内容:
database:
name: psycopg2
allow_unsafe_locale: true
args:
user: "${NEON_USER}" # 变成了变量
password: "${NEON_PASSWORD}" # 变成了变量
database: "neondb"
host: "${NEON_HOST}" # 变成了变量
port: 5432
cp_min: 5
cp_max: 10
在文件最底部添加以下内容:
media_store_path: /data/media_store
media_storage_providers:
- module: s3_storage_provider.S3StorageProviderBackend
store_local: True
store_remote: True
store_synchronous: True
config:
bucket: "${S3_BUCKET}" # 变成了变量
region_name: "us-east-1"
endpoint_url: "https://s3.filebase.com"
access_key: "${AWS_ACCESS_KEY_ID}" # 变成了变量
secret_key: "${AWS_SECRET_ACCESS_KEY}" # 变成了变量
按 Ctrl+F 搜索 log_config,直接删除整行:
# 删除类似下面这行: log_config: "/data/用户名-空间名.hf.space.hf.space.log.config"
Hugging Face 需要通过 README 来识别 Docker 端口。在 Codespaces 新建 README.md,填入以下内容:
--- title: Matrix Chat Server emoji: 💬 colorFrom: blue colorTo: purple sdk: docker pinned: false license: mit app_port: 7860 --- # My Matrix Chat Server 基于 Synapse 的加密聊天服务器。
在终端依次执行以下命令进行部署。注意替换第 3 条命令中的 Token 和 URL。
# 1. 初始化 git(如果需要) git init # 2. 添加目录信任白名单 (防止权限报错) git config --global --add safe.directory '*' # 3. 添加 HF 为远程仓库 # 格式:https://用户名:TOKEN@huggingface.co/spaces/用户名/空间名 # 请手动替换下面的 URL! git remote add space https://你的用户名:你的TOKEN@huggingface.co/spaces/你的用户名/你的空间名 # 4. 提交代码 git add . git commit -m "Deploy to HF" # 5. 强制推送 git push --force space main
部署成功后,你可以在 Neon 的 SQL Editor 中执行以下命令来管理用户。
-- 查看所有用户 SELECT name, creation_ts FROM users; -- 查看总人数 SELECT count(*) FROM users;
-- 替换为你的完整用户名 (在 Element 设置里查看) -- 例如: @tom:tom-chat.hf.space UPDATE users SET admin = 1 WHERE name = '@你的账户名:你的空间地址';