diff --git a/.env b/.env index e44d3cc..0628c9a 100644 --- a/.env +++ b/.env @@ -1,11 +1,23 @@ -COMPOSE_PROJECT_NAME=testa -NETWORK=testa +COMPOSE_PROJECT_NAME=mobile +NETWORK=mobile -FRONT_TAG=test-nuxt -DOTDOT_TAG=test-nuxt +FRONT_TAG=master +DOTDOT_TAG=master +LMS_TAG=master +DASHBORD_TAG=master +SIGNER_TAG=TD-322 +ADMIN_TAG=master +CABINET_TAG=master +LANDINGTTL_TAG=DD-4160-STORY -MYSQL_PORT=0.0.0.0:3306 +MYSQL_PORT=0.0.0.0:33066 MYSQL_ROOT_PASSWORD=root MYSQL_DATABASE=dot MYSQL_USER=dot MYSQL_PASSWORD=dot + +RABBITMQ_USERNAME=ddadmin +RABBITMQ_PASSWORD=Utahth9aeshahgh3saik + +REDIS_USERNAME=ddadmin +REDIS_PASSWORD=Utahth9aeshahgh3saik diff --git a/app.sh b/app.sh new file mode 100755 index 0000000..a0bd5c0 --- /dev/null +++ b/app.sh @@ -0,0 +1,177 @@ +DIRECTORY=`dirname $0` + +#MYSQL_ROOT_PASSWORD=$(grep MYSQL_ROOT_PASSWORD $DIRECTORY"/.env" | xargs) +#MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD#*=} +source $DIRECTORY"/.env" +help() { + echo "run $0 [COMMAND] " + echo ' + "init" - run init flow + "up" - up -d all services + "down" - down all services without volumes + "composer" - run composer ${@:2} + "psalm" - run composer analyse + "php-fixer" - run composer cs + "deptrac" - run composer deptrac + "tests" - run composer tests + "console" - run docker compose exec php ./bin/console ${@:2} + "db" - run mysql shell + "db-create" - crate database + "backup-dev" - + "backup-create" - + "backup-exec" - + "restore-dev" - + "purge-db" - purge database + "restore-db" - restore database from s3 backup + "front" - exec front container + +' +} + +log() { + RED='\e[31m' + GREEN='\e[32m' + + case $2 in + info) + printf "${GREEN}${1}\e[0m\n" + ;; + error) + printf "${RED}${1}\e[0m\n" + ;; + *) + printf "${1}" + ;; + esac +} + +## restore last backup from s3 storage +restoredb() { + log "run restore database" + sudo rclone copy --verbose selectel:backup_db/dot/prod/dot.$(date +%a).sql.gz backups/ + zcat backups/dot.$(date +%a).sql.gz | docker compose exec -T db mysql -uroot -p${MYSQL_ROOT_PASSWORD} dot +} + +checkDockerCompose() { + if ! [ -f "docker-compose.yml" ]; then + log "docker-compose.yml not exist. Run init command" "error" + exit + fi +} + +init() { + dumpfile=$(ls backups/ | sort | tail -1) + if ! [ -f backups/${dumpfile} ]; then + log "put dot.sql to backups directory" "error" + exit + fi + + if ! [ -f ".env" ]; then + log ".env not exist. Run init command" "error" + exit + fi + + up + + docker compose exec php composer install +# docker compose exec front npm i + +# docker compose exec front npm run build + + if ! docker compose exec db mysql -uroot -proot -e "show databases" | grep "dot "; then + createDatabase "dot" + execBackup "dot" ${dumpfile} + fi +} + +up() { + checkDockerCompose + docker compose up -d +} + +down() { + checkDockerCompose + docker compose down +} + +createDatabase() { + docker compose exec -T db mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "create database $1" + log "create database $1" "info" +} + +createBackup() { + docker compose exec db mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} $1 > backups/$2.sql +} + +createBackupWithExceptions() { + docker compose exec db mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --ignore-table=dot.ml_calculator_log dot > backups/dot_develop.sql + docker compose exec db mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --no-data dot ml_calculator_log >> backups/dot_develop.sql +} + +execBackup() { + zcat backups/$2 | docker compose exec -T db mysql -uroot -p${MYSQL_ROOT_PASSWORD} $1 + log "exec $2.sql backup" "info" +} + +execDevBackup() { + docker compose exec -T db mysql -uroot -p${MYSQL_ROOT_PASSWORD} dot < backups/dot_develop.sql + log "exec dot_develop.sql backup" "info" +} + +purgeDb() { + docker compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "drop database dot" + log "dropped database dot" "info" + docker compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "create database dot" + log "created database dot" "info" +} + +composer() { + docker compose exec php php -d memory_limit=-1 /usr/local/bin/composer ${@:1} +} + +case "$1" in + "help") + help;; + "init") + init;; + "up") + up;; + "down") + down;; + "composer"*) + composer ${@:2};; + "psalm"*) + composer analyse;; + "php-fixer") + composer cs;; + "deptrac") + composer deptrac;; + "tests") + composer tests;; + "console"*) + docker compose exec php ./bin/console ${@:2};; + "db") + docker compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD};; + "db-create") + createDatabase $2;; + "backup-dev"*) + createBackupWithExceptions $2;; + "backup-create"*) + createBackup $2 $3;; + "backup-exec"*) + execBackup $2 $3;; + "restore-dev"*) + execDevBackup;; + "purge-db"*) + purgeDb;; + "restore-db") + restoredb;; + "front"*) + case $2 in + *) + docker compose exec landing-ttl ${@:2};; + esac;; + *) + help + #docker compose exec php ./bin/console ${@:1};; +esac diff --git a/configs/admin/.env b/configs/admin/.env new file mode 100644 index 0000000..016da3c --- /dev/null +++ b/configs/admin/.env @@ -0,0 +1,3 @@ +NUXT_HOST=0.0.0.0 +NUXT_PORT=3000 +DOMAIN=stagingadmin.dot-dot.ru \ No newline at end of file diff --git a/configs/admin/entrypoint.sh b/configs/admin/entrypoint.sh new file mode 100755 index 0000000..ddc99b3 --- /dev/null +++ b/configs/admin/entrypoint.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +DOMAIN="${DOMAIN:-lmsadmin.dot-dot.ru}" + +for x in $(grep -lrw "lmsadmin.dot-dot.ru" .nuxt/);do + echo "replace lmsadmin.dot-dot.ru to https://${DOMAIN} in $x" + sed -i -e "s/lmsadmin.dot-dot.ru/${DOMAIN}/g" $x; +done + +"$@" diff --git a/configs/lms/.env b/configs/lms/.env new file mode 100644 index 0000000..7a9fda7 --- /dev/null +++ b/configs/lms/.env @@ -0,0 +1,13 @@ +NUXT_HOST=0.0.0.0 +NUXT_PORT=3000 +NUXT_ENV_DEVALUE_LOG_LEVEL=silent +WS_PROTOCOL=wss +BASE_URL=https://mobilelms.dot-dot.ru/ +API_URL=https://mobilelms.dot-dot.ru/ +DOMAIN=mobilelms.dot-dot.ru + +APP_HOST=mobilelms.dot-dot.ru +APP_SCHEME=https +APP_ENVIRONMENT=development +DADATA_API_TOKEN=c9aa5fdc338a746e23ce91ceb6fdb9e635749833 +YANDEX_METRIKA_ID=5015695 \ No newline at end of file diff --git a/configs/nginx/conf.d/admin.conf b/configs/nginx/conf.d/admin.conf new file mode 100644 index 0000000..3ab1023 --- /dev/null +++ b/configs/nginx/conf.d/admin.conf @@ -0,0 +1,16 @@ +server { + server_name testeadmin.dot-dot.ru; + client_max_body_size 10m; + + location / { + proxy_pass http://dashboard:80; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + chunked_transfer_encoding off; + proxy_buffering off; + proxy_cache off; + } +} diff --git a/configs/nginx/conf.d/default.conf b/configs/nginx/conf.d/default.conf index 88ea0fc..7496ad5 100644 --- a/configs/nginx/conf.d/default.conf +++ b/configs/nginx/conf.d/default.conf @@ -1,10 +1,14 @@ server { - server_name testa.dot-dot.ru; + listen 80; + server_name mobile.dot-dot.ru; root /application/public; + client_max_body_size 10m; + + location / { - proxy_pass http://nuxt:3000; + proxy_pass http://landing-ttl; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; @@ -19,25 +23,17 @@ server { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; - proxy_pass http://php:9000; + proxy_pass http://php:8080; } location @rewriteapp { rewrite ^(.*)$ /index.php/$1 last; } - # location /storybook { - # alias /application/nuxt/storybook-static; - # } - location /logout { try_files $uri @rewriteapp; } - location /help { - alias /application/help-platform/src/.vuepress/dist; - } - location /api { rewrite ^(.*)$ /index.php/$1 last; } @@ -66,6 +62,10 @@ server { try_files $uri @rewriteapp; } + location ~* \/admin\/.*(js|jpg|png|css|woff|woff2)$ { + proxy_pass http://static; + } + location /media { try_files $uri @rewriteapp; } @@ -89,7 +89,8 @@ server { return 204; } - add_header 'Access-Control-Allow-Origin' $http_origin; + #add_header 'Access-Control-Allow-Origin' $http_origin; + add_header 'Access-Control-Allow-Origin' *; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Expeditor-Domain,Authorization'; diff --git a/configs/nginx/templates/default b/configs/nginx/conf.d/lms.conf similarity index 54% rename from configs/nginx/templates/default rename to configs/nginx/conf.d/lms.conf index b53ea96..f296773 100644 --- a/configs/nginx/templates/default +++ b/configs/nginx/conf.d/lms.conf @@ -1,10 +1,20 @@ +# server { +# listen 80; +# server_name mobilelms.dot-dot.ru; +# return 301 https://$server_name$request_uri; +# } + server { - server_name testa.dot-dot.ru; + listen 80; + server_name mobilelms.dot-dot.ru; root /application/public; + client_max_body_size 10m; + + location / { - proxy_pass http://nuxt:3000; + proxy_pass http://lms:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; @@ -16,26 +26,22 @@ server { } location /socket.io/auctionreload { + access_log /var/log/nginx/ws_access.log json; + error_log /var/log/nginx/ws_error.log; + proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; - proxy_pass http://php:${PHP_SOCKET_PORT}/; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_pass http://php:8080/; } location @rewriteapp { rewrite ^(.*)$ /index.php/$1 last; } - location /storybook { - alias /application/nuxt/storybook-static; - } - location /logout { - try_files $uri @rewriteapp; - } - - location /help { - alias /application/help-platform/src/.vuepress/dist; + try_files $uri @rewriteapp; } location /api { @@ -66,27 +72,39 @@ server { try_files $uri @rewriteapp; } + location ~* \/admin\/.*(js|jpg|png|css|woff|woff2)$ { + proxy_pass http://static; + } + location /media { try_files $uri @rewriteapp; } location /img { - alias /application/public/img; - } + proxy_pass http://static; + # alias /application/public/img; + # try_files $uri /index.php$request_uri; + # expires 6M; + } + + location /robots.txt { + proxy_pass http://static; + } location ~ ^/index\.php(/|$) { if ($request_method = 'OPTIONS') { - add_header 'Access-Control-Allow-Origin' $http_origin; - add_header 'Access-Control-Allow-Credentials' 'true'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE'; - add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Expeditor-Domain,Authorization'; - add_header 'Access-Control-Max-Age' 1728000; - add_header 'Content-Type' 'text/plain charset=UTF-8'; - add_header 'Content-Length' 0; - return 204; + add_header 'Access-Control-Allow-Origin' $http_origin; + add_header 'Access-Control-Allow-Credentials' 'true'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE'; + add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Expeditor-Domain,Authorization'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; } - add_header 'Access-Control-Allow-Origin' $http_origin; + #add_header 'Access-Control-Allow-Origin' $http_origin; + add_header 'Access-Control-Allow-Origin' *; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Expeditor-Domain,Authorization'; @@ -96,7 +114,4 @@ server { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } - - error_log /var/log/nginx/dot_dot_error.log; - access_log /var/log/nginx/dot_dot_access.log; } \ No newline at end of file diff --git a/configs/nuxt/.env b/configs/nuxt/.env deleted file mode 100644 index c3809e2..0000000 --- a/configs/nuxt/.env +++ /dev/null @@ -1,12 +0,0 @@ -NUXT_HOST=0.0.0.0 -NUXT_PORT=3000 -NUXT_ENV_DEVALUE_LOG_LEVEL=silent -WS_PROTOCOL=ws -BASE_URL=http://testa.dot-dot.ru -API_URL=http://testa.dot-dot.ru - -APP_HOST=dot-dot.local -APP_SCHEME=http -APP_ENVIRONMENT=development -DADATA_API_TOKEN=c9aa5fdc338a746e23ce91ceb6fdb9e635749833 -YANDEX_METRIKA_ID=50156956 diff --git a/configs/php/.env b/configs/php/.env index 8d1481e..7fb23fd 100644 --- a/configs/php/.env +++ b/configs/php/.env @@ -1,4 +1,4 @@ -APP_ENV=dev +APP_ENV=prod APP_SECRET=c35a0abba25a5396d74ec17fca238d9a LOCK_DSN=flock @@ -8,8 +8,8 @@ DATABASE_URL_DOT=mysql://root:root@db:3306/dot?serverVersion=mariadb-10.3.25 DATABASE_URL_DOT_STATISTIC=mysql://root:root@db:3306/dot_statistic?serverVersion=mariadb-10.3.25 DOCUMENT_ROOT=/application -APP_HOST=dot-dot.local -APP_SCHEME=http +APP_HOST=mobile.dot-dot.ru +APP_SCHEME=https MAILER_DSN=null://null @@ -52,11 +52,16 @@ FNS_ACCESS_TOKEN=secret GOOGLE_MAPS_ACCESS_KEY=secret GOOGLE_MAPS_BASE_URL=https://maps.google.com -ML_CALCULATOR_URL=https://calc.dev.dot-dot.ru/v1/calculate +ML_CALCULATOR_URL=https://ml.dot-dot.ru/v2/classification/order/relevance + +ML_REGULAR_DIRECTION_URL=https://ml.dot-dot.ru/v2/schedule/transport +ML_REGULAR_DIRECTION_RELEVANCE_CARRIERS_URL=https://ml.dot-dot.ru/v1/schedule/carrier/scoring +ML_UNCERTAIN_DIRECTIONS_URL=https://ml.dot-dot.ru/v1/classification/direction/uncertain + +ML_CARRIER_SCORING=https://ml.dot-dot.ru/v2/classification/carrier/scoring + +ML_DIRECTION_RECALCULATE_URL=https://ml.dot-dot.ru/v2/schedule/calculate -ML_REGULAR_DIRECTION_URL=https://calc.dev.dot-dot.ru/v1/schedule/transport -ML_REGULAR_DIRECTION_RELEVANCE_CARRIERS_URL=https://calc.dev.dot-dot.ru/v1/schedule/carrier/scoring -ML_UNCERTAIN_DIRECTIONS_URL=https://calc.dev.dot-dot.ru/v1/classification/direction/uncertain YANDEX_MAPS_ACCESS_KEY=secret YANDEX_MAPS_BASE_URL=https://api.routing.yandex.net @@ -130,3 +135,13 @@ SOVKOM_API_URL=secret MAGIC_API_URL=https://magic-trans.ru/ MAGIC_API_URL=https://magic-trans.ru/ + +###> YandexTracker ### +YTRACKER_API_TOKEN="y0_AgAEA7qkKFmeAAjF8AAAAADXovQd6htdkt7LTDW_sNHCz7qV9zdVHaQ" +YTRACKER_ORGANISATION_ID=355207 +###< YandexTracker ### + +SMS_PROVIDER=prostor-sms +PROSTOR_SMS_END_POINT_URL=http://api.prostor-sms.ru/ +PROSTOR_SMS_LOGIN=secret +PROSTOR_SMS_PASSWORD=secret diff --git a/configs/php/.env.local b/configs/php/.env.local index c861d87..4f1ef9c 100644 --- a/configs/php/.env.local +++ b/configs/php/.env.local @@ -15,7 +15,7 @@ FNS_ACCESS_TOKEN=a5639b93fe4e7c9a3f1dd85537e066d36439c352 GOOGLE_MAPS_ACCESS_KEY=AIzaSyBCPl2LcpRvplzLUNVMVLhA3b7k46lTCTg -NUXT_BASE_URL=testa.dot-dot.ru +NUXT_BASE_URL=mobile.dot-dot.ru ATISU_API_TOKEN=a9698671a68441c7b3959e43995d1506 @@ -31,11 +31,12 @@ TELEGRAM_CHAT_ID=-875661421 ###< telegramm ### ###> voicia ### -VOICIA_CALL_ID=1949 +VOICIA_API_KEY=7589ed2721e50e299eb3baf2e3100a6b +VOICIA_CALL_ID=8788 ###< voicia ### ###> ml_calculator ### -ML_CALCULATOR_URL=https://ml.dot-dot.ru/v1/classification/order/relevance +ML_CALCULATOR_URL=https://ml.dot-dot.ru/v2/classification/order/relevance ###< ml_calculator ### ###> comagic ### @@ -44,15 +45,15 @@ COMAGIC_KEY=j769gveux0brdq7wb6insegwtczvz7nsqmuntkqv ###< comagic ### ###> carrier_scoring ### -ML_CARRIER_SCORING=https://ml.dot-dot.ru/v1/classification/carrier/scoring +ML_CARRIER_SCORING=https://ml.dot-dot.ru/v2/classification/carrier/scoring ###< carrier_scoring ### ###> direction_scoring ### -ML_DIRECTION_SCORING_URL=https://ml.dot-dot.ru/v1/classification/direction/confidence +ML_DIRECTION_SCORING_URL=https://ml.dot-dot.ru/v2/classification/direction/confidence ###< direction_scoring ### - + ###> direction_recalculate ### -ML_DIRECTION_RECALCULATE_URL=https://calc.dev.dot-dot.ru/v1/schedule/calculate +ML_DIRECTION_RECALCULATE_URL=https://ml.dot-dot.ru/v2/schedule/calculate ###< direction_recalculate ### ###< Vozovoz ### @@ -111,3 +112,42 @@ PAPA_FINANCE_API_URL=DotDotAPI SOVKOM_API_KEY=AAk6UcV88xCCC26654rM SOVKOM_API_URL=https://testout.sovcomins.ru ###< SOVKOMTEST### + +ML_REGULAR_DIRECTION_URL=https://ml.dot-dot.ru/v2/schedule/transport + +###> YandexTracker ### +YTRACKER_API_TOKEN="y0_AgAEA7qkKFmeAAjF8AAAAADXovQd6htdkt7LTDW_sNHCz7qV9zdVHaQ" +YTRACKER_ORGANISATION_ID=355207 +###< YandexTracker ### + +###>capcha ### +SMARTCAPTCHA_SERVER_KEY=ysc2_GLQZ8QPaFh0eXqZ5KaRMuRRZOX7qNNMy7P9Mq82V6c4e7b81 +### sentry/sentry-symfony ### +SENTRY_DSN="https://1127a3ada375b040486c3ab0d86cbcab@sentry.dot-dot.ru/5" +SENTRY_SERVER_NAME=test +SENTRY_SERVER_USER_NAME=mobile +###< sentry/sentry-symfony ### + +CRYPTOPRO_PATH='/opt/cprocsp/bin/amd64/cryptcp -sign -dn '"ООО ""ТОЧКА-ТОЧКА ЛОГИСТИКА"""' -der' +SIGNED_DOC_PATH="/application/var/documents/signeddocs" +ABSOLUTE_SIGNED_DOC_PATH="/home/ddadmin/demolms/signeddocs" + +QUEUE_DSN_OC_CARRIER_OFFERS=amqp://ddadmin:Utahth9aeshahgh3saik@rabbitmq:5672/%2f/OC_CARRIER_OFFERS +QUEUE_DSN_STATISTIC_EXPORT=amqp://ddadmin:Utahth9aeshahgh3saik@rabbitmq:5672/%2f/STATISTIC_EXPORT + +CHROMIUM_BROWSER_SYS_PATH="/usr/bin/chromium-browser" + +###> API_KONTUR_FOCUS### +USER_TRUST_API_KONTUR_FOCUS_END_POINT_URL=https://focus-api.kontur.ru/ +USER_TRUST_API_KONTUR_FOCUS_API_TOKEN=3208d29d15c507395db770d0e65f3711e40374df +USER_TRUST_CHECK_BACKEND=true +###< API_KONTUR_FOCUS### +QUEUE_DSN_USER_TRUST=amqp://ddadmin:Utahth9aeshahgh3saik@rabbitmq:5672/%2f/USER_TRUST + +CONTAINER_NAME=php + +PROSTOR_SMS_LOGIN=ap142656 +PROSTOR_SMS_PASSWORD=808350 diff --git a/configs/php/.env__ b/configs/php/.env.save similarity index 82% rename from configs/php/.env__ rename to configs/php/.env.save index 30ca3ed..22534cb 100644 --- a/configs/php/.env__ +++ b/configs/php/.env.save @@ -7,9 +7,8 @@ PHP_SOCKET_PORT=8080 DATABASE_URL_DOT=mysql://root:root@db:3306/dot?serverVersion=mariadb-10.3.25 DATABASE_URL_DOT_STATISTIC=mysql://root:root@db:3306/dot_statistic?serverVersion=mariadb-10.3.25 -NUXT_BASE_URL=testa.dot-dot.ru DOCUMENT_ROOT=/application -APP_HOST=dot-dot.local +APP_HOST=mobile.dot-dot.ru APP_SCHEME=http MAILER_DSN=null://null @@ -22,6 +21,9 @@ SP_PASSWORD=xmlweb SP_KEY=secret SP_TEST=true +SP_V3_URL=https://spasskievorota.ru/services/test/cargo_3.php +SP_V3_KEY=secret + DEFAULT_EMAIL=no_reply@dot-dot.ru ADMIN_EMAIL=change.this@dot-dot.ru ACCOUNTANT_EMAIL=noreplay@dot-dot.ru @@ -50,10 +52,13 @@ FNS_ACCESS_TOKEN=secret GOOGLE_MAPS_ACCESS_KEY=secret GOOGLE_MAPS_BASE_URL=https://maps.google.com -ML_CALCULATOR_URL=https://calc.dev.dot-dot.ru/v1/calculate +https://ml.dot-dot.ru/v2/classification/order/relevance -ML_REGULAR_DIRECTION_URL=https://calc.dev.dot-dot.ru/v1/schedule/transport +ML_REGULAR_DIRECTION_URL=https://calc.dev.dot-dot.ru/v2/schedule/transport +ML_REGULAR_DIRECTION_CHAIN_URL=https://calc.dev.dot-dot.ru/v1/schedule/chains ML_REGULAR_DIRECTION_RELEVANCE_CARRIERS_URL=https://calc.dev.dot-dot.ru/v1/schedule/carrier/scoring +ML_REGULAR_DIRECTION_CHAIN_RELEVANCE_CARRIERS_URL=https://calc.dev.dot-dot.ru/v1/schedule/chains/carrier/scoring +ML_UNCERTAIN_DIRECTIONS_URL=https://calc.dev.dot-dot.ru/v1/classification/direction/uncertain YANDEX_MAPS_ACCESS_KEY=secret YANDEX_MAPS_BASE_URL=https://api.routing.yandex.net @@ -124,4 +129,6 @@ SOVKOM_API_KEY=secret SOVKOM_API_URL=secret ###< SOVKOM### -MAGIC_API_URL=https://magic-trans.ru/ \ No newline at end of file +MAGIC_API_URL=https://magic-trans.ru/ + +MAGIC_API_URL=https://magic-trans.ru/ diff --git a/configs/php/firebase-fcm-dotdot-key.json b/configs/php/firebase-fcm-dotdot-key.json new file mode 100755 index 0000000..d5d7878 --- /dev/null +++ b/configs/php/firebase-fcm-dotdot-key.json @@ -0,0 +1,13 @@ +{ + "type": "service_account", + "project_id": "t-t-logistics", + "private_key_id": "d43ca447a200d75f02886d06689212e27f0fd823", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCeqg8yH6kQp+eL\nJqjrwkgDHyw6xnKUqjidAV7C259tZD6BXzxcqzaqKc3DdCWyB8Eu0EpTfBsp6M+6\n3KACXXZ++Pd3bgzp3KOFRV16eDLr/xkvGUlMIKwb3saDjnPSdvrU0TqwCURQ+PEi\nPm6s4UTZ/bPp/h62q/oTxB3bQVwoOUcCljPynjAYUG49OXVbUW1yCMbgo1QUIXbU\n/b7mcNwjNyUnUX3mTjarjEVislqkO0j5XB06Hdnnb0z7OED0nJSV6ZRA0933Y4hL\nS+JFer1IuQGP3B8NpMdmOdCDpZPb4odcgt2Zw4gwqEV3iCE7OmXJtAQq/Nmd3luh\n6Sls4FVPAgMBAAECggEAPimZl4VA+0YVWPbWErxE83gon4R1itpgIN9TDZv3S+gM\n9ynlX9cyrRuAwtWEGUqhfOJdZHUIvXQ5wtfClvqgPOH1LqT+yTdJF6NUGvHx3XVO\nHB5XkcxxMeAnvY43wZsc7flleWfADMtjygtU2EXP8GpOLVyDEwWxDkJ1ghwK67Ta\ndpQWWbSnqo1alEWdELJ8y39xJrB/JSnFGc2sstfD5tx4fJ+1jI0ZvnCz3G1d42Rr\nnLaHfRoGSt5TddyvqejAXOhtL/Rhnki1XKhrl9/v1d25kUFPc+dK8z4yUXpWAHWs\nQfhPkRCaEYdTy9wbQ3T2tRATamuxYdGRGPVh47BSHQKBgQDeVHtk1MZVW0mohTCm\n+dto4QPGe0CVomQ1M6DGLv8fLpCTCpb2vdeftVjWXghZrWWaYBK3nZcyTP5+ii/g\nDW94TFWzB3a0M+tE1BGwc8Y9fifGqgcTeIxDbZzrDjmhOlebSvygX4uclmplPznl\ncaRpva3W6XJYGnCqMJf/XSaRTQKBgQC2sVHSA9X58Wy3ZTrbtTC1xGDx/2yGvoAw\n8w5pSj2w8f6wXvBV32uGWdf74s7XLS3g4I/y9nUGAJRJfzbBMwaAzjGHGX5UC6kp\nNJ5ZCfyRFOJ2hllIcsksj96RyDATry4fTc210XwXHHauz4tsqSfP6JomWggh6fj6\nTf4oq3zzCwKBgD1doiVlmUysArux74jXBBmBqhIZqOzkQrZwhprNE/veVWdQj/SQ\n17gsTNX2ZGWkN5wRknj91WK73667o5U7AB57K1hb4gbBIdoAktVaT0hfzsjF22gj\naMufsKUsavm2acHiQ7JcTOOunLVPa0KKSHArO5VLIBVzTs+a1AlXA7MtAoGAGRaw\nzc6JDBIDhAv60UFIty2IwrL5DGgM4qv+RqdTYYFaII5pIuHTuleMOaMkFJi3vDIa\nkpsV5wUdWBqIQm/nbLjkRFFT7+bKDEaVmFSuwp3Dm9NHX5Oj3OLFBfAf6hQcmV/t\n6BIkoGfgRJFr7Dgup3ah9LJYe4/OCVG8nYkvV5ECgYBFfQlhYv24M4RHQ/EbOIJY\nmZgZzcGz7nA0AWS8zeSoTizAtPwnoPElOs/+drJ+CKaAnfr8+BZ1spP2I8Sj6l9g\nXeDBlZvX7Q1baz6vdQr1KscjmWnHUbaDCrGWK+95umAVpyrabopynQt7T0GrBWKz\n+nixrt/C57fjiE2OHM8big==\n-----END PRIVATE KEY-----\n", + "client_email": "firebase-push-auth-dd@t-t-logistics.iam.gserviceaccount.com", + "client_id": "117030561604837789287", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-push-auth-dd%40t-t-logistics.iam.gserviceaccount.com", + "universe_domain": "googleapis.com" +} diff --git a/configs/rabbitmq/enabled_plugins b/configs/rabbitmq/enabled_plugins new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml index f90dcb5..22a840e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,11 @@ -version: "3.3" - volumes: certbot_volume: nginx_log_volume: mysql_data_volume: mysql_backup_volume: + php_var_volume: + rabbitmq_volume: + redis_volume: networks: @@ -20,8 +21,10 @@ services: environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_USER: ${MYSQL_USER} - MYSQL_DAABASE: ${MYSQL_DATABASE} + MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_PASSWORD: ${MYSQL_PASSWORD} + ports: + - ${MYSQL_PORT}:3306 volumes: - mysql_data_volume:/var/lib/mysql - mysql_backup_volume:/backups @@ -35,6 +38,8 @@ services: volumes: - ./configs/php/.env:/application/.env - ./configs/php/.env.local:/application/.env.local + - ./configs/php/firebase-fcm-dotdot-key.json:/application/config/firebase-fcm-dotdot-key.json + - php_var_volume:/application/var depends_on: - db networks: @@ -46,12 +51,14 @@ services: networks: - dd - nuxt: - image: registry.dot-dot.ru/front:${FRONT_TAG} + lms: + image: registry.dot-dot.ru/lms:${LMS_TAG} restart: unless-stopped command: npm run start volumes: - - ./configs/nuxt/.env:/app/.env + - ./configs/lms/.env:/app/.env + env_file: + - ./configs/lms/.env networks: - dd @@ -62,18 +69,72 @@ services: - ./configs/nginx/conf.d:/etc/nginx/conf.d - ./configs/nginx/nginx.conf:/etc/nginx/nginx.conf - ./configs/nginx/www:/var/www - - ./configs/nginx/ssl:/etc/nginx/ssl + - /home/ddadmin/dotdot/configs/nginx/ssl:/etc/nginx/ssl - ./configs/nginx/other:/etc/nginx/other - certbot_volume:/etc/letsencrypt - nginx_log_volume:/var/log/nginx labels: - "traefik.enable=true" - - "traefik.http.routers.nginx.rule=Host(`testa.dot-dot.ru`)" - - "traefik.http.services.nginx.loadbalancer.server.port=80" + - "traefik.http.routers.nginx${NETWORK}.rule=Host(`${NETWORK}.dot-dot.ru`)" + - "traefik.http.services.nginx${NETWORK}.loadbalancer.server.port=80" depends_on: - - nuxt - php - static + networks: + dd: + ingress: + aliases: + - ${NETWORK}-nginx + + rabbitmq: + image: rabbitmq:3.12.1-management-alpine + restart: unless-stopped + hostname: ${COMPOSE_PROJECT_NAME} + volumes: + - rabbitmq_volume:/var/lib/rabbitmq + - ./configs/rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins + environment: + - RABBITMQ_DEFAULT_USER=${RABBITMQ_USERNAME} + - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD} + - RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf + networks: + dd: {} + + redis: + image: redis:7.2.4-alpine3.19 + restart: unless-stopped + volumes: + - redis_volume:/data + - ./configs/redis:/usr/local/etc/redis + environment: + - REDIS_PASSWORD=${REDIS_PASSWORD} + - REDIS_PORT=6379 + networks: + dd: {} + + redis-exporter: + image: oliver006/redis_exporter:v1.59.0 + command: + - "--redis.addr=redis://redis:6379" + - "--redis.password=${REDIS_PASSWORD}" + networks: + dd: {} + + centrifugo: + image: centrifugo/centrifugo:v5 + volumes: + - ./configs/centrifugo/config.json:/centrifugo/config.json + command: centrifugo -c config.json + ulimits: + nofile: + soft: 65535 + hard: 65535 + restart: unless-stopped + networks: + - dd + + landing-ttl: + image: registry.dot-dot.ru/landing-ttl:${LANDINGTTL_TAG} + restart: unless-stopped networks: - dd - - ingress