From 1a6823f7a916ebbc9321942c3f688b3cb947e434 Mon Sep 17 00:00:00 2001 From: vladp Date: Thu, 15 Jan 2026 16:17:03 +0700 Subject: [PATCH] DEV_DB change db creds --- .env | 6 +- docker-compose.yaml | 19 ++-- infrastructure/jenkins/deploy.groovy | 129 ++++++++++++++------------- init-scripts/init-user.sql | 19 ++++ 4 files changed, 102 insertions(+), 71 deletions(-) create mode 100644 init-scripts/init-user.sql diff --git a/.env b/.env index d3e4347..e54b26f 100644 --- a/.env +++ b/.env @@ -1,10 +1,10 @@ POSTGRES_DB=no_copy_ -POSTGRES_USER=postgres -POSTGRES_PASSWORD=postgres +POSTGRES_USER=ncp_db +POSTGRES_PASSWORD=ncpDbApp POSTGRES_PORT=5432 POSTGRES_HOST=postgres REDIS_HOST=redis REDIS_PORT=6379 -SERVER_PORT=8080 +SERVER_PORT=8080 \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 192b2d6..6a69921 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -18,7 +18,7 @@ services: restart: unless-stopped db: - image: postgres:17 + image: postgres:17.7 restart: always deploy: resources: @@ -30,14 +30,17 @@ services: memory: 1G environment: POSTGRES_DB: no_copy_ - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres +# POSTGRES_USER: postgres +# POSTGRES_PASSWORD: postgres + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_SHARED_BUFFERS: 512MB POSTGRES_EFFECTIVE_CACHE_SIZE: 1536MB ports: - "54320:5432" volumes: - pgdata:/var/lib/postgresql/data + - ./init-scripts:/docker-entrypoint-initdb.d:ro container_name: postgres networks: app-network: @@ -61,8 +64,10 @@ services: # FILE_CHUNK_SIZE: 1048576 FILE_CHUNK_SIZE: 1000000 POSTGRES_DB: no_copy_ - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres +# POSTGRES_USER: postgres +# POSTGRES_PASSWORD: postgres + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_PORT: 5432 POSTGRES_HOST: db STORAGE_SERVICE_URL: http://storage:8081 @@ -82,6 +87,10 @@ services: - api volumes: - uploads_data:/data/uploads:rw + healthcheck: + test: [ "CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d no_copy_" ] + interval: 10s + retries: 5 grafana: image: grafana/grafana:10.3.1 diff --git a/infrastructure/jenkins/deploy.groovy b/infrastructure/jenkins/deploy.groovy index 7611efe..b57f515 100644 --- a/infrastructure/jenkins/deploy.groovy +++ b/infrastructure/jenkins/deploy.groovy @@ -30,6 +30,7 @@ pipeline { } } + stage('Deploy with docker-compose') { steps { script { @@ -38,71 +39,73 @@ pipeline { credentialsId: 'server-root-password', usernameVariable: 'SSH_USER', passwordVariable: 'SSH_PASS' - ) + ), + string(credentialsId: 'db-user', variable: 'DB_USER'), + string(credentialsId: 'db-password', variable: 'DB_PASSWORD') ]) { sh """ - echo "Deploying branch: ${params.BRANCH}" - - echo "Copying files to server..." - sshpass -p '$SSH_PASS' ssh -o StrictHostKeyChecking=no $SSH_USER@$SERVER "mkdir -p /opt/deployments/${params.BRANCH}" - sshpass -p '$SSH_PASS' scp -r -o StrictHostKeyChecking=no ./* $SSH_USER@$SERVER:/opt/deployments/${params.BRANCH}/ - - sshpass -p '$SSH_PASS' ssh -o StrictHostKeyChecking=no $SSH_USER@$SERVER " - cd /opt/deployments/${params.BRANCH} - - echo '1. Остановка старого приложения...' - docker stop app-backend 2>/dev/null || echo 'Контейнер не найден' - docker rm app-backend 2>/dev/null || echo 'Контейнер не найден' - - echo '2. Удаление старых образов...' - docker images --filter 'reference=*app*' -q | xargs -r docker rmi -f 2>/dev/null || echo 'Нет образов для удаления' - - echo '3. Создание сети если нужно...' - docker network create app-network 2>/dev/null || echo 'Сеть уже существует' - - echo '4. Запуск инфраструктуры...' - docker-compose up -d db storage - - echo '5. Ожидание PostgreSQL...' - sleep 10 - - echo '6. Сборка нового образа приложения...' - docker build --no-cache -t app-backend:latest . - - echo '7. Запуск приложения...' - docker run -d \\ - --name app-backend \\ - --network app-network \\ - --network-alias app \\ - -p 80:8080 \\ - -v uploads_data:/data/uploads:rw \\ - -e POSTGRES_DB=no_copy_ \\ - -e POSTGRES_USER=postgres \\ - -e POSTGRES_PASSWORD=postgres \\ - -e POSTGRES_PORT=5432 \\ - -e POSTGRES_HOST=db \\ - --restart unless-stopped \\ - app-backend:latest - - echo '8. Запуск мониторинга...' - docker-compose up -d grafana prometheus loki tempo alloy - - echo '9. Проверка...' - sleep 5 - - echo 'Статус контейнеров:' - docker ps --format 'table {{.Names}}\\t{{.Image}}\\t{{.Status}}' - - echo '10. Проверка health...' - if curl -s -f http://localhost:80/health > /dev/null 2>&1; then - echo 'Приложение работает' - echo 'URL: http://${params.SERVER}:80' - else - echo 'Проверка health не удалась' - docker logs app-backend --tail=20 - fi - " - """ + echo "Deploying branch: ${params.BRANCH}" + + echo "Copying files to server..." + sshpass -p '$SSH_PASS' ssh -o StrictHostKeyChecking=no $SSH_USER@$SERVER "mkdir -p /opt/deployments/${params.BRANCH}" + sshpass -p '$SSH_PASS' scp -r -o StrictHostKeyChecking=no ./* $SSH_USER@$SERVER:/opt/deployments/${params.BRANCH}/ + + sshpass -p '$SSH_PASS' ssh -o StrictHostKeyChecking=no $SSH_USER@$SERVER " + cd /opt/deployments/${params.BRANCH} + + echo '1. Остановка старого приложения...' + docker stop app-backend 2>/dev/null || echo 'Контейнер не найден' + docker rm app-backend 2>/dev/null || echo 'Контейнер не найден' + + echo '2. Удаление старых образов...' + docker images --filter 'reference=*app*' -q | xargs -r docker rmi -f 2>/dev/null || echo 'Нет образов для удаления' + + echo '3. Создание сети если нужно...' + docker network create app-network 2>/dev/null || echo 'Сеть уже существует' + + echo '4. Запуск инфраструктуры...' + docker-compose up -d db storage + + echo '5. Ожидание PostgreSQL...' + sleep 10 + + echo '6. Сборка нового образа приложения...' + docker build --no-cache -t app-backend:latest . + + echo '7. Запуск приложения...' + docker run -d \\ + --name app-backend \\ + --network app-network \\ + --network-alias app \\ + -p 80:8080 \\ + -v uploads_data:/data/uploads:rw \\ + -e POSTGRES_DB=no_copy_ \\ + -e POSTGRES_USER=$DB_USER \\ + -e POSTGRES_PASSWORD=$DB_PASSWORD \\ + -e POSTGRES_PORT=5432 \\ + -e POSTGRES_HOST=db \\ + --restart unless-stopped \\ + app-backend:latest + + echo '8. Запуск мониторинга...' + docker-compose up -d grafana prometheus loki tempo alloy + + echo '9. Проверка...' + sleep 5 + + echo 'Статус контейнеров:' + docker ps --format 'table {{.Names}}\\t{{.Image}}\\t{{.Status}}' + + echo '10. Проверка health...' + if curl -s -f http://localhost:80/health > /dev/null 2>&1; then + echo 'Приложение работает' + echo 'URL: http://${params.SERVER}:80' + else + echo 'Проверка health не удалась' + docker logs app-backend --tail=20 + fi + " + """ } } } diff --git a/init-scripts/init-user.sql b/init-scripts/init-user.sql new file mode 100644 index 0000000..f1d560e --- /dev/null +++ b/init-scripts/init-user.sql @@ -0,0 +1,19 @@ +DO +$do$ +BEGIN + IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'ncp_db') THEN + CREATE USER ncp_db WITH PASSWORD 'ncpDbApp'; +END IF; +END +$do$; + +DO +$do$ +BEGIN + IF NOT EXISTS (SELECT FROM pg_database WHERE datname = 'no_copy_') THEN + CREATE DATABASE no_copy_ OWNER ncp_db; +END IF; +END +$do$; + +GRANT ALL PRIVILEGES ON DATABASE no_copy_ TO ncp_db; \ No newline at end of file