This commit is contained in:
ddadmin 2025-10-20 21:41:45 +03:00
parent 6826883110
commit b4d115173a
15 changed files with 457 additions and 86 deletions

22
.env
View File

@ -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

177
app.sh Executable file
View File

@ -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

3
configs/admin/.env Normal file
View File

@ -0,0 +1,3 @@
NUXT_HOST=0.0.0.0
NUXT_PORT=3000
DOMAIN=stagingadmin.dot-dot.ru

10
configs/admin/entrypoint.sh Executable file
View File

@ -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
"$@"

13
configs/lms/.env Normal file
View File

@ -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

View File

@ -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;
}
}

View File

@ -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';

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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
###<capcha ###
###> 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

View File

@ -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/
MAGIC_API_URL=https://magic-trans.ru/
MAGIC_API_URL=https://magic-trans.ru/

View File

@ -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"
}

View File

View File

@ -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