如何用fdroidserver一键搭建专属F-Droid仓库?避开95%新手坑

4422 字
22 分钟
如何用fdroidserver一键搭建专属F-Droid仓库?避开95%新手坑

F-Droid作为自由开源软件(FOSS)Android应用的权威分发平台,其强大的fdroidserver工具链允许任何人快速搭建专属的应用仓库。本指南将从零开始,系统性地介绍F-Droid仓库的搭建、管理和维护全流程,兼顾初学者和专业开发者。

一、准备工作#

1.1 硬件环境要求#

最低配置建议:

  • CPU:双核处理器

  • 内存:2GB RAM(4GB推荐)

  • 存储:20GB可用空间

  • 网络:稳定的互联网连接(用于下载依赖和发布仓库)

推荐配置:

  • CPU:四核及以上

  • 内存:4GB+ RAM

  • 存储:50GB+ SSD

  • 网络:固定IP或域名(便于用户访问)

1.2 软件环境#

操作系统支持:

  • GNU/Linux(推荐):Debian/Ubuntu、Fedora、Arch Linux

  • macOS(部分功能支持)

  • Windows(仅通过WSL2或Cygwin)

必需软件包:

# Debian/Ubuntu系统
sudo apt-get update
sudo apt-get install fdroidserver nginx git python3-venv openjdk-11-jdk
# Fedora系统
sudo dnf install fdroidserver nginx git python3 java-11-openjdk-devel
# Arch Linux
sudo pacman -S fdroidserver nginx git python jdk11-openjdk

1.3 安装fdroidserver工具#

方法一:通过包管理器安装(推荐)

# Ubuntu/Mint使用官方PPA
sudo add-apt-repository ppa:fdroid/fdroidserver
sudo apt-get update
sudo apt-get install fdroidserver
# Debian使用backports
sudo apt-get install -t bookworm-backports fdroidserver
# 其他发行版查看对应包管理器命令

方法二:使用虚拟环境安装

# 创建Python虚拟环境
python3 -m venv fdroidserver-env
source fdroidserver-env/bin/activate
# 从GitLab安装最新版本
pip install git+https://gitlab.com/fdroid/fdroidserver.git

方法三:使用Docker(适合快速部署)

# 拉取官方镜像
docker pull registry.gitlab.com/fdroid/fdroidserver:latest
# 或使用可执行镜像(推荐用于部署)
docker pull registry.gitlab.com/fdroid/fdroidserver:buildserver

1.4 Web服务器配置#

推荐使用Nginx(轻量且性能优异):

# 安装nginx
sudo apt-get install nginx
# 配置网站根目录(根据实际情况调整)
sudo mkdir -p /var/www/fdroid
sudo chown -R $USER:$USER /var/www/fdroid

Nginx配置示例:

server {
listen 80;
listen [::]:80;
server_name your-domain.com;
# 强制HTTPS重定向
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your-domain.com;
root /var/www/fdroid;
# SSL证书配置(使用Let's Encrypt)
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# SSL安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# F-Droid仓库路径
location /fdroid/repo/ {
alias /var/www/fdroid/repo/;
autoindex off;
add_header Cache-Control "public, max-age=3600";
}
# 安全头部
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header X-XSS-Protection "1; mode=block" always;
}

二、搭建步骤#

2.1 仓库初始化#

创建工作目录并初始化仓库:

# 在网站根目录下创建fdroid子目录
cd /var/www/fdroid
# 初始化仓库(生成签名密钥)
fdroid init

初始化过程会创建以下文件:

  • config.yml:仓库主配置文件

  • keystore.p12:仓库签名密钥库(必须安全保存

2.2 配置文件详解#

config.yml核心配置项:

# 仓库基础信息
repo_url: https://your-domain.com/fdroid/repo # 仓库URL(必须以/repo结尾)
repo_name: "My Custom F-Droid Repo" # 仓库名称
repo_description: |- # 仓库描述
A custom repository for distributing
free and open source Android applications.
repo_icon: icon.png # 仓库图标
# 构建环境配置(如需从源码构建)
sdk_path: /opt/android-sdk # Android SDK路径
java_paths:
11: /usr/lib/jvm/java-11-openjdk-amd64 # Java版本路径
# 存档配置(保留旧版本)
archive_older: 3 # 主仓库保留版本数
archive_url: https://your-domain.com/fdroid/archive # 存档URL
archive_name: "My Repo Archive"
archive_description: "Archived versions of applications"
# 签名密钥配置(自动生成,无需手动设置)
# repo_keyalias在初始化时自动配置
# keystore和密码项已自动设置
# 部署配置(可选)
serverwebroot: user@server:/var/www/fdroid # 远程部署路径

2.3 目录结构说明#

标准F-Droid仓库目录结构:

fdroid/
├── config.yml # 主配置文件
├── keystore.p12 # 仓库签名密钥
├── repo/ # 主仓库目录(公开发布)
│ ├── index-v1.jar # V1版本索引文件(JAR签名)
│ ├── index-v1.json # V1版本索引数据
│ ├── index-v2.json # V2版本索引数据
│ ├── entry.jar # 索引入口文件
│ ├── entry.json # 索引入口数据
│ ├── icons/ # 应用图标目录
│ │ ├── org.example.app_64x64.png
│ │ └── repo-icon.png
│ └── [APK文件] # 应用安装包
│ ├── org.example.app_1001.apk
│ └── com.another.app_500.apk
├── archive/ # 存档目录(可选)
│ └── [旧版本APK]
└── metadata/ # 应用元数据目录
└── [package-id].yml # 各应用的元数据文件

2.4 签名密钥生成与管理#

如需手动生成签名密钥:

# 使用keytool生成2048位RSA密钥
keytool -genkey -v \
-keystore my-keystore.jks \
-alias my-repo-key \
-keyalg RSA \
-keysize 2048 \
-validity 10000
# 设置密钥密码(提示输入两个密码)
# 1. Keystore密码(密钥库访问密码)
# 2. Key密码(密钥本身密码)

config.yml中的密钥配置:

keystore: my-keystore.jks # 密钥库文件路径
repo_keyalias: my-repo-key # 密钥别名
keystorepass: $FDROID_KEYSTORE_PASS # 使用环境变量
keypass: $FDROID_KEY_PASS # 使用环境变量

安全设置环境变量:

# 在~/.bashrc或~/.profile中添加
export FDROID_KEYSTORE_PASS="your_strong_password"
export FDROID_KEY_PASS="your_strong_password"
# 或在命令前临时设置
FDROID_KEYSTORE_PASS="password" fdroid update

2.5 仓库索引导成#

基本操作流程:

# 1. 创建repo目录(如果不存在)
mkdir -p repo
# 2. 将APK文件复制到repo目录
cp /path/to/app-*.apk repo/
# 3. 生成元数据文件(自动填充缺失的元数据)
fdroid update --create-metadata
# 4. 编辑生成的元数据文件(可选但推荐)
nano metadata/com.example.app.yml
# 5. 再次更新索引
fdroid update
# 6. 发布到web服务器(如配置了serverwebroot)
fdroid deploy -v

三、应用管理#

3.1 添加应用到仓库#

方法一:复制现有APK文件

# 直接复制已签名的APK文件
cp /path/to/myapp-release.apk repo/
# 生成索引
fdroid update

方法二:从源码构建

# 1. 创建应用元数据文件
cp templates/general.yml metadata/com.example.app.yml
# 2. 编辑元数据文件(参考Build Metadata Reference)
nano metadata/com.example.app.yml
# 3. 构建应用
fdroid build com.example.app -v
# 4. 更新索引
fdroid update

3.2 元数据文件管理#

标准元数据文件格式(metadata/com.example.app.yml):

Categories:
- Games
License: GPL-3.0-or-later
SourceCode: https://github.com/example/app
RepoType: git
Repo: https://github.com/example/app.git
Summary: A simple puzzle game
Description: |-
This game challenges players to solve increasingly
difficult puzzles in a beautiful environment.
Features:
* 100+ unique puzzles
* Beautiful graphics
* Relaxing soundtrack
AuthorName: Example Developer
AuthorEmail: developer@example.com
AuthorWebSite: https://example.com
IssueTracker: https://github.com/example/app/issues
Changelog: https://github.com/example/app/blob/main/CHANGELOG.md
Donate: https://liberapay.com/developer
AntiFeatures:
- Ads
- Tracking
# 构建配置(如需从源码构建)
Builds:
- versionName: '1.0'
versionCode: 1
commit: v1.0
subdir: app
gradle:
- yes
AutoUpdateMode: Tags
UpdateCheckMode: Tags
CurrentVersion: '1.0'
CurrentVersionCode: 1

元数据字段详解:

表格

字段必填说明示例
License应用许可证(SPDX标识符)GPL-3.0-or-later
SourceCode源代码地址https://github.com/example/app
Summary简短描述(最多80字符)A simple puzzle game
Description完整描述(最多4000字符)应用功能介绍
Categories应用分类列表Games, Internet
RepoType否(构建时必填)仓库类型git, hg, svn
AuthorName作者名称Example Developer
IssueTracker问题跟踪器地址https://github.com/example/app/issues

3.3 多语言支持#

添加多语言元数据:

# 为每个语言创建目录
mkdir -p metadata/com.example.app/zh-CN
mkdir -p metadata/com.example.app/de-DE
# 添加翻译的描述文件
cat > metadata/com.example.app/zh-CN/full_description.txt << EOF
这是一个简单的益智游戏,挑战玩家在美丽环境中
解决越来越难的谜题。
功能:
* 100+独特谜题
* 美丽图形
* 放松音乐
EOF
cat > metadata/com.example.app/de-DE/full_description.txt << EOF
Dieses Spiel fordert die Spieler, Rätsel in einer
schönen Umgebung zu lösen.
Funktionen:
* 100+ einzigartige Rätsel
* Schöne Grafik
* Entspannende Musik
EOF

在主元数据文件中引用:

Summary:
en-US: A simple puzzle game
zh-CN: 简单益智游戏
de-DE: Einfaches Puzzle-Spiel
Description:
en-US: |-
This game challenges players to solve increasingly
difficult puzzles in a beautiful environment.
zh-CN: |-
这个游戏挑战玩家在美丽环境中解决越来越难的谜题。
de-DE: |-
Dieses Spiel fordert die Spieler, Rätsel in einer
schönen Umgebung zu lösen.

3.4 应用更新管理#

更新现有应用:

# 1. 将新版本APK复制到repo目录
cp /path/to/myapp-v2.0.apk repo/
# 2. 更新元数据文件中的版本信息
nano metadata/com.example.app.yml
# 修改这些字段:
CurrentVersion: '2.0'
CurrentVersionCode: 2
# 3. 添加更新说明(如使用多语言支持)
cat > metadata/com.example.app/en-US/changelogs/2.txt << EOF
Added new puzzle pack
Improved performance
Fixed minor bugs
EOF
# 4. 更新仓库索引
fdroid update
# 5. 发布更新
fdroid deploy

3.5 应用移除#

从仓库中移除应用:

# 1. 删除APK文件
rm repo/com.example.app_*.apk
# 2. 删除元数据文件(可选)
rm metadata/com.example.app.yml
# 3. 更新索引(应用会自动从索引中移除)
fdroid update
# 4. 发布更新
fdroid deploy

仅存档旧版本(保留在archive目录):

# 1. 设置存档策略
# 在config.yml中设置:
archive_older: 3 # 主仓库保留最新3个版本
# 2. 运行更新命令
fdroid update
# 旧版本会自动移动到archive/目录

四、客户端接入#

4.1 仓库URL规范#

标准仓库URL格式:

https://your-domain.com/fdroid/repo/

包含fingerprint的URL(推荐):

https://your-domain.com/fdroid/repo?fingerprint=SHA256_FINGERPRINT_HERE

获取仓库fingerprint:

# 从keystore中提取公钥指纹
keytool -list -v -keystore keystore.p12 | grep SHA256

4.2 手动添加仓库#

在F-Droid客户端中添加:

  1. 打开F-Droid客户端

  2. 点击菜单(三横线图标)

  3. 选择”设置”(Settings)

  4. 选择”仓库”(Repositories)

  5. 点击右上角的”+“按钮

  6. 输入仓库URL: https://your-domain.com/fdroid/repo/

  7. (可选)添加fingerprint用于验证

  8. 点击”启用”(Enable)或”确定”

4.3 通过URL直接添加#

创建自动添加仓库的链接:

https://your-domain.com/fdroid/repo/add

用户点击链接后的流程:

  1. 浏览器检测到F-Droid客户端

  2. 弹出”添加到F-Droid”按钮

  3. 用户点击”我已有F-Droid”

  4. F-Droid客户端自动打开并显示仓库信息

  5. 用户确认添加仓库

4.4 二维码扫描添加#

生成仓库二维码:

# 使用fdroid命令生成二维码
fdroid gpgsign --qrcode
# 二维码会保存为fdroid/qrcode.png

使用方式:

  1. 将qrcode.png图片展示给用户

  2. 用户用F-Droid客户端扫描二维码

  3. 自动添加仓库(包含fingerprint)

4.5 客户端配置选项#

在客户端中可配置的选项:

  • 自动同步频率:设置自动检查更新的间隔

  • 仅WiFi更新:限制在移动数据网络下更新

  • 存档仓库:是否启用存档仓库访问

  • 优先仓库:设置优先使用的仓库顺序

  • 反功能警告:显示包含广告或跟踪功能的应用警告

五、维护与优化#

5.1 日常维护任务#

定期更新索引:

# 设置cronjob自动更新
# 编辑crontab
crontab -e
# 添加以下行(每小时更新一次)
0 * * * * cd /var/www/fdroid && fdroid update && fdroid deploy >> /var/log/fdroid-updates.log 2>&1

监控仓库状态:

# 检查仓库完整性
fdroid checkupdates --all
# 验证签名
fdroid gpgsign --verify
# 检查元数据格式
fdroid lint --all

5.2 备份策略#

关键文件备份清单:

  1. keystore.p12 - 仓库签名密钥(最重要!)

  2. config.yml - 仓库配置文件

  3. metadata/ - 所有应用元数据

  4. 当前APK文件 - 最新版本应用

  5. archive/ - 存档应用(可选)

自动备份脚本:

backup-fdroid.sh
#!/bin/bash
BACKUP_DIR="/backup/fdroid"
DATE=$(date +%Y-%m-%d)
# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE
# 备份关键文件
cp keystore.p12 $BACKUP_DIR/$DATE/
cp config.yml $BACKUP_DIR/$DATE/
cp -r metadata/ $BACKUP_DIR/$DATE/
# 备份当前APK文件
cp repo/*.apk $BACKUP_DIR/$DATE/ 2>/dev/null
# 压缩备份
tar -czf $BACKUP_DIR/fdroid-backup-$DATE.tar.gz -C $BACKUP_DIR $DATE/
# 删除30天前的旧备份
find $BACKUP_DIR -name "fdroid-backup-*.tar.gz" -mtime +30 -delete

设置自动备份:

# 添加到crontab(每天凌晨2点备份)
0 2 * * * /path/to/backup-fdroid.sh

5.3 性能优化#

索引优化:

# 在config.yml中设置
repo_maxage: 7 # 索引最大有效期(天)

使用diff更新:

# 生成增量更新文件
fdroid update --make-diff
# 减少客户端下载流量

图标压缩:

# 自动压缩图标(减少文件大小)
fdroid update --icons-compress

5.4 安全加固#

密钥保护策略:

  1. 物理隔离:将keystore存储在离线设备上

  2. HSM支持:使用硬件安全模块存储密钥

  3. 访问控制:限制密钥文件的访问权限

  4. 定期轮换:考虑定期更新签名密钥(复杂但更安全)

设置文件权限:

# 限制配置文件和密钥的访问权限
chmod 600 keystore.p12
chmod 600 config.yml
chown www-data:www-data /var/www/fdroid/repo

SSL/TLS配置优化:

# 获取Let's Encrypt免费证书
sudo certbot --nginx -d your-domain.com
# 配置自动续期
sudo certbot renew --dry-run

启用HTTP安全头部:

# 在nginx配置中添加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Content-Security-Policy "default-src 'self'" always;

5.5 监控和日志#

设置日志监控:

# 创建日志目录
mkdir -p /var/log/fdroid
# 配置fdroid使用日志
fdroid update >> /var/log/fdroid/update.log 2>&1
fdroid deploy >> /var/log/fdroid/deploy.log 2>&1

设置日志轮转:

# 创建logrotate配置文件
cat > /etc/logrotate.d/fdroid << EOF
/var/log/fdroid/*.log {
daily
rotate 14
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1 || true
endscript
}
EOF

监控脚本示例:

monitor-fdroid.sh
#!/bin/bash
LOG_FILE="/var/log/fdroid/monitor.log"
REPO_URL="https://your-domain.com/fdroid/repo/index-v1.jar"
# 检查仓库可访问性
if ! curl -f -s -o /dev/null "$REPO_URL"; then
echo "$(date): Repository not accessible!" >> $LOG_FILE
# 发送警报邮件
echo "F-Droid repository not accessible!" | mail -s "F-Droid Alert" admin@your-domain.com
fi
# 检查磁盘空间
DISK_USAGE=$(df /var/www/fdroid | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 80 ]; then
echo "$(date): Disk usage at ${DISK_USAGE}%" >> $LOG_FILE
fi

六、常见问题及解决方案#

6.1 签名相关问题#

问题1:初始化时密钥错误

CRITICAL: 'repo_keyalias' not found in config.yml!
CRITICAL: 'keystorepass' not found in config.yml!
CRITICAL: 'keypass' not found in config.yml!

解决方案:

# 重新初始化仓库(会自动生成正确的密钥配置)
rm config.yml keystore.p12
fdroid init
# 或手动配置缺失字段
# 编辑config.yml,添加:
repo_keyalias: "fdroid-repo-key"
keystore: "keystore.p12"
keystorepass: "your_password"
keypass: "your_password"

问题2:密钥丢失无法更新应用

ERROR: Can't sign because the keystore doesn't exist

解决方案:

# 从备份恢复keystore文件
cp /backup/fdroid/keystore.p12 .
# 如果备份丢失,必须重新生成密钥
# 注意:重新生成密钥后,用户需要重新安装应用
keytool -genkey -v \
-keystore keystore.p12 \
-alias new-repo-key \
-keyalg RSA \
-keysize 2048 \
-validity 10000
# 更新config.yml中的密钥信息
# 然后重新发布整个仓库
fdroid update --force-create-metadata

6.2 APK解析问题#

问题1:APK包含非自由组件

WARNING: Non-free library detected: com.google.android.gms

解决方案:

# 在元数据文件中标记AntiFeatures
AntiFeatures:
- NonFreeNet
- Tracking
# 添加到描述中说明
Description: |-
This app uses Google Play Services.
It requires microG for full functionality.

问题2:APK签名验证失败

ERROR: Signature verification failed for com.example.app

解决方案:

# 验证APK签名
jarsigner -verify -verbose -certs myapp.apk
# 重新签名APK(如有原始密钥)
jarsigner -keystore your-keystore.jks \
-signedjar signed-app.apk \
myapp.apk your-alias
# 使用密钥库中的密钥
jarsigner -keystore keystore.p12 \
-storepass $FDROID_KEYSTORE_PASS \
-keypass $FDROID_KEY_PASS \
-signedjar signed-app.apk \
myapp.apk repo_keyalias

问题3:Android API版本不兼容

WARNING: Requested API level 35 is larger than maximum we have

解决方案:

# 更新androguard到最新版本
pip install --upgrade androguard
# 或从backports安装
apt-get install -t bookworm-backports androguard

6.3 网络连接问题#

问题1:客户端无法连接仓库

Failed to fetch repo metadata
java.net.UnknownHostException: your-domain.com

解决方案:

# 检查DNS解析
nslookup your-domain.com
# 检查防火墙规则
sudo ufw status
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 检查nginx配置
sudo nginx -t
sudo systemctl restart nginx
# 检查SSL证书
openssl s_client -connect your-domain.com:443 -servername your-domain.com

问题2:仓库索引下载缓慢

Downloading index... (very slow)

解决方案:

# 启用gzip压缩(nginx默认启用)
gzip on;
gzip_types text/plain application/json application/xml;
# 设置正确的缓存头
location /fdroid/repo/ {
expires 1h;
add_header Cache-Control "public, immutable";
}
# 使用CDN加速(可选)
# 将仓库文件上传到CDN服务

6.4 版本冲突问题#

问题1:多个仓库中同一应用不同版本

Multiple versions of com.example.app available

解决方案:

com.example.app
# 使用不同的应用ID
# 自定义:com.example.app.custom
# 修改AndroidManifest.xml
<manifest
package="com.example.app.custom"
...>
# 重新构建应用并发布

问题2:客户端无法检测到更新

App not showing as update available

解决方案:

# 检查versionCode是否正确递增
# 确保新版本的versionCode大于已安装版本
# 更新元数据文件中的版本信息
CurrentVersion: '2.1'
CurrentVersionCode: 21
# 重新生成索引
fdroid update
# 在客户端中强制刷新仓库
# 下拉刷新界面

6.5 存储空间问题#

问题1:仓库占用磁盘空间过大

/var/www/fdroid: No space left on device

解决方案:

# 清理旧版本APK文件
fdroid update --archive
# 手动清理
find repo/ -name "*.apk" -mtime +180 -delete
# 压缩旧版本
cd archive/
gzip *.apk
# 设置存档策略
archive_older: 1 # 只保留最新版本

问题2:APK文件过大

APK file size: 50MB (too large)

解决方案:

# 使用ProGuard或R8混淆和优化
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
}
}
}
# 分离多架构APK
android {
splits {
abi {
enable true
reset()
include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk false
}
}
}
# 仅上传必要的架构
# 将不同架构的APK分别上传到仓库

6.6 客户端显示问题#

问题1:应用图标不显示

App icon not showing in client

解决方案:

# 确保图标文件存在
ls repo/icons/
# 手动添加图标
cp /path/to/icon-64x64.png repo/icons/com.example.app_64x64.png
cp /path/to/icon-192x192.png repo/icons/com.example.app_192x192.png
# 更新索引
fdroid update

问题2:描述和截图不显示

App description not showing
Screenshots missing

解决方案:

# 检查元数据文件中的描述字段
Description: |-
Your app description here...
# 添加截图
mkdir -p repo/icons/com.example.app/en-US/phoneScreenshots/
cp /path/to/screenshot1.png repo/icons/com.example.app/en-US/phoneScreenshots/1.png
cp /path/to/screenshot2.png repo/icons/com.example.app/en-US/phoneScreenshots/2.png
# 更新索引
fdroid update

七、高级配置和最佳实践#

7.1 多仓库配置#

配置多个签名密钥:

config.yml
repo_keyalias: main-key
# 为特定应用使用不同密钥
keyaliases:
com.example.app: app-specific-key
com.another.app: another-key

创建子仓库:

# 为特定应用创建单独仓库
mkdir -p subrepos/enterprise-app
cd subrepos/enterprise-app
fdroid init
# 配置独立的密钥和URL

7.2 CI/CD集成#

GitHub Actions示例:

.github/workflows/fdroid-publish.yml
name: Publish to F-Droid Repository
on:
push:
tags:
- 'v*'
jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Build APK
run: |
./gradlew assembleRelease
- name: Install fdroidserver
run: |
pip install fdroidserver
- name: Setup F-Droid credentials
env:
FDROID_KEYSTORE_PASS: ${{ secrets.KEYSTORE_PASS }}
FDROID_KEY_PASS: ${{ secrets.KEY_PASS }}
run: |
echo "$FDROID_KEYSTORE_PASS" > keystorepass
echo "$FDROID_KEY_PASS" > keypass
- name: Copy APK and update repo
run: |
cp app/build/outputs/apk/release/*.apk repo/
fdroid update
fdroid deploy

7.3 监控和告警#

设置Prometheus监控:

# 安装node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz
./node_exporter &

配置Grafana仪表板:

{
"dashboard": {
"title": "F-Droid Repository Monitor",
"panels": [
{
"title": "Repository Size",
"targets": [
{
"expr": "node_filesystem_size_bytes{mountpoint=\"/var/www/fdroid\"}"
}
]
},
{
"title": "HTTP Requests",
"targets": [
{
"expr": "rate(http_requests_total[5m])"
}
]
}
]
}
}

7.4 性能基准测试#

仓库响应时间测试:

benchmark-repo.sh
#!/bin/bash
REPO_URL="https://your-domain.com/fdroid/repo/index-v1.jar"
# 测试索引下载时间
echo "Testing index download time..."
time curl -o /dev/null "$REPO_URL"
# 测试APK下载速度
for apk in repo/*.apk; do
if [ -f "$apk" ]; then
echo "Testing $(basename $apk)..."
time curl -o /dev/null "https://your-domain.com/fdroid/repo/$(basename $apk)"
fi
done

7.5 安全审计#

定期安全检查:

security-audit.sh
#!/bin/bash
echo "Running security audit..."
# 检查文件权限
echo "Checking file permissions..."
find /var/www/fdroid -type f -perm -o+rwx | head -10
# 检查SSL证书有效期
echo "Checking SSL certificate..."
openssl x509 -enddate -noout -in /etc/letsencrypt/live/your-domain.com/fullchain.pem
# 检查密钥文件完整性
echo "Checking keystore integrity..."
keytool -list -v -keystore keystore.p12 | grep SHA256
# 检查nginx配置安全
echo "Checking nginx security..."
nginx -t 2>&1 | grep -i "warn\|error"

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

如何用fdroidserver一键搭建专属F-Droid仓库?避开95%新手坑
https://www.kshare.top/posts/如何用fdroidserver一键搭建专属f-droid仓库避开95新手坑/
作者
Kshare
发布于
2026-03-05
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Kshare
Hello, I'm Kshare.
公告
欢迎来到Kshare站点!近期站点进行升级,欢迎访问和收藏站点!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
137
分类
12
标签
59
总字数
333,011
运行时长
0
最后活动
0 天前

文章目录