Loading .gitlab-ci.yml +155 −20 Original line number Diff line number Diff line Loading @@ -11,37 +11,172 @@ include: - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/deployment.yml' - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/deployment-custom-image.yml' stages: - build - license-list - pre-package - package - test-package - post-package - deploy variables: PROJECT_PARENT_NAME: api .maven-build: variables: POSTGRES_IMAGE_TAG: 10.13-alpine POSTGRES_DB: redmic POSTGRES_USER: postgres POSTGRES_PASSWORD: password DIND_IMAGE_NAME: docker DIND_IMAGE_TAG: dind DOCKER_HOST: tcp://docker:2375 SPRING_DATASOURCE_URL: jdbc:postgresql://docker:5432/redmic?stringtype=unspecified¤tSchema=sde JOBS_DATASOURCE_URL: jdbc:postgresql://docker:5432/redmic?currentSchema=job ELASTIC_ADDRESSES: docker ELASTICSEARCH_IMAGE_NAME: docker.elastic.co/elasticsearch/elasticsearch ELASTICSEARCH_IMAGE_TAG: 6.6.2 ES_BOOTSTRAP_MEMORY_LOCK: 'true' OLD_ELASTIC_ADMIN_PASS: changeme ELASTIC_ADMIN_PASS: elastic_admin_pass ELASTIC_USER: elastic_user ELASTIC_USER_PASS: elastic_user_pass ELASTIC_USER_ROLE: redmic_user ES_JAVA_OPTS: '-Xms512m -Xmx512m -Djava.security.policy=file:///usr/share/elasticsearch/config/grovy-classes_whitelist.policy' ES_CLUSTER_NAME: es_dev ES_NODE_NAME: node-1 ES_DISCOVERY_ZEN_MINIMUM_MASTER_NODES: 1 ES_DISCOVERY_ZEN_PING_UNICAST_HOSTS: es6-1 ES_XPACK_SECURITY_ENABLED: 'false' ELASTIC_HOSTS: es6-1 LOGGING_LEVEL_ROOT: error LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: error DOCKER_BUILD_ARGS: --build-arg PARENT_IMAGE_NAME=${REDMIC_SERVER_IMAGE_NAME} --build-arg PARENT_IMAGE_TAG=${REDMIC_SERVER_IMAGE_TAG} STACK: api STATUS_CHECK_DELAY: 300 .deploy: script: GITLAB_REGISTRY_HOST: registry.gitlab.com CI_DEPLOY_USER: ci_deploy_user CI_DEPLOY_PASSWORD: ci_deploy_password services: - ${DIND_IMAGE_NAME}:${DIND_IMAGE_TAG} before_script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE} SPRING_DATASOURCE_USERNAME=${SPRING_DATASOURCE_USERNAME} SPRING_DATASOURCE_PASSWORD=${SPRING_DATASOURCE_PASSWORD} JOBS_DATASOURCE_USERNAME=${JOBS_DATASOURCE_USERNAME} JOBS_DATASOURCE_PASSWORD=${JOBS_DATASOURCE_PASSWORD} AWS_ACCESS_KEY=${AWS_ACCESS_KEY} AWS_SECRET_KEY=${AWS_SECRET_KEY} ELASTIC_XPACKSECURITYUSER=${ELASTIC_XPACKSECURITYUSER} PUBLIC_HOSTNAME=${PUBLIC_HOSTNAME} environment: url: https://${PUBLIC_HOSTNAME}/api/${CI_PROJECT_NAME} mkdir -p sql; chmod -R 755 sql; docker network create test - > docker run -d --rm --name postgres \ -p 5432:5432 \ --network test \ --network-alias db \ -e POSTGRES_DB \ -e POSTGRES_USER \ -e POSTGRES_PASSWORD \ -v $(pwd)/sql:/sql \ postgres:${POSTGRES_IMAGE_TAG} - > curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/oauth_database_structure_test.sql \ "https://gitlab.com/api/v4/snippets/${OAUTH_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw"; curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/oauth_database_data_test.sql \ "https://gitlab.com/api/v4/snippets/${OAUTH_DATABASE_DATA_TEST_SNIPPET_ID}/raw"; curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/user_database_structure_test.sql \ "https://gitlab.com/api/v4/snippets/${USER_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw"; curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/user_database_data_test.sql \ "https://gitlab.com/api/v4/snippets/${USER_DATABASE_DATA_TEST_SNIPPET_ID}/raw" curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/api_database_structure_test.sql \ "https://gitlab.com/api/v4/snippets/${API_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw" curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/task_database_structure_test.sql \ "https://gitlab.com/api/v4/snippets/${TASK_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw" - > RETRIES=10; until docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -c 'select 1' > /dev/null 2>&1 || [ $RETRIES -eq 0 ]; do RETRIES=$((RETRIES-=1)); echo "Waiting for postgres server, ${RETRIES} remaining attempts..."; sleep 1; done; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/oauth_database_structure_test.sql; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/oauth_database_data_test.sql; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/user_database_structure_test.sql; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/user_database_data_test.sql; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/api_database_structure_test.sql; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/task_database_structure_test.sql docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -c "ALTER ROLE ${SPRING_DATASOURCE_USERNAME} WITH PASSWORD '${SPRING_DATASOURCE_PASSWORD}'"; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -c "ALTER ROLE ${JOBS_DATASOURCE_USERNAME} WITH PASSWORD '${JOBS_DATASOURCE_PASSWORD}'" - > docker run -d --rm --name es6-1 \ -p 9300:9300 \ -p 9200:9200 \ --network test \ --ulimit memlock=-1:-1 \ -e ES_BOOTSTRAP_MEMORY_LOCK \ -e OLD_ELASTIC_ADMIN_PASS \ -e ELASTIC_ADMIN_PASS \ -e ELASTIC_USER \ -e ELASTIC_USER_PASS \ -e ELASTIC_USER_ROLE \ -e ES_JAVA_OPTS \ -e ES_CLUSTER_NAME \ -e ES_NODE_NAME \ -e ES_DISCOVERY_ZEN_MINIMUM_MASTER_NODES \ -e ES_DISCOVERY_ZEN_PING_UNICAST_HOSTS \ -e ES_XPACK_SECURITY_ENABLED \ ${ELASTICSEARCH_IMAGE_NAME}:${ELASTICSEARCH_IMAGE_TAG} - > RESPONSE=""; until [ "$RESPONSE" = "green" ]; do sleep 15; RESPONSE="$(curl -sS -u ${ELASTIC_USER}:${ELASTIC_USER_PASS} docker:9200/_cat/health?h=status || :)"; echo "Waiting for elasticsearch server, remaining attempts... Last output:"; echo $RESPONSE; done after_script: - rm -rf .m2/repository/es - docker stop postgres es6-1 .deploy-development: .docker-build: variables: SPRING_PROFILES_ACTIVE: pre DBLD_PARENT_IMAGE_NAME: ${REDMIC_SERVER_IMAGE_NAME} DBLD_PARENT_IMAGE_TAG: ${REDMIC_SERVER_IMAGE_TAG} .deploy-production: .deploy: variables: SPRING_PROFILES_ACTIVE: prod STACK: ${PROJECT_PARENT_NAME} STATUS_CHECK_DELAY: 300 environment: url: https://${PUBLIC_HOSTNAME}/api/${CI_PROJECT_NAME} Dockerfile +8 −2 Original line number Diff line number Diff line ARG PARENT_IMAGE_NAME ARG PARENT_IMAGE_TAG ARG PARENT_IMAGE_NAME=registry.gitlab.com/redmic-project/docker/redmic-server ARG PARENT_IMAGE_TAG=latest FROM ${PARENT_IMAGE_NAME}:${PARENT_IMAGE_TAG} COPY /dist/*.jar ./ ARG MICROSERVICE_NAME=tasks ENV MICROSERVICE_NAME=${MICROSERVICE_NAME} ARG MICROSERVICE_PORT=8088 ENV MICROSERVICE_PORT=${MICROSERVICE_PORT} EXPOSE ${MICROSERVICE_PORT} deploy/.env +3 −0 Original line number Diff line number Diff line PARENT_IMAGE_NAME=registry.gitlab.com/redmic-project/docker/redmic-server PARENT_IMAGE_TAG=latest MICROSERVICE_NAME=tasks MICROSERVICE_PORT=8088 deploy/docker-compose.dev.yml +11 −5 Original line number Diff line number Diff line Loading @@ -2,17 +2,23 @@ version: '3.5' services: tasks: environment: SPRING_PROFILES_ACTIVE: pre deploy: placement: constraints: - node.hostname == ${PLACEMENT_CONSTRAINTS_NODE_HOSTNAME:-hostname} resources: limits: cpus: '1' memory: 1G cpus: '${RESOURCES_LIMITS_CPUS:-1}' memory: ${RESOURCES_LIMITS_MEMORY:-1G} reservations: memory: 820M cpus: '${RESOURCES_RESERVATIONS_CPUS:-0.001}' memory: ${RESOURCES_RESERVATIONS_MEMORY:-820M} volumes: mediastorage-private-vol: name: mediastorage-private-vol name: ${MEDIASTORAGE_PRIVATE_VOL_NAME:-mediastorage-private-vol} mediastorage-public-vol: name: mediastorage-public-vol No newline at end of file name: ${MEDIASTORAGE_PUBLIC_VOL_NAME:-mediastorage-public-vol} deploy/docker-compose.prod.yml +8 −8 Original line number Diff line number Diff line Loading @@ -2,26 +2,26 @@ version: '3.5' services: tasks: environment: SPRING_PROFILES_ACTIVE: prod deploy: placement: constraints: - node.role == worker resources: limits: cpus: '1' memory: 2G cpus: '${RESOURCES_LIMITS_CPUS:-1}' memory: ${RESOURCES_LIMITS_MEMORY:-2G} reservations: memory: 1639M cpus: '${RESOURCES_RESERVATIONS_CPUS:-0.01}' memory: ${RESOURCES_RESERVATIONS_MEMORY:-1639M} volumes: mediastorage-private-vol: name: mediastorage-private-vol name: ${MEDIASTORAGE_PRIVATE_VOL_NAME:-mediastorage-private-vol} driver: "cloudstor:aws" driver_opts: backing: shared mediastorage-public-vol: name: mediastorage-public-vol name: ${MEDIASTORAGE_PUBLIC_VOL_NAME:-mediastorage-public-vol} driver: "cloudstor:aws" driver_opts: backing: shared Loading
.gitlab-ci.yml +155 −20 Original line number Diff line number Diff line Loading @@ -11,37 +11,172 @@ include: - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/deployment.yml' - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/deployment-custom-image.yml' stages: - build - license-list - pre-package - package - test-package - post-package - deploy variables: PROJECT_PARENT_NAME: api .maven-build: variables: POSTGRES_IMAGE_TAG: 10.13-alpine POSTGRES_DB: redmic POSTGRES_USER: postgres POSTGRES_PASSWORD: password DIND_IMAGE_NAME: docker DIND_IMAGE_TAG: dind DOCKER_HOST: tcp://docker:2375 SPRING_DATASOURCE_URL: jdbc:postgresql://docker:5432/redmic?stringtype=unspecified¤tSchema=sde JOBS_DATASOURCE_URL: jdbc:postgresql://docker:5432/redmic?currentSchema=job ELASTIC_ADDRESSES: docker ELASTICSEARCH_IMAGE_NAME: docker.elastic.co/elasticsearch/elasticsearch ELASTICSEARCH_IMAGE_TAG: 6.6.2 ES_BOOTSTRAP_MEMORY_LOCK: 'true' OLD_ELASTIC_ADMIN_PASS: changeme ELASTIC_ADMIN_PASS: elastic_admin_pass ELASTIC_USER: elastic_user ELASTIC_USER_PASS: elastic_user_pass ELASTIC_USER_ROLE: redmic_user ES_JAVA_OPTS: '-Xms512m -Xmx512m -Djava.security.policy=file:///usr/share/elasticsearch/config/grovy-classes_whitelist.policy' ES_CLUSTER_NAME: es_dev ES_NODE_NAME: node-1 ES_DISCOVERY_ZEN_MINIMUM_MASTER_NODES: 1 ES_DISCOVERY_ZEN_PING_UNICAST_HOSTS: es6-1 ES_XPACK_SECURITY_ENABLED: 'false' ELASTIC_HOSTS: es6-1 LOGGING_LEVEL_ROOT: error LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: error DOCKER_BUILD_ARGS: --build-arg PARENT_IMAGE_NAME=${REDMIC_SERVER_IMAGE_NAME} --build-arg PARENT_IMAGE_TAG=${REDMIC_SERVER_IMAGE_TAG} STACK: api STATUS_CHECK_DELAY: 300 .deploy: script: GITLAB_REGISTRY_HOST: registry.gitlab.com CI_DEPLOY_USER: ci_deploy_user CI_DEPLOY_PASSWORD: ci_deploy_password services: - ${DIND_IMAGE_NAME}:${DIND_IMAGE_TAG} before_script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} SPRING_PROFILES_ACTIVE=${SPRING_PROFILES_ACTIVE} SPRING_DATASOURCE_USERNAME=${SPRING_DATASOURCE_USERNAME} SPRING_DATASOURCE_PASSWORD=${SPRING_DATASOURCE_PASSWORD} JOBS_DATASOURCE_USERNAME=${JOBS_DATASOURCE_USERNAME} JOBS_DATASOURCE_PASSWORD=${JOBS_DATASOURCE_PASSWORD} AWS_ACCESS_KEY=${AWS_ACCESS_KEY} AWS_SECRET_KEY=${AWS_SECRET_KEY} ELASTIC_XPACKSECURITYUSER=${ELASTIC_XPACKSECURITYUSER} PUBLIC_HOSTNAME=${PUBLIC_HOSTNAME} environment: url: https://${PUBLIC_HOSTNAME}/api/${CI_PROJECT_NAME} mkdir -p sql; chmod -R 755 sql; docker network create test - > docker run -d --rm --name postgres \ -p 5432:5432 \ --network test \ --network-alias db \ -e POSTGRES_DB \ -e POSTGRES_USER \ -e POSTGRES_PASSWORD \ -v $(pwd)/sql:/sql \ postgres:${POSTGRES_IMAGE_TAG} - > curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/oauth_database_structure_test.sql \ "https://gitlab.com/api/v4/snippets/${OAUTH_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw"; curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/oauth_database_data_test.sql \ "https://gitlab.com/api/v4/snippets/${OAUTH_DATABASE_DATA_TEST_SNIPPET_ID}/raw"; curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/user_database_structure_test.sql \ "https://gitlab.com/api/v4/snippets/${USER_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw"; curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/user_database_data_test.sql \ "https://gitlab.com/api/v4/snippets/${USER_DATABASE_DATA_TEST_SNIPPET_ID}/raw" curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/api_database_structure_test.sql \ "https://gitlab.com/api/v4/snippets/${API_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw" curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN_READ_API}" \ -o sql/task_database_structure_test.sql \ "https://gitlab.com/api/v4/snippets/${TASK_DATABASE_STRUCTURE_TEST_SNIPPET_ID}/raw" - > RETRIES=10; until docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -c 'select 1' > /dev/null 2>&1 || [ $RETRIES -eq 0 ]; do RETRIES=$((RETRIES-=1)); echo "Waiting for postgres server, ${RETRIES} remaining attempts..."; sleep 1; done; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/oauth_database_structure_test.sql; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/oauth_database_data_test.sql; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/user_database_structure_test.sql; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/user_database_data_test.sql; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/api_database_structure_test.sql; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -f /sql/task_database_structure_test.sql docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -c "ALTER ROLE ${SPRING_DATASOURCE_USERNAME} WITH PASSWORD '${SPRING_DATASOURCE_PASSWORD}'"; docker exec postgres psql -h localhost \ -d redmic \ -U ${POSTGRES_USER} \ -c "ALTER ROLE ${JOBS_DATASOURCE_USERNAME} WITH PASSWORD '${JOBS_DATASOURCE_PASSWORD}'" - > docker run -d --rm --name es6-1 \ -p 9300:9300 \ -p 9200:9200 \ --network test \ --ulimit memlock=-1:-1 \ -e ES_BOOTSTRAP_MEMORY_LOCK \ -e OLD_ELASTIC_ADMIN_PASS \ -e ELASTIC_ADMIN_PASS \ -e ELASTIC_USER \ -e ELASTIC_USER_PASS \ -e ELASTIC_USER_ROLE \ -e ES_JAVA_OPTS \ -e ES_CLUSTER_NAME \ -e ES_NODE_NAME \ -e ES_DISCOVERY_ZEN_MINIMUM_MASTER_NODES \ -e ES_DISCOVERY_ZEN_PING_UNICAST_HOSTS \ -e ES_XPACK_SECURITY_ENABLED \ ${ELASTICSEARCH_IMAGE_NAME}:${ELASTICSEARCH_IMAGE_TAG} - > RESPONSE=""; until [ "$RESPONSE" = "green" ]; do sleep 15; RESPONSE="$(curl -sS -u ${ELASTIC_USER}:${ELASTIC_USER_PASS} docker:9200/_cat/health?h=status || :)"; echo "Waiting for elasticsearch server, remaining attempts... Last output:"; echo $RESPONSE; done after_script: - rm -rf .m2/repository/es - docker stop postgres es6-1 .deploy-development: .docker-build: variables: SPRING_PROFILES_ACTIVE: pre DBLD_PARENT_IMAGE_NAME: ${REDMIC_SERVER_IMAGE_NAME} DBLD_PARENT_IMAGE_TAG: ${REDMIC_SERVER_IMAGE_TAG} .deploy-production: .deploy: variables: SPRING_PROFILES_ACTIVE: prod STACK: ${PROJECT_PARENT_NAME} STATUS_CHECK_DELAY: 300 environment: url: https://${PUBLIC_HOSTNAME}/api/${CI_PROJECT_NAME}
Dockerfile +8 −2 Original line number Diff line number Diff line ARG PARENT_IMAGE_NAME ARG PARENT_IMAGE_TAG ARG PARENT_IMAGE_NAME=registry.gitlab.com/redmic-project/docker/redmic-server ARG PARENT_IMAGE_TAG=latest FROM ${PARENT_IMAGE_NAME}:${PARENT_IMAGE_TAG} COPY /dist/*.jar ./ ARG MICROSERVICE_NAME=tasks ENV MICROSERVICE_NAME=${MICROSERVICE_NAME} ARG MICROSERVICE_PORT=8088 ENV MICROSERVICE_PORT=${MICROSERVICE_PORT} EXPOSE ${MICROSERVICE_PORT}
deploy/.env +3 −0 Original line number Diff line number Diff line PARENT_IMAGE_NAME=registry.gitlab.com/redmic-project/docker/redmic-server PARENT_IMAGE_TAG=latest MICROSERVICE_NAME=tasks MICROSERVICE_PORT=8088
deploy/docker-compose.dev.yml +11 −5 Original line number Diff line number Diff line Loading @@ -2,17 +2,23 @@ version: '3.5' services: tasks: environment: SPRING_PROFILES_ACTIVE: pre deploy: placement: constraints: - node.hostname == ${PLACEMENT_CONSTRAINTS_NODE_HOSTNAME:-hostname} resources: limits: cpus: '1' memory: 1G cpus: '${RESOURCES_LIMITS_CPUS:-1}' memory: ${RESOURCES_LIMITS_MEMORY:-1G} reservations: memory: 820M cpus: '${RESOURCES_RESERVATIONS_CPUS:-0.001}' memory: ${RESOURCES_RESERVATIONS_MEMORY:-820M} volumes: mediastorage-private-vol: name: mediastorage-private-vol name: ${MEDIASTORAGE_PRIVATE_VOL_NAME:-mediastorage-private-vol} mediastorage-public-vol: name: mediastorage-public-vol No newline at end of file name: ${MEDIASTORAGE_PUBLIC_VOL_NAME:-mediastorage-public-vol}
deploy/docker-compose.prod.yml +8 −8 Original line number Diff line number Diff line Loading @@ -2,26 +2,26 @@ version: '3.5' services: tasks: environment: SPRING_PROFILES_ACTIVE: prod deploy: placement: constraints: - node.role == worker resources: limits: cpus: '1' memory: 2G cpus: '${RESOURCES_LIMITS_CPUS:-1}' memory: ${RESOURCES_LIMITS_MEMORY:-2G} reservations: memory: 1639M cpus: '${RESOURCES_RESERVATIONS_CPUS:-0.01}' memory: ${RESOURCES_RESERVATIONS_MEMORY:-1639M} volumes: mediastorage-private-vol: name: mediastorage-private-vol name: ${MEDIASTORAGE_PRIVATE_VOL_NAME:-mediastorage-private-vol} driver: "cloudstor:aws" driver_opts: backing: shared mediastorage-public-vol: name: mediastorage-public-vol name: ${MEDIASTORAGE_PUBLIC_VOL_NAME:-mediastorage-public-vol} driver: "cloudstor:aws" driver_opts: backing: shared