Palpo 构建指南

本文档提供了在不同平台上构建 Palpo Matrix 服务器的详细说明。

目录

系统要求

基础要求

平台特定要求

macOS/Linux 构建

1. 安装依赖

macOS

# 安装 Homebrew (如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装依赖
brew install postgresql cmake

更多信息请参考:

Ubuntu/Debian

sudo apt-get update
sudo apt-get install -y \
    curl \
    build-essential \
    libclang-dev \
    libpq-dev \
    cmake \
    postgresql \
    postgresql-contrib

更多信息请参考:

CentOS/RHEL/Fedora

# CentOS/RHEL
sudo yum install -y gcc gcc-c++ cmake postgresql-devel clang-devel

# Fedora
sudo dnf install -y gcc gcc-c++ cmake postgresql-devel clang-devel

更多信息请参考:

2. 安装 Rust 和 Diesel CLI

# 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

# (可选)安装 Diesel CLI (PostgreSQL 支持)
cargo install diesel_cli --no-default-features --features postgres

更多信息请参考:

3. 克隆并构建项目

# 克隆项目
git clone https://github.com/palpo/palpo.git
cd palpo

接下来: 数据库配置: 数据库配置 开发环境的设置:开发环境设置

Windows 构建

1. 安装依赖

使用 Chocolatey (推荐)

# 以管理员身份运行 PowerShell
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

# 安装依赖
choco install rust postgresql cmake git

更多信息请参考:

2. 安装 Diesel CLI (可选)

# 安装 Diesel CLI
cargo install diesel_cli --no-default-features --features postgres

3. 设置环境变量

# 添加到系统 PATH (根据实际安装路径调整)
$env:PATH += ";C:\Program Files\PostgreSQL\15\bin"
$env:PATH += ";C:\Program Files\CMake\bin"

4. 构建项目

# 克隆项目
git clone https://github.com/palpo/palpo.git
cd palpo

接下来: 数据库配置: 数据库配置 开发环境的设置:开发环境设置

5. Windows WSL 构建 (可选)

推荐在 Windows 系统中使用 WSL 环境来开发。WSL 是 Windows Subsystem for Linux,允许在 Windows 上运行 Linux 命令行工具。WSL 的安装教程可以参考官方指导: WSL 的安装和配置。

可以选择你熟悉的 Linux 发行版,如Debian 或 Ubuntu 作为 WSL 的子系统。按照上一章节中 Linux 开发配置进行配置即可。

此外,你也可使用 WSL 交叉编译构建 Windows 系统的可执行文件,参考:WSL 环境下交叉编译与安装

开发环境的设置参考:开发环境设置

数据库配置

1. 创建数据库和用户

macOS/Linux

# 启动 PostgreSQL
sudo systemctl start postgresql  # Linux
brew services start postgresql   # macOS

# 创建数据库和用户
sudo -u postgres psql -c "CREATE USER palpo_dev WITH PASSWORD 'your_password';"
sudo -u postgres psql -c "CREATE DATABASE palpo_dev OWNER palpo_dev;"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE palpo_dev TO palpo_dev;"

Windows

# 启动 PostgreSQL 服务
net start postgresql-x64-15  # 根据版本调整

# 连接数据库
psql -U postgres

在 psql 中执行

-- 创建用户
CREATE USER palpo WITH PASSWORD 'your_password';

-- 创建数据库
CREATE DATABASE palpo OWNER palpo;

-- 授予权限
GRANT ALL PRIVILEGES ON DATABASE palpo TO palpo;

-- 退出
\q

更多信息请参考:

2. 配置数据库连接

设置环境变量或创建 .env 文件:

# 方法1: 设置环境变量
export DATABASE_URL="postgres://palpo:your_password@localhost:5432/palpo"

# 方法2: 创建 .env 文件
echo "DATABASE_URL=postgres://palpo:your_password@localhost:5432/palpo" > .env

3. 运行数据库迁移(可选)

当前 Palpo 已经实现自动化迁移,无需手动执行迁移命令。 如果需要手动执行迁移,请执行以下命令。

# 进入 data crate 目录
cd crates/data

# 运行迁移 (创建所有表和索引)
diesel migration run

# 验证迁移状态
diesel migration list

4. 迁移管理命令(可选)

# 查看迁移状态
diesel migration list

# 回滚最后一次迁移
diesel migration revert

# 重新运行所有迁移
diesel migration redo

# 生成新的迁移文件 (开发时使用)
diesel migration generate migration_name

更多信息请参考:

5. 验证数据库结构

连接数据库验证表是否创建成功:

psql -U palpo -d palpo -h localhost
-- 查看所有表
\dt

-- 查看表结构示例
\d users
\d rooms
\d events

-- 退出
\q

Docker 开发环境构建

1. 构建Palpo容器镜像

推荐使用 Rust 开发镜像构建 Palpo。参考配置文件:Dockerfile

FROM rust:bookworm AS builder

WORKDIR /work

RUN apt-get update && apt-get install -y --no-install-recommends \
    libclang-dev libpq-dev cmake postgresql postgresql-contrib

COPY Cargo.toml Cargo.toml
COPY crates crates
RUN cargo build --release

FROM debian:bookworm

WORKDIR /var/palpo

COPY --from=builder /work/target/release/palpo /var/palpo/palpo
# COPY crates/server/palpo-example.toml /var/palpo/palpo.toml

RUN apt-get update && apt-get install -y debian-keyring \
    debian-archive-keyring apt-transport-https ca-certificates \
    libpq-dev &&\
    mkdir -p /var/palpo/media /var/palpo/certs /var/palpo/acme

ENV PALPO_CONFIG=/var/palpo/palpo.toml
ENV RUST_LOG="palpo=warn,palpo_core=error,salvo=error"
ENV LOG_FORMAT=json

EXPOSE 8008 8448

CMD /var/palpo/palpo

将 Dockerfile 保存为 Dockerfile.palpo,单独放在某个目录下,并运行以下命令构建镜像:

docker build -t palpo-dev -f Dockerfile.palpo .

可以通过命令查看构建好的镜像:

docker images | grep palpo-dev

使用 Docker Compose 运行并测试镜像,配置可以参考:Docker Compose 配置。其中的 palpo image 配置为本地的 palpo-dev 镜像。

在启动测试前,记得要编辑配置文件:

# 编辑配置文件
cp palpo.toml.example palpo.toml
# 编辑 palpo.toml 设置你的服务器名称和数据库连接

启动服务 (包含自动数据库迁移):docker compose up -d

更多信息请参考:

2. Docker 环境数据库迁移(可选)

Docker 环境中的数据库迁移会自动执行,但你也可以手动运行:

# 查看迁移状态
docker compose exec palpo diesel migration list

# 手动运行迁移
docker compose exec palpo diesel migration run

# 如果需要进入容器调试
docker compose exec palpo bash

开发环境设置

1. 安装开发工具

  • rustfmt 是 Rust 的代码格式化工具
  • clippy 是代码分析工具。
  • cargo-watch 是 cargo 的监视工具,用于自动重载。
  • cargo-edit 是 cargo 的依赖管理工具,用于添加依赖。
# 安装 Rust 开发工具
rustup component add rustfmt clippy

# 安装 cargo 扩展
cargo install cargo-watch cargo-edit

更多信息请参考:

2. 设置开发数据库

# 创建开发数据库
createdb palpo_dev

# 设置开发环境变量
export DATABASE_URL="postgres://palpo:your_password@localhost:5432/palpo_dev"

# 运行迁移 (可选)
cd crates/data
diesel migration run

3. 运行开发服务器

# 复制示例配置
cp crates/server/palpo.toml palpo-dev.toml

# 编辑配置文件设置开发环境
# 修改 server_name, listen_addr, 数据库连接等

# 运行开发服务器
PALPO_CONFIG=palpo-dev.toml cargo run

# 或使用 cargo-watch 自动重载
cargo watch -x 'run'

4. 验证服务器运行

启动成功后,使用以下命令测试服务器是否正常运行:

# 检查服务器版本信息
curl http://yourservername:6006/_matrix/client/versions

# 预期返回 JSON 格式的版本信息,类似:
{
  "versions": ["r0.5.0", "r0.6.0", "v1.1", "v1.2", "v1.3", "v1.4", "v1.5", "v1.6"],
  "unstable_features": {}
}

如果返回上述 JSON 数据,说明 Palpo 服务器已成功启动并正常运行。

更多关于 Matrix API 的信息请参考:

数据库架构说明

Palpo 使用以下主要数据表:

  • 用户相关: users, user_passwords, user_sessions, user_profiles, user_access_tokens
  • 房间相关: rooms, room_aliases, room_tags
  • 事件相关: events, event_datas, event_points, threads
  • 媒体相关: media_metadatas, media_thumbnails, media_url_previews
  • 端到端加密: e2e_device_keys, e2e_room_keys, e2e_room_keys_versions
  • 统计相关: stats_user_daily_visits, stats_monthly_active_users, stats_room_currents
  • 其他: threepid_*, user_pushers, server_signing_keys

所有表的详细结构可以在 crates/data/migrations/ 目录中查看。

故障排除

数据库相关问题

  1. 迁移失败:
# 检查数据库连接
psql $DATABASE_URL -c "SELECT version();"

# 检查迁移状态
diesel migration list

# 重置数据库 (谨慎使用)
dropdb palpo_dev && createdb palpo_dev
diesel migration run
  1. 权限问题:
-- 确保用户有足够权限
GRANT ALL PRIVILEGES ON DATABASE palpo TO palpo;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO palpo;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO palpo;
  1. 连接问题:
# 测试数据库连接
pg_isready -h localhost -p 5432 -U palpo

# 检查 PostgreSQL 状态
sudo systemctl status postgresql  # Linux
brew services list | grep postgres  # macOS

更多故障排除信息请参考:

常见问题

  1. 编译错误: 确保安装了所有必需的系统依赖
  2. Diesel CLI 安装失败: 确保安装了 libpq-dev (Linux) 或 PostgreSQL 开发库
  3. 端口冲突: 修改 listen_addr 使用不同端口
  4. 权限问题: 确保 Palpo 有权限访问配置文件和媒体目录

日志调试

# 启用详细日志
RUST_LOG=debug ./target/release/palpo

# 数据库查询日志
RUST_LOG=diesel=debug ./target/release/palpo

更多调试信息请参考: