AppFlowy部署与自托管方案完全指南
本文详细介绍了AppFlowy的完整部署与自托管方案,涵盖从本地开发环境搭建到生产环境优化的全流程。内容包括Linux系统下的Flutter和Rust开发环境配置、多平台打包发布流程、自托管部署配置详解以及生产环境性能优化与监控策略。通过本指南,您将能够成功部署和管理自己的AppFlowy实例,满足不同环境下的使用需求。
本地开发环境搭建教程
AppFlowy是一个基于Flutter和Rust构建的开源Notion替代品,搭建本地开发环境需要同时配置Flutter和Rust两个技术栈。本教程将详细介绍如何在Linux系统上搭建完整的AppFlowy开发环境。
环境要求
在开始之前,请确保您的系统满足以下最低要求:
| 组件 | 版本要求 | 说明 |
|---|---|---|
| 操作系统 | Ubuntu 20.04+ / Fedora 32+ | 推荐使用Linux发行版 |
| 内存 | 8GB+ | 建议16GB以获得更好的开发体验 |
| 存储空间 | 10GB+ | 用于安装开发工具和依赖项 |
| Flutter SDK | 3.27.4 | 必须使用此特定版本 |
| Rust工具链 | 1.85 | 使用rustup管理 |
| Dart SDK | 3.3.0+ | 随Flutter SDK一起安装 |
开发环境架构
AppFlowy采用混合技术栈架构,前端使用Flutter/Dart,后端业务逻辑使用Rust:
graph TB
A[AppFlowy应用] --> B[Flutter UI层]
A --> C[Rust业务逻辑层]
B --> D[Dart代码]
B --> E[Flutter插件]
C --> F[Rust Crates]
C --> G[FFI接口]
D --> H[通过FFI调用]
G --> H
subgraph "开发工具链"
I[Flutter 3.27.4]
J[Rust 1.85]
K[Cargo Make]
L[Dart Build Runner]
end
B --> I
C --> J
A --> K
B --> L
步骤一:安装系统依赖
首先安装必要的系统级依赖包:
# 更新系统包管理器
sudo apt-get update && sudo apt-get upgrade -y
# 安装开发工具和依赖
sudo apt-get install -y \
curl \
git \
build-essential \
pkg-config \
libssl-dev \
libclang-dev \
clang \
cmake \
ninja-build \
libgtk-3-dev \
libblkid-dev \
liblzma-dev
步骤二:安装Rust工具链
AppFlowy要求使用Rust 1.85版本,通过rustup进行安装:
# 安装rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 配置环境变量
source $HOME/.cargo/env
# 安装指定版本的Rust工具链
rustup toolchain install 1.85
rustup default 1.85
# 安装必要的Rust组件
rustup component add clippy rustfmt
# 验证安装
rustc --version
# 应输出: rustc 1.85.x
步骤三:安装Flutter SDK
AppFlowy严格要求使用Flutter 3.27.4版本:
# 下载Flutter SDK
git clone https://github.com/flutter/flutter.git -b stable
cd flutter
# 切换到3.27.4版本
git checkout 3.27.4
# 添加Flutter到PATH
echo 'export PATH="$PATH:$HOME/flutter/bin"' >> ~/.bashrc
source ~/.bashrc
# 启用Linux桌面支持
flutter config --enable-linux-desktop
# 验证安装
flutter --version
# 应显示: Flutter 3.27.4
步骤四:安装项目特定依赖
AppFlowy需要一些特定的系统库和工具:
# 安装keybinder-3.0(用于全局快捷键)
sudo apt-get install -y keybinder-3.0-dev
# 安装libnotify(用于桌面通知)
sudo apt-get install -y libnotify-dev
# 安装libmpv(视频块支持)
sudo apt-get install -y libmpv-dev mpv
# 安装cargo-make(构建工具)
cargo install --force cargo-make
# 安装duckscript(脚本工具)
cargo install --force --locked duckscript_cli
步骤五:克隆和设置项目
# 克隆AppFlowy仓库
git clone https://gitcode.com/GitHub_Trending/ap/AppFlowy.git
cd AppFlowy
# 设置git hooks
git config core.hooksPath .githooks
# 安装go-gitlint(提交消息检查)
GOLINT_FILENAME="go-gitlint_1.1.0_linux_x86_64.tar.gz"
wget https://github.com/llorllale/go-gitlint/releases/download/1.1.0/${GOLINT_FILENAME}
tar -zxv --directory .githooks/. -f ${GOLINT_FILENAME} gitlint
rm ${GOLINT_FILENAME}
# 进入前端目录
cd frontend
步骤六:安装Dart/Flutter依赖
# 获取Flutter依赖
flutter pub get
# 运行build_runner生成代码
dart run build_runner build
# 或者使用watch模式持续生成
dart run build_runner watch
步骤七:安装Rust依赖
# 在frontend目录下安装Rust工作区依赖
cargo build
# 或者使用cargo-make运行特定任务
cargo make appflowy-flutter-deps-tools
步骤八:验证开发环境
运行Flutter doctor检查环境配置:
flutter doctor
预期输出应该显示所有组件都已正确安装:
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.27.4, on Linux 6.5.0-21-generic, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices
[✓] Chrome - develop for the web
[✓] Linux toolchain - develop for Linux
[✓] Android Studio
[✓] Connected device
[✓] Network resources
开发环境目录结构
成功设置后,项目目录结构如下:
AppFlowy/
├── frontend/
│ ├── appflowy_flutter/ # Flutter前端应用
│ │ ├── lib/ # Dart业务代码
│ │ ├── packages/ # 内部Flutter包
│ │ └── pubspec.yaml # Flutter依赖配置
│ └── rust-lib/ # Rust后端库
│ ├── Cargo.toml # Rust工作区配置
│ ├── flowy-core/ # 核心业务逻辑
│ ├── dart-ffi/ # FFI接口层
│ └── ...其他crates
├── .githooks/ # Git钩子脚本
└── scripts/ # 构建和部署脚本
常见问题解决
问题1:Flutter版本不匹配
# 如果Flutter版本不正确
cd ~/flutter
git fetch --tags
git checkout 3.27.4
flutter doctor
问题2:Rust依赖编译失败
# 清理并重新构建
cargo clean
cargo build
问题3:FFI链接错误
# 确保安装了所有系统依赖
sudo apt-get install -y libclang-dev clang
问题4:桌面支持未启用
flutter config --enable-linux-desktop
flutter create --platforms=linux .
开发工作流程
典型的AppFlowy开发流程:
sequenceDiagram
participant D as 开发者
participant G as Git
participant F as Flutter
participant R as Rust
participant B as 构建系统
D->>G: git pull 最新代码
D->>F: flutter pub get 更新依赖
D->>R: cargo build 编译Rust
D->>F: dart run build_runner build 生成代码
D->>B: cargo make start-linux 启动开发服务器
D->>F: 编写Dart/Flutter代码
D->>R: 编写Rust业务逻辑
D->>B: 自动热重载和测试
D->>G: git commit & push
环境变量配置
创建开发环境配置文件:
# 在frontend/appflowy_flutter/目录下
cp dev.env.example dev.env
# 编辑dev.env文件,配置必要的环境变量
# APPFLOWY_ENV=development
# RUST_BACKTRACE=1
# RUST_LOG=debug
性能优化建议
为了获得更好的开发体验:
- 启用Rust增量编译:在Cargo.toml中配置
incremental = true - 使用build_runner watch:持续监听文件变化并自动生成代码
- 配置IDE支持:安装Flutter和Rust插件以获得更好的开发体验
- 使用cargo-make任务:利用预定义的构建任务简化开发流程
完成以上步骤后,您的AppFlowy本地开发环境就已经搭建完成,可以开始进行功能开发和代码贡献了。
多平台打包与发布流程
AppFlowy作为跨平台的开源生产力工具,其多平台打包与发布流程体现了现代软件开发的最佳实践。通过精心设计的构建系统和自动化脚本,项目能够高效地为macOS、Windows、Linux、iOS和Android等多个平台生成发布包。
构建系统架构
AppFlowy采用基于cargo-make的构建系统,通过统一的配置文件管理所有平台的构建参数和任务。整个构建流程采用模块化设计,各平台的构建配置分离到独立的配置文件中。
flowchart TD
A[Makefile.toml] --> B[桌面平台配置]
A --> C[移动平台配置]
A --> D[Web平台配置]
A --> E[测试配置]
A --> F[环境配置]
B --> B1[macOS构建]
B --> B2[Windows构建]
B --> B3[Linux构建]
C --> C1[iOS构建]
C --> C2[Android构建]
B1 --> B11[ARM64架构]
B1 --> B12[x86_64架构]
B1 --> B13[通用二进制]
平台特定的构建配置
每个目标平台都有专门的构建环境配置,确保在不同架构和操作系统上都能正确编译和打包。
macOS构建配置
macOS平台支持多种架构的构建,包括原生ARM64和x86_64架构,以及通过lipo工具创建的通用二进制文件。
[env.production-mac-arm64]
CARGO_PROFILE = "release"
BUILD_FLAG = "release"
TARGET_OS = "macos"
RUST_COMPILE_TARGET = "aarch64-apple-darwin"
FLUTTER_OUTPUT_DIR = "Release"
PRODUCT_EXT = "app"
APP_ENVIRONMENT = "production"
BUILD_ARCHS = "arm64"
CRATE_TYPE = "staticlib"
[env.production-mac-x86_64]
CARGO_PROFILE = "release"
BUILD_FLAG = "release"
TARGET_OS = "macos"
RUST_COMPILE_TARGET = "x86_64-apple-darwin"
FLUTTER_OUTPUT_DIR = "Release"
PRODUCT_EXT = "app"
APP_ENVIRONMENT = "production"
BUILD_ARCHS = "x86_64"
CRATE_TYPE = "staticlib"
通用二进制构建流程
macOS通用二进制的构建是一个多步骤过程,首先分别为不同架构编译Rust库,然后使用lipo工具合并生成通用库。
# 构建x86_64架构的Rust库
cargo make --profile production-mac-x86_64 appflowy-core-release
# 构建ARM64架构的Rust库
cargo make --profile production-mac-arm64 appflowy-core-release
# 使用lipo创建通用二进制库
lipo -create \
rust-lib/target/x86_64-apple-darwin/release/libdart_ffi.a \
rust-lib/target/aarch64-apple-darwin/release/libdart_ffi.a \
-output rust-lib/target/libdart_ffi.a
Windows构建配置
Windows平台使用MSVC工具链进行构建,生成可执行的EXE文件和动态链接库DLL。
[env.production-windows-x86]
CARGO_PROFILE = "release"
BUILD_FLAG = "release"
TARGET_OS = "windows"
RUST_COMPILE_TARGET = "x86_64-pc-windows-msvc"
FLUTTER_OUTPUT_DIR = "Release"
PRODUCT_EXT = "exe"
CRATE_TYPE = "cdylib"
LIB_EXT = "dll"
BUILD_ARCHS = "x64"
APP_ENVIRONMENT = "production"
Linux构建配置
Linux平台支持x86_64和ARM64两种架构,针对不同的架构使用相应的编译目标和特性配置。
[env.production-linux-x86_64]
CARGO_PROFILE = "release"
BUILD_FLAG = "release"
TARGET_OS = "linux"
RUST_COMPILE_TARGET = "x86_64-unknown-linux-gnu"
CRATE_TYPE = "cdylib"
FLUTTER_OUTPUT_DIR = "Release"
LIB_EXT = "so"
LINUX_ARCH = "x64"
APP_ENVIRONMENT = "production"
[env.production-linux-aarch64]
CARGO_PROFILE = "release"
BUILD_FLAG = "release"
TARGET_OS = "linux"
RUST_COMPILE_TARGET = "aarch64-unknown-linux-gnu"
CRATE_TYPE = "cdylib"
FLUTTER_OUTPUT_DIR = "Release"
LIB_EXT = "so"
LINUX_ARCH = "arm64"
APP_ENVIRONMENT = "production"
FLUTTER_DESKTOP_FEATURES = "dart,openssl_vendored"
包格式与分发渠道
AppFlowy支持多种包格式,满足不同平台的分发需求,确保用户可以通过各种渠道获取应用。
| 平台 | 包格式 | 分发渠道 | 安装方式 |
|---|---|---|---|
| macOS | .app, .dmg | GitHub Releases, 直接下载 | 拖拽安装 |
| Windows | .exe, MSI | GitHub Releases, SourceForge | 安装向导 |
| Linux | .deb, AppImage, Flatpak | Flathub, Snapcraft, 包管理器 | 命令行或图形界面 |
| iOS | .ipa | App Store | App Store下载 |
| Android | .apk | Play Store | Play Store下载 |
Linux分发包构建
Linux平台提供了多种打包方式,包括DEB包、AppImage和Flatpak,每种方式都有相应的构建脚本和配置文件。
AppImage构建流程
AppImage是一种跨Linux发行版的打包格式,AppFlowy使用appimage-builder工具自动化构建过程。
#!/usr/bin/env bash
VERSION=$1
# 下载并安装appimage-builder
if [ ! -e /usr/local/bin/appimage-builder ]; then
wget -O appimage-builder-x86_64.AppImage \
https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage
chmod +x appimage-builder-x86_64.AppImage
sudo mv appimage-builder-x86_64.AppImage /usr/local/bin/appimage-builder
fi
# 更新版本号并构建
grep -rl "\[CHANGE_THIS\]" scripts/linux_distribution/appimage/AppImageBuilder.yml | \
xargs sed -i "s/\[CHANGE_THIS\]/$VERSION/"
appimage-builder --recipe scripts/linux_distribution/appimage/AppImageBuilder.yml --skip-tests
DEB包构建
DEB包是Debian系Linux发行版的标准包格式,AppFlowy提供了完整的DEB包构建脚本和配置文件。
# DEB包构建脚本示例
#!/bin/bash
# 构建DEB包的基本流程
build_deb_package() {
local version=$1
local arch=$2
# 准备构建目录结构
mkdir -p deb_build/DEBIAN
mkdir -p deb_build/usr/bin
mkdir -p deb_build/usr/share/applications
mkdir -p deb_build/usr/share/icons/hicolor/256x256/apps
# 复制可执行文件和资源
cp build/linux/x64/release/bundle/appflowy deb_build/usr/bin/
cp assets/icon.png deb_build/usr/share/icons/hicolor/256x256/apps/appflowy.png
cp packaging/appflowy.desktop deb_build/usr/share/applications/
# 生成控制文件
cat > deb_build/DEBIAN/control << EOF
Package: appflowy
Version: $version
Architecture: $arch
Maintainer: AppFlowy Team <team@appflowy.io>
Description: Open Source Alternative to Notion
EOF
# 构建DEB包
dpkg-deb --build deb_build appflowy_${version}_${arch}.deb
}
移动平台构建
移动平台的构建流程针对iOS和Android进行了专门优化,确保应用在移动设备上的性能和兼容性。
iOS构建配置
iOS平台使用静态库格式,支持真机和模拟器两种构建目标。
[env.production-ios-arm64]
BUILD_FLAG = "release"
TARGET_OS = "ios"
FLUTTER_OUTPUT_DIR = "Release"
RUST_COMPILE_TARGET = "aarch64-apple-ios"
BUILD_ARCHS = "arm64"
CRATE_TYPE = "staticlib"
Android构建配置
Android平台使用动态库格式,针对移动设备进行了性能优化。
[env.production-android]
BUILD_FLAG = "release"
TARGET_OS = "android"
CRATE_TYPE = "cdylib"
FLUTTER_OUTPUT_DIR = "Release"
PRODUCT_EXT = "apk"
LIB_EXT = "so"
版本管理与发布流程
AppFlowy采用语义化版本控制,构建系统自动处理版本号的注入和管理。版本信息通过环境变量传递到构建过程中。
sequenceDiagram
participant Dev as 开发者
participant CI as CI/CD系统
participant Build as 构建系统
participant Package as 打包系统
participant Release as 发布平台
Dev->>CI: 触发发布构建
CI->>Build: 设置版本号环境变量
Build->>Build: 编译各平台二进制
Build->>Package: 生成平台特定包
Package->>Release: 上传到分发渠道
Release->>用户: 提供下载安装
构建优化策略
为了提高构建效率和减少包大小,AppFlowy采用了多种优化策略:
- 增量编译:利用cargo和Flutter的增量编译功能
- 代码分割:按需加载模块,减少初始包大小
- 资源优化:压缩图片和资源文件
- 树摇优化:移除未使用的代码和依赖
- 并行构建:多线程并行编译不同组件
质量控制与测试
在打包发布前,每个构建都会经过严格的质量控制流程:
flowchart LR
A[代码编译] --> B[单元测试]
B --> C[集成测试]
C --> D[UI测试]
D --> E[性能测试]
E --> F[安全扫描]
F --> G[打包发布]
自定义构建与白标功能
AppFlowy提供了强大的白标功能,允许用户自定义应用的外观和品牌信息。通过专门的脚本工具,可以快速生成定制化的应用版本。
# 白标定制示例
#!/bin/bash
# 自定义应用图标
./scripts/white_label/icon_white_label.sh --app-icon custom_icon.png
# 自定义字体
./scripts/white_label/font_white_label.sh --font-family "CustomFont"
# 自定义品牌颜色
./scripts/white_label/code_white_label.sh --primary-color "#FF6B35"
# 多语言支持
./scripts/white_label/i18n_white_label.sh --languages "en,zh,es"
通过这样完善的多平台打包与发布流程,AppFlowy确保了用户能够在各种设备和操作系统上获得一致的高质量体验,同时也为开发者提供了灵活的定制和分发选项。
自托管部署配置详解
AppFlowy提供了灵活的自托管部署方案,支持多种部署方式和配置选项。本文将深入解析AppFlowy的自托管配置体系,帮助您理解如何根据不同的部署环境进行配置优化。
环境变量配置体系
AppFlowy使用分层配置体系,通过环境变量控制应用的行为和连接参数。核心配置变量包括:
| 环境变量 | 描述 | 默认值 | 必需 |
|---|---|---|---|
APPFLOWY_CLOUD_URL |
AppFlowy云服务基础URL | 空字符串 | 是 |
AUTHENTICATOR_TYPE |
认证类型 | 2 (AppFlowy Cloud) | 否 |
BASE_WEB_DOMAIN |
基础Web域名 | appflowy.com |
否 |
SENTRY_DSN |
Sentry错误监控DSN | 空字符串 | 否 |
认证类型配置
AppFlowy支持多种认证模式,通过AUTHENTICATOR_TYPE环境变量控制:
flowchart TD
A[认证类型配置] --> B[本地模式<br/>AUTHENTICATOR_TYPE=0]
A --> C[AppFlowy Cloud<br/>AUTHENTICATOR_TYPE=2]
A --> D[自托管模式<br/>AUTHENTICATOR_TYPE=3]
A --> E[开发模式<br/>AUTHENTICATOR_TYPE=4]
B --> F[无云同步<br/>纯本地数据]
C --> G[官方云服务<br/>https://beta.appflowy.cloud]
D --> H[自定义云服务<br/>用户指定URL]
E --> I[开发环境<br/>特殊端口配置]
Docker部署配置
AppFlowy提供了完整的Docker部署方案,包含多阶段构建和运行时配置。
Dockerfile配置解析
# 构建阶段
FROM archlinux/archlinux:base-devel as builder
# 安装构建依赖
RUN pacman -S --needed --noconfirm curl base-devel openssl clang cmake ninja pkg-config
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
RUN source ~/.cargo/env && rustup toolchain install 1.81
# 安装Flutter
RUN curl -sSfL --output flutter.tar.xz \
https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.27.4-stable.tar.xz
RUN tar -xf flutter.tar.xz
# 运行时阶段
FROM archlinux/archlinux
# 安装运行时依赖
RUN pacman -S --noconfirm gtk3 libkeybinder3 libnotify rocksdb
# 设置应用用户
ARG user=appflowy
ARG uid=1000
ARG gid=1000
RUN groupadd --gid $gid $user
RUN useradd --create-home --uid $uid --gid $gid $user
USER $user
CMD ["./AppFlowy"]
Docker Compose配置
version: "3"
services:
app:
build:
context: ../../..
dockerfile: ./frontend/scripts/docker-buildfiles/Dockerfile
image: appflowy/appflowy:latest
environment:
- DISPLAY=$DISPLAY
- NO_AT_BRIDGE=1
volumes:
- $HOME/.Xauthority:/root/.Xauthority:rw
- /tmp/.X11-unix:/tmp/.X11-unix
network_mode: host
Rust后端配置
AppFlowy的后端使用Rust编写,配置通过环境变量传递:
AFCloudConfiguration结构
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct AFCloudConfiguration {
pub base_url: String, // 基础API URL
pub ws_base_url: String, // WebSocket URL
pub gotrue_url: String, // 认证服务URL
}
环境变量映射
Rust后端使用特定的环境变量名称:
flowchart LR
A[前端环境变量] --> B[Rust后端环境变量]
subgraph Frontend [前端配置]
C[APPFLOWY_CLOUD_URL]
end
subgraph Backend [后端映射]
D[APPFLOWY_CLOUD_ENV_APPFLOWY_CLOUD_BASE_URL]
E[APPFLOWY_CLOUD_ENV_APPFLOWY_CLOUD_WS_BASE_URL]
F[APPFLOWY_CLOUD_ENV_APPFLOWY_CLOUD_GOTRUE_URL]
end
C --> D
C --> E
C --> F
多环境配置策略
开发环境配置
开发环境使用特殊的端口配置:
// 开发模式端口映射
if (authenticatorType == AuthenticatorType.appflowyCloudDevelop) {
return AppFlowyCloudConfiguration(
base_url: "$baseUrl:8000", // REST API端口
ws_base_url: "ws://${baseUri.host}:8000/ws/v1", // WebSocket端口
gotrue_url: "$baseUrl:9999", // 认证服务端口
enable_sync_trace: true, // 启用同步跟踪
base_web_domain: "test.appflowy.com", // 测试域名
);
}
生产环境配置
生产环境使用标准URL构造规则:
// 生产环境配置
return AppFlowyCloudConfiguration(
base_url: baseUrl,
ws_base_url: await _getAppFlowyCloudWSUrl(baseUrl),
gotrue_url: await _getAppFlowyCloudGotrueUrl(baseUrl),
enable_sync_trace: await getSyncLogEnabled(),
base_web_domain: baseShareDomain,
);
数据存储隔离策略
AppFlowy实现了基于域名的数据存储隔离,确保不同实例的数据完全分离:
fn make_user_data_folder(root: &str, url: &str) -> String {
if url.is_empty() {
return root.to_string();
}
// 使用base64编码的URL作为存储路径后缀
let server_base64 = URL_SAFE_ENGINE.encode(url);
let storage_path = format!("{}_{}", root, server_base64);
// 兼容旧版本:使用域名作为后缀
if !storage_path.exists() {
if let Ok(parsed_url) = Url::parse(url) {
if let Some(domain) = parsed_url.host_str() {
return format!("{}_{}", root, domain);
}
}
}
storage_path
}
网络配置详解
WebSocket连接配置
WebSocket URL根据基础URL自动生成:
Future<String> _getAppFlowyCloudWSUrl(String baseUrl) async {
final uri = Uri.parse(baseUrl);
return "ws://${uri.host}${uri.port == 443 ? '' : ':${uri.port}'}/ws/v1";
}
认证服务配置
认证服务URL同样基于基础URL构造:
Future<String> _getAppFlowyCloudGotrueUrl(String baseUrl) async {
final uri = Uri.parse(baseUrl);
return "${uri.scheme}://${uri.host}${uri.port == 443 ? '' : ':${uri.port}'}/gotrue";
}
部署验证配置
部署完成后,可以通过以下方式验证配置是否正确:
- 环境变量检查:确认所有必需的环境变量已正确设置
- 网络连通性:验证到配置URL的网络连接
- 服务健康检查:检查各服务的健康状态
- 数据存储:确认数据目录已正确创建并具有适当权限
健康检查端点
| 服务类型 | 健康检查端点 | 预期响应 |
|---|---|---|
| REST API | {base_url}/health |
HTTP 200 |
| WebSocket | {ws_base_url}/health |
连接成功 |
| 认证服务 | {gotrue_url}/health |
HTTP 200 |
通过以上详细的配置解析,您可以全面了解AppFlowy的自托管部署配置体系,并根据实际需求进行定制化部署。每个配置项都经过精心设计,确保在不同环境下都能提供稳定可靠的服务。
生产环境优化与监控
在生产环境中部署AppFlowy时,优化性能和建立有效的监控体系是确保系统稳定运行的关键。AppFlowy基于Flutter和Rust构建,提供了丰富的配置选项和监控能力来满足生产环境的需求。
日志系统配置与优化
AppFlowy内置了强大的日志系统,基于tracing框架实现,支持多级别日志记录和文件轮转。生产环境中建议配置如下:
// 生产环境日志配置示例
let config = AppFlowyCoreConfig::new(
app_version,
custom_application_path,
application_path,
device_id,
platform,
name,
)
.log_filter("warn", vec!["sync_trace_log".to_string()]);
日志系统支持以下关键特性:
| 日志类型 | 轮转策略 | 最大文件数 | 适用场景 |
|---|---|---|---|
| 应用日志 | 每日轮转 | 6个文件 | 常规应用日志 |
| 同步日志 | 每小时轮转 | 24个文件 | 数据同步跟踪 |
flowchart TD
A[日志事件] --> B[EnvFilter过滤]
B --> C{目标判断}
C -->|sync_trace_log| D[同步日志文件]
C -->|其他目标| E[应用日志文件]
D --> F[每小时轮转]
E --> G[每日轮转]
F --> H[最大24文件]
G --> I[最大6文件]
性能优化配置
生产环境中需要针对性能进行优化配置:
// 环境变量配置示例
export AF_CLOUD_BASE_URL=https://your-appflowy-instance.com
export AF_CLOUD_WS_BASE_URL=wss://your-appflowy-instance.com/ws
export AF_CLOUD_GOTRUE_URL=https://your-appflowy-instance.com/gotrue
export ENABLE_SYNC_TRACE=false
关键性能配置参数:
| 参数 | 默认值 | 生产环境建议 | 说明 |
|---|---|---|---|
| ENABLE_SYNC_TRACE | false | false | 禁用同步跟踪以减少开销 |
| RUST_LOG | info | warn | 提高日志级别减少I/O |
| MAX_LOG_FILES | 6/24 | 根据需求调整 | 控制日志文件数量 |
监控指标体系
AppFlowy提供了丰富的监控指标,可以通过以下方式收集:
// 监控指标收集示例
tracing::info!("user_login", user_id = user_id, device_type = "desktop");
tracing::warn!("sync_failed", error = error.to_string(), retry_count = 3);
tracing::error!("database_error", table = "documents", operation = "insert");
监控指标分类:
| 指标类别 | 具体指标 | 监控频率 | 告警阈值 |
|---|---|---|---|
| 用户行为 | 登录次数、文档操作 | 实时 | N/A |
| 系统性能 | 内存使用、CPU负载 | 5分钟 | >80% |
| 同步状态 | 同步成功率、延迟 | 1分钟 | <95%成功率 |
| 错误率 | 各类错误计数 | 实时 | >1%/分钟 |
健康检查与自愈机制
生产环境需要实现健康检查机制:
# 健康检查脚本示例
#!/bin/bash
# 检查AppFlowy进程状态
if ! pgrep -f "appflowy" > /dev/null; then
echo "AppFlowy process not found, restarting..."
systemctl restart appflowy
fi
# 检查磁盘空间
DISK_USAGE=$(df /data | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt 90 ]; then
echo "Disk usage critical: $DISK_USAGE%"
# 清理旧日志文件
find /var/log/appflowy -name "*.log*" -mtime +7 -delete
fi
stateDiagram-v2
[*] --> Healthy
Healthy --> Degraded: 性能下降
Degraded --> Healthy: 自动恢复
Degraded --> Unhealthy: 错误持续
Unhealthy --> [*]: 需要人工干预
Healthy --> Unhealthy: 严重错误
资源限制与隔离
在生产环境中,合理的资源限制可以防止单个用户占用过多资源:
# Docker资源限制示例
version: '3.8'
services:
appflowy:
image: appflowy/appflowy:latest
deploy:
resources:
limits:
memory: 2G
cpus: '2'
reservations:
memory: 1G
cpus: '1'
environment:
- RUST_BACKTRACE=0
- DISABLE_EVENT_LOG=true
资源分配策略:
| 资源类型 | 开发环境 | 测试环境 | 生产环境 |
|---|---|---|---|
| 内存限制 | 1GB | 2GB | 4GB+ |
| CPU核心 | 1核 | 2核 | 4核+ |
| 磁盘空间 | 10GB | 50GB | 100GB+ |
| 网络带宽 | 100Mbps | 1Gbps | 多Gbps |
安全监控与审计
安全监控是生产环境不可或缺的部分:
// 安全审计日志示例
tracing::audit!(
"user_permission_change",
user_id = admin_id,
target_user = target_user_id,
permission = "write",
resource = "workspace:123"
);
安全监控要点:
- 用户登录失败次数监控和限制
- 敏感操作审计日志记录
- API调用频率限制
- 数据导出操作监控
- 异常行为检测和告警
通过以上优化和监控措施,可以确保AppFlowy在生产环境中稳定、高效地运行,同时具备良好的可观测性和故障恢复能力。
AppFlowy作为一个基于Flutter和Rust构建的开源Notion替代品,提供了完整的部署和自托管解决方案。从开发环境搭建到生产环境部署,本文涵盖了环境配置、多平台打包、自托管部署和性能监控等关键环节。通过合理的环境变量配置、Docker容器化部署、资源限制设置以及完善的日志和监控体系,可以确保AppFlowy在各种环境下稳定高效运行。无论是个人使用还是企业部署,本指南都提供了详细的技术方案和最佳实践建议。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00