OpenSTF/STF 项目部署指南:基于 systemd 和 Docker 的生产环境配置
前言
OpenSTF(Smartphone Test Farm)是一个强大的移动设备管理平台,能够远程管理和测试大量Android设备。本文将从技术架构角度,详细介绍如何将STF从本地开发环境部署到生产服务器集群。
系统架构概述
STF采用微服务架构设计,由多个独立进程组成,这些进程通过ZeroMQ和Protocol Buffers进行通信。核心拓扑结构如下图所示:
整个系统可分为四个主要角色:
- Provider角色:负责直接管理物理设备
- App角色:包含大部分业务逻辑组件
- Database角色:数据存储服务
- Proxy角色:HTTP反向代理
部署前提条件
在开始部署前,请确保满足以下条件:
- 所有主机已安装并运行systemd
- 所有主机已安装Docker引擎
- 每台主机配置了
/etc/environment
文件,包含COREOS_PRIVATE_IPV4=MACHINE_IP_HERE
环境变量 - 准备访问域名(如https://stf.example.org/)
- RethinkDB服务已部署(或计划部署)
- 为通信桥接准备两个静态IP(或使用SRV记录)
核心组件部署详解
1. 基础服务组件
1.1 ADB守护进程(adbd.service)
每个连接设备的主机都需要运行此服务:
[Unit]
Description=ADB daemon
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
Restart=always
ExecStartPre=/usr/bin/docker pull sorccu/adb:latest
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm %p
ExecStart=/usr/bin/docker run --rm \
--name %p \
--privileged \
-v /dev/bus/usb:/dev/bus/usb \
--net host \
sorccu/adb:latest
ExecStop=/usr/bin/docker exec %p adb kill-server
安全提示:默认配置使用不安全的ADB密钥,生产环境应考虑替换为自定义密钥。
1.2 数据库服务(rethinkdb.service)
[Unit]
Description=RethinkDB
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=/etc/environment
TimeoutStartSec=0
Restart=always
ExecStartPre=/usr/bin/docker pull rethinkdb:2.3
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm %p
ExecStartPre=/bin/mkdir -p /srv/rethinkdb
ExecStartPre=/usr/bin/chattr -R +C /srv/rethinkdb
ExecStart=/usr/bin/docker run --rm \
--name %p \
-v /srv/rethinkdb:/data \
-e "AUTHKEY=YOUR_RETHINKDB_AUTH_KEY" \
--net host \
rethinkdb:2.3 \
rethinkdb --bind all \
--cache-size 8192 \
--no-update-check
关键配置项:
--cache-size
:根据服务器内存调整(单位MB)- 首次启动后需通过Web界面(8080端口)设置管理员密码
1.3 数据库代理(rethinkdb-proxy-28015.service)
[Unit]
Description=RethinkDB proxy/28015
After=docker.service rethinkdb.service
Requires=docker.service
[Service]
EnvironmentFile=/etc/environment
TimeoutStartSec=0
Restart=always
ExecStartPre=/usr/bin/docker pull openstf/ambassador:latest
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm %p
ExecStart=/usr/bin/docker run --rm \
--name %p \
-e "AUTHKEY=YOUR_RETHINKDB_AUTH_KEY" \
-p 28015 \
-e RETHINKDB_PORT_28015_TCP=tcp://rethinkdb.stf.example.org:28015 \
openstf/ambassador:latest
2. 核心业务组件
2.1 主应用服务(stf-app@.service)
[Unit]
Description=STF app
After=rethinkdb-proxy-28015.service
BindsTo=rethinkdb-proxy-28015.service
[Service]
EnvironmentFile=/etc/environment
TimeoutStartSec=0
Restart=always
ExecStartPre=/usr/bin/docker pull openstf/stf:latest
ExecStartPre=-/usr/bin/docker kill %p-%i
ExecStartPre=-/usr/bin/docker rm %p-%i
ExecStart=/usr/bin/docker run --rm \
--name %p-%i \
--link rethinkdb-proxy-28015:rethinkdb \
-e "SECRET=YOUR_SESSION_SECRET" \
-p %i:3000 \
openstf/stf:latest \
stf app --port 3000 \
--auth-url https://stf.example.org/auth/mock/ \
--websocket-url wss://stf.example.org/
关键参数说明:
%i
:实例标识符,用于指定端口号--auth-url
:需与认证服务配置一致
2.2 认证服务(stf-auth@.service)
STF支持多种认证方式,以下是三种常见配置:
A. Mock认证(开发用)
ExecStart=/usr/bin/docker run --rm \
--name %p-%i \
-e "SECRET=YOUR_SESSION_SECRET" \
-p %i:3000 \
openstf/stf:latest \
stf auth-mock --port 3000 \
--app-url https://stf.example.org/
B. OAuth 2.0认证(生产推荐)
ExecStart=/usr/bin/docker run --rm \
--name %p-%i \
-e "SECRET=YOUR_SESSION_SECRET" \
-e "OAUTH_AUTHORIZATION_URL=https://accounts.google.com/o/oauth2/v2/auth" \
-e "OAUTH_TOKEN_URL=https://www.googleapis.com/oauth2/v4/token" \
-e "OAUTH_USERINFO_URL=https://www.googleapis.com/oauth2/v3/userinfo" \
-e "OAUTH_CLIENT_ID=YOUR_CLIENT_ID" \
-e "OAUTH_CLIENT_SECRET=YOUR_CLIENT_SECRET" \
-e "OAUTH_CALLBACK_URL=https://stf.example.org/auth/oauth/callback" \
-p %i:3000 \
openstf/stf:latest \
stf auth-oauth2 --port 3000 \
--app-url https://stf.example.org/
C. LDAP认证(企业内网)
ExecStart=/usr/bin/docker run --rm \
--name %p-%i \
-e "SECRET=YOUR_SESSION_SECRET" \
-p %i:3000 \
openstf/stf:latest \
stf auth-ldap --port 3000 \
--app-url https://stf.example.org/ \
--ldap-url ldap://ldap.example.org \
--ldap-bind-dn "cn=admin,dc=example,dc=org" \
--ldap-bind-credentials "password" \
--ldap-search-base "ou=people,dc=example,dc=org" \
--ldap-search-filter "(uid=%s)" \
--ldap-username-field "uid"
2.3 数据迁移服务(stf-migrate.service)
[Unit]
Description=STF migrate
After=rethinkdb-proxy-28015.service
BindsTo=rethinkdb-proxy-28015.service
[Service]
EnvironmentFile=/etc/environment
Type=oneshot
ExecStart=/usr/bin/docker run --rm \
--name %p \
--link rethinkdb-proxy-28015:rethinkdb \
-e "STF_ROOT_GROUP_NAME=YOUR_ROOT_GROUP" \
-e "STF_ADMIN_NAME=ADMIN_NAME" \
-e "STF_ADMIN_EMAIL=admin@example.org" \
openstf/stf:latest \
stf migrate
执行说明:此服务只需运行一次,用于初始化数据库结构。
部署建议
-
性能调优:
- 根据设备数量调整
stf-processor
实例数 - 为RethinkDB配置足够内存(通过
--cache-size
参数) - 考虑使用SSD存储数据库文件
- 根据设备数量调整
-
安全建议:
- 替换默认ADB密钥
- 为RethinkDB设置强密码
- 生产环境避免使用Mock认证
- 启用HTTPS加密通信
-
高可用方案:
- 数据库集群部署
- 多节点负载均衡
- 定期备份关键数据
结语
本文详细介绍了OpenSTF生产环境部署的核心配置。实际部署时,需根据具体硬件环境和业务需求调整参数。建议先在测试环境验证配置,再逐步迁移到生产环境。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考