├── .gitignore ├── README.md ├── env.example.yaml ├── home └── .bashrc ├── scripts ├── create-dbs ├── create-topics ├── drop-dbs ├── init ├── kafka-topics.yaml ├── migrate-db-from-13-to-17.sh └── save-schemas ├── services ├── database │ ├── .gitignore │ ├── bin │ │ └── initdb-citext.sh │ └── docker-compose.yml ├── elastic │ ├── .gitignore │ ├── elastic.yml │ └── kibana.yml ├── es │ ├── .gitignore │ ├── default.conf.template │ └── docker-compose.yml ├── kafka │ ├── .gitignore │ ├── kafka-ui.yml │ ├── kafka.yml │ └── kafka_server_jaas.conf ├── maildev │ └── docker-compose.yml ├── proxy │ ├── conf │ │ └── proxy.conf │ └── docker-compose.yml └── redis │ ├── redis-ui.yml │ └── redis.yml ├── templates ├── fpm-8.1 │ ├── docker-compose.yml │ ├── nginx │ │ └── default.conf.template │ └── php │ │ ├── Dockerfile │ │ └── entrypoint ├── fpm-8.2 │ ├── docker-compose.yml │ ├── nginx │ │ └── default.conf.template │ └── php │ │ ├── Dockerfile │ │ └── entrypoint ├── nodejs │ ├── docker-compose.yml │ └── nginx │ │ └── default.conf.template ├── swoole-8.1 │ ├── docker-compose.yml │ ├── hooks │ │ └── after-clone.sh │ ├── nginx │ │ └── default.conf.template │ └── php │ │ ├── Dockerfile │ │ └── entrypoint └── swoole-8.2 │ ├── docker-compose.yml │ ├── hooks │ └── after-clone.sh │ ├── nginx │ └── default.conf.template │ └── php │ ├── Dockerfile │ └── entrypoint └── workspace.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .DS_Store 3 | 4 | env.yaml 5 | 6 | home/* 7 | !home/.bashrc 8 | 9 | schemas 10 | apps 11 | other 12 | packages 13 | 14 | /*.sh -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ensi ELC workspace 2 | 3 | Конфигурация воркспейса [ELC](https://github.com/ensi-platform/elc) для разработки сервисов Ensi. 4 | 5 | ## Установка 6 | 7 | Клонируем воркспейс в удобное для вас место, однако если вы работаете под Windows, то клонировать воркспейс необходимо внутрь WSL. 8 | ```bash 9 | git clone git@github.com:ensi-platform/elc-workspace.git ~/work/ensi/workspace 10 | ``` 11 | Создаём сеть для проекта 12 | ``` 13 | docker network create ensi 14 | ``` 15 | Регистрируем воркспейс (важно указать полный путь, а не относительный) 16 | ``` 17 | elc workspace add ensi ~/work/ensi/workspace 18 | ``` 19 | Выполняем скрипт инициализации 20 | ```bash 21 | cd ~/work/ensi/workspace 22 | ./scripts/init 23 | ./scripts/create-dbs 24 | ``` 25 | 26 | Копируем файл env.example.yaml, даём ему имя env.yaml, обязательно задаём переменные 27 | ``` 28 | APPS_ROOT: /home//work/ensi/apps 29 | PACKAGES_PATH: /home//work/ensi/packages 30 | ``` 31 | 32 | Далее необходимо клонировать код сервисов и библиотек. 33 | Сделать это можно так же через elc. 34 | 35 | Можно выборочно клонировать нужные вам сервисы по имени 36 | ``` 37 | elc clone catalog-pim orders-oms 38 | ``` 39 | либо клонировать сразу все репозитории по тэгу 40 | ``` 41 | elc clone --tag=app # клоинровать только сервисы 42 | elc clone --tag=lib # клонировать только пакеты 43 | elc clone --tag=code # клонировать все репозитории с кодом: и сервисы и пакеты 44 | ``` 45 | 46 | Клонировать пакеты необходимо только если вы собираетесь их редактировать. 47 | По умолчанию, пакеты устанавливаются вместе с остальными зависимостями сервиса через composer. 48 | 49 | ## Подготовка сервисов к запуску 50 | 51 | При клонировании сервиса командой `elc clone` автоматически выполняется скрипт, который устанавливает зависимости сервиса, 52 | поэтому дополнительно ничего делать не нужно. 53 | 54 | Если же вы клонировали сервисы другим способом или с опцией `--no-hook`, то перед запуском сервиса следует выполнить следующие команды: 55 | 56 | ```bash 57 | elc set-hooks .git_hooks 58 | 59 | elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app npm install 60 | elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app composer install 61 | 62 | cp .env.example .env 63 | elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app php artisan key:generate 64 | 65 | elc restart 66 | ``` 67 | Бэк-сервисы работают на laravel octane, и в режиме разработки запускаются через chokidar - программу, которая следит за изменением кода и перезапускает сервер. 68 | Пока не будут установлены зависимости, сервис не сможет отвечать на запросы и будет выдавать 502 ошибку. 69 | 70 | ## Разработка composer пакетов 71 | 72 | Для работы над пакетами используется плагин [franzliedke/studio](https://github.com/franzliedke/studio). 73 | Его нужно установить композером воркспейса, т.е. в любом сервисе выполняем 74 | ```bash 75 | elc composer global require franzl/studio 76 | ``` 77 | 78 | Этот инструмент позволяет делать симлинки на пакеты, чтобы можно было одновременно править код и сервиса и пакета. 79 | Разрабатываемые пакеты (например клиенты к другим сервисам) должны лежать в папке `packages` - она монтируется во все бэк-севрисы ensi. 80 | 81 | Регистрируем пакет 82 | ```bash 83 | elc bash 84 | studio load /home//work/ensi/packages/my-package 85 | ``` 86 | 87 | Обратите внимание на то что путь до пакета - это путь на хост машине. Папка с пакетами монтируется в контейнер по тому же пути 88 | по которому она лежит на хосте. 89 | 90 | Если пакет не был ранее подключён в текущий сервис, то его надо прописать в composer.json руками, а не через `composer require` 91 | ```json 92 | { 93 | "require": { 94 | "project/my-package": "dev-master" 95 | } 96 | } 97 | ``` 98 | 99 | Далее, для того чтобы создался симлинк, нужно обновить пакет 100 | ```bash 101 | elc composer update project/my-package 102 | ``` 103 | 104 | Чтобы убрать симлинк, вы можете либо убрать регистрацию пакета 105 | ```bash 106 | elc bash 107 | studio unload /home//work/ensi/packages/my-package 108 | ``` 109 | либо переименовать файл `studio.json` в `studio.json.txt`. 110 | В обоих случаях нужно снова обновить пакет. 111 | 112 | > Вы можете поместить файл studio.json в папку packages, а в сервисы поместить симлинк на этот файл. Так все сервисы будут шарить между собой настройки симлинков пакетов. 113 | 114 | **Важно**: когда вы делаете симлинк на пакет, в composer.lock записывается локальный путь до пакета на вашей машине. Нужно следить за тем чтобы эти изменения не попадали в коммиты. 115 | 116 | При добавлении нового пакета в систему вам нужно зарегистрировать его в файле workspace.yaml в секции modules 117 | ```yaml 118 | modules: 119 | template--sdk-php: 120 | path: ${PACKAGES_PATH}/${TEMPLATE_SDK_PHP_PACKAGE_PATH:-template--sdk-php} 121 | hosted_in: cms-cms 122 | exec_path: ${PACKAGES_PATH}/${TEMPLATE_SDK_PHP_PACKAGE_PATH:-template--sdk-php} 123 | ``` 124 | Поля `path` и `exec_path` должны иметь одинаковое значение т.к. пакеты монтируются в контейнер по тому же пути что и на хосте. 125 | Поле `hosted_in` должно указывать на сервис в контейнере которого вы хотите выполнять команды для этого пакета. 126 | 127 | ## Запуск сервиса [admin-gui-frontend](https://gitlab.com/greensight/ensi/admin-gui/admin-gui-frontend) 128 | Для того чтобы запустить Frontend админки, вам нужно перейти в папку сервиса и запустить команду 129 | 130 | ``` 131 | elc start 132 | ``` 133 | У вас произойдет сборка и запуск сервиса Frontend Админки. 134 | 135 | По умолчанию адрес сервиса: http://admin-gui-frontend.ensi.127.0.0.1.nip.io 136 | 137 | ## Скрипты 138 | 139 | ```bash 140 | ./scripts/save-schemas 141 | ``` 142 | Генерирует для каждого сервиса полную openapi схему в формате yaml и сохраняет в папку `workspace/schemas`. Полезно для дальнейшего импорта в Postman. 143 | 144 | ## Сервисы 145 | 146 | ### Запуск/остановка сервисов инфраструктуры 147 | ``` 148 | elc start 149 | elc stop 150 | ``` 151 | 152 | | Имя сервиса | Адрес | Описание | 153 | | ------------- | ------------- | ------------- | 154 | | database | database.ensi.127.0.0.1.nip.io:5432 | Postgres 13 | 155 | | elastic | http://elastic.ensi.127.0.0.1.nip.io:9200 | Elasticsearch 7.9.2 | 156 | | kibana | http://kibana.ensi.127.0.0.1.nip.io | Kibana 7.9.2 | 157 | | es | http://es.ensi.127.0.0.1.nip.io | Nginx 1.19 | 158 | | kafka | kafka.ensi.127.0.0.1.nip.io:9092 | Kafka | 159 | | kafka-ui | http://kafka-ui.ensi.127.0.0.1.nip.io | Kafka-UI | 160 | | maildev | http://maildev.ensi.127.0.0.1.nip.io | Maildev 2.0.5 | 161 | | redis | redis.ensi.127.0.0.1.nip.io:6379 | Redis 6 | 162 | | redis-ui | http://redis-ui.ensi.127.0.0.1.nip.io | Redis-UI | 163 | 164 | 165 | ## Переключение между версиями php 166 | 167 | Чтобы переключить сервис на другую версию php, вам нужно зайти в файл workspace.yaml в диррективе templates: вы можете посмотреть все версии php/node которые вы можете использовать. 168 | 169 | ``` 170 | templates: 171 | nodejs: 172 | path: ${WORKSPACE_PATH}/templates/nodejs 173 | variables: 174 | APP_IMAGE: nodejs:latest 175 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine 176 | fpm-8.1: 177 | path: ${WORKSPACE_PATH}/templates/fpm-8.1 178 | variables: 179 | BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.1-master-2022may13 180 | APP_IMAGE: fpm-8.1:latest 181 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine 182 | swoole-8.1: 183 | path: ${WORKSPACE_PATH}/templates/swoole-8.1 184 | after_clone_hook: ${TPL_PATH}/hooks/after-clone.sh 185 | variables: 186 | BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.1-master-2023mar4-1-swoole 187 | APP_IMAGE: swoole-8.1:latest 188 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine 189 | fpm-8.2: 190 | path: ${WORKSPACE_PATH}/templates/fpm-8.2 191 | variables: 192 | BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.2-task-109866-2023july21-1 193 | APP_IMAGE: fpm-8.2:latest 194 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine 195 | swoole-8.2: 196 | path: ${WORKSPACE_PATH}/templates/swoole-8.2 197 | after_clone_hook: ${TPL_PATH}/hooks/after-clone.sh 198 | variables: 199 | BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.2-task-109866-2023july21-1-swoole 200 | APP_IMAGE: swoole-8.2:latest 201 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine 202 | 203 | ``` 204 | 205 | Изменив значение extends со swoole-8.1 на swoole-8.2 то данный сервис будет использовать php 8.2 206 | 207 | ``` 208 | cms-cms: 209 | extends: swoole-8.2 210 | path: ${APPS_ROOT}/${SVC_CMS_CMS_PATH:-cms/cms} 211 | repository: git@gitlab.com:greensight/ensi/cms/cms.git 212 | tags: 213 | - code 214 | - app 215 | - backend 216 | dependencies: 217 | database: [default, hook] 218 | proxy: [default] 219 | variables: 220 | DB_NAME: cms_cms 221 | ``` 222 | 223 | ## Upgrade postgres from 13 to 17 version 224 | 225 | Just run script `migrate-db-from-13-to-17.sh` from workspace folder 226 | ``` 227 | ./scripts/migrate-db-from-13-to-17.sh 228 | ``` 229 | it can prompt a sudo password, because it works with postgres data dir. 230 | 231 | Script makes two backups: 232 | - `backup.sql` in current folder 233 | - `data-13-backup` in database service folder 234 | 235 | Keep this files until you prove that database works correct. 236 | -------------------------------------------------------------------------------- /env.example.yaml: -------------------------------------------------------------------------------- 1 | # here you can redefine any global variables from workspace.yaml 2 | # it's not mandatory 3 | variables: [] 4 | # APPS_ROOT: /home/madridianfox/work/ensi/apps 5 | # PACKAGES_PATH: /home/madridianfox/work/ensi/packages 6 | 7 | # here you can add your local components or redefine any parameters of base components 8 | components: {} 9 | # my-local-component: 10 | # path: ${WORKSPACE_PATH}/apps/my-app 11 | # variables: 12 | # APP_IMAGE: app:v1 13 | # cms-cms: 14 | # alias: my-local-alias 15 | # tags: 16 | # - my-additional-tag -------------------------------------------------------------------------------- /home/.bashrc: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | HISTCONTROL=ignoreboth 4 | shopt -s histappend 5 | HISTSIZE=10000 6 | HISTFILESIZE=20000 7 | shopt -s checkwinsize 8 | umask 0000 9 | 10 | export PATH=${PATH}:/tmp/home/composer/vendor/bin 11 | export PHP_IDE_CONFIG=serverName=local 12 | 13 | for f in $HOME/*.sh; do 14 | if [ -e "$f" ]; then 15 | . "$f" 16 | fi 17 | done -------------------------------------------------------------------------------- /scripts/create-dbs: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | services=$(elc list --tag=app) 4 | 5 | for service in $services; do 6 | db=$(elc vars $service | sed -En 's/DB_NAME=(.*)/\1/p') 7 | if [ "$db" != "" ]; then 8 | printf "Create database %-50s" "${db}" 9 | elc --svc=database psql -Upostgres -c "create database ${db};" &> /dev/null 10 | elc --svc=database psql -Upostgres -c "create database ${db}_test;" &> /dev/null 11 | echo " [OK]" 12 | 13 | extensions=$(elc vars $service | sed -En 's/DB_EXT=(.*)/\1/p' | tr ',' '\n') 14 | for extension in $extensions; do 15 | printf "Create extension ${extension} for %-37s" "${db}" 16 | elc --svc=database psql -Upostgres ${db} -c "create extension if not exists ${extension};" &> /dev/null 17 | elc --svc=database psql -Upostgres ${db}_test -c "create extension if not exists ${extension};" &> /dev/null 18 | echo " [OK]" 19 | done 20 | fi 21 | done 22 | -------------------------------------------------------------------------------- /scripts/create-topics: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker run --rm -it -v $PWD:/wd -w /wd --network=host dockerhub.greensight.ru/services/kafka-tools:v1 /app/main.py \ 4 | --bootstrap-server=127.0.0.1:9092 \ 5 | --kafka-login=ensi --kafka-password=secret \ 6 | --topics-file=scripts/kafka-topics.yaml \ 7 | --topic-name=all -------------------------------------------------------------------------------- /scripts/drop-dbs: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | services=$(elc list --tag=app) 4 | 5 | for service in $services; do 6 | db=$(elc vars $service | sed -En 's/DB_NAME=(.*)/\1/p') 7 | if [ "$db" != "" ]; then 8 | printf "Drop database %-50s" "${db}" 9 | elc --svc=database psql -Upostgres -c "drop database ${db};" &> /dev/null 10 | elc --svc=database psql -Upostgres -c "drop database ${db}_test;" &> /dev/null 11 | echo " [OK]" 12 | fi 13 | done -------------------------------------------------------------------------------- /scripts/init: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mkdir -p home/{.config,.npm,composer,composer_cache} 4 | chmod -R 777 home/{.config,.npm,composer,composer_cache} 5 | 6 | mkdir -p services/{database,elastic,kafka}/data 7 | mkdir -p services/es/{data,cache} 8 | mkdir -p services/es/data/{public,protected} 9 | chmod -R 777 services/{database,elastic,es,kafka}/data -------------------------------------------------------------------------------- /scripts/kafka-topics.yaml: -------------------------------------------------------------------------------- 1 | x-default-topic-template: &default_topic_template 2 | partitions: 1 3 | replicas: 1 4 | config: 5 | - name: retention.ms 6 | value: 60480000 # 7 days 7 | - name: retention.bytes 8 | value: 1073741824 # 1 Gb 9 | 10 | topics: 11 | - <<: *default_topic_template 12 | name: local.customer-auth.fact.generated-password-token.1 13 | - <<: *default_topic_template 14 | name: local.customers.fact.changes-email.1 15 | - <<: *default_topic_template 16 | name: local.admin-auth.fact.generated-password-token.1 17 | - <<: *default_topic_template 18 | name: local.customer-auth.fact.user-updated.1 19 | - <<: *default_topic_template 20 | name: local.customers.fact.customer-updated.1 21 | - <<: *default_topic_template 22 | name: local.customer-auth.fact.password-reset.1 23 | - <<: *default_topic_template 24 | name: local.customer-auth.fact.password-reset-success.1 25 | - <<: *default_topic_template 26 | name: local.catalog.fact.offers.1 27 | - <<: *default_topic_template 28 | name: local.catalog.fact.brands.1 29 | - <<: *default_topic_template 30 | name: local.catalog.fact.categories.1 31 | - <<: *default_topic_template 32 | name: local.catalog.fact.property-directory-values.1 33 | - <<: *default_topic_template 34 | name: local.catalog.fact.properties.1 35 | - <<: *default_topic_template 36 | name: local.catalog.fact.published-images.1 37 | - <<: *default_topic_template 38 | name: local.catalog.fact.published-products.1 39 | - <<: *default_topic_template 40 | name: local.catalog.fact.published-property-values.1 41 | - <<: *default_topic_template 42 | name: local.catalog.fact.actual-category-properties.1 43 | - <<: *default_topic_template 44 | name: local.catalog.fact.product-groups.1 45 | - <<: *default_topic_template 46 | name: local.catalog.fact.product-group-products.1 47 | - <<: *default_topic_template 48 | name: local.orders.fact.orders.1 49 | - <<: *default_topic_template 50 | name: local.units.fact.store-pickup-times.1 51 | - <<: *default_topic_template 52 | name: local.oms.deliveries.1 53 | - <<: *default_topic_template 54 | name: local.logistic.fact.delivery-orders.1 55 | - <<: *default_topic_template 56 | name: local.orders.fact.orders.1 57 | 58 | -------------------------------------------------------------------------------- /scripts/migrate-db-from-13-to-17.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -xe 4 | 5 | elc stop database 6 | 7 | sudo cp -r $PWD/services/database/data $PWD/services/database/data-13-backup 8 | 9 | docker rm -f pg_13_for_migrate 10 | 11 | docker run -d --name pg_13_for_migrate \ 12 | -v $PWD/services/database/data:/var/lib/postgresql/data \ 13 | dockerhub.greensight.ru/services/postgis:13-3.1 14 | 15 | sleep 5 16 | 17 | while ! docker exec -it pg_13_for_migrate pg_isready; do 18 | sleep 1 19 | done 20 | 21 | echo Done 22 | 23 | docker exec -it pg_13_for_migrate pg_dumpall -U postgres --clean > backup.sql 24 | 25 | docker rm -f pg_13_for_migrate 26 | 27 | sudo rm -rf $PWD/services/database/data 28 | sudo mkdir $PWD/services/database/data 29 | sudo chmod 777 $PWD/services/database/data 30 | 31 | elc start database 32 | sleep 5 33 | 34 | cat backup.sql | elc exec --no-tty -c database psql -U postgres 35 | 36 | echo "ALTER USER postgres WITH PASSWORD 'example';" | elc exec --no-tty -c database psql -U postgres 37 | -------------------------------------------------------------------------------- /scripts/save-schemas: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | services=$(elc list --tag=app) 4 | 5 | schemas_path=$(elc vars | sed -En 's/WORKSPACE_PATH=(.*)/\1/p')/schemas 6 | mkdir -p ${schemas_path} 7 | 8 | for service in $services; do 9 | printf "Generate yaml schema for %-30s" "${service}" 10 | 11 | folder=$(elc vars $service | sed -En 's/SVC_PATH=(.*)/\1/p') 12 | if [ -f "$folder"/vendor/bin/php-openapi ]; then 13 | cd $folder && 14 | elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app ./vendor/bin/php-openapi inline public/api-docs/v1/index.yaml public/api-docs/v1/temp_schema.yaml -s &> /dev/null && 15 | mv ${folder}/public/api-docs/v1/temp_schema.yaml ${schemas_path}/${service}.yaml 16 | echo " [OK]" 17 | else 18 | echo " [FAIL]" 19 | fi 20 | done 21 | 22 | printf "Schemas saved in %s" "${schemas_path}" -------------------------------------------------------------------------------- /services/database/.gitignore: -------------------------------------------------------------------------------- 1 | data/* 2 | cache/* -------------------------------------------------------------------------------- /services/database/bin/initdb-citext.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | "${psql[@]}" <<- 'EOSQL' 4 | CREATE EXTENSION IF NOT EXISTS citext; 5 | \c template1 6 | CREATE EXTENSION IF NOT EXISTS citext; 7 | EOSQL 8 | -------------------------------------------------------------------------------- /services/database/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $APP_IMAGE 4 | networks: 5 | - dev 6 | hostname: "$APP_NAME.$BASE_DOMAIN" 7 | volumes: 8 | - "${SVC_PATH}/data:/var/lib/postgresql/data" 9 | - "${SVC_PATH}/bin/initdb-citext.sh:/docker-entrypoint-initdb.d/citext.sh" 10 | ports: 11 | - "5432:5432" 12 | environment: 13 | POSTGRES_PASSWORD: example 14 | 15 | networks: 16 | dev: 17 | external: true 18 | name: $NETWORK -------------------------------------------------------------------------------- /services/elastic/.gitignore: -------------------------------------------------------------------------------- 1 | data/* 2 | cache/* -------------------------------------------------------------------------------- /services/elastic/elastic.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $APP_IMAGE 4 | hostname: "$APP_NAME.$BASE_DOMAIN" 5 | networks: 6 | - dev 7 | environment: 8 | - "discovery.type=single-node" 9 | - "bootstrap.memory_lock=true" 10 | - "read_only_allow_delete=false" 11 | - "ES_JAVA_OPTS=-Xms${JAVA_MEMORY} -Xmx${JAVA_MEMORY}" 12 | - "xpack.security.enabled=false" 13 | ulimits: 14 | memlock: 15 | soft: -1 16 | hard: -1 17 | volumes: 18 | - "${SVC_PATH}/data:/usr/share/elasticsearch/data:rw" 19 | ports: 20 | - "9200:9200" 21 | 22 | networks: 23 | dev: 24 | external: true 25 | name: $NETWORK -------------------------------------------------------------------------------- /services/elastic/kibana.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $APP_IMAGE 4 | hostname: "$APP_NAME.$BASE_DOMAIN" 5 | networks: 6 | - dev 7 | environment: 8 | - "ELASTICSEARCH_URL=http://elastic.$BASE_DOMAIN:9200" 9 | - "ELASTICSEARCH_HOSTS=http://elastic.$BASE_DOMAIN:9200" 10 | - "XPACK_GRAPH_ENABLED=false" 11 | - "XPACK_ML_ENABLED=false" 12 | - "XPACK_REPORTING_ENABLED=false" 13 | - "XPACK_WATCHER_ENABLED=false" 14 | - "VIRTUAL_HOST=$APP_NAME.$BASE_DOMAIN" 15 | - "VIRTUAL_PORT=5601" 16 | 17 | networks: 18 | dev: 19 | external: true 20 | name: $NETWORK -------------------------------------------------------------------------------- /services/es/.gitignore: -------------------------------------------------------------------------------- 1 | data/* 2 | cache/* -------------------------------------------------------------------------------- /services/es/default.conf.template: -------------------------------------------------------------------------------- 1 | proxy_cache_path /var/lib/nginx/proxy_cache levels=1:2 keys_zone=all:15m max_size=1G; 2 | 3 | server { 4 | listen 80; 5 | server_name ${ORIGINAL_HOST}; 6 | root /var/www/data; 7 | 8 | resolver 127.0.0.11 ipv6=off; 9 | 10 | index index.php; 11 | 12 | charset utf-8; 13 | 14 | client_max_body_size 500M; 15 | large_client_header_buffers 4 16k; 16 | client_body_buffer_size 32K; 17 | client_header_buffer_size 2k; 18 | http2_max_header_size 512k; 19 | http2_max_field_size 256k; 20 | disable_symlinks off; 21 | 22 | location / { 23 | expires max; 24 | add_header Cache-Control "public"; 25 | } 26 | } 27 | 28 | server { 29 | listen 80; 30 | server_name ${IMGPROXY_HOST}; 31 | root /var/www/data; 32 | 33 | resolver 127.0.0.11 ipv6=off; 34 | 35 | index index.php; 36 | 37 | charset utf-8; 38 | 39 | client_max_body_size 500M; 40 | large_client_header_buffers 4 16k; 41 | client_body_buffer_size 32K; 42 | client_header_buffer_size 2k; 43 | http2_max_header_size 512k; 44 | http2_max_field_size 256k; 45 | disable_symlinks off; 46 | 47 | location / { 48 | expires max; 49 | add_header Cache-Control "public"; 50 | proxy_pass http://127.0.0.1:8080; 51 | 52 | proxy_cache all; 53 | proxy_cache_valid 404 502 503 1m; 54 | proxy_cache_valid any 12h; 55 | proxy_cache_key $uri; 56 | } 57 | } -------------------------------------------------------------------------------- /services/es/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $NGINX_IMAGE 4 | hostname: "$APP_NAME.$BASE_DOMAIN" 5 | networks: 6 | - dev 7 | environment: 8 | VIRTUAL_HOST: "es.$BASE_DOMAIN,imgproxy.$BASE_DOMAIN" 9 | ORIGINAL_HOST: "es.$BASE_DOMAIN" 10 | IMGPROXY_HOST: "imgproxy.$BASE_DOMAIN" 11 | volumes: 12 | - "${SVC_PATH}/default.conf.template:/etc/nginx/templates/default.conf.template" 13 | - "${SVC_PATH}/cache:/var/lib/nginx/proxy_cache" 14 | - "${SVC_PATH}/data/public:/var/www/data" 15 | 16 | imgproxy: 17 | image: $IMGPROXY_IMAGE 18 | environment: 19 | IMGPROXY_LOCAL_FILESYSTEM_ROOT: /data 20 | network_mode: "service:app" 21 | volumes: 22 | - "${SVC_PATH}/data/public:/data" 23 | 24 | networks: 25 | dev: 26 | external: true 27 | name: $NETWORK -------------------------------------------------------------------------------- /services/kafka/.gitignore: -------------------------------------------------------------------------------- 1 | data/* 2 | cache/* -------------------------------------------------------------------------------- /services/kafka/kafka-ui.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $APP_IMAGE 4 | hostname: "$APP_NAME.$BASE_DOMAIN" 5 | networks: 6 | - dev 7 | environment: 8 | VIRTUAL_HOST: "$APP_NAME.$BASE_DOMAIN" 9 | VIRTUAL_PORT: "8080" 10 | KAFKA_CLUSTERS_0_NAME: local 11 | KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka.$BASE_DOMAIN:9092 12 | KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper.kafka.$BASE_DOMAIN:2181 13 | KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL: SASL_PLAINTEXT 14 | KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM: PLAIN 15 | KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG: 'org.apache.kafka.common.security.plain.PlainLoginModule required username="client" password="secret";' 16 | 17 | networks: 18 | dev: 19 | external: true 20 | name: $NETWORK -------------------------------------------------------------------------------- /services/kafka/kafka.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $KAFKA_IMAGE 4 | hostname: "$APP_NAME.$BASE_DOMAIN" 5 | networks: 6 | - dev 7 | expose: 8 | - "9093" 9 | environment: 10 | KAFKA_SECURITY_PROTOCOL: SASL_PLAINTEXT 11 | KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:SASL_PLAINTEXT 12 | KAFKA_SASL_ENABLED_MECHANISMS: PLAIN 13 | KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN 14 | KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE 15 | KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092 16 | KAFKA_ADVERTISED_LISTENERS: INSIDE://$APP_NAME.$BASE_DOMAIN:9093,OUTSIDE://$APP_NAME.$BASE_DOMAIN:9092 17 | KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true' 18 | KAFKA_ZOOKEEPER_CONNECT: zookeeper.$APP_NAME.$BASE_DOMAIN:2181 19 | KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka-conf/kafka_server_jaas.conf" 20 | volumes: 21 | - "${SVC_PATH}/data:/etc/kafka" 22 | - "${SVC_PATH}/kafka_server_jaas.conf:/etc/kafka-conf/kafka_server_jaas.conf" 23 | ports: 24 | - "9092:9092" 25 | depends_on: 26 | - zookeeper 27 | zookeeper: 28 | image: $ZOOKEEPER_IMAGE 29 | hostname: "zookeeper.$APP_NAME.$BASE_DOMAIN" 30 | ulimits: 31 | nofile: 32 | soft: 65536 33 | hard: 65536 34 | expose: 35 | - "2181" 36 | networks: 37 | - dev 38 | 39 | networks: 40 | dev: 41 | external: true 42 | name: $NETWORK -------------------------------------------------------------------------------- /services/kafka/kafka_server_jaas.conf: -------------------------------------------------------------------------------- 1 | KafkaServer { 2 | org.apache.kafka.common.security.plain.PlainLoginModule required 3 | username="ensi" 4 | password="secret" 5 | user_client="secret" 6 | user_ensi="secret"; 7 | }; -------------------------------------------------------------------------------- /services/maildev/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $APP_IMAGE 4 | hostname: "$APP_NAME.$BASE_DOMAIN" 5 | command: bin/maildev --incoming-user $SMTP_USER --incoming-pass $SMTP_PASSWORD 6 | networks: 7 | - dev 8 | ports: 9 | - "1025:1025" 10 | environment: 11 | - "VIRTUAL_HOST=$APP_NAME.$BASE_DOMAIN" 12 | - "VIRTUAL_PORT=1080" 13 | 14 | networks: 15 | dev: 16 | external: true 17 | name: $NETWORK -------------------------------------------------------------------------------- /services/proxy/conf/proxy.conf: -------------------------------------------------------------------------------- 1 | client_max_body_size 500m; 2 | proxy_connect_timeout 3600s; 3 | proxy_send_timeout 3600s; 4 | proxy_read_timeout 3600s; -------------------------------------------------------------------------------- /services/proxy/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $APP_IMAGE 4 | networks: 5 | - dev 6 | volumes: 7 | - "${SVC_PATH}/conf/proxy.conf:/etc/nginx/conf.d/proxy.conf:ro" 8 | - "/var/run/docker.sock:/tmp/docker.sock:ro" 9 | ports: 10 | - "80:80" 11 | 12 | networks: 13 | dev: 14 | external: true 15 | name: $NETWORK -------------------------------------------------------------------------------- /services/redis/redis-ui.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $APP_IMAGE 4 | hostname: "$APP_NAME.$BASE_DOMAIN" 5 | networks: 6 | - dev 7 | environment: 8 | - "VIRTUAL_HOST=$APP_NAME.$BASE_DOMAIN" 9 | - "VIRTUAL_PORT=8081" 10 | - "REDIS_HOSTS=local:redis.$BASE_DOMAIN:6379" 11 | 12 | networks: 13 | dev: 14 | external: true 15 | name: $NETWORK -------------------------------------------------------------------------------- /services/redis/redis.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $APP_IMAGE 4 | hostname: "$APP_NAME.$BASE_DOMAIN" 5 | networks: 6 | - dev 7 | ports: 8 | - "6379:6379" 9 | 10 | networks: 11 | dev: 12 | external: true 13 | name: $NETWORK -------------------------------------------------------------------------------- /templates/fpm-8.1/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $WORKSPACE_NAME/$APP_IMAGE 4 | build: 5 | context: $TPL_PATH/php 6 | args: 7 | - BASE_IMAGE=$BASE_IMAGE 8 | - USER_ID=$USER_ID 9 | - GROUP_ID=$GROUP_ID 10 | hostname: "$APP_NAME.$BASE_DOMAIN" 11 | extra_hosts: 12 | - "host.docker.internal:host-gateway" 13 | environment: 14 | VIRTUAL_HOST: "$APP_NAME.$BASE_DOMAIN" 15 | VIRTUAL_PORT: "80" 16 | HOME: /tmp/home 17 | COMPOSER_HOME: /tmp/home/composer 18 | COMPOSER_CACHE_DIR: /tmp/home/composer_cache 19 | working_dir: /var/www 20 | entrypoint: 21 | - "/usr/local/bin/entrypoint" 22 | volumes: 23 | - "$SVC_PATH:/var/www" 24 | - "$HOME_PATH:/tmp/home" 25 | - "$HOME_PATH/.npm:/.npm" 26 | - "$HOME_PATH/.config:/.config" 27 | - "$PACKAGES_PATH:$PACKAGES_PATH" 28 | - "$TPL_PATH/php/entrypoint:/usr/local/bin/entrypoint" 29 | networks: 30 | - dev 31 | nginx: 32 | image: $NGINX_IMAGE 33 | volumes: 34 | - "$SVC_PATH:/var/www" 35 | - "$TPL_PATH/nginx/default.conf.template:/etc/nginx/conf.d/default.conf" 36 | network_mode: "service:app" 37 | depends_on: 38 | - app 39 | 40 | networks: 41 | dev: 42 | external: true 43 | name: $NETWORK -------------------------------------------------------------------------------- /templates/fpm-8.1/nginx/default.conf.template: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name _ default; 4 | root /var/www/public; 5 | resolver 127.0.0.11; 6 | 7 | index index.php; 8 | charset utf-8; 9 | 10 | client_max_body_size 500M; 11 | large_client_header_buffers 4 16k; 12 | client_body_buffer_size 32K; 13 | client_header_buffer_size 2k; 14 | http2_max_header_size 512k; 15 | http2_max_field_size 256k; 16 | disable_symlinks off; 17 | 18 | location / { 19 | try_files $uri $uri/ /index.php?$query_string; 20 | } 21 | 22 | error_page 404 /index.php; 23 | 24 | location ~ \.php$ { 25 | fastcgi_pass 127.0.0.1:9000; 26 | fastcgi_index index.php; 27 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 28 | include fastcgi_params; 29 | fastcgi_read_timeout 3600s; 30 | } 31 | 32 | location /api-docs { 33 | # kill cache 34 | add_header Last-Modified $date_gmt; 35 | add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; 36 | if_modified_since off; 37 | expires off; 38 | etag off; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /templates/fpm-8.1/php/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BASE_IMAGE 2 | 3 | FROM $BASE_IMAGE 4 | 5 | ARG USER_ID 6 | ARG GROUP_ID 7 | 8 | RUN addgroup --gid $GROUP_ID user 9 | RUN adduser -u $GROUP_ID -S -D -H -G user user 10 | RUN addgroup www-data user 11 | RUN addgroup user www-data 12 | 13 | RUN apk add npm git openjdk8-jre-base bash htop vim mc 14 | 15 | COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer 16 | 17 | RUN apk add --virtual .build-deps --no-cache --update autoconf file g++ gcc libc-dev make pkgconf re2c zlib-dev linux-headers && \ 18 | pecl install xdebug && \ 19 | docker-php-ext-enable xdebug && \ 20 | apk del .build-deps -------------------------------------------------------------------------------- /templates/fpm-8.1/php/entrypoint: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | umask 0000 4 | 5 | cd /var/www 6 | 7 | if [ ! -e /var/www/storage/ensi ] && [ -e /var/data ]; then 8 | ln -s /var/data /var/www/storage/ensi 9 | fi 10 | 11 | if [ ! -L /var/www/public/storage ]; then 12 | if [ -e vendor ]; then 13 | php artisan storage:link 14 | fi 15 | fi 16 | 17 | DEBUG_HOST=$(sed "s/^#.*//" .env | grep -oE 'DEBUG_HOST=.*' | sed -r 's/DEBUG_HOST=(.*)/\1/') 18 | DEBUG_PORT=$(sed "s/^#.*//" .env | grep -oE 'DEBUG_PORT=.*' | sed -r 's/DEBUG_PORT=(.*)/\1/') 19 | 20 | if [ "${DEBUG_HOST}" != "" ]; then 21 | { 22 | echo "" 23 | echo "xdebug.mode=develop,debug" 24 | echo "xdebug.client_host=${DEBUG_HOST}" 25 | echo "xdebug.client_port=${DEBUG_PORT}" 26 | echo "max_execution_time=3600" 27 | echo "" 28 | } >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 29 | sed 's/request_terminate_timeout =.*/request_terminate_timeout = 3600s/' -i /usr/local/etc/php-fpm.d/www.conf 30 | fi 31 | 32 | PHP_IDE_CONFIG=serverName=local \ 33 | php-fpm -R -------------------------------------------------------------------------------- /templates/fpm-8.2/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $WORKSPACE_NAME/$APP_IMAGE 4 | build: 5 | context: $TPL_PATH/php 6 | args: 7 | - BASE_IMAGE=$BASE_IMAGE 8 | - USER_ID=$USER_ID 9 | - GROUP_ID=$GROUP_ID 10 | hostname: "$APP_NAME.$BASE_DOMAIN" 11 | extra_hosts: 12 | - "host.docker.internal:host-gateway" 13 | environment: 14 | VIRTUAL_HOST: "$APP_NAME.$BASE_DOMAIN" 15 | VIRTUAL_PORT: "80" 16 | HOME: /tmp/home 17 | COMPOSER_HOME: /tmp/home/composer 18 | COMPOSER_CACHE_DIR: /tmp/home/composer_cache 19 | working_dir: /var/www 20 | entrypoint: 21 | - "/usr/local/bin/entrypoint" 22 | volumes: 23 | - "$SVC_PATH:/var/www" 24 | - "$HOME_PATH:/tmp/home" 25 | - "$HOME_PATH/.npm:/.npm" 26 | - "$HOME_PATH/.config:/.config" 27 | - "$PACKAGES_PATH:$PACKAGES_PATH" 28 | - "$TPL_PATH/php/entrypoint:/usr/local/bin/entrypoint" 29 | networks: 30 | - dev 31 | nginx: 32 | image: $NGINX_IMAGE 33 | volumes: 34 | - "$SVC_PATH:/var/www" 35 | - "$TPL_PATH/nginx/default.conf.template:/etc/nginx/conf.d/default.conf" 36 | network_mode: "service:app" 37 | depends_on: 38 | - app 39 | 40 | networks: 41 | dev: 42 | external: true 43 | name: $NETWORK -------------------------------------------------------------------------------- /templates/fpm-8.2/nginx/default.conf.template: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name _ default; 4 | root /var/www/public; 5 | resolver 127.0.0.11; 6 | 7 | index index.php; 8 | charset utf-8; 9 | 10 | client_max_body_size 500M; 11 | large_client_header_buffers 4 16k; 12 | client_body_buffer_size 32K; 13 | client_header_buffer_size 2k; 14 | http2_max_header_size 512k; 15 | http2_max_field_size 256k; 16 | disable_symlinks off; 17 | 18 | location / { 19 | try_files $uri $uri/ /index.php?$query_string; 20 | } 21 | 22 | error_page 404 /index.php; 23 | 24 | location ~ \.php$ { 25 | fastcgi_pass 127.0.0.1:9000; 26 | fastcgi_index index.php; 27 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 28 | include fastcgi_params; 29 | fastcgi_read_timeout 3600s; 30 | } 31 | 32 | location /api-docs { 33 | # kill cache 34 | add_header Last-Modified $date_gmt; 35 | add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; 36 | if_modified_since off; 37 | expires off; 38 | etag off; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /templates/fpm-8.2/php/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BASE_IMAGE 2 | 3 | FROM $BASE_IMAGE 4 | 5 | ARG USER_ID 6 | ARG GROUP_ID 7 | 8 | RUN addgroup --gid $GROUP_ID user 9 | RUN adduser -u $GROUP_ID -S -D -H -G user user 10 | RUN addgroup www-data user 11 | RUN addgroup user www-data 12 | 13 | RUN apk add npm git openjdk8-jre-base bash htop vim mc 14 | 15 | COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer 16 | 17 | RUN apk add --virtual .build-deps --no-cache --update autoconf file g++ gcc libc-dev make pkgconf re2c zlib-dev linux-headers && \ 18 | pecl install xdebug && \ 19 | docker-php-ext-enable xdebug && \ 20 | apk del .build-deps -------------------------------------------------------------------------------- /templates/fpm-8.2/php/entrypoint: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | umask 0000 4 | 5 | cd /var/www 6 | 7 | if [ ! -e /var/www/storage/ensi ] && [ -e /var/data ]; then 8 | ln -s /var/data /var/www/storage/ensi 9 | fi 10 | 11 | if [ ! -L /var/www/public/storage ]; then 12 | if [ -e vendor ]; then 13 | php artisan storage:link 14 | fi 15 | fi 16 | 17 | DEBUG_HOST=$(sed "s/^#.*//" .env | grep -oE 'DEBUG_HOST=.*' | sed -r 's/DEBUG_HOST=(.*)/\1/') 18 | DEBUG_PORT=$(sed "s/^#.*//" .env | grep -oE 'DEBUG_PORT=.*' | sed -r 's/DEBUG_PORT=(.*)/\1/') 19 | 20 | if [ "${DEBUG_HOST}" != "" ]; then 21 | { 22 | echo "" 23 | echo "xdebug.mode=develop,debug" 24 | echo "xdebug.client_host=${DEBUG_HOST}" 25 | echo "xdebug.client_port=${DEBUG_PORT}" 26 | echo "max_execution_time=3600" 27 | echo "" 28 | } >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 29 | sed 's/request_terminate_timeout =.*/request_terminate_timeout = 3600s/' -i /usr/local/etc/php-fpm.d/www.conf 30 | fi 31 | 32 | PHP_IDE_CONFIG=serverName=local \ 33 | php-fpm -R -------------------------------------------------------------------------------- /templates/nodejs/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $WORKSPACE_NAME/$APP_IMAGE 4 | build: 5 | context: $SVC_PATH 6 | hostname: "$APP_NAME.$BASE_DOMAIN" 7 | environment: 8 | ADMIN_GUI_BACKEND_SERVICE_HOST: $API_HOST 9 | ADMIN_GUI_FRONTEND_SERVICE_HOST: "http://$APP_NAME.$BASE_DOMAIN" 10 | VIRTUAL_HOST: "$APP_NAME.$BASE_DOMAIN" 11 | VIRTUAL_PORT: "80" 12 | extra_hosts: 13 | - "host.docker.internal:host-gateway" 14 | networks: 15 | - dev 16 | nginx: 17 | image: $NGINX_IMAGE 18 | environment: 19 | BACKEND_DOMAIN: $API_HOST 20 | volumes: 21 | - "$SVC_PATH:/var/www" 22 | - "$TPL_PATH/nginx/default.conf.template:/etc/nginx/templates/default.conf.template" 23 | network_mode: "service:app" 24 | depends_on: 25 | - app 26 | 27 | networks: 28 | dev: 29 | external: true 30 | name: $NETWORK 31 | -------------------------------------------------------------------------------- /templates/nodejs/nginx/default.conf.template: -------------------------------------------------------------------------------- 1 | proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=7d use_temp_path=off; 2 | 3 | upstream nextjs_upstream { 4 | server 127.0.0.1:3000; 5 | } 6 | 7 | server { 8 | listen 80; 9 | server_name _ default; 10 | root /var/www; 11 | 12 | resolver 127.0.0.11 ipv6=off; 13 | 14 | charset utf-8; 15 | 16 | client_max_body_size 500M; 17 | large_client_header_buffers 4 16k; 18 | client_body_buffer_size 32K; 19 | client_header_buffer_size 2k; 20 | http2_max_header_size 512k; 21 | http2_max_field_size 256k; 22 | disable_symlinks off; 23 | absolute_redirect off; 24 | 25 | location ~* /docs { 26 | root /var/www/public; 27 | index index.html; 28 | try_files $uri $uri/ =404; 29 | } 30 | 31 | location /api/v1 { 32 | proxy_pass "$BACKEND_DOMAIN${request_uri}"; 33 | proxy_set_header X-Real-IP $remote_addr; 34 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 35 | proxy_cache off; 36 | add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; 37 | expires off; 38 | } 39 | 40 | location /_next/static { 41 | proxy_cache STATIC; 42 | proxy_pass http://nextjs_upstream; 43 | 44 | add_header X-Cache-Status $upstream_cache_status; 45 | } 46 | 47 | location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|wav|bmp|rtf|swf|flv|avi|djvu|mp3|mp4|otf|ttf|js|webp|br|woff|woff2)$ { 48 | proxy_cache STATIC; 49 | proxy_pass http://nextjs_upstream; 50 | 51 | add_header X-Cache-Status $upstream_cache_status; 52 | } 53 | 54 | location / { 55 | try_files = $uri @node; 56 | } 57 | 58 | location @node { 59 | proxy_pass http://nextjs_upstream; 60 | proxy_http_version 1.1; 61 | proxy_set_header Upgrade $http_upgrade; 62 | proxy_set_header Connection 'upgrade'; 63 | proxy_set_header X-Real-IP $remote_addr; 64 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 65 | proxy_set_header Host $host; 66 | proxy_cache_bypass $http_upgrade; 67 | proxy_read_timeout 1200; 68 | proxy_cache off; 69 | } 70 | } -------------------------------------------------------------------------------- /templates/swoole-8.1/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $WORKSPACE_NAME/$APP_IMAGE 4 | build: 5 | context: $TPL_PATH/php 6 | args: 7 | - BASE_IMAGE=$BASE_IMAGE 8 | - USER_ID=$USER_ID 9 | - GROUP_ID=$GROUP_ID 10 | hostname: "$APP_NAME.$BASE_DOMAIN" 11 | extra_hosts: 12 | - "host.docker.internal:host-gateway" 13 | environment: 14 | VIRTUAL_HOST: "$APP_NAME.$BASE_DOMAIN" 15 | VIRTUAL_PORT: "80" 16 | HOME: /tmp/home 17 | COMPOSER_HOME: /tmp/home/composer 18 | COMPOSER_CACHE_DIR: /tmp/home/composer_cache 19 | working_dir: /var/www 20 | entrypoint: 21 | - "/usr/local/bin/entrypoint" 22 | volumes: 23 | - "$SVC_PATH:/var/www" 24 | - "$HOME_PATH:/tmp/home" 25 | - "$HOME_PATH/.npm:/.npm" 26 | - "$HOME_PATH/.config:/.config" 27 | - "$PACKAGES_PATH:$PACKAGES_PATH" 28 | - "$TPL_PATH/php/entrypoint:/usr/local/bin/entrypoint" 29 | - "$WORKSPACE_PATH/services/es/data:/var/data" 30 | networks: 31 | - dev 32 | nginx: 33 | image: $NGINX_IMAGE 34 | volumes: 35 | - "$SVC_PATH:/var/www" 36 | - "$TPL_PATH/nginx/default.conf.template:/etc/nginx/conf.d/default.conf" 37 | network_mode: "service:app" 38 | depends_on: 39 | - app 40 | 41 | networks: 42 | dev: 43 | external: true 44 | name: $NETWORK -------------------------------------------------------------------------------- /templates/swoole-8.1/hooks/after-clone.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cd "$SVC_PATH" 4 | 5 | echo -e "\e[34mSet git hooks\e[0m" 6 | elc set-hooks .git_hooks 7 | 8 | echo -e "\e[34mInstall dependencies\e[0m" 9 | elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app npm install 10 | elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app composer install 11 | 12 | echo -e "\e[34mPreconfigure\e[0m" 13 | cp .env.example .env 14 | elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app php artisan key:generate 15 | 16 | cp .env .env.testing 17 | 18 | sed -E 's/(DB_DATABASE=.*)/\1_test/' -i .env.testing 19 | sed -E 's/(CACHE_DRIVER=).*/CACHE_DRIVER=array/' -i .env.testing 20 | sed -E 's/(QUEUE_CONNECTION=).*/QUEUE_CONNECTION=sync/' -i .env.testing 21 | 22 | sed -E 's/(MAIL_HOST=).*/\1/' -i .env.testing 23 | sed -E 's/(ELASTICSEARCH_HOST=).*/\1/' -i .env.testing 24 | sed -E 's/(.*_SERVICE_HOST=).*/\1/' -i .env.testing 25 | sed -E 's/(.*_DOMAIN=).*/\1/' -i .env.testing 26 | sed -E 's/(.*_BROKER_LIST=).*/\1/' -i .env.testing 27 | sed -E 's/(.*_URL=).*/\1/' -i .env.testing 28 | 29 | elc restart 30 | elc php artisan migrate 31 | elc php artisan migrate --env=testing -------------------------------------------------------------------------------- /templates/swoole-8.1/nginx/default.conf.template: -------------------------------------------------------------------------------- 1 | map $http_upgrade $connection_upgrade { 2 | default upgrade; 3 | '' close; 4 | } 5 | 6 | server { 7 | listen 80; 8 | server_name _ default; 9 | root /var/www/public; 10 | resolver 127.0.0.11; 11 | 12 | index index.php; 13 | charset utf-8; 14 | 15 | client_max_body_size 500M; 16 | large_client_header_buffers 4 16k; 17 | client_body_buffer_size 32K; 18 | client_header_buffer_size 2k; 19 | http2_max_header_size 512k; 20 | http2_max_field_size 256k; 21 | disable_symlinks off; 22 | 23 | location /index.php { 24 | try_files /not_exists @octane; 25 | } 26 | 27 | location / { 28 | try_files $uri $uri/ @octane; 29 | } 30 | 31 | error_page 404 /index.php; 32 | 33 | location /api-docs { 34 | # kill cache 35 | add_header Last-Modified $date_gmt; 36 | add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; 37 | if_modified_since off; 38 | expires off; 39 | etag off; 40 | } 41 | 42 | location @octane { 43 | set $suffix ""; 44 | 45 | if ($uri = /index.php) { 46 | set $suffix ?$query_string; 47 | } 48 | 49 | proxy_http_version 1.1; 50 | proxy_set_header Host $http_host; 51 | proxy_set_header Scheme $scheme; 52 | proxy_set_header SERVER_PORT $server_port; 53 | proxy_set_header REMOTE_ADDR $remote_addr; 54 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 55 | proxy_set_header Upgrade $http_upgrade; 56 | proxy_set_header Connection $connection_upgrade; 57 | 58 | proxy_connect_timeout 3600s; 59 | proxy_send_timeout 3600s; 60 | proxy_read_timeout 3600s; 61 | 62 | proxy_pass http://127.0.0.1:8000$suffix; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /templates/swoole-8.1/php/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BASE_IMAGE 2 | 3 | FROM $BASE_IMAGE 4 | 5 | RUN apk add --virtual .build-deps --no-cache --update autoconf file g++ gcc libc-dev make pkgconf re2c zlib-dev linux-headers && \ 6 | pecl install xdebug && \ 7 | docker-php-ext-enable xdebug && \ 8 | apk del .build-deps 9 | 10 | COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer 11 | 12 | RUN apk add npm git openjdk8-jre-base bash htop vim mc 13 | 14 | ARG USER_ID 15 | ARG GROUP_ID 16 | 17 | RUN addgroup -g $GROUP_ID developer 18 | RUN adduser -u $USER_ID -S -D -H -G developer developer 19 | RUN addgroup www-data developer 20 | RUN addgroup developer www-data -------------------------------------------------------------------------------- /templates/swoole-8.1/php/entrypoint: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | umask 0000 4 | 5 | cd /var/www 6 | 7 | if [ ! -e /var/www/storage/ensi ] && [ -e /var/data ]; then 8 | ln -s /var/data /var/www/storage/ensi 9 | fi 10 | 11 | if [ ! -L /var/www/public/storage ]; then 12 | if [ -e vendor ]; then 13 | php artisan storage:link 14 | fi 15 | fi 16 | 17 | DEBUG_HOST=$(sed "s/^#.*//" .env | grep -oE 'DEBUG_HOST=.*' | sed -r 's/DEBUG_HOST=(.*)/\1/') 18 | DEBUG_PORT=$(sed "s/^#.*//" .env | grep -oE 'DEBUG_PORT=.*' | sed -r 's/DEBUG_PORT=(.*)/\1/') 19 | 20 | if [ "${DEBUG_HOST}" != "" ]; then 21 | { 22 | echo "" 23 | echo "xdebug.mode=develop,debug" 24 | echo "xdebug.client_host=${DEBUG_HOST}" 25 | echo "xdebug.client_port=${DEBUG_PORT}" 26 | echo "max_execution_time=3600" 27 | echo "" 28 | } >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 29 | sed 's/request_terminate_timeout =.*/request_terminate_timeout = 3600s/' -i /usr/local/etc/php-fpm.d/www.conf 30 | fi 31 | 32 | PHP_IDE_CONFIG=serverName=local \ 33 | OCTANE_SHOW_FATAL_ERROR=true \ 34 | php artisan octane:swoole --watch --host=0.0.0.0 --workers=1 --task-workers=1 || sleep 3600 -------------------------------------------------------------------------------- /templates/swoole-8.2/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | app: 3 | image: $WORKSPACE_NAME/$APP_IMAGE 4 | build: 5 | context: $TPL_PATH/php 6 | args: 7 | - BASE_IMAGE=$BASE_IMAGE 8 | - USER_ID=$USER_ID 9 | - GROUP_ID=$GROUP_ID 10 | hostname: "$APP_NAME.$BASE_DOMAIN" 11 | extra_hosts: 12 | - "host.docker.internal:host-gateway" 13 | environment: 14 | VIRTUAL_HOST: "$APP_NAME.$BASE_DOMAIN" 15 | VIRTUAL_PORT: "80" 16 | HOME: /tmp/home 17 | COMPOSER_HOME: /tmp/home/composer 18 | COMPOSER_CACHE_DIR: /tmp/home/composer_cache 19 | working_dir: /var/www 20 | entrypoint: 21 | - "/usr/local/bin/entrypoint" 22 | volumes: 23 | - "$SVC_PATH:/var/www" 24 | - "$HOME_PATH:/tmp/home" 25 | - "$HOME_PATH/.npm:/.npm" 26 | - "$HOME_PATH/.config:/.config" 27 | - "$PACKAGES_PATH:$PACKAGES_PATH" 28 | - "$TPL_PATH/php/entrypoint:/usr/local/bin/entrypoint" 29 | - "$WORKSPACE_PATH/services/es/data:/var/data" 30 | networks: 31 | - dev 32 | nginx: 33 | image: $NGINX_IMAGE 34 | volumes: 35 | - "$SVC_PATH:/var/www" 36 | - "$TPL_PATH/nginx/default.conf.template:/etc/nginx/conf.d/default.conf" 37 | network_mode: "service:app" 38 | depends_on: 39 | - app 40 | 41 | networks: 42 | dev: 43 | external: true 44 | name: $NETWORK -------------------------------------------------------------------------------- /templates/swoole-8.2/hooks/after-clone.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cd "$SVC_PATH" 4 | 5 | echo -e "\e[34mSet git hooks\e[0m" 6 | elc set-hooks .git_hooks 7 | 8 | echo -e "\e[34mInstall dependencies\e[0m" 9 | elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app npm install 10 | elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app composer install 11 | 12 | echo -e "\e[34mPreconfigure\e[0m" 13 | cp .env.example .env 14 | elc compose run --rm -u$(id -u):$(id -g) --entrypoint="" app php artisan key:generate 15 | 16 | cp .env .env.testing 17 | 18 | sed -E 's/(DB_DATABASE=.*)/\1_test/' -i .env.testing 19 | sed -E 's/(CACHE_DRIVER=).*/CACHE_DRIVER=array/' -i .env.testing 20 | sed -E 's/(QUEUE_CONNECTION=).*/QUEUE_CONNECTION=sync/' -i .env.testing 21 | 22 | sed -E 's/(MAIL_HOST=).*/\1/' -i .env.testing 23 | sed -E 's/(ELASTICSEARCH_HOST=).*/\1/' -i .env.testing 24 | sed -E 's/(.*_SERVICE_HOST=).*/\1/' -i .env.testing 25 | sed -E 's/(.*_DOMAIN=).*/\1/' -i .env.testing 26 | sed -E 's/(.*_BROKER_LIST=).*/\1/' -i .env.testing 27 | sed -E 's/(.*_URL=).*/\1/' -i .env.testing 28 | 29 | elc restart 30 | elc php artisan migrate 31 | elc php artisan migrate --env=testing -------------------------------------------------------------------------------- /templates/swoole-8.2/nginx/default.conf.template: -------------------------------------------------------------------------------- 1 | map $http_upgrade $connection_upgrade { 2 | default upgrade; 3 | '' close; 4 | } 5 | 6 | server { 7 | listen 80; 8 | server_name _ default; 9 | root /var/www/public; 10 | resolver 127.0.0.11; 11 | 12 | index index.php; 13 | charset utf-8; 14 | 15 | client_max_body_size 500M; 16 | large_client_header_buffers 4 16k; 17 | client_body_buffer_size 32K; 18 | client_header_buffer_size 2k; 19 | http2_max_header_size 512k; 20 | http2_max_field_size 256k; 21 | disable_symlinks off; 22 | 23 | location /index.php { 24 | try_files /not_exists @octane; 25 | } 26 | 27 | location / { 28 | try_files $uri $uri/ @octane; 29 | } 30 | 31 | error_page 404 /index.php; 32 | 33 | location /api-docs { 34 | # kill cache 35 | add_header Last-Modified $date_gmt; 36 | add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; 37 | if_modified_since off; 38 | expires off; 39 | etag off; 40 | } 41 | 42 | location @octane { 43 | set $suffix ""; 44 | 45 | if ($uri = /index.php) { 46 | set $suffix ?$query_string; 47 | } 48 | 49 | proxy_http_version 1.1; 50 | proxy_set_header Host $http_host; 51 | proxy_set_header Scheme $scheme; 52 | proxy_set_header SERVER_PORT $server_port; 53 | proxy_set_header REMOTE_ADDR $remote_addr; 54 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 55 | proxy_set_header Upgrade $http_upgrade; 56 | proxy_set_header Connection $connection_upgrade; 57 | 58 | proxy_connect_timeout 3600s; 59 | proxy_send_timeout 3600s; 60 | proxy_read_timeout 3600s; 61 | 62 | proxy_pass http://127.0.0.1:8000$suffix; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /templates/swoole-8.2/php/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BASE_IMAGE 2 | 3 | FROM $BASE_IMAGE 4 | 5 | RUN apk add --virtual .build-deps --no-cache --update autoconf file g++ gcc libc-dev make pkgconf re2c zlib-dev linux-headers && \ 6 | pecl install xdebug && \ 7 | docker-php-ext-enable xdebug && \ 8 | apk del .build-deps 9 | 10 | COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer 11 | 12 | RUN apk add npm git openjdk8-jre-base bash htop vim mc 13 | 14 | ARG USER_ID 15 | ARG GROUP_ID 16 | 17 | RUN addgroup -g $GROUP_ID developer 18 | RUN adduser -u $USER_ID -S -D -H -G developer developer 19 | RUN addgroup www-data developer 20 | RUN addgroup developer www-data -------------------------------------------------------------------------------- /templates/swoole-8.2/php/entrypoint: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | umask 0000 4 | 5 | cd /var/www 6 | 7 | if [ ! -e /var/www/storage/ensi ] && [ -e /var/data ]; then 8 | ln -s /var/data /var/www/storage/ensi 9 | fi 10 | 11 | if [ ! -L /var/www/public/storage ]; then 12 | if [ -e vendor ]; then 13 | php artisan storage:link 14 | fi 15 | fi 16 | 17 | DEBUG_HOST=$(sed "s/^#.*//" .env | grep -oE 'DEBUG_HOST=.*' | sed -r 's/DEBUG_HOST=(.*)/\1/') 18 | DEBUG_PORT=$(sed "s/^#.*//" .env | grep -oE 'DEBUG_PORT=.*' | sed -r 's/DEBUG_PORT=(.*)/\1/') 19 | 20 | if [ "${DEBUG_HOST}" != "" ]; then 21 | { 22 | echo "" 23 | echo "xdebug.mode=develop,debug" 24 | echo "xdebug.client_host=${DEBUG_HOST}" 25 | echo "xdebug.client_port=${DEBUG_PORT}" 26 | echo "max_execution_time=3600" 27 | echo "" 28 | } >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 29 | sed 's/request_terminate_timeout =.*/request_terminate_timeout = 3600s/' -i /usr/local/etc/php-fpm.d/www.conf 30 | fi 31 | 32 | PHP_IDE_CONFIG=serverName=local \ 33 | OCTANE_SHOW_FATAL_ERROR=true \ 34 | php artisan octane:swoole --watch --host=0.0.0.0 --workers=1 --task-workers=1 || sleep 3600 -------------------------------------------------------------------------------- /workspace.yaml: -------------------------------------------------------------------------------- 1 | name: ensi 2 | elc_min_version: 0.2.6 3 | variables: 4 | DEFAULT_PACKAGES_PATH: ${WORKSPACE_PATH}/../packages 5 | DEFAULT_APPS_ROOT: ${WORKSPACE_PATH}/../apps 6 | PACKAGES_PATH: ${PACKAGES_PATH:-$DEFAULT_PACKAGES_PATH} 7 | APPS_ROOT: ${APPS_ROOT:-$DEFAULT_APPS_ROOT} 8 | NETWORK: ${NETWORK:-ensi} 9 | GROUP_ID: ${GROUP_ID:-1000} 10 | USER_ID: ${USER_ID:-1000} 11 | BASE_DOMAIN: ensi.127.0.0.1.nip.io 12 | HOME_PATH: ${WORKSPACE_PATH}/home 13 | 14 | templates: 15 | nodejs: 16 | path: ${WORKSPACE_PATH}/templates/nodejs 17 | variables: 18 | APP_IMAGE: nodejs:latest 19 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine 20 | fpm-8.1: 21 | path: ${WORKSPACE_PATH}/templates/fpm-8.1 22 | variables: 23 | BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.1-master-2022may13 24 | APP_IMAGE: fpm-8.1:latest 25 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine 26 | swoole-8.1: 27 | path: ${WORKSPACE_PATH}/templates/swoole-8.1 28 | after_clone_hook: ${TPL_PATH}/hooks/after-clone.sh 29 | variables: 30 | BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.1-master-2023mar4-1-swoole 31 | APP_IMAGE: swoole-8.1:latest 32 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine 33 | fpm-8.2: 34 | path: ${WORKSPACE_PATH}/templates/fpm-8.2 35 | variables: 36 | BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.2-master-2023aug21-1 37 | APP_IMAGE: fpm-8.2:latest 38 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine 39 | swoole-8.2: 40 | path: ${WORKSPACE_PATH}/templates/swoole-8.2 41 | after_clone_hook: ${TPL_PATH}/hooks/after-clone.sh 42 | variables: 43 | BASE_IMAGE: dockerhub.greensight.ru/ensi-tech/php-base-image:8.2-master-2023aug21-1-swoole 44 | APP_IMAGE: swoole-8.2:latest 45 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine 46 | 47 | 48 | services: 49 | 50 | # ====== INFRA 51 | 52 | proxy: 53 | path: ${WORKSPACE_PATH}/services/proxy 54 | variables: 55 | APP_IMAGE: dockerhub.greensight.ru/services/nginx-proxy:1.2.2-alpine 56 | tags: 57 | - system 58 | 59 | database: 60 | path: ${WORKSPACE_PATH}/services/database 61 | variables: 62 | APP_IMAGE: dockerhub.greensight.ru/services/postgis:17-3.4 #original docker image - postgis/postgis:17-3.4 63 | tags: 64 | - system 65 | 66 | es: 67 | path: ${WORKSPACE_PATH}/services/es 68 | variables: 69 | NGINX_IMAGE: dockerhub.greensight.ru/services/nginx:1.19-alpine #original docker image - nginx:1.19-alpine 70 | IMGPROXY_IMAGE: dockerhub.greensight.ru/services/imgproxy:latest #original docker image - darthsim/imgproxy:latest 71 | tags: 72 | - system 73 | dependencies: 74 | proxy: [default] 75 | 76 | elastic: 77 | path: ${WORKSPACE_PATH}/services/elastic 78 | compose_file: ${SVC_PATH}/elastic.yml 79 | variables: 80 | APP_IMAGE: dockerhub.greensight.ru/services/elasticsearch:8.7.0 #original docker image - docker.elastic.co/elasticsearch/elasticsearch:8.7.0 81 | JAVA_MEMORY: '512m' 82 | tags: 83 | - system 84 | kibana: 85 | path: ${WORKSPACE_PATH}/services/elastic 86 | compose_file: ${SVC_PATH}/kibana.yml 87 | variables: 88 | APP_IMAGE: dockerhub.greensight.ru/services/kibana:8.7.0 #original docker image - docker.elastic.co/kibana/kibana:7.9.2 89 | tags: 90 | - system 91 | dependencies: 92 | proxy: [default] 93 | elastic: [default] 94 | 95 | redis: 96 | path: ${WORKSPACE_PATH}/services/redis 97 | compose_file: ${SVC_PATH}/redis.yml 98 | variables: 99 | APP_IMAGE: redis:6 100 | tags: 101 | - system 102 | redis-ui: 103 | path: ${WORKSPACE_PATH}/services/redis 104 | compose_file: ${SVC_PATH}/redis-ui.yml 105 | variables: 106 | APP_IMAGE: dockerhub.greensight.ru/services/redis-commander:latest #original docker image - rediscommander/redis-commander:latest 107 | tags: 108 | - system 109 | dependencies: 110 | proxy: [default] 111 | redis: [default] 112 | 113 | kafka: 114 | path: ${WORKSPACE_PATH}/services/kafka 115 | compose_file: ${SVC_PATH}/kafka.yml 116 | variables: 117 | KAFKA_IMAGE: dockerhub.greensight.ru/services/kafka:latest #original docker image - wurstmeister/kafka 118 | ZOOKEEPER_IMAGE: dockerhub.greensight.ru/services/zookeeper:latest #original docker image -wurstmeister/zookeeper 119 | tags: 120 | - system 121 | kafka-ui: 122 | path: ${WORKSPACE_PATH}/services/kafka 123 | compose_file: ${SVC_PATH}/kafka-ui.yml 124 | variables: 125 | APP_IMAGE: dockerhub.greensight.ru/services/kafka-ui:latest #original docker image - provectuslabs/kafka-ui 126 | tags: 127 | - system 128 | dependencies: 129 | proxy: [default] 130 | kafka: [default] 131 | 132 | maildev: 133 | path: ${WORKSPACE_PATH}/services/maildev 134 | variables: 135 | APP_IMAGE: dockerhub.greensight.ru/maildev/maildev:2.0.5 136 | SMTP_USER: maildev 137 | SMTP_PASSWORD: maildev 138 | tags: 139 | - system 140 | dependencies: 141 | proxy: [default] 142 | 143 | # ======= APPS 144 | 145 | admin-gui-backend: 146 | extends: swoole-8.2 147 | path: ${APPS_ROOT}/${SVC_ADMIN_GUI_BACKEND_PATH:-admin-gui/admin-gui-backend} 148 | repository: git@gitlab.com:greensight/ensi/admin-gui/admin-gui-backend.git 149 | tags: 150 | - code 151 | - app 152 | - backend 153 | dependencies: 154 | proxy: [default] 155 | 156 | seller-gui-backend: 157 | extends: swoole-8.2 158 | path: ${APPS_ROOT}/${SVC_SELLER_GUI_BACKEND_PATH:-seller-gui/seller-gui-backend} 159 | repository: git@gitlab.com:greensight/ensi/seller-gui/seller-gui-backend 160 | tags: 161 | - code 162 | - app 163 | - backend 164 | dependencies: 165 | proxy: [default] 166 | 167 | admin-gui-frontend: 168 | extends: nodejs 169 | path: ${APPS_ROOT}/${SVC_ADMIN_GUI_FRONTEND_PATH:-admin-gui/admin-gui-frontend} 170 | variables: 171 | API_HOST: http://admin-gui-backend.${BASE_DOMAIN} 172 | repository: git@gitlab.com:greensight/ensi/admin-gui/admin-gui-frontend.git 173 | tags: 174 | - code 175 | - app 176 | dependencies: 177 | proxy: [default] 178 | 179 | catalog-catalog-cache: 180 | extends: swoole-8.2 181 | path: ${APPS_ROOT}/${SVC_CATALOG_CATALOG_CACHE_PATH:-catalog/catalog-cache} 182 | repository: git@gitlab.com:greensight/ensi/catalog/catalog-cache.git 183 | tags: 184 | - code 185 | - app 186 | - backend 187 | dependencies: 188 | database: [default, hook] 189 | elastic: [default] 190 | proxy: [default] 191 | variables: 192 | DB_NAME: catalog_catalog_cache 193 | 194 | catalog-feed: 195 | extends: swoole-8.2 196 | path: ${APPS_ROOT}/${SVC_CATALOG_FEED_PATH:-catalog/feed} 197 | repository: git@gitlab.com:greensight/ensi/catalog/feed.git 198 | tags: 199 | - code 200 | - app 201 | - backend 202 | dependencies: 203 | database: [default, hook] 204 | proxy: [default] 205 | variables: 206 | DB_NAME: catalog_feed 207 | 208 | catalog-offers: 209 | extends: swoole-8.2 210 | path: ${APPS_ROOT}/${SVC_CATALOG_OFFERS_PATH:-catalog/offers} 211 | repository: git@gitlab.com:greensight/ensi/catalog/offers.git 212 | tags: 213 | - code 214 | - app 215 | - backend 216 | dependencies: 217 | database: [default, hook] 218 | proxy: [default] 219 | variables: 220 | DB_NAME: catalog_offers 221 | 222 | catalog-pim: 223 | extends: swoole-8.2 224 | path: ${APPS_ROOT}/${SVC_CATALOG_PIM_PATH:-catalog/pim} 225 | repository: git@gitlab.com:greensight/ensi/catalog/pim.git 226 | tags: 227 | - code 228 | - app 229 | - backend 230 | dependencies: 231 | database: [default, hook] 232 | proxy: [default] 233 | variables: 234 | DB_NAME: catalog_pim 235 | 236 | cms-cms: 237 | extends: swoole-8.2 238 | path: ${APPS_ROOT}/${SVC_CMS_CMS_PATH:-cms/cms} 239 | repository: git@gitlab.com:greensight/ensi/cms/cms.git 240 | tags: 241 | - code 242 | - app 243 | - backend 244 | dependencies: 245 | database: [default, hook] 246 | proxy: [default] 247 | variables: 248 | DB_NAME: cms_cms 249 | 250 | communication-communication: 251 | extends: swoole-8.2 252 | path: ${APPS_ROOT}/${SVC_COMMUNICATION_COMMUNICATION_PATH:-communication/communication} 253 | repository: git@gitlab.com:greensight/ensi/communication/communication.git 254 | tags: 255 | - code 256 | - app 257 | - backend 258 | dependencies: 259 | database: [default, hook] 260 | proxy: [default] 261 | variables: 262 | DB_NAME: communication_communication_manager 263 | 264 | communication-im: 265 | extends: swoole-8.2 266 | path: ${APPS_ROOT}/${SVC_COMMUNICATION_INTERNAL_MESSENGER_PATH:-communication/internal-messenger} 267 | repository: git@gitlab.com:greensight/ensi/communication/internal-messenger.git 268 | tags: 269 | - code 270 | - app 271 | - backend 272 | dependencies: 273 | database: [default, hook] 274 | proxy: [default] 275 | variables: 276 | DB_NAME: communication_internal_messenger 277 | 278 | customers-crm: 279 | extends: swoole-8.2 280 | path: ${APPS_ROOT}/${SVC_CUSTOMERS_CRM_PATH:-customers/crm} 281 | repository: git@gitlab.com:greensight/ensi/customers/crm.git 282 | tags: 283 | - code 284 | - app 285 | - backend 286 | dependencies: 287 | database: [default, hook] 288 | proxy: [default] 289 | variables: 290 | DB_NAME: customers_crm 291 | 292 | customers-customers: 293 | extends: swoole-8.2 294 | path: ${APPS_ROOT}/${SVC_CUSTOMERS_CUSTOMERS_PATH:-customers/customers} 295 | repository: git@gitlab.com:greensight/ensi/customers/customers.git 296 | tags: 297 | - code 298 | - app 299 | - backend 300 | dependencies: 301 | database: [default, hook] 302 | proxy: [default] 303 | variables: 304 | DB_NAME: customers_customers 305 | 306 | customers-customer-auth: 307 | extends: swoole-8.2 308 | path: ${APPS_ROOT}/${SVC_CUSTOMERS_CUSTOMER_AUTH_PATH:-customers/customer-auth} 309 | repository: git@gitlab.com:greensight/ensi/customers/customer-auth.git 310 | tags: 311 | - code 312 | - app 313 | - backend 314 | dependencies: 315 | database: [default, hook] 316 | proxy: [default] 317 | variables: 318 | DB_NAME: customers_customer_auth 319 | 320 | customer-api-gateway: 321 | extends: swoole-8.2 322 | path: ${APPS_ROOT}/${SVC_CUSTOMER_GUI_CUSTOMER_API_GATEWAY_PATH:-customer-gui/customer-api-gateway} 323 | repository: git@gitlab.com:greensight/ensi/customer-gui/customer-api-gateway.git 324 | tags: 325 | - code 326 | - app 327 | - backend 328 | dependencies: 329 | proxy: [default] 330 | 331 | logistic-geo: 332 | extends: swoole-8.2 333 | path: ${APPS_ROOT}/${SVC_LOGISTIC_GEO_PATH:-logistic/geo} 334 | repository: git@gitlab.com:greensight/ensi/logistic/geo.git 335 | tags: 336 | - code 337 | - app 338 | - backend 339 | dependencies: 340 | database: [default, hook] 341 | proxy: [default] 342 | variables: 343 | DB_NAME: logistic_geo 344 | 345 | logistic-logistic: 346 | extends: swoole-8.2 347 | path: ${APPS_ROOT}/${SVC_LOGISTIC_LOGISTIC_PATH:-logistic/logistic} 348 | repository: git@gitlab.com:greensight/ensi/logistic/logistic.git 349 | tags: 350 | - code 351 | - app 352 | - backend 353 | dependencies: 354 | database: [default, hook] 355 | proxy: [default] 356 | variables: 357 | DB_NAME: logistic_logistic 358 | DB_EXT: postgis 359 | 360 | marketing-marketing: 361 | extends: swoole-8.2 362 | path: ${APPS_ROOT}/${SVC_MARKETING_MARKETING_PATH:-marketing/marketing} 363 | repository: git@gitlab.com:greensight/ensi/marketing/marketing.git 364 | tags: 365 | - code 366 | - app 367 | - backend 368 | dependencies: 369 | database: [default, hook] 370 | proxy: [default] 371 | variables: 372 | DB_NAME: marketing_marketing 373 | 374 | orders-baskets: 375 | extends: swoole-8.2 376 | path: ${APPS_ROOT}/${SVC_ORDERS_BASKETS_PATH:-orders/baskets} 377 | repository: git@gitlab.com:greensight/ensi/orders/baskets.git 378 | tags: 379 | - code 380 | - app 381 | - backend 382 | dependencies: 383 | database: [default, hook] 384 | proxy: [default] 385 | variables: 386 | DB_NAME: orders_baskets 387 | 388 | orders-oms: 389 | extends: swoole-8.2 390 | path: ${APPS_ROOT}/${SVC_ORDERS_OMS_PATH:-orders/oms} 391 | repository: git@gitlab.com:greensight/ensi/orders/oms.git 392 | tags: 393 | - code 394 | - app 395 | - backend 396 | dependencies: 397 | database: [default, hook] 398 | proxy: [default] 399 | variables: 400 | DB_NAME: orders_oms 401 | 402 | orders-packing: 403 | extends: swoole-8.2 404 | path: ${APPS_ROOT}/${SVC_ORDERS_PACKING_PATH:-orders/packing} 405 | repository: git@gitlab.com:greensight/ensi/orders/packing.git 406 | tags: 407 | - code 408 | - app 409 | - backend 410 | dependencies: 411 | database: [default, hook] 412 | proxy: [default] 413 | variables: 414 | DB_NAME: orders_packing 415 | 416 | reviews-reviews: 417 | extends: swoole-8.2 418 | path: ${APPS_ROOT}/${SVC_REVIEWS_REVIEWS_PATH:-reviews/reviews} 419 | repository: git@gitlab.com:greensight/ensi/reviews/reviews.git 420 | tags: 421 | - code 422 | - app 423 | - backend 424 | dependencies: 425 | database: [default, hook] 426 | proxy: [default] 427 | variables: 428 | DB_NAME: reviews_reviews 429 | 430 | units-admin-auth: 431 | extends: swoole-8.2 432 | path: ${APPS_ROOT}/${SVC_UNITS_ADMIN_AUTH_PATH:-units/admin-auth} 433 | repository: git@gitlab.com:greensight/ensi/units/admin-auth.git 434 | tags: 435 | - code 436 | - app 437 | - backend 438 | dependencies: 439 | database: [default, hook] 440 | proxy: [default] 441 | variables: 442 | DB_NAME: units_admin_auth 443 | 444 | units-bu: 445 | extends: swoole-8.2 446 | path: ${APPS_ROOT}/${SVC_UNITS_BU_PATH:-units/bu} 447 | repository: git@gitlab.com:greensight/ensi/units/bu.git 448 | tags: 449 | - code 450 | - app 451 | - backend 452 | dependencies: 453 | database: [default, hook] 454 | proxy: [default] 455 | variables: 456 | DB_NAME: units_bu 457 | 458 | units-seller-auth: 459 | extends: swoole-8.2 460 | path: ${APPS_ROOT}/${SVC_UNITS_SELLER_AUTH_PATH:-units/seller-auth} 461 | repository: git@gitlab.com:greensight/ensi/units/seller-auth.git 462 | tags: 463 | - code 464 | - app 465 | - backend 466 | dependencies: 467 | database: [default, hook] 468 | proxy: [default] 469 | variables: 470 | DB_NAME: units_seller_auth 471 | 472 | modules: 473 | communication-manager-client-php: 474 | path: ${PACKAGES_PATH}/communication-manager-client-php 475 | hosted_in: cms-cms 476 | exec_path: ${PACKAGES_PATH}/communication-manager-client-php 477 | repository: git@gitlab.com:greensight/ensi/communication/clients/communication-manager-client-php.git 478 | tags: 479 | - code 480 | - lib 481 | internal-messenger-client-php: 482 | path: ${PACKAGES_PATH}/internal-messenger-client-php 483 | hosted_in: cms-cms 484 | exec_path: ${PACKAGES_PATH}/internal-messenger-client-php 485 | repository: git@gitlab.com:greensight/ensi/communication/clients/internal-messenger-client-php.git 486 | tags: 487 | - code 488 | - lib 489 | admin-auth-client-php: 490 | path: ${PACKAGES_PATH}/admin-auth-client-php 491 | hosted_in: cms-cms 492 | exec_path: ${PACKAGES_PATH}/admin-auth-client-php 493 | repository: git@gitlab.com:greensight/ensi/units/clients/admin-auth-client-php.git 494 | tags: 495 | - code 496 | - lib 497 | seller-auth-client-php: 498 | path: ${PACKAGES_PATH}/seller-auth-client-php 499 | hosted_in: cms-cms 500 | exec_path: ${PACKAGES_PATH}/seller-auth-client-php 501 | repository: git@gitlab.com:greensight/ensi/units/clients/seller-auth-client-php.git 502 | tags: 503 | - code 504 | - lib 505 | bu-client-php: 506 | path: ${PACKAGES_PATH}/bu-client-php 507 | hosted_in: cms-cms 508 | exec_path: ${PACKAGES_PATH}/bu-client-php 509 | repository: git@gitlab.com:greensight/ensi/units/clients/bu-client-php.git 510 | tags: 511 | - code 512 | - lib 513 | marketing-client-php: 514 | path: ${PACKAGES_PATH}/marketing-client-php 515 | hosted_in: cms-cms 516 | exec_path: ${PACKAGES_PATH}/marketing-client-php 517 | repository: git@gitlab.com:greensight/ensi/marketing/clients/marketing-client-php.git 518 | tags: 519 | - code 520 | - lib 521 | catalog-cache-client-php: 522 | path: ${PACKAGES_PATH}/catalog-cache-client-php 523 | hosted_in: cms-cms 524 | exec_path: ${PACKAGES_PATH}/catalog-cache-client-php 525 | repository: git@gitlab.com:greensight/ensi/catalog/clients/catalog-cache-client-php.git 526 | tags: 527 | - code 528 | - lib 529 | pim-client-php: 530 | path: ${PACKAGES_PATH}/pim-client-php 531 | hosted_in: cms-cms 532 | exec_path: ${PACKAGES_PATH}/pim-client-php 533 | repository: git@gitlab.com:greensight/ensi/catalog/clients/pim-client-php.git 534 | tags: 535 | - code 536 | - lib 537 | offers-client-php: 538 | path: ${PACKAGES_PATH}/offers-client-php 539 | hosted_in: cms-cms 540 | exec_path: ${PACKAGES_PATH}/offers-client-php 541 | repository: git@gitlab.com:greensight/ensi/catalog/clients/offers-client-php.git 542 | tags: 543 | - code 544 | - lib 545 | oms-client-php: 546 | path: ${PACKAGES_PATH}/oms-client-php 547 | hosted_in: cms-cms 548 | exec_path: ${PACKAGES_PATH}/oms-client-php 549 | repository: git@gitlab.com:greensight/ensi/orders/clients/oms-client-php.git 550 | tags: 551 | - code 552 | - lib 553 | packing-client-php: 554 | path: ${PACKAGES_PATH}/packing-client-php 555 | hosted_in: cms-cms 556 | exec_path: ${PACKAGES_PATH}/packing-client-php 557 | repository: git@gitlab.com:greensight/ensi/orders/clients/packing-client-php.git 558 | tags: 559 | - code 560 | - lib 561 | baskets-client-php: 562 | path: ${PACKAGES_PATH}/baskets-client-php 563 | hosted_in: cms-cms 564 | exec_path: ${PACKAGES_PATH}/baskets-client-php 565 | repository: git@gitlab.com:greensight/ensi/orders/clients/baskets-client-php.git 566 | tags: 567 | - code 568 | - lib 569 | logistic-client-php: 570 | path: ${PACKAGES_PATH}/logistic-client-php 571 | hosted_in: cms-cms 572 | exec_path: ${PACKAGES_PATH}/logistic-client-php 573 | repository: git@gitlab.com:greensight/ensi/logistic/clients/logistic-client-php.git 574 | tags: 575 | - code 576 | - lib 577 | cms-client-php: 578 | path: ${PACKAGES_PATH}/cms-client-php 579 | hosted_in: cms-cms 580 | exec_path: ${PACKAGES_PATH}/cms-client-php 581 | repository: git@gitlab.com:greensight/ensi/cms/clients/cms-client-php.git 582 | tags: 583 | - code 584 | - lib 585 | customer-auth-client-php: 586 | path: ${PACKAGES_PATH}/customer-auth-client-php 587 | hosted_in: cms-cms 588 | exec_path: ${PACKAGES_PATH}/customer-auth-client-php 589 | repository: git@gitlab.com:greensight/ensi/customers/clients/customer-auth-client-php.git 590 | tags: 591 | - code 592 | - lib 593 | customers-client-php: 594 | path: ${PACKAGES_PATH}/customers-client-php 595 | hosted_in: cms-cms 596 | exec_path: ${PACKAGES_PATH}/customers-client-php 597 | repository: git@gitlab.com:greensight/ensi/customers/clients/customers-client-php.git 598 | tags: 599 | - code 600 | - lib 601 | crm-client-php: 602 | path: ${PACKAGES_PATH}/crm-client-php 603 | hosted_in: cms-cms 604 | exec_path: ${PACKAGES_PATH}/crm-client-php 605 | repository: git@gitlab.com:greensight/ensi/customers/clients/crm-client-php.git 606 | tags: 607 | - code 608 | - lib 609 | feed-client-php: 610 | path: ${PACKAGES_PATH}/feed-client-php 611 | hosted_in: cms-cms 612 | exec_path: ${PACKAGES_PATH}/feed-client-php 613 | repository: git@gitlab.com:greensight/ensi/catalog/clients/feed-client-php.git 614 | tags: 615 | - code 616 | - lib 617 | cloud-api-sdk-php: 618 | path: ${PACKAGES_PATH}/${PKG_CLOUD_API_SDK_PHP_PATH:-cloud-api-sdk-php} 619 | hosted_in: cms-cms 620 | exec_path: ${PACKAGES_PATH}/${PKG_CLOUD_API_SDK_PHP_PATH:-cloud-api-sdk-php} 621 | repository: git@gitlab.com:greensight/ensi/catalog/clients/cloud-api-sdk-php.git 622 | tags: 623 | - code 624 | - lib 625 | --------------------------------------------------------------------------------