OpenSTF/STF 项目部署指南:基于 systemd 和 Docker 的生产环境配置

OpenSTF/STF 项目部署指南:基于 systemd 和 Docker 的生产环境配置

前言

OpenSTF(Smartphone Test Farm)是一个强大的移动设备管理平台,能够远程管理和测试大量Android设备。本文将从技术架构角度,详细介绍如何将STF从本地开发环境部署到生产服务器集群。

系统架构概述

STF采用微服务架构设计,由多个独立进程组成,这些进程通过ZeroMQ和Protocol Buffers进行通信。核心拓扑结构如下图所示:

STF核心拓扑结构

整个系统可分为四个主要角色:

  1. Provider角色:负责直接管理物理设备
  2. App角色:包含大部分业务逻辑组件
  3. Database角色:数据存储服务
  4. Proxy角色:HTTP反向代理

部署前提条件

在开始部署前,请确保满足以下条件:

  1. 所有主机已安装并运行systemd
  2. 所有主机已安装Docker引擎
  3. 每台主机配置了/etc/environment文件,包含COREOS_PRIVATE_IPV4=MACHINE_IP_HERE环境变量
  4. 准备访问域名(如https://stf.example.org/)
  5. RethinkDB服务已部署(或计划部署)
  6. 为通信桥接准备两个静态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

执行说明:此服务只需运行一次,用于初始化数据库结构。

部署建议

  1. 性能调优

    • 根据设备数量调整stf-processor实例数
    • 为RethinkDB配置足够内存(通过--cache-size参数)
    • 考虑使用SSD存储数据库文件
  2. 安全建议

    • 替换默认ADB密钥
    • 为RethinkDB设置强密码
    • 生产环境避免使用Mock认证
    • 启用HTTPS加密通信
  3. 高可用方案

    • 数据库集群部署
    • 多节点负载均衡
    • 定期备份关键数据

结语

本文详细介绍了OpenSTF生产环境部署的核心配置。实际部署时,需根据具体硬件环境和业务需求调整参数。建议先在测试环境验证配置,再逐步迁移到生产环境。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值