services: activitypub: build: . volumes: - ./src:/opt/activitypub/src environment: - PORT=8080 - MYSQL_USER=ghost - MYSQL_PASSWORD=password - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_DATABASE=activitypub - NODE_ENV=development - ALLOW_PRIVATE_ADDRESS=true - SKIP_SIGNATURE_VERIFICATION=true - USE_MQ=true - MQ_PUBSUB_PROJECT_ID=activitypub - MQ_PUBSUB_HOST=pubsub:8085 - MQ_PUBSUB_TOPIC_NAME=activitypub_topic_changeme - MQ_PUBSUB_SUBSCRIPTION_NAME=activitypub_subscription_changeme - ACTIVITYPUB_COLLECTION_PAGE_SIZE=20 command: yarn build:watch depends_on: migrate: condition: service_started mysql: condition: service_healthy pubsub: condition: service_healthy jaeger: image: jaegertracing/all-in-one:1.62.0 container_name: activitypub-jaeger ports: - "4318:4318" - "16686:16686" - "9411:9411" restart: always environment: COLLECTOR_ZIPKIN_HOST_PORT: :9411 migrate: build: migrate volumes: - ./migrate/migrations:/migrations environment: - MYSQL_DB=mysql://ghost:password@tcp(mysql:3306)/activitypub depends_on: mysql: condition: service_healthy scripts: build: scripts depends_on: - activitypub - fake-mastodon nginx: build: nginx ports: - "80:80" depends_on: - activitypub mysql: image: mysql:8.0.31 environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_USER=ghost - MYSQL_PASSWORD=password - MYSQL_DATABASE=activitypub ports: - "3307:3306" healthcheck: test: "mysql -ughost -ppassword activitypub -e 'select 1'" interval: 1s retries: 120 pubsub: image: gcr.io/google.com/cloudsdktool/google-cloud-cli:499.0.0-emulators ports: - "8085:8085" command: /bin/bash -c "/opt/activitypub/start-pubsub.sh" volumes: - ./pubsub/start.sh:/opt/activitypub/start-pubsub.sh environment: - PROJECT_ID=activitypub - TOPIC_NAME=activitypub_topic_changeme - SUBSCRIPTION_NAME=activitypub_subscription_changeme - PUSH_ENDPOINT=http://activitypub:8080/.ghost/activitypub/mq healthcheck: test: "curl -f http://localhost:8085 || exit 1" interval: 1s retries: 120 start_period: 5s # Testing activitypub-testing: build: . volumes: - ./src:/opt/activitypub/src environment: - PORT=8083 - MYSQL_USER=ghost - MYSQL_PASSWORD=password - MYSQL_HOST=mysql-testing - MYSQL_PORT=3306 - MYSQL_DATABASE=activitypub - NODE_ENV=testing - SKIP_SIGNATURE_VERIFICATION=true - ALLOW_PRIVATE_ADDRESS=true - NODE_TLS_REJECT_UNAUTHORIZED=0 - USE_MQ=true - MQ_PUBSUB_PROJECT_ID=activitypub - MQ_PUBSUB_HOST=pubsub-testing:8085 - MQ_PUBSUB_TOPIC_NAME=activitypub_topic_changeme - MQ_PUBSUB_SUBSCRIPTION_NAME=activitypub_subscription_changeme - ACTIVITYPUB_COLLECTION_PAGE_SIZE=2 command: yarn build:watch depends_on: mysql-testing: condition: service_healthy pubsub-testing: condition: service_healthy healthcheck: test: "if [ ! -f /tmp/health.txt ]; then (wget --spider http://0.0.0.0:8083/ping || exit 1) && touch /tmp/health.txt ; else echo \"healthcheck already executed\"; fi" interval: 1s retries: 120 start_period: 5s migrate-testing: build: migrate volumes: - ./migrate/migrations:/migrations environment: - MYSQL_DB=mysql://ghost:password@tcp(mysql-testing:3306)/activitypub depends_on: mysql-testing: condition: service_healthy cucumber-tests: build: . volumes: - ./features:/opt/activitypub/features - ./cucumber.js:/opt/activitypub/cucumber.js environment: - MYSQL_USER=ghost - MYSQL_PASSWORD=password - MYSQL_HOST=mysql-testing - MYSQL_PORT=3306 - MYSQL_DATABASE=activitypub - NODE_ENV=testing - TAGS command: /opt/activitypub/node_modules/.bin/cucumber-js depends_on: fake-ghost-activitypub: condition: service_started fake-external-activitypub: condition: service_started activitypub-testing: condition: service_healthy mysql-testing: image: mysql:8.0.31 environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_USER=ghost - MYSQL_PASSWORD=password - MYSQL_DATABASE=activitypub ports: - "3308:3306" healthcheck: test: "mysql -ughost -ppassword activitypub -e 'select 1'" interval: 1s retries: 120 pubsub-testing: image: gcr.io/google.com/cloudsdktool/google-cloud-cli:499.0.0-emulators ports: - "8086:8085" command: /bin/bash -c "/opt/activitypub/start-pubsub.sh" volumes: - ./pubsub/start.sh:/opt/activitypub/start-pubsub.sh environment: - PROJECT_ID=activitypub - TOPIC_NAME=activitypub_topic_changeme - SUBSCRIPTION_NAME=activitypub_subscription_changeme - PUSH_ENDPOINT=http://activitypub-testing:8083/.ghost/activitypub/mq healthcheck: test: "curl -f http://localhost:8085 || exit 1" interval: 1s retries: 120 start_period: 5s fake-ghost-activitypub: image: wiremock/wiremock:3.10.0-1 entrypoint: [ "/docker-entrypoint.sh", "--global-response-templating", "--disable-gzip", "--verbose", "--port=80", "--https-port=443" ] volumes: - ./wiremock/fake-ghost/mappings:/home/wiremock/mappings fake-external-activitypub: image: wiremock/wiremock:3.10.0-1 entrypoint: [ "/docker-entrypoint.sh", "--global-response-templating", "--disable-gzip", "--verbose", "--port=80", "--https-port=443" ] fake-mastodon: image: wiremock/wiremock:3.10.0-1 ports: - "8084:8080" entrypoint: [ "/docker-entrypoint.sh", "--global-response-templating", "--disable-gzip", "--verbose" ]