docker-compose.yml 10.9 KB
Newer Older
1
# Copyright (C) 2018-2022 Intel Corporation
2 3
#
# SPDX-License-Identifier: MIT
4

N
Nikita Manovich 已提交
5 6 7
services:
  cvat_db:
    container_name: cvat_db
8
    image: postgres:15-alpine
N
Nikita Manovich 已提交
9 10 11 12
    restart: always
    environment:
      POSTGRES_USER: root
      POSTGRES_DB: cvat
A
Andrey Zhavoronkov 已提交
13
      POSTGRES_HOST_AUTH_METHOD: trust
N
Nikita Manovich 已提交
14 15
    volumes:
      - cvat_db:/var/lib/postgresql/data
16 17
    networks:
      - cvat
N
Nikita Manovich 已提交
18 19 20

  cvat_redis:
    container_name: cvat_redis
21
    image: redis:7.0-alpine
N
Nikita Manovich 已提交
22
    restart: always
23 24
    networks:
      - cvat
N
Nikita Manovich 已提交
25

26 27
  cvat_server:
    container_name: cvat_server
A
Andrey Zhavoronkov 已提交
28
    image: cvat/server:${CVAT_VERSION:-dev}
N
Nikita Manovich 已提交
29 30 31 32
    restart: always
    depends_on:
      - cvat_redis
      - cvat_db
33
      - cvat_opa
N
Nikita Manovich 已提交
34
    environment:
V
Vitaliy Nishukov 已提交
35
      DJANGO_MODWSGI_EXTRA_ARGS: ''
A
Andrey Zhavoronkov 已提交
36
      ALLOWED_HOSTS: '*'
V
Vitaliy Nishukov 已提交
37 38
      CVAT_REDIS_HOST: 'cvat_redis'
      CVAT_POSTGRES_HOST: 'cvat_db'
39
      ADAPTIVE_AUTO_ANNOTATION: 'false'
40
      IAM_OPA_BUNDLE: '1'
A
Andrey Zhavoronkov 已提交
41
      no_proxy: clickhouse,grafana,vector,nuclio,opa,${no_proxy:-}
A
Andrey Zhavoronkov 已提交
42
      NUMPROCS: 2
A
Andrey Zhavoronkov 已提交
43 44 45 46
      DJANGO_LOG_SERVER_HOST: vector
      DJANGO_LOG_SERVER_PORT: 80
      CLICKHOUSE_HOST: clickhouse
      CVAT_ANALYTICS: 1
47
      CVAT_BASE_URL:
48
      SMOKESCREEN_OPTS: ${SMOKESCREEN_OPTS:-}
A
Andrey Zhavoronkov 已提交
49
    entrypoint: /home/django/backend_entrypoint.sh
50 51 52 53
    labels:
      - traefik.enable=true
      - traefik.http.services.cvat.loadbalancer.server.port=8080
      - traefik.http.routers.cvat.rule=Host(`${CVAT_HOST:-localhost}`) &&
54
        PathPrefix(`/api/`, `/git/`, `/opencv/`, `/static/`, `/admin`, `/documentation/`, `/django-rq`)
55
      - traefik.http.routers.cvat.entrypoints=web
N
Nikita Manovich 已提交
56 57 58 59
    volumes:
      - cvat_data:/home/django/data
      - cvat_keys:/home/django/keys
      - cvat_logs:/home/django/logs
60
    networks:
61 62 63
      cvat:
        aliases:
          - cvat-server
N
Nikita Manovich 已提交
64

65 66
  cvat_utils:
    container_name: cvat_utils
A
Andrey Zhavoronkov 已提交
67
    image: cvat/server:${CVAT_VERSION:-dev}
68 69 70 71 72 73 74
    restart: always
    depends_on:
      - cvat_redis
      - cvat_db
      - cvat_opa
    environment:
      CVAT_REDIS_HOST: 'cvat_redis'
75
      CVAT_REDIS_PASSWORD: ''
76
      CVAT_POSTGRES_HOST: 'cvat_db'
77 78 79
      CLICKHOUSE_HOST: clickhouse
      DJANGO_LOG_SERVER_HOST: vector
      DJANGO_LOG_SERVER_PORT: 80
A
Andrey Zhavoronkov 已提交
80
      no_proxy: clickhouse,grafana,vector,nuclio,opa,${no_proxy:-}
81
      NUMPROCS: 1
82 83 84 85 86 87 88 89
    command: -c supervisord/utils.conf
    volumes:
      - cvat_data:/home/django/data
      - cvat_keys:/home/django/keys
      - cvat_logs:/home/django/logs
    networks:
      - cvat

90 91
  cvat_worker_import:
    container_name: cvat_worker_import
A
Andrey Zhavoronkov 已提交
92
    image: cvat/server:${CVAT_VERSION:-dev}
93 94 95 96 97 98 99
    restart: always
    depends_on:
      - cvat_redis
      - cvat_db
    environment:
      CVAT_REDIS_HOST: 'cvat_redis'
      CVAT_POSTGRES_HOST: 'cvat_db'
A
Andrey Zhavoronkov 已提交
100 101 102
      DJANGO_LOG_SERVER_HOST: vector
      DJANGO_LOG_SERVER_PORT: 80
      no_proxy: clickhouse,grafana,vector,nuclio,opa,${no_proxy:-}
103
      NUMPROCS: 2
104
      SMOKESCREEN_OPTS: ${SMOKESCREEN_OPTS:-}
105 106 107 108 109 110 111 112 113 114
    command: -c supervisord/worker.import.conf
    volumes:
      - cvat_data:/home/django/data
      - cvat_keys:/home/django/keys
      - cvat_logs:/home/django/logs
    networks:
      - cvat

  cvat_worker_export:
    container_name: cvat_worker_export
A
Andrey Zhavoronkov 已提交
115
    image: cvat/server:${CVAT_VERSION:-dev}
116 117 118 119 120 121 122
    restart: always
    depends_on:
      - cvat_redis
      - cvat_db
    environment:
      CVAT_REDIS_HOST: 'cvat_redis'
      CVAT_POSTGRES_HOST: 'cvat_db'
A
Andrey Zhavoronkov 已提交
123
      CLICKHOUSE_HOST: clickhouse
124 125
      DJANGO_LOG_SERVER_HOST: vector
      DJANGO_LOG_SERVER_PORT: 80
A
Andrey Zhavoronkov 已提交
126
      no_proxy: clickhouse,grafana,vector,nuclio,opa,${no_proxy:-}
127
      NUMPROCS: 2
128
    command: -c supervisord/worker.export.conf
129 130 131 132 133 134 135
    volumes:
      - cvat_data:/home/django/data
      - cvat_keys:/home/django/keys
      - cvat_logs:/home/django/logs
    networks:
      - cvat

136 137
  cvat_worker_annotation:
    container_name: cvat_worker_annotation
A
Andrey Zhavoronkov 已提交
138
    image: cvat/server:${CVAT_VERSION:-dev}
139 140 141 142 143 144 145 146
    restart: always
    depends_on:
      - cvat_redis
      - cvat_db
      - cvat_opa
    environment:
      CVAT_REDIS_HOST: 'cvat_redis'
      CVAT_POSTGRES_HOST: 'cvat_db'
147 148
      DJANGO_LOG_SERVER_HOST: vector
      DJANGO_LOG_SERVER_PORT: 80
A
Andrey Zhavoronkov 已提交
149
      no_proxy: clickhouse,grafana,vector,nuclio,opa,${no_proxy:-}
150
      NUMPROCS: 1
151
    command: -c supervisord/worker.annotation.conf
152 153 154 155 156 157 158
    volumes:
      - cvat_data:/home/django/data
      - cvat_keys:/home/django/keys
      - cvat_logs:/home/django/logs
    networks:
      - cvat

K
Kirill Sizov 已提交
159 160
  cvat_worker_webhooks:
    container_name: cvat_worker_webhooks
A
Andrey Zhavoronkov 已提交
161
    image: cvat/server:${CVAT_VERSION:-dev}
K
Kirill Sizov 已提交
162 163 164 165 166 167 168 169
    restart: always
    depends_on:
      - cvat_redis
      - cvat_db
      - cvat_opa
    environment:
      CVAT_REDIS_HOST: 'cvat_redis'
      CVAT_POSTGRES_HOST: 'cvat_db'
170 171
      DJANGO_LOG_SERVER_HOST: vector
      DJANGO_LOG_SERVER_PORT: 80
A
Andrey Zhavoronkov 已提交
172
      no_proxy: clickhouse,grafana,vector,nuclio,opa,${no_proxy:-}
K
Kirill Sizov 已提交
173
      NUMPROCS: 1
174
      SMOKESCREEN_OPTS: ${SMOKESCREEN_OPTS:-}
K
Kirill Sizov 已提交
175 176 177 178 179 180 181 182
    command: -c supervisord/worker.webhooks.conf
    volumes:
      - cvat_data:/home/django/data
      - cvat_keys:/home/django/keys
      - cvat_logs:/home/django/logs
    networks:
      - cvat

M
Maxim Zhiltsov 已提交
183 184
  cvat_worker_quality_reports:
    container_name: cvat_worker_quality_reports
A
Andrey Zhavoronkov 已提交
185
    image: cvat/server:${CVAT_VERSION:-dev}
M
Maxim Zhiltsov 已提交
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
    restart: always
    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,${no_proxy:-}
      NUMPROCS: 1
    command: -c supervisord/worker.quality_reports.conf
    volumes:
      - cvat_data:/home/django/data
      - cvat_keys:/home/django/keys
      - cvat_logs:/home/django/logs
    networks:
      - cvat

205 206
  cvat_worker_analytics_reports:
    container_name: cvat_worker_analytics_reports
A
Andrey Zhavoronkov 已提交
207
    image: cvat/server:${CVAT_VERSION:-dev}
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
    restart: always
    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
      CLICKHOUSE_HOST: clickhouse
      no_proxy: clickhouse,grafana,vector,nuclio,opa,${no_proxy:-}
      NUMPROCS: 2
    command: -c supervisord/worker.analytics_reports.conf
    volumes:
      - cvat_data:/home/django/data
      - cvat_keys:/home/django/keys
      - cvat_logs:/home/django/logs
    networks:
      - cvat

228 229
  cvat_ui:
    container_name: cvat_ui
A
Andrey Zhavoronkov 已提交
230
    image: cvat/ui:${CVAT_VERSION:-dev}
231
    restart: always
232
    depends_on:
233
      - cvat_server
234 235 236 237 238 239
    labels:
      - traefik.enable=true
      - traefik.http.services.cvat-ui.loadbalancer.server.port=80
      - traefik.http.routers.cvat-ui.rule=Host(`${CVAT_HOST:-localhost}`)
      - traefik.http.routers.cvat-ui.entrypoints=web
    networks:
A
Andrey Zhavoronkov 已提交
240
      - cvat
241 242

  traefik:
243
    image: traefik:v2.9
244
    container_name: traefik
245
    restart: always
246
    command:
247 248 249
      - '--providers.docker.exposedByDefault=false'
      - '--providers.docker.network=cvat'
      - '--entryPoints.web.address=:8080'
250
      - '--providers.file.directory=/etc/traefik/rules'
251 252 253 254 255 256 257 258
    # Uncomment to get Traefik dashboard
    #   - "--entryPoints.dashboard.address=:8090"
    #   - "--api.dashboard=true"
    # labels:
    #   - traefik.enable=true
    #   - traefik.http.routers.dashboard.entrypoints=dashboard
    #   - traefik.http.routers.dashboard.service=api@internal
    #   - traefik.http.routers.dashboard.rule=Host(`${CVAT_HOST:-localhost}`)
259
    ports:
260 261
      - 8080:8080
      - 8090:8090
A
Andrey Zhavoronkov 已提交
262 263 264 265
    environment:
      CVAT_HOST: ${CVAT_HOST:-localhost}
      DJANGO_LOG_VIEWER_HOST: grafana
      DJANGO_LOG_VIEWER_PORT: 3000
A
Andrey Zhavoronkov 已提交
266
    volumes:
267
      - /var/run/docker.sock:/var/run/docker.sock:ro
A
Andrey Zhavoronkov 已提交
268
      - ./components/analytics/grafana_conf.yml:/etc/traefik/rules/grafana_conf.yml:ro
269 270
    networks:
      - cvat
271

272 273
  cvat_opa:
    container_name: cvat_opa
274
    image: openpolicyagent/opa:0.45.0-rootless
275 276 277 278 279
    restart: always
    networks:
      cvat:
        aliases:
          - opa
280 281 282
    command:
      - run
      - --server
283
      - --log-level=error
284 285 286 287 288
      - --set=services.cvat.url=http://cvat-server:8080
      - --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
289

A
Andrey Zhavoronkov 已提交
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
  cvat_clickhouse:
    container_name: cvat_clickhouse
    image: clickhouse/clickhouse-server:22.3-alpine
    restart: always
    environment:
      - CLICKHOUSE_DB=cvat
      - CLICKHOUSE_USER=user
      - CLICKHOUSE_PASSWORD=user
    networks:
      cvat:
        aliases:
          - clickhouse
    volumes:
      - ./components/analytics/clickhouse/init.sh:/docker-entrypoint-initdb.d/init.sh:ro
      - cvat_events_db:/var/lib/clickhouse/

  cvat_vector:
    container_name: cvat_vector
    image: timberio/vector:0.26.0-alpine
    restart: always
    depends_on:
      - cvat_clickhouse
    environment:
      - CLICKHOUSE_DB=cvat
      - CLICKHOUSE_USER=user
      - CLICKHOUSE_PASSWORD=user
316
      - CLICKHOUSE_HOST=clickhouse
A
Andrey Zhavoronkov 已提交
317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
    networks:
      cvat:
        aliases:
          - vector
    volumes:
      - ./components/analytics/vector/vector.toml:/etc/vector/vector.toml:ro

  cvat_grafana:
    image: grafana/grafana-oss:9.3.6
    container_name: cvat_grafana
    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_HOST:-localhost}/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:
      - ./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
371
        exec /run.sh
A
Andrey Zhavoronkov 已提交
372 373 374 375 376
    networks:
      cvat:
        aliases:
          - grafana

N
Nikita Manovich 已提交
377 378 379 380 381
volumes:
  cvat_db:
  cvat_data:
  cvat_keys:
  cvat_logs:
A
Andrey Zhavoronkov 已提交
382
  cvat_events_db:
383 384

networks:
385
  cvat: