name: ${DOCKER_NAME} services: nginx: image: "nginx:1.21.3" ports: - "${HTTP_BIND}:${HTTP_PORT}:80" volumes: - ./.huly.nginx:/etc/nginx/conf.d/default.conf restart: unless-stopped networks: - huly_net cockroach: image: cockroachdb/cockroach:latest-v24.2 command: start-single-node --accept-sql-without-tls environment: - COCKROACH_DATABASE=${CR_DATABASE} - COCKROACH_USER=${CR_USERNAME} - COCKROACH_PASSWORD=${CR_USER_PASSWORD} volumes: - ${VOLUME_CR_DATA_PATH:-cr_data}:/cockroach/cockroach-data - ${VOLUME_CR_CERTS_PATH:-cr_certs}:/cockroach/certs restart: unless-stopped networks: - huly_net redpanda: image: docker.redpanda.com/redpandadata/redpanda:v24.3.6 command: - redpanda - start - --kafka-addr internal://0.0.0.0:9092,external://0.0.0.0:19092 - --advertise-kafka-addr internal://redpanda:9092,external://localhost:19092 - --pandaproxy-addr internal://0.0.0.0:8082,external://0.0.0.0:18082 - --advertise-pandaproxy-addr internal://redpanda:8082,external://localhost:18082 - --schema-registry-addr internal://0.0.0.0:8081,external://0.0.0.0:18081 - --rpc-addr redpanda:33145 - --advertise-rpc-addr redpanda:33145 - --mode dev-container - --smp 1 - --default-log-level=info container_name: redpanda volumes: - ${VOLUME_REDPANDA_PATH:-redpanda}:/var/lib/redpanda/data environment: - REDPANDA_SUPERUSER_USERNAME=${REDPANDA_ADMIN_USER} - REDPANDA_SUPERUSER_PASSWORD=${REDPANDA_ADMIN_PWD} healthcheck: test: ['CMD', 'rpk', 'cluster', 'info', '-X', 'user=${REDPANDA_ADMIN_USER}', '-X', 'pass=${REDPANDA_ADMIN_PWD}'] interval: 10s timeout: 5s retries: 10 networks: - huly_net minio: image: "minio/minio" command: server /data --address ":9000" --console-address ":9001" volumes: - ${VOLUME_FILES_PATH:-files}:/data healthcheck: test: ['CMD', 'mc', 'ready', 'local'] interval: 5s retries: 10 restart: unless-stopped networks: - huly_net elastic: image: "elasticsearch:7.14.2" command: | /bin/sh -c "./bin/elasticsearch-plugin list | grep -q ingest-attachment || yes | ./bin/elasticsearch-plugin install --silent ingest-attachment; /usr/local/bin/docker-entrypoint.sh eswrapper" volumes: - ${VOLUME_ELASTIC_PATH:-elastic}:/usr/share/elasticsearch/data environment: - ELASTICSEARCH_PORT_NUMBER=9200 - BITNAMI_DEBUG=true - discovery.type=single-node - ES_JAVA_OPTS=-Xms1024m -Xmx1024m - http.cors.enabled=true - http.cors.allow-origin=http://localhost:8082 healthcheck: interval: 20s retries: 10 test: curl -s http://localhost:9200/_cluster/health | grep -vq '"status":"red"' restart: unless-stopped networks: - huly_net rekoni: image: hardcoreeng/rekoni-service:${HULY_VERSION} environment: - SECRET=${SECRET} deploy: resources: limits: memory: 500M restart: unless-stopped networks: - huly_net transactor: image: hardcoreeng/transactor:${HULY_VERSION} environment: - SERVER_PORT=3333 - SERVER_SECRET=${SECRET} - DB_URL=${CR_DB_URL} - STORAGE_CONFIG=minio|minio?accessKey=minioadmin&secretKey=minioadmin - FRONT_URL=http://localhost:8087 - ACCOUNTS_URL=http://account:3000 - FULLTEXT_URL=http://fulltext:4700 - STATS_URL=http://stats:4900 - LAST_NAME_FIRST=${LAST_NAME_FIRST:-true} - QUEUE_CONFIG=redpanda:9092 restart: unless-stopped networks: - huly_net collaborator: image: hardcoreeng/collaborator:${HULY_VERSION} environment: - COLLABORATOR_PORT=3078 - SECRET=${SECRET} - ACCOUNTS_URL=http://account:3000 - STATS_URL=http://stats:4900 - STORAGE_CONFIG=minio|minio?accessKey=minioadmin&secretKey=minioadmin restart: unless-stopped networks: - huly_net account: image: hardcoreeng/account:${HULY_VERSION} environment: - SERVER_PORT=3000 - SERVER_SECRET=${SECRET} - DB_URL=${CR_DB_URL} - TRANSACTOR_URL=ws://transactor:3333;ws${SECURE:+s}://${HOST_ADDRESS}/_transactor - STORAGE_CONFIG=minio|minio?accessKey=minioadmin&secretKey=minioadmin - FRONT_URL=http${SECURE:+s}://${HOST_ADDRESS} - STATS_URL=http${SECURE:+s}://${HOST_ADDRESS}/stats - MODEL_ENABLED=* - ACCOUNTS_URL=http${SECURE:+s}://${HOST_ADDRESS}/_accounts - ACCOUNT_PORT=3000 - QUEUE_CONFIG=redpanda:9092 restart: unless-stopped networks: - huly_net workspace: image: hardcoreeng/workspace:${HULY_VERSION} environment: - SERVER_SECRET=${SECRET} - DB_URL=${CR_DB_URL} - TRANSACTOR_URL=ws://transactor:3333;ws${SECURE:+s}://${HOST_ADDRESS}/_transactor - STORAGE_CONFIG=minio|minio?accessKey=minioadmin&secretKey=minioadmin - MODEL_ENABLED=* - ACCOUNTS_URL=http://account:3000 - STATS_URL=http://stats:4900 - QUEUE_CONFIG=redpanda:9092 - ACCOUNTS_DB_URL=${CR_DB_URL} restart: unless-stopped networks: - huly_net front: image: hardcoreeng/front:${HULY_VERSION} environment: - SERVER_PORT=8080 - SERVER_SECRET=${SECRET} - LOVE_ENDPOINT=http${SECURE:+s}://${HOST_ADDRESS}/_love - ACCOUNTS_URL=http${SECURE:+s}://${HOST_ADDRESS}/_accounts - ACCOUNTS_URL_INTERNAL=http://account:3000 - REKONI_URL=http${SECURE:+s}://${HOST_ADDRESS}/_rekoni - CALENDAR_URL=http${SECURE:+s}://${HOST_ADDRESS}/_calendar - GMAIL_URL=http${SECURE:+s}://${HOST_ADDRESS}/_gmail - TELEGRAM_URL=http${SECURE:+s}://${HOST_ADDRESS}/_telegram - STATS_URL=http${SECURE:+s}://${HOST_ADDRESS}/_stats - UPLOAD_URL=/files - ELASTIC_URL=http://elastic:9200 - COLLABORATOR_URL=ws${SECURE:+s}://${HOST_ADDRESS}/_collaborator - STORAGE_CONFIG=minio|minio?accessKey=minioadmin&secretKey=minioadmin - TITLE=${TITLE:-Huly Self Host} - DEFAULT_LANGUAGE=${DEFAULT_LANGUAGE:-en} - LAST_NAME_FIRST=${LAST_NAME_FIRST:-true} - DESKTOP_UPDATES_CHANNEL=${DESKTOP_CHANNEL} restart: unless-stopped networks: - huly_net fulltext: image: hardcoreeng/fulltext:${HULY_VERSION} environment: - SERVER_SECRET=${SECRET} - DB_URL=${CR_DB_URL} - FULLTEXT_DB_URL=http://elastic:9200 - ELASTIC_INDEX_NAME=huly_storage_index - STORAGE_CONFIG=minio|minio?accessKey=minioadmin&secretKey=minioadmin - REKONI_URL=http://rekoni:4004 - ACCOUNTS_URL=http://account:3000 - STATS_URL=http://stats:4900 - QUEUE_CONFIG=redpanda:9092 restart: unless-stopped networks: - huly_net stats: image: hardcoreeng/stats:${HULY_VERSION} environment: - PORT=4900 - SERVER_SECRET=${SECRET} restart: unless-stopped networks: - huly_net kvs: image: hardcoreeng/hulykvs:${HULY_VERSION} depends_on: cockroach: condition: service_started ports: - 8094:8094 environment: - HULY_DB_CONNECTION=${CR_DB_URL} - HULY_TOKEN_SECRET=${SECRET} restart: unless-stopped networks: - huly_net volumes: # These named volumes are used when custom volume paths are not specified # If VOLUME_*_PATH variables are set, these volumes will be ignored elastic: files: cr_data: cr_certs: redpanda: networks: huly_net: