Mac 사용자의 경우 homebrew를 활용하여 종속성 없이 설치가 가능하다.
$ brew install rethinkdb graphicsmagick zeromq protobuf yasm pkg-config
STF의 공식 문서에 첨부되어 있는 아키텍처를 가져와보았다. STF는 첨부한 이미지와 같이 마이크로 서비스 아키텍처로 구성되어 있다. 각 서비스는 ZeroMQ와 Protocol Buffers로 통신하며 총 19개의 마이크로 서비스가 Docker 이미지로 제공된다. 구축하려는 목적과 사양에 맞게 적절하게 서비스를 실행하면 될 듯하다.
docker-compose.yml 파일은 yaml으로 Docker 컨테이너에 관한 실행 옵션(build 옵션도 포함되어 있는 경우도 있다)을 기재한 파일이다. STF 실행을 위한 docker-compose.yml 파일을 작성해보자.
PUBLIC_IP={SERVER_IP}
SECRET={SESSION_SECRET_HERE}
RETHINKDB_PORT_28015_TCP=tcp://rethinkdb:28015
STATION_NAME={DEVICEFARM_NAME}
version: '3'
volumes:
rethinkdb:
storage-temp:
services:
nginx:
build: nginx/
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
restart: unless-stopped
ports:
- 80:80
depends_on:
- app
- auth
- storage-plugin-apk
- storage-plugin-image
- storage-temp
- websocket
- api
adb:
image: sorccu/adb:latest
restart: unless-stopped
rethinkdb:
image: rethinkdb:2.3
restart: unless-stopped
volumes:
- rethinkdb:/data
app:
image: openstf/stf:latest
restart: unless-stopped
environment:
- RETHINKDB_PORT_28015_TCP
- SECRET
command: stf app --auth-url http://${PUBLIC_IP}/auth/mock/ --websocket-url ws://${PUBLIC_IP}/ --port 3000
depends_on:
- rethinkdb
- auth
- websocket
auth:
image: openstf/stf:latest
restart: unless-stopped
environment:
- RETHINKDB_PORT_28015_TCP
- SECRET
command: stf auth-mock --app-url http://${PUBLIC_IP}/ --port 3000
depends_on:
- rethinkdb
processor:
image: openstf/stf:latest
restart: unless-stopped
environment:
- RETHINKDB_PORT_28015_TCP
command: stf processor --connect-app-dealer tcp://triproxy:7160 --connect-dev-dealer tcp://dev-triproxy:7260
depends_on:
- rethinkdb
- triproxy
- dev-triproxy
triproxy:
image: openstf/stf:latest
restart: unless-stopped
command: stf triproxy app --bind-pub "tcp://*:7150" --bind-dealer "tcp://*:7160" --bind-pull "tcp://*:7170"
dev-triproxy:
image: openstf/stf:latest
restart: unless-stopped
command: stf triproxy dev --bind-pub "tcp://*:7250" --bind-dealer "tcp://*:7260" --bind-pull "tcp://*:7270"
migrate:
image: openstf/stf:latest
environment:
- RETHINKDB_PORT_28015_TCP
command: stf migrate
depends_on:
- rethinkdb
provider:
image: openstf/stf:latest
restart: unless-stopped
command: stf provider --name ${STATION_NAME} --connect-sub tcp://dev-triproxy:7250 --connect-push tcp://dev-triproxy:7270 --storage-url http://${PUBLIC_IP}/ --public-ip ${PUBLIC_IP} --heartbeat-interval 10000 --screen-ws-url-pattern "ws://${PUBLIC_IP}/d/nuc/<%= serial %>/<%= publicPort %>/" --adb-host adb --min-port 7400 --max-port 7700 --allow-remote
ports:
- 7400-7700:7400-7700
depends_on:
- adb
- dev-triproxy
- triproxy
- storage-temp
reaper:
image: openstf/stf:latest
restart: unless-stopped
environment:
- RETHINKDB_PORT_28015_TCP
depends_on:
- migrate
- rethinkdb
- dev-triproxy
- triproxy
command: stf reaper dev --connect-push tcp://dev-triproxy:7270 --connect-sub tcp://triproxy:7150 --heartbeat-timeout 30000
storage-plugin-apk:
image: openstf/stf:latest
restart: unless-stopped
command: stf storage-plugin-apk --port 3000 --storage-url http://${PUBLIC_IP}/
depends_on:
- storage-temp
storage-plugin-image:
image: openstf/stf:latest
restart: unless-stopped
command: stf storage-plugin-image --port 3000 --storage-url http://${PUBLIC_IP}/
depends_on:
- storage-temp
storage-temp:
build: storage-temp/
restart: unless-stopped
volumes:
- storage-temp:/app/data
command: stf storage-temp --port 3000 --save-dir /app/data
websocket:
image: openstf/stf:latest
restart: unless-stopped
environment:
- SECRET
- RETHINKDB_PORT_28015_TCP
command: stf websocket --port 3000 --storage-url http://${PUBLIC_IP}/ --connect-sub tcp://triproxy:7150 --connect-push tcp://triproxy:7170
depends_on:
- migrate
- rethinkdb
- storage-temp
- triproxy
- dev-triproxy
api:
image: openstf/stf:latest
restart: unless-stopped
environment:
- SECRET
- RETHINKDB_PORT_28015_TCP
command: stf api --port 3000 --connect-sub tcp://triproxy:7150 --connect-push tcp://triproxy:7170 --connect-sub-dev tcp://dev-triproxy:7250 --connect-push-dev tcp://dev-triproxy:7270
depends_on:
- migrate
- rethinkdb
- triproxy
docker-compose로 빌드하여 STF가 실행되는지 확인해보자.
$ docker-compose up -d --build
https://github.com/openstf/stf/blob/master/doc/DEPLOYMENT.md