运行镜像
F-Droid 的应用和文件集合在由 F-Droid 核心贡献者运行的服务器上运行。最初,这个主要的资源库只托管在 f-droid.org 上,但是随着 F-Droid 的发展,f-droid.org 本身已经无法单独处理整个负载了。F-Droid 现在支持”镜像”服务器,它复制了存储库的完整副本。托管一个镜像需要运行一个 HTTPS webserver,它有一个使用 rsync
同步的版本库的完整副本。
要求
有两个官方的 F-Droid 存储库部分,”存储库” 和 “存档”。镜像 “存储库” 是最重要的,因为它的使用次数远远超过 “存档”。
镜像所需的主要资源是磁盘空间和上传带宽。每个新镜像都会减少带宽需求,但磁盘需求以 合理的速度 增长。在撰写本文时(2019 年 3 月),主存储库在 24K 文件中需要超过 60GB 的磁盘空间,而存档在 52K 文件中需要 300GB 磁盘空间。所需的磁盘空间量随着每个用应用的发布而增加。
有许多镜像服务器提供 rsync 连接,请确保选择最接近镜像服务器的镜像:
中国大陆 | rsync -axv mirrors.tuna.tsinghua.edu.cn::fdroid |
德国 | rsync -axv ftp.agdsn.de::fdroid |
德国 | rsync -axv ftp.fau.de::fdroid |
美国印第安纳州 | rsync -axv plug-mirror.rcac.purdue.edu::fdroid |
瑞典 | rsync -axv ftp.lysator.liu.se::fdroid |
台湾 | rsync -axv mirror.ossplanet.net::fdroid |
乌克兰 | rsync -axv fdroid.astra.in.ua::fdroid |
你可以通过在终端中运行以下命令来查找有关磁盘空间要求的当前信息:
$ rsync --dry-run --recursive --stats --human-readable ftp.fau.de::fdroid .
设置
本指南假设使用 Nginx 和基于 deb 的发行版,并镜像主存储库和存档。如果你使用的是替代品,或者不打算镜像存档,请做相应调整。也可以用你自己的路径和域来代替例子。
如需有关该过程的协助,请随时与我们联络.
- 创建合适的目录
$ sudo mkdir -p /var/www/fdroid/fdroid/repo
$ sudo mkdir -p /var/www/fdroid/fdroid/archive
$ sudo chown -R www-data.www-data /var/www/fdroid
- 同步存储库。这些命令最好在终端多路复用器(
screen
、tmux
等)中运行,因为它们需要一些时间才能完成。使用--info=progress2
可以看到进度。
$ sudo -u www-data -E /usr/bin/rsync -aHS --delete --delete-delay --info=progress2 ftp.fau.de::fdroid/repo/ /var/www/fdroid/fdroid/repo/
$ sudo -u www-data -E /usr/bin/rsync -aHS --delete --delete-delay --info=progress2 ftp.fau.de::fdroid/archive/ /var/www/fdroid/fdroid/archive/
- 建立一个 cronjob 以使存储库保持最新
在 /etc/cron.d
中创建一个 cronjob 文件
$ vi /etc/cron.d/fdroid
在文件中填入条目以更新存储库。这些命令将在每隔6小时的第35分钟运行,你可以根据你的需要改变它。
35 */6 * * * www-data /usr/bin/rsync -aHS --delete --delete-delay ftp.fau.de::fdroid/repo/ /var/www/fdroid/fdroid/repo/
35 */6 * * * www-data /usr/bin/rsync -aHS --delete --delete-delay ftp.fau.de::fdroid/archive/ /var/www/fdroid/fdroid/archive/
- 配置你的网络服务器
这是一个 nginx 服务器块的例子。如果使用,应该复制到 /etc/nginx/sites-available/,并将其符号链接到 /etc/nginx/sites-enabled。注意,你的 URI 必须是 /fdroid/repo
,以便应用可以自动添加你的镜像。
server {
listen [::]:80 ipv6only=off;
server_name fdroidmirror.example;
rewrite ^ https://fdroidmirror.example$request_uri permanent;
}
server {
listen [::]:443 ssl http2 ipv6only=off;
server_name fdroidmirror.example;
root /var/www/fdroid/;
# TODO: https://gitlab.com/snippets/1834032
location /health {
proxy_pass http://127.0.0.1:8000/;
}
ssl_certificate /etc/letsencrypt/live/fdroidmirror.example/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/fdroidmirror.example/privkey.pem;
# Insert here a TLS config from Mozilla SSL config generator https://mozilla.github.io/server-side-tls/ssl-config-generator/
}
- 提交镜像以进行收录
- 复刻 mirror monitor repo,将你的镜像添加到 README 中的列表中,并打开一个合并请求。
- 在 admin repo 上打开一个问题,包括任何相关信息,请求包含你的镜像。
- 一旦核心贡献者团队认为你的镜像值得信赖和可靠,它将被接受到官方列表中。
此外,最好包含隐私政策,以便用户可以了解在使用镜像时他们的元数据会发生什么。 Purdue PLUG https://plug-mirror.rcac.purdue.edu/info.html 和 FAU https://ftp.fau.de/datenschutz 就是两个例子。
其他考虑
- 设置描述元数据发生情况的隐私政策(例如 FAU、PLUG、Lysator)。
- 转发来自 cronjob 失败的电子邮件,以便你知道同步是否失败
- 在你的镜像上设置监控,以便你知道它是否出现故障(最好是 /srv/mymirror.org/htdocs/fdroid/repo/index-v1.jar 上的关键字)
- 强化你的 SSH 服务器配置(禁用密码验证,安装 fail2ban)
- 启用无人值守安全升级(在 Debian 中,只需
apt-get install unattended-upgrades
)
运行主镜像(通过推送接收同步)
首选设置是将 F-Droid 更新通过 rsync 通过 ssh 和 SSH 密钥身份验证推送到主镜像。这与 Debian 相同,主要区别在于目前没有用于 command=""
的脚本,但是,有一个硬编码的 rsync 命令。这真的很好地将安全交互限制为只需要发生(最低权限!)。
command="rsync --server -logDtpre.iLsfx --log-format=X --delete --delay-updates . /srv/fdroid-mirror.at.or.at/htdocs/fdroid/"
该命令中唯一可定制的部分是最后的路径。 它可以是任何路径,但必须指向 /fdroid/
目录,并且必须有尾部斜线。 如果任何一个 rsync 选项被改变,它将破坏同步设置。
作为额外的预防措施,应该有一个用户账户(例如 fdroid
)专门用来接收 rsync/ssh 连接。 它应该有尽可能少的访问权限。 它绝对不应该有对 authorized_keys 文件的写入权限,因为这将允许获得写入权限的攻击者添加一个单独的密钥配置行,从而规避那里列出的所有限制。 这可以简单地通过执行以下操作实现:
$ sudo chown root.root /home/fdroid/.ssh /home/fdroid/.ssh/authorized_keys
$ sudo chmod 0755 /home/fdroid/.ssh
$ sudo chmod 0644 /home/fdroid/.ssh/authorized_keys
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论