452 lines
12 KiB
YAML
452 lines
12 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
cvat_db:
|
|
image: postgres:15-alpine
|
|
environment:
|
|
POSTGRES_USER: root
|
|
POSTGRES_DB: cvat
|
|
POSTGRES_HOST_AUTH_METHOD: trust
|
|
volumes:
|
|
#- /mnt/data/cvat/db:/var/lib/postgresql/data
|
|
- /mnt/seaweedfs/cvat/db:/var/lib/postgresql/data
|
|
networks:
|
|
- cvat
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == manager
|
|
|
|
cvat_redis:
|
|
image: redis:7.0-alpine
|
|
networks:
|
|
- cvat
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
cvat_server:
|
|
image: registry.smsoft.kro.kr/cvat:v2.5.0
|
|
depends_on:
|
|
- cvat_redis
|
|
- cvat_db
|
|
- cvat_opa
|
|
environment:
|
|
DJANGO_MODWSGI_EXTRA_ARGS: ''
|
|
ALLOWED_HOSTS: '*'
|
|
CVAT_REDIS_HOST: 'cvat_redis'
|
|
CVAT_POSTGRES_HOST: 'cvat_db'
|
|
ADAPTIVE_AUTO_ANNOTATION: 'false'
|
|
IAM_OPA_BUNDLE: '1'
|
|
no_proxy: clickhouse,grafana,vector,nuclio,opa
|
|
NUMPROCS: 1
|
|
DJANGO_LOG_SERVER_HOST: vector
|
|
DJANGO_LOG_SERVER_PORT: 80
|
|
CLICKHOUSE_HOST: clickhouse
|
|
CVAT_ANALYTICS: 1
|
|
CVAT_BASE_URL: cvat.smsoft.kro.kr
|
|
entrypoint: /home/django/backend_entrypoint.sh
|
|
volumes:
|
|
- /mnt/seaweedfs/cvat/data:/home/django/data
|
|
- cvat-cache:/home/django/data/cache
|
|
- /mnt/seaweedfs/cvat/keys:/home/django/keys
|
|
- /mnt/seaweedfs/cvat/logs:/home/django/logs
|
|
networks:
|
|
cvat:
|
|
aliases:
|
|
- cvat-server
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
labels:
|
|
- traefik.enable=true
|
|
- traefik.docker.network=cvat
|
|
- traefik.http.services.cvat.loadbalancer.server.port=8080
|
|
- traefik.http.routers.cvat.rule=Host(`cvat.smsoft.kro.kr`) &&
|
|
PathPrefix(`/api/`, `/git/`, `/opencv/`, `/static/`, `/admin`, `/documentation/`, `/django-rq`)
|
|
- traefik.http.routers.cvat.entrypoints=web
|
|
|
|
cvat_utils:
|
|
image: registry.smsoft.kro.kr/cvat:v2.5.0
|
|
depends_on:
|
|
- cvat_redis
|
|
- cvat_db
|
|
- cvat_opa
|
|
environment:
|
|
CVAT_REDIS_HOST: 'cvat_redis'
|
|
CVAT_REDIS_PASSWORD: ''
|
|
CVAT_POSTGRES_HOST: 'cvat_db'
|
|
CLICKHOUSE_HOST: clickhouse
|
|
DJANGO_LOG_SERVER_HOST: vector
|
|
DJANGO_LOG_SERVER_PORT: 80
|
|
no_proxy: clickhouse,grafana,vector,nuclio,opa
|
|
NUMPROCS: 1
|
|
command: -c supervisord/utils.conf
|
|
volumes:
|
|
- /mnt/seaweedfs/cvat/data:/home/django/data
|
|
- /mnt/seaweedfs/cvat/keys:/home/django/keys
|
|
- /mnt/seaweedfs/cvat/logs:/home/django/logs
|
|
networks:
|
|
- cvat
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
cvat_worker_import:
|
|
image: registry.smsoft.kro.kr/cvat:v2.5.0
|
|
depends_on:
|
|
- cvat_redis
|
|
- cvat_db
|
|
environment:
|
|
CVAT_REDIS_HOST: 'cvat_redis'
|
|
CVAT_POSTGRES_HOST: 'cvat_db'
|
|
DJANGO_LOG_SERVER_HOST: vector
|
|
DJANGO_LOG_SERVER_PORT: 80
|
|
no_proxy: clickhouse,grafana,vector,nuclio,opa
|
|
NUMPROCS: 1
|
|
command: -c supervisord/worker.import.conf
|
|
volumes:
|
|
- /mnt/seaweedfs/cvat/data:/home/django/data
|
|
- /mnt/seaweedfs/cvat/keys:/home/django/keys
|
|
- /mnt/seaweedfs/cvat/logs:/home/django/logs
|
|
networks:
|
|
- cvat
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
cvat_worker_export:
|
|
image: registry.smsoft.kro.kr/cvat:v2.5.0
|
|
depends_on:
|
|
- cvat_redis
|
|
- cvat_db
|
|
environment:
|
|
CVAT_REDIS_HOST: 'cvat_redis'
|
|
CVAT_POSTGRES_HOST: 'cvat_db'
|
|
CLICKHOUSE_HOST: clickhouse
|
|
DJANGO_LOG_SERVER_HOST: vector
|
|
DJANGO_LOG_SERVER_PORT: 80
|
|
no_proxy: clickhouse,grafana,vector,nuclio,opa
|
|
NUMPROCS: 1
|
|
command: -c supervisord/worker.export.conf
|
|
volumes:
|
|
- /mnt/seaweedfs/cvat/data:/home/django/data
|
|
- /mnt/seaweedfs/cvat/keys:/home/django/keys
|
|
- /mnt/seaweedfs/cvat/logs:/home/django/logs
|
|
networks:
|
|
- cvat
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
cvat_worker_annotation:
|
|
image: registry.smsoft.kro.kr/cvat:v2.5.0
|
|
depends_on:
|
|
- cvat_redis
|
|
- cvat_db
|
|
- cvat_opa
|
|
environment:
|
|
CVAT_REDIS_HOST: 'cvat_redis'
|
|
CVAT_POSTGRES_HOST: 'cvat_db'
|
|
DJANGO_LOG_SERVER_HOST: vector
|
|
DJANGO_LOG_SERVER_PORT: 80
|
|
no_proxy: clickhouse,grafana,vector,nuclio,opa
|
|
NUMPROCS: 1
|
|
command: -c supervisord/worker.annotation.conf
|
|
volumes:
|
|
- /mnt/seaweedfs/cvat/data:/home/django/data
|
|
- /mnt/seaweedfs/cvat/keys:/home/django/keys
|
|
- /mnt/seaweedfs/cvat/logs:/home/django/logs
|
|
networks:
|
|
- cvat
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
cvat_worker_webhooks:
|
|
image: registry.smsoft.kro.kr/cvat:v2.5.0
|
|
depends_on:
|
|
- cvat_redis
|
|
- cvat_db
|
|
- cvat_opa
|
|
environment:
|
|
CVAT_REDIS_HOST: 'cvat_redis'
|
|
CVAT_POSTGRES_HOST: 'cvat_db'
|
|
DJANGO_LOG_SERVER_HOST: vector
|
|
DJANGO_LOG_SERVER_PORT: 80
|
|
no_proxy: clickhouse,grafana,vector,nuclio,opa
|
|
NUMPROCS: 1
|
|
command: -c supervisord/worker.webhooks.conf
|
|
volumes:
|
|
- /mnt/seaweedfs/cvat/data:/home/django/data
|
|
- /mnt/seaweedfs/cvat/keys:/home/django/keys
|
|
- /mnt/seaweedfs/cvat/logs:/home/django/logs
|
|
networks:
|
|
- cvat
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
cvat_worker_quality_reports:
|
|
image: registry.smsoft.kro.kr/cvat:v2.5.0
|
|
depends_on:
|
|
- cvat_redis
|
|
- cvat_db
|
|
environment:
|
|
CVAT_REDIS_HOST: 'cvat_redis'
|
|
CVAT_POSTGRES_HOST: 'cvat_db'
|
|
DJANGO_LOG_SERVER_HOST: vector
|
|
DJANGO_LOG_SERVER_PORT: 80
|
|
no_proxy: clickhouse,grafana,vector,nuclio,opa
|
|
NUMPROCS: 1
|
|
command: -c supervisord/worker.quality_reports.conf
|
|
volumes:
|
|
- /mnt/seaweedfs/cvat/data:/home/django/data
|
|
- /mnt/seaweedfs/cvat/keys:/home/django/keys
|
|
- /mnt/seaweedfs/cvat/logs:/home/django/logs
|
|
networks:
|
|
- cvat
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
cvat_ui:
|
|
image: registry.smsoft.kro.kr/cvat-ui:v2.5.0
|
|
depends_on:
|
|
- cvat_server
|
|
networks:
|
|
- cvat
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
labels:
|
|
- traefik.enable=true
|
|
- traefik.docker.network=cvat
|
|
- traefik.http.services.cvat-ui.loadbalancer.server.port=80
|
|
- traefik.http.routers.cvat-ui.rule=Host(`cvat.smsoft.kro.kr`)
|
|
- traefik.http.routers.cvat-ui.entrypoints=web
|
|
|
|
traefik:
|
|
image: traefik:v2.9
|
|
user: root
|
|
command:
|
|
- '--providers.docker.swarmMode=true'
|
|
- '--providers.docker.exposedByDefault=false'
|
|
- '--entryPoints.web.address=:8080'
|
|
- '--entrypoints.websecure.address=:8081'
|
|
- '--entryPoints.dashboard.address=:8090'
|
|
- '--providers.file.directory=/etc/traefik/rules'
|
|
#- '--entrypoints.web.http.redirections.entryPoint.to=websecure'
|
|
#- '--entrypoints.web.http.redirections.entryPoint.scheme=https'
|
|
- '--api.dashboard=true'
|
|
#- '--accesslog'
|
|
#- '--log.level=debug'
|
|
ports:
|
|
- 10080:8080
|
|
- 10090:8090
|
|
environment:
|
|
CVAT_HOST: cvat.smsoft.kro.kr
|
|
DJANGO_LOG_VIEWER_HOST: grafana
|
|
DJANGO_LOG_VIEWER_PORT: 3000
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
- /mnt/seaweedfs/cvat/components/analytics/grafana_conf.yml:/etc/traefik/rules/grafana_conf.yml:ro
|
|
networks:
|
|
- cvat
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == manager
|
|
|
|
cvat_opa:
|
|
image: openpolicyagent/opa:0.45.0-rootless
|
|
networks:
|
|
cvat:
|
|
aliases:
|
|
- opa
|
|
command:
|
|
- run
|
|
- --server
|
|
- --log-level=error
|
|
- --set=services.cvat.url=http://cvat.smsoft.kro.kr
|
|
- --set=bundles.cvat.service=cvat
|
|
- --set=bundles.cvat.resource=/api/auth/rules
|
|
- --set=bundles.cvat.polling.min_delay_seconds=5
|
|
- --set=bundles.cvat.polling.max_delay_seconds=15
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
cvat_clickhouse:
|
|
image: clickhouse/clickhouse-server:22.3-alpine
|
|
environment:
|
|
- CLICKHOUSE_DB=cvat
|
|
- CLICKHOUSE_USER=user
|
|
- CLICKHOUSE_PASSWORD=user
|
|
networks:
|
|
cvat:
|
|
aliases:
|
|
- clickhouse
|
|
volumes:
|
|
- /mnt/seaweedfs/cvat/components/analytics/clickhouse/init.sh:/docker-entrypoint-initdb.d/init.sh:ro
|
|
- /mnt/seaweedfs/cvat/events:/var/lib/clickhouse/
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
cvat_vector:
|
|
image: timberio/vector:0.26.0-alpine
|
|
depends_on:
|
|
- cvat_clickhouse
|
|
environment:
|
|
- CLICKHOUSE_DB=cvat
|
|
- CLICKHOUSE_USER=user
|
|
- CLICKHOUSE_PASSWORD=user
|
|
- CLICKHOUSE_HOST=clickhouse
|
|
networks:
|
|
cvat:
|
|
aliases:
|
|
- vector
|
|
volumes:
|
|
- /mnt/seaweedfs/cvat/components/analytics/vector/vector.toml:/etc/vector/vector.toml:ro
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
cvat_grafana:
|
|
image: grafana/grafana-oss:9.3.6
|
|
user: root
|
|
environment:
|
|
- GF_PATHS_PROVISIONING=/etc/grafana/provisioning
|
|
- GF_AUTH_BASIC_ENABLED=false
|
|
- GF_AUTH_ANONYMOUS_ENABLED=true
|
|
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
|
|
- GF_AUTH_DISABLE_LOGIN_FORM=true
|
|
- GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=grafana-clickhouse-datasource
|
|
- GF_SERVER_ROOT_URL=http://cvat.smsoft.kro.kr/analytics
|
|
- GF_INSTALL_PLUGINS=https://github.com/grafana/clickhouse-datasource/releases/download/v2.0.7/grafana-clickhouse-datasource-2.0.7.linux_amd64.zip;grafana-clickhouse-datasource
|
|
- GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/var/lib/grafana/dashboards/all_events.json
|
|
volumes:
|
|
- /mnt/seaweedfs/cvat/components/analytics/grafana/dashboards/:/var/lib/grafana/dashboards/:ro
|
|
entrypoint:
|
|
- sh
|
|
- -euc
|
|
- |
|
|
mkdir -p /etc/grafana/provisioning/datasources
|
|
cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
|
|
apiVersion: 1
|
|
datasources:
|
|
- name: 'ClickHouse'
|
|
type: 'grafana-clickhouse-datasource'
|
|
isDefault: true
|
|
jsonData:
|
|
defaultDatabase: cvat
|
|
port: 9000
|
|
server: clickhouse
|
|
username: user
|
|
tlsSkipVerify: false
|
|
secureJsonData:
|
|
password: user
|
|
editable: true
|
|
EOF
|
|
mkdir -p /etc/grafana/provisioning/dashboards
|
|
cat <<EOF > /etc/grafana/provisioning/dashboards/dashboard.yaml
|
|
apiVersion: 1
|
|
providers:
|
|
- name: cvat-logs
|
|
type: file
|
|
updateIntervalSeconds: 30
|
|
options:
|
|
path: /var/lib/grafana/dashboards
|
|
foldersFromFilesStructure: true
|
|
EOF
|
|
exec /run.sh
|
|
networks:
|
|
cvat:
|
|
aliases:
|
|
- grafana
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy:
|
|
condition: on-failure
|
|
max_attempts: 2
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
networks:
|
|
cvat:
|
|
driver: overlay
|
|
name: cvat
|
|
|
|
volumes:
|
|
cvat-cache:
|
|
driver: local |