From c7fbae191deff27c233871b87b936856ff2b3720 Mon Sep 17 00:00:00 2001 From: DeepDight Date: Mon, 5 Jan 2026 00:33:21 +0700 Subject: [PATCH 01/25] Create Dockerfile, fresh VPS install guide, nginx support --- Dockerfile | 20 +++++ FreshVPSInstGuide.md | 189 +++++++++++++++++++++++++++++++++++++++++++ nginx/nginx.conf | 34 ++++++++ 3 files changed, 243 insertions(+) create mode 100644 Dockerfile create mode 100644 FreshVPSInstGuide.md create mode 100644 nginx/nginx.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9255e45 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM node:20-alpine + +WORKDIR /app + +# Устанавливаем зависимости +COPY package*.json ./ +RUN npm ci + +# Копируем исходники +COPY . . + +# Prisma client +RUN npx prisma generate + +# 🔥 ВАЖНО: билд Next.js +RUN npm run build + +EXPOSE 3000 + +CMD ["npm", "run", "start"] diff --git a/FreshVPSInstGuide.md b/FreshVPSInstGuide.md new file mode 100644 index 0000000..aa45f6b --- /dev/null +++ b/FreshVPSInstGuide.md @@ -0,0 +1,189 @@ +**Только, что созданная VPS:** + +sudo apt update && sudo apt upgrade -y (Обновление пакетов) + +**Установка docker:** + +sudo apt install -y ca-certificates curl gnupg lsb-release + +sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +sudo apt update +sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +sudo apt install -y docker.io + +git clone https://github.com/GlebkaF/tt-tournament + +**Начало контента(создание всего, что только можно):** + +docker network create tt-network(создаем все сами, из-за того, что не используем докеркомпоз) + +docker volume create tt-postgres-data(чтобы после рестарта базы не пропали) + +docker run -d \ + --name tt-postgres \ + --network tt-network \ + -e POSTGRES_DB=tt_tournament \ + -e POSTGRES_USER=tournament_user \ + -e POSTGRES_PASSWORD=strong_password \ + -p 5433:5432 \ + -v tt-postgres-data:/var/lib/postgresql/data \ + --restart unless-stopped \ + --health-cmd='pg_isready -U tournament_user' \ + --health-interval=5s \ + --health-timeout=5s \ + --health-retries=5 \ + postgres:16 + + +**Проверка** + +docker ps +docker logs tt-postgres + +**Запускаем nginx в Docker** + +docker run -d \ + --name tt-nginx \ + --network tt-network \ + -p 80:80 \ + -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ + nginx:alpine + +Проверка(Если все в порядке, сайт должен открываться без :3000) +docker exec -it tt-nginx wget -qO- http://tt-app:3000 + + +**Создаем образ** + +docker build -t tt-app . + +**Запускаем контейнер приложения:** + +docker run -d \ + --name tt-app \ + --network tt-network \ + -e DATABASE_URL="postgresql://tournament_user:strong_password@tt-postgres:5432/tt_tournament" \ + -e BASIC_AUTH_USERNAME=admin \ + -e BASIC_AUTH_PASSWORD=admin1 \ + -p 3000:3000 \ + --restart unless-stopped \ + tt-app + +На этом моменте сайт is working, но мы не перенесли дамп базы данных. + +**Качаем дамп бд ну или создаем новую** + +docker run --rm -e PGPASSWORD=Password postgres:16 \ + pg_dump -h link.com \ + -U UserName \ + -p 5432 \ + -d DBName \ + -F c > neon_tt_tournament.dump + +Проверим скачался ли файл? +ls -lh neon_tt_tournament.dump + +docker cp neon_tt_tournament.dump tt-postgres:/neon_tt_tournament.dump + +docker exec -i tt-postgres pg_restore \ + -U tournament_user \ + -C \ + -d postgres \ + --no-owner \ + --no-privileges \ + /neon_tt_tournament.dump + +**После того, как сделали все выше, делаем так, чтобы контейнеры запускались автоматически при старте VPS:** + +docker update --restart=always tt-app +docker update --restart=always tt-postgres +docker update --restart=always tt-nginx + +**Подарок для друзей, подключение сертификатов к сайту:** + +docker rm -f tt-nginx + +mkdir -p certbot/conf +mkdir -p certbot/www + +Временно меняем nginx.conf: + +nano nginx/nginx.conf + +events {} + +http { + server { + listen 80; + server_name example.com www.example.com; + + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } + + location / { + return 404; + } + } +} + +Запускаем: + +docker run -d \ + --name tt-nginx \ + --network tt-network \ + -p 80:80 \ + -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ + -v $(pwd)/certbot/www:/var/www/certbot \ + nginx:alpine + +Получаем сертификат: + +docker run --rm \ + -v $(pwd)/certbot/conf:/etc/letsencrypt \ + -v $(pwd)/certbot/www:/var/www/certbot \ + certbot/certbot certonly \ + --webroot \ + --webroot-path=/var/www/certbot \ + -d example.com \ + -d www.example.com \ + --email your@email.com \ + --agree-tos \ + --no-eff-email + +Возвращаем назад исходный nginx.conf +Перезапускаем nginx: + +docker rm -f tt-nginx + +docker run -d \ + --name tt-nginx \ + --network tt-network \ + -p 80:80 \ + -p 443:443 \ + -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ + -v $(pwd)/certbot/conf:/etc/letsencrypt \ + -v $(pwd)/certbot/www:/var/www/certbot \ + nginx:alpine + + + + +**Создание дампа:** +docker exec -t tt-postgres pg_dump -U tournament_user -F c -v tt_tournament > tt_tournament.dump +Проверка создался ли: +ls -lh tt_tournament.dump + +**Восстановление бд:** +docker exec -it tt-postgres psql -U tournament_user -d tt_tournament +DROP SCHEMA public CASCADE; +CREATE SCHEMA public; + +После этого: +docker cp neon_tt_tournament.dump tt-postgres:/neon_tt_tournament.dump +docker exec -i tt-postgres pg_restore -U tournament_user -d tt_tournament --no-owner --no-privileges /neon_tt_tournament.dump \ No newline at end of file diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..2d080fa --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,34 @@ +events {} + +http { + upstream app_backend { + server tt-app:3000; + } + + server { + listen 80; + server_name new.ebtt.ru www.new.ebtt.ru; + return 301 https://$host$request_uri; + } + + server { + listen 443 ssl; + server_name new.ebtt.ru www.new.ebtt.ru; + + ssl_certificate /etc/letsencrypt/live/new.ebtt.ru/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/new.ebtt.ru/privkey.pem; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers on; + + location / { + proxy_pass http://app_backend; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + } +} \ No newline at end of file From 0e9731a26cb55bccc1b6bd193bedd8251459b97d Mon Sep 17 00:00:00 2001 From: DeepDight Date: Mon, 5 Jan 2026 13:11:38 +0700 Subject: [PATCH 02/25] Temp Fix page.tsx export const dynamic force-dynamic --- app/matches/page.tsx | 1 + app/players/[id]/page.tsx | 1 + app/schedule/page.tsx | 1 + app/test/rating/page.tsx | 11 +++++------ 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/matches/page.tsx b/app/matches/page.tsx index 414b86d..8400ef0 100644 --- a/app/matches/page.tsx +++ b/app/matches/page.tsx @@ -1,3 +1,4 @@ +export const dynamic = "force-dynamic"; import { Player } from "@/app/interface"; import MatchPage from "@/component/MatchPage"; import { Metadata } from "next"; diff --git a/app/players/[id]/page.tsx b/app/players/[id]/page.tsx index e5294d5..fdbc9e2 100644 --- a/app/players/[id]/page.tsx +++ b/app/players/[id]/page.tsx @@ -1,3 +1,4 @@ +export const dynamic = "force-dynamic"; import PlayerProfile from "@/component/PlayerProfile"; import { Metadata } from "next"; diff --git a/app/schedule/page.tsx b/app/schedule/page.tsx index f94dd55..94dd47b 100644 --- a/app/schedule/page.tsx +++ b/app/schedule/page.tsx @@ -1,3 +1,4 @@ +export const dynamic = "force-dynamic"; import { Player } from "@/app/interface"; import Schedule from "@/component/Schedule"; diff --git a/app/test/rating/page.tsx b/app/test/rating/page.tsx index 6f01ec6..7fe95a4 100644 --- a/app/test/rating/page.tsx +++ b/app/test/rating/page.tsx @@ -1,3 +1,4 @@ +export const dynamic = "force-dynamic"; import { Match, PrismaClient } from "@prisma/client"; import { Player } from "@/app/interface"; import React from "react"; @@ -141,15 +142,13 @@ function calculateGlicko2Ratings( if (match.result === "PLAYER1_WIN") { score1 = 1.0; score2 = 0.0; - result = `${playerDetails.get(match.player1Id)?.firstName} ${ - playerDetails.get(match.player1Id)?.lastName - }`; + result = `${playerDetails.get(match.player1Id)?.firstName} ${playerDetails.get(match.player1Id)?.lastName + }`; } else if (match.result === "PLAYER2_WIN") { score1 = 0.0; score2 = 1.0; - result = `${playerDetails.get(match.player2Id)?.firstName} ${ - playerDetails.get(match.player2Id)?.lastName - }`; + result = `${playerDetails.get(match.player2Id)?.firstName} ${playerDetails.get(match.player2Id)?.lastName + }`; } else { score1 = 0.5; score2 = 0.5; From b5f9181c854a25ba83718c9b82984c6cd30d9d6d Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 13:30:40 +0700 Subject: [PATCH 03/25] Add files via upload --- deploy.sh | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 deploy.sh diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..802ae80 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,208 @@ +#!/usr/bin/env bash +set -e + +echo "=== TT Tournament auto-deploy started ===" + +# ----------------------------- +# Проверка root +# ----------------------------- +if [ "$EUID" -ne 0 ]; then + echo "❌ Запусти скрипт через sudo" + exit 1 +fi + +# ----------------------------- +# Переменные +# ----------------------------- +REPO_URL="https://github.com/DeepDight/tt-tournament.git" +REPO_BRANCH="instdockervpsnginx" +APP_DIR="/opt/tt-tournament" + +APP_NAME="tt-app" +POSTGRES_CONTAINER="tt-postgres" +NGINX_CONTAINER="tt-nginx" +NETWORK="tt-network" +VOLUME="tt-postgres-data" + +POSTGRES_DB="tt_tournament" +POSTGRES_USER="tournament_user" +POSTGRES_PORT="5433" + +# ----------------------------- +# Обновление системы +# ----------------------------- +echo ">>> Обновление системы" +apt update && apt upgrade -y + +# ----------------------------- +# Установка базовых пакетов +# ----------------------------- +echo ">>> Установка базовых пакетов" +apt install -y \ + ca-certificates \ + curl \ + gnupg \ + lsb-release \ + git + +# ----------------------------- +# Установка Docker +# ----------------------------- +if ! command -v docker &> /dev/null; then + echo ">>> Установка Docker" + + mkdir -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ + gpg --dearmor -o /etc/apt/keyrings/docker.gpg + + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + + apt update + apt install -y \ + docker-ce \ + docker-ce-cli \ + containerd.io \ + docker-buildx-plugin \ + docker-compose-plugin \ + docker.io +fi + +# ----------------------------- +# Клонирование репозитория +# ----------------------------- +echo ">>> Клонирование репозитория" + +if [ -d "$APP_DIR" ]; then + echo "⚠️ $APP_DIR уже существует, используем его" +else + git clone $REPO_URL $APP_DIR +fi + +cd $APP_DIR +git checkout $REPO_BRANCH + +# ----------------------------- +# Docker network & volume +# ----------------------------- +echo ">>> Создание docker network и volume" +docker network inspect $NETWORK >/dev/null 2>&1 || docker network create $NETWORK +docker volume inspect $VOLUME >/dev/null 2>&1 || docker volume create $VOLUME + +# ----------------------------- +# Ввод паролей +# ----------------------------- +echo ">>> Ввод паролей" + +read -s -p "Пароль для локального PostgreSQL: " POSTGRES_PASSWORD +echo +read -s -p "Пароль BASIC_AUTH (admin): " BASIC_AUTH_PASSWORD +echo + +# ----------------------------- +# PostgreSQL +# ----------------------------- +echo ">>> Запуск PostgreSQL" + +docker rm -f $POSTGRES_CONTAINER 2>/dev/null || true + +docker run -d \ + --name $POSTGRES_CONTAINER \ + --network $NETWORK \ + -e POSTGRES_DB=$POSTGRES_DB \ + -e POSTGRES_USER=$POSTGRES_USER \ + -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \ + -p ${POSTGRES_PORT}:5432 \ + -v $VOLUME:/var/lib/postgresql/data \ + --restart unless-stopped \ + --health-cmd="pg_isready -U $POSTGRES_USER" \ + --health-interval=5s \ + --health-timeout=5s \ + --health-retries=5 \ + postgres:16 + +echo ">>> Ожидание PostgreSQL" +sleep 10 + +# ----------------------------- +# Nginx (HTTP) +# ----------------------------- +echo ">>> Запуск nginx" + +docker rm -f $NGINX_CONTAINER 2>/dev/null || true + +docker run -d \ + --name $NGINX_CONTAINER \ + --network $NETWORK \ + -p 80:80 \ + -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ + nginx:alpine + +# ----------------------------- +# Сборка приложения +# ----------------------------- +echo ">>> Сборка приложения" +docker build -t $APP_NAME . + +# ----------------------------- +# Запуск приложения +# ----------------------------- +echo ">>> Запуск приложения" + +docker rm -f $APP_NAME 2>/dev/null || true + +docker run -d \ + --name $APP_NAME \ + --network $NETWORK \ + -e DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_CONTAINER}:5432/${POSTGRES_DB}" \ + -e BASIC_AUTH_USERNAME=admin \ + -e BASIC_AUTH_PASSWORD=$BASIC_AUTH_PASSWORD \ + -p 3000:3000 \ + --restart unless-stopped \ + $APP_NAME + +# ----------------------------- +# Загрузка дампа (опционально) +# ----------------------------- +echo ">>> Загрузить дамп из Neon?" +read -p "Загрузить дамп? (y/n): " LOAD_DUMP + +if [[ "$LOAD_DUMP" == "y" ]]; then + read -p "Neon host: " NEON_HOST + read -p "Neon user: " NEON_USER + read -p "Neon db name: " NEON_DB + read -s -p "Neon password: " NEON_PASSWORD + echo + + docker run --rm -it \ + -e PGPASSWORD="$NEON_PASSWORD" \ + postgres:16 \ + pg_dump -h "$NEON_HOST" \ + -U "$NEON_USER" \ + -p 5432 \ + -d "$NEON_DB" \ + -F c > neon_tt_tournament.dump + + docker cp neon_tt_tournament.dump $POSTGRES_CONTAINER:/neon_tt_tournament.dump + + docker exec -i $POSTGRES_CONTAINER pg_restore \ + -U $POSTGRES_USER \ + -C \ + -d postgres \ + --no-owner \ + --no-privileges \ + /neon_tt_tournament.dump +fi + +# ----------------------------- +# Автозапуск +# ----------------------------- +docker update --restart=always $APP_NAME +docker update --restart=always $POSTGRES_CONTAINER +docker update --restart=always $NGINX_CONTAINER + +echo "✅ Deploy completed successfully" +echo "🌍 Открой сайт по IP VPS" From a13a89654adb3c05eb4e23fb52c4506c4350fd9d Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 13:33:21 +0700 Subject: [PATCH 04/25] Delete deploy.sh --- deploy.sh | 208 ------------------------------------------------------ 1 file changed, 208 deletions(-) delete mode 100644 deploy.sh diff --git a/deploy.sh b/deploy.sh deleted file mode 100644 index 802ae80..0000000 --- a/deploy.sh +++ /dev/null @@ -1,208 +0,0 @@ -#!/usr/bin/env bash -set -e - -echo "=== TT Tournament auto-deploy started ===" - -# ----------------------------- -# Проверка root -# ----------------------------- -if [ "$EUID" -ne 0 ]; then - echo "❌ Запусти скрипт через sudo" - exit 1 -fi - -# ----------------------------- -# Переменные -# ----------------------------- -REPO_URL="https://github.com/DeepDight/tt-tournament.git" -REPO_BRANCH="instdockervpsnginx" -APP_DIR="/opt/tt-tournament" - -APP_NAME="tt-app" -POSTGRES_CONTAINER="tt-postgres" -NGINX_CONTAINER="tt-nginx" -NETWORK="tt-network" -VOLUME="tt-postgres-data" - -POSTGRES_DB="tt_tournament" -POSTGRES_USER="tournament_user" -POSTGRES_PORT="5433" - -# ----------------------------- -# Обновление системы -# ----------------------------- -echo ">>> Обновление системы" -apt update && apt upgrade -y - -# ----------------------------- -# Установка базовых пакетов -# ----------------------------- -echo ">>> Установка базовых пакетов" -apt install -y \ - ca-certificates \ - curl \ - gnupg \ - lsb-release \ - git - -# ----------------------------- -# Установка Docker -# ----------------------------- -if ! command -v docker &> /dev/null; then - echo ">>> Установка Docker" - - mkdir -p /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ - gpg --dearmor -o /etc/apt/keyrings/docker.gpg - - echo \ - "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ - https://download.docker.com/linux/ubuntu \ - $(lsb_release -cs) stable" | \ - tee /etc/apt/sources.list.d/docker.list > /dev/null - - apt update - apt install -y \ - docker-ce \ - docker-ce-cli \ - containerd.io \ - docker-buildx-plugin \ - docker-compose-plugin \ - docker.io -fi - -# ----------------------------- -# Клонирование репозитория -# ----------------------------- -echo ">>> Клонирование репозитория" - -if [ -d "$APP_DIR" ]; then - echo "⚠️ $APP_DIR уже существует, используем его" -else - git clone $REPO_URL $APP_DIR -fi - -cd $APP_DIR -git checkout $REPO_BRANCH - -# ----------------------------- -# Docker network & volume -# ----------------------------- -echo ">>> Создание docker network и volume" -docker network inspect $NETWORK >/dev/null 2>&1 || docker network create $NETWORK -docker volume inspect $VOLUME >/dev/null 2>&1 || docker volume create $VOLUME - -# ----------------------------- -# Ввод паролей -# ----------------------------- -echo ">>> Ввод паролей" - -read -s -p "Пароль для локального PostgreSQL: " POSTGRES_PASSWORD -echo -read -s -p "Пароль BASIC_AUTH (admin): " BASIC_AUTH_PASSWORD -echo - -# ----------------------------- -# PostgreSQL -# ----------------------------- -echo ">>> Запуск PostgreSQL" - -docker rm -f $POSTGRES_CONTAINER 2>/dev/null || true - -docker run -d \ - --name $POSTGRES_CONTAINER \ - --network $NETWORK \ - -e POSTGRES_DB=$POSTGRES_DB \ - -e POSTGRES_USER=$POSTGRES_USER \ - -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \ - -p ${POSTGRES_PORT}:5432 \ - -v $VOLUME:/var/lib/postgresql/data \ - --restart unless-stopped \ - --health-cmd="pg_isready -U $POSTGRES_USER" \ - --health-interval=5s \ - --health-timeout=5s \ - --health-retries=5 \ - postgres:16 - -echo ">>> Ожидание PostgreSQL" -sleep 10 - -# ----------------------------- -# Nginx (HTTP) -# ----------------------------- -echo ">>> Запуск nginx" - -docker rm -f $NGINX_CONTAINER 2>/dev/null || true - -docker run -d \ - --name $NGINX_CONTAINER \ - --network $NETWORK \ - -p 80:80 \ - -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ - nginx:alpine - -# ----------------------------- -# Сборка приложения -# ----------------------------- -echo ">>> Сборка приложения" -docker build -t $APP_NAME . - -# ----------------------------- -# Запуск приложения -# ----------------------------- -echo ">>> Запуск приложения" - -docker rm -f $APP_NAME 2>/dev/null || true - -docker run -d \ - --name $APP_NAME \ - --network $NETWORK \ - -e DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_CONTAINER}:5432/${POSTGRES_DB}" \ - -e BASIC_AUTH_USERNAME=admin \ - -e BASIC_AUTH_PASSWORD=$BASIC_AUTH_PASSWORD \ - -p 3000:3000 \ - --restart unless-stopped \ - $APP_NAME - -# ----------------------------- -# Загрузка дампа (опционально) -# ----------------------------- -echo ">>> Загрузить дамп из Neon?" -read -p "Загрузить дамп? (y/n): " LOAD_DUMP - -if [[ "$LOAD_DUMP" == "y" ]]; then - read -p "Neon host: " NEON_HOST - read -p "Neon user: " NEON_USER - read -p "Neon db name: " NEON_DB - read -s -p "Neon password: " NEON_PASSWORD - echo - - docker run --rm -it \ - -e PGPASSWORD="$NEON_PASSWORD" \ - postgres:16 \ - pg_dump -h "$NEON_HOST" \ - -U "$NEON_USER" \ - -p 5432 \ - -d "$NEON_DB" \ - -F c > neon_tt_tournament.dump - - docker cp neon_tt_tournament.dump $POSTGRES_CONTAINER:/neon_tt_tournament.dump - - docker exec -i $POSTGRES_CONTAINER pg_restore \ - -U $POSTGRES_USER \ - -C \ - -d postgres \ - --no-owner \ - --no-privileges \ - /neon_tt_tournament.dump -fi - -# ----------------------------- -# Автозапуск -# ----------------------------- -docker update --restart=always $APP_NAME -docker update --restart=always $POSTGRES_CONTAINER -docker update --restart=always $NGINX_CONTAINER - -echo "✅ Deploy completed successfully" -echo "🌍 Открой сайт по IP VPS" From d338422f8a25f2f57d4cfe6e4c9df3fd42ec42b5 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 13:34:24 +0700 Subject: [PATCH 05/25] Add files via upload --- deploy.sh | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 deploy.sh diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..b6fbffa --- /dev/null +++ b/deploy.sh @@ -0,0 +1,208 @@ +#!/usr/bin/env bash +set -e + +echo "=== TT Tournament auto-deploy started ===" + +# ----------------------------- +# Проверка root +# ----------------------------- +if [ "$EUID" -ne 0 ]; then + echo "❌ Запусти скрипт через sudo" + exit 1 +fi + +# ----------------------------- +# Переменные +# ----------------------------- +REPO_URL="https://github.com/DeepDight/tt-tournament.git" +REPO_BRANCH="instdockervpsnginx" +APP_DIR="/opt/tt-tournament" + +APP_NAME="tt-app" +POSTGRES_CONTAINER="tt-postgres" +NGINX_CONTAINER="tt-nginx" +NETWORK="tt-network" +VOLUME="tt-postgres-data" + +POSTGRES_DB="tt_tournament" +POSTGRES_USER="tournament_user" +POSTGRES_PORT="5433" + +# ----------------------------- +# Обновление системы +# ----------------------------- +echo ">>> Обновление системы" +apt update && apt upgrade -y + +# ----------------------------- +# Установка базовых пакетов +# ----------------------------- +echo ">>> Установка базовых пакетов" +apt install -y \ + ca-certificates \ + curl \ + gnupg \ + lsb-release \ + git + +# ----------------------------- +# Установка Docker +# ----------------------------- +if ! command -v docker &> /dev/null; then + echo ">>> Установка Docker" + + mkdir -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ + gpg --dearmor -o /etc/apt/keyrings/docker.gpg + + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + + apt update + apt install -y \ + docker-ce \ + docker-ce-cli \ + containerd.io \ + docker-buildx-plugin \ + docker-compose-plugin \ + docker.io +fi + +# ----------------------------- +# Клонирование репозитория +# ----------------------------- +echo ">>> Клонирование репозитория" + +if [ -d "$APP_DIR" ]; then + echo "⚠️ $APP_DIR уже существует, используем его" +else + git clone $REPO_URL $APP_DIR +fi + +cd $APP_DIR +git checkout $REPO_BRANCH + +# ----------------------------- +# Docker network & volume +# ----------------------------- +echo ">>> Создание docker network и volume" +docker network inspect $NETWORK >/dev/null 2>&1 || docker network create $NETWORK +docker volume inspect $VOLUME >/dev/null 2>&1 || docker volume create $VOLUME + +# ----------------------------- +# Ввод паролей +# ----------------------------- +echo ">>> Ввод паролей" + +read -s -p "Пароль для локального PostgreSQL: " POSTGRES_PASSWORD +echo +read -s -p "Пароль BASIC_AUTH (admin): " BASIC_AUTH_PASSWORD +echo + +# ----------------------------- +# PostgreSQL +# ----------------------------- +echo ">>> Запуск PostgreSQL" + +docker rm -f $POSTGRES_CONTAINER 2>/dev/null || true + +docker run -d \ + --name $POSTGRES_CONTAINER \ + --network $NETWORK \ + -e POSTGRES_DB=$POSTGRES_DB \ + -e POSTGRES_USER=$POSTGRES_USER \ + -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \ + -p ${POSTGRES_PORT}:5432 \ + -v $VOLUME:/var/lib/postgresql/data \ + --restart unless-stopped \ + --health-cmd="pg_isready -U $POSTGRES_USER" \ + --health-interval=5s \ + --health-timeout=5s \ + --health-retries=5 \ + postgres:16 + +echo ">>> Ожидание PostgreSQL" +sleep 10 + +# ----------------------------- +# Nginx (HTTP) +# ----------------------------- +echo ">>> Запуск nginx" + +docker rm -f $NGINX_CONTAINER 2>/dev/null || true + +docker run -d \ + --name $NGINX_CONTAINER \ + --network $NETWORK \ + -p 80:80 \ + -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ + nginx:alpine + +# ----------------------------- +# Сборка приложения +# ----------------------------- +echo ">>> Сборка приложения" +docker build -t $APP_NAME . + +# ----------------------------- +# Запуск приложения +# ----------------------------- +echo ">>> Запуск приложения" + +docker rm -f $APP_NAME 2>/dev/null || true + +docker run -d \ + --name $APP_NAME \ + --network $NETWORK \ + -e DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_CONTAINER}:5432/${POSTGRES_DB}" \ + -e BASIC_AUTH_USERNAME=admin \ + -e BASIC_AUTH_PASSWORD=$BASIC_AUTH_PASSWORD \ + -p 3000:3000 \ + --restart unless-stopped \ + $APP_NAME + +# ----------------------------- +# Загрузка дампа (опционально) +# ----------------------------- +echo ">>> Загрузить дамп из Neon?" +read -p "Загрузить дамп? (y/n): " LOAD_DUMP + +if [[ "$LOAD_DUMP" == "y" ]]; then + read -p "Neon host: " NEON_HOST + read -p "Neon user: " NEON_USER + read -p "Neon db name: " NEON_DB + read -s -p "Neon password: " NEON_PASSWORD + echo + + docker run --rm -it \ + -e PGPASSWORD="$NEON_PASSWORD" \ + postgres:16 \ + pg_dump -h "$NEON_HOST" \ + -U "$NEON_USER" \ + -p 5432 \ + -d "$NEON_DB" \ + -F c > neon_tt_tournament.dump + + docker cp neon_tt_tournament.dump $POSTGRES_CONTAINER:/neon_tt_tournament.dump + + docker exec -i $POSTGRES_CONTAINER pg_restore \ + -U $POSTGRES_USER \ + -C \ + -d postgres \ + --no-owner \ + --no-privileges \ + /neon_tt_tournament.dump +fi + +# ----------------------------- +# Автозапуск +# ----------------------------- +docker update --restart=always $APP_NAME +docker update --restart=always $POSTGRES_CONTAINER +docker update --restart=always $NGINX_CONTAINER + +echo "✅ Deploy completed successfully" +echo "🌍 Открой сайт по IP VPS" From 146b63ca6b5f48169acfcd1310ae9738730bdb5d Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 13:36:26 +0700 Subject: [PATCH 06/25] Delete deploy.sh --- deploy.sh | 208 ------------------------------------------------------ 1 file changed, 208 deletions(-) delete mode 100644 deploy.sh diff --git a/deploy.sh b/deploy.sh deleted file mode 100644 index b6fbffa..0000000 --- a/deploy.sh +++ /dev/null @@ -1,208 +0,0 @@ -#!/usr/bin/env bash -set -e - -echo "=== TT Tournament auto-deploy started ===" - -# ----------------------------- -# Проверка root -# ----------------------------- -if [ "$EUID" -ne 0 ]; then - echo "❌ Запусти скрипт через sudo" - exit 1 -fi - -# ----------------------------- -# Переменные -# ----------------------------- -REPO_URL="https://github.com/DeepDight/tt-tournament.git" -REPO_BRANCH="instdockervpsnginx" -APP_DIR="/opt/tt-tournament" - -APP_NAME="tt-app" -POSTGRES_CONTAINER="tt-postgres" -NGINX_CONTAINER="tt-nginx" -NETWORK="tt-network" -VOLUME="tt-postgres-data" - -POSTGRES_DB="tt_tournament" -POSTGRES_USER="tournament_user" -POSTGRES_PORT="5433" - -# ----------------------------- -# Обновление системы -# ----------------------------- -echo ">>> Обновление системы" -apt update && apt upgrade -y - -# ----------------------------- -# Установка базовых пакетов -# ----------------------------- -echo ">>> Установка базовых пакетов" -apt install -y \ - ca-certificates \ - curl \ - gnupg \ - lsb-release \ - git - -# ----------------------------- -# Установка Docker -# ----------------------------- -if ! command -v docker &> /dev/null; then - echo ">>> Установка Docker" - - mkdir -p /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ - gpg --dearmor -o /etc/apt/keyrings/docker.gpg - - echo \ - "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ - https://download.docker.com/linux/ubuntu \ - $(lsb_release -cs) stable" | \ - tee /etc/apt/sources.list.d/docker.list > /dev/null - - apt update - apt install -y \ - docker-ce \ - docker-ce-cli \ - containerd.io \ - docker-buildx-plugin \ - docker-compose-plugin \ - docker.io -fi - -# ----------------------------- -# Клонирование репозитория -# ----------------------------- -echo ">>> Клонирование репозитория" - -if [ -d "$APP_DIR" ]; then - echo "⚠️ $APP_DIR уже существует, используем его" -else - git clone $REPO_URL $APP_DIR -fi - -cd $APP_DIR -git checkout $REPO_BRANCH - -# ----------------------------- -# Docker network & volume -# ----------------------------- -echo ">>> Создание docker network и volume" -docker network inspect $NETWORK >/dev/null 2>&1 || docker network create $NETWORK -docker volume inspect $VOLUME >/dev/null 2>&1 || docker volume create $VOLUME - -# ----------------------------- -# Ввод паролей -# ----------------------------- -echo ">>> Ввод паролей" - -read -s -p "Пароль для локального PostgreSQL: " POSTGRES_PASSWORD -echo -read -s -p "Пароль BASIC_AUTH (admin): " BASIC_AUTH_PASSWORD -echo - -# ----------------------------- -# PostgreSQL -# ----------------------------- -echo ">>> Запуск PostgreSQL" - -docker rm -f $POSTGRES_CONTAINER 2>/dev/null || true - -docker run -d \ - --name $POSTGRES_CONTAINER \ - --network $NETWORK \ - -e POSTGRES_DB=$POSTGRES_DB \ - -e POSTGRES_USER=$POSTGRES_USER \ - -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \ - -p ${POSTGRES_PORT}:5432 \ - -v $VOLUME:/var/lib/postgresql/data \ - --restart unless-stopped \ - --health-cmd="pg_isready -U $POSTGRES_USER" \ - --health-interval=5s \ - --health-timeout=5s \ - --health-retries=5 \ - postgres:16 - -echo ">>> Ожидание PostgreSQL" -sleep 10 - -# ----------------------------- -# Nginx (HTTP) -# ----------------------------- -echo ">>> Запуск nginx" - -docker rm -f $NGINX_CONTAINER 2>/dev/null || true - -docker run -d \ - --name $NGINX_CONTAINER \ - --network $NETWORK \ - -p 80:80 \ - -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ - nginx:alpine - -# ----------------------------- -# Сборка приложения -# ----------------------------- -echo ">>> Сборка приложения" -docker build -t $APP_NAME . - -# ----------------------------- -# Запуск приложения -# ----------------------------- -echo ">>> Запуск приложения" - -docker rm -f $APP_NAME 2>/dev/null || true - -docker run -d \ - --name $APP_NAME \ - --network $NETWORK \ - -e DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_CONTAINER}:5432/${POSTGRES_DB}" \ - -e BASIC_AUTH_USERNAME=admin \ - -e BASIC_AUTH_PASSWORD=$BASIC_AUTH_PASSWORD \ - -p 3000:3000 \ - --restart unless-stopped \ - $APP_NAME - -# ----------------------------- -# Загрузка дампа (опционально) -# ----------------------------- -echo ">>> Загрузить дамп из Neon?" -read -p "Загрузить дамп? (y/n): " LOAD_DUMP - -if [[ "$LOAD_DUMP" == "y" ]]; then - read -p "Neon host: " NEON_HOST - read -p "Neon user: " NEON_USER - read -p "Neon db name: " NEON_DB - read -s -p "Neon password: " NEON_PASSWORD - echo - - docker run --rm -it \ - -e PGPASSWORD="$NEON_PASSWORD" \ - postgres:16 \ - pg_dump -h "$NEON_HOST" \ - -U "$NEON_USER" \ - -p 5432 \ - -d "$NEON_DB" \ - -F c > neon_tt_tournament.dump - - docker cp neon_tt_tournament.dump $POSTGRES_CONTAINER:/neon_tt_tournament.dump - - docker exec -i $POSTGRES_CONTAINER pg_restore \ - -U $POSTGRES_USER \ - -C \ - -d postgres \ - --no-owner \ - --no-privileges \ - /neon_tt_tournament.dump -fi - -# ----------------------------- -# Автозапуск -# ----------------------------- -docker update --restart=always $APP_NAME -docker update --restart=always $POSTGRES_CONTAINER -docker update --restart=always $NGINX_CONTAINER - -echo "✅ Deploy completed successfully" -echo "🌍 Открой сайт по IP VPS" From 7a3d7365d6134ef980933647b8406eec64806357 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 13:36:43 +0700 Subject: [PATCH 07/25] Add files via upload --- deploy.sh | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 deploy.sh diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..b6fbffa --- /dev/null +++ b/deploy.sh @@ -0,0 +1,208 @@ +#!/usr/bin/env bash +set -e + +echo "=== TT Tournament auto-deploy started ===" + +# ----------------------------- +# Проверка root +# ----------------------------- +if [ "$EUID" -ne 0 ]; then + echo "❌ Запусти скрипт через sudo" + exit 1 +fi + +# ----------------------------- +# Переменные +# ----------------------------- +REPO_URL="https://github.com/DeepDight/tt-tournament.git" +REPO_BRANCH="instdockervpsnginx" +APP_DIR="/opt/tt-tournament" + +APP_NAME="tt-app" +POSTGRES_CONTAINER="tt-postgres" +NGINX_CONTAINER="tt-nginx" +NETWORK="tt-network" +VOLUME="tt-postgres-data" + +POSTGRES_DB="tt_tournament" +POSTGRES_USER="tournament_user" +POSTGRES_PORT="5433" + +# ----------------------------- +# Обновление системы +# ----------------------------- +echo ">>> Обновление системы" +apt update && apt upgrade -y + +# ----------------------------- +# Установка базовых пакетов +# ----------------------------- +echo ">>> Установка базовых пакетов" +apt install -y \ + ca-certificates \ + curl \ + gnupg \ + lsb-release \ + git + +# ----------------------------- +# Установка Docker +# ----------------------------- +if ! command -v docker &> /dev/null; then + echo ">>> Установка Docker" + + mkdir -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ + gpg --dearmor -o /etc/apt/keyrings/docker.gpg + + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + + apt update + apt install -y \ + docker-ce \ + docker-ce-cli \ + containerd.io \ + docker-buildx-plugin \ + docker-compose-plugin \ + docker.io +fi + +# ----------------------------- +# Клонирование репозитория +# ----------------------------- +echo ">>> Клонирование репозитория" + +if [ -d "$APP_DIR" ]; then + echo "⚠️ $APP_DIR уже существует, используем его" +else + git clone $REPO_URL $APP_DIR +fi + +cd $APP_DIR +git checkout $REPO_BRANCH + +# ----------------------------- +# Docker network & volume +# ----------------------------- +echo ">>> Создание docker network и volume" +docker network inspect $NETWORK >/dev/null 2>&1 || docker network create $NETWORK +docker volume inspect $VOLUME >/dev/null 2>&1 || docker volume create $VOLUME + +# ----------------------------- +# Ввод паролей +# ----------------------------- +echo ">>> Ввод паролей" + +read -s -p "Пароль для локального PostgreSQL: " POSTGRES_PASSWORD +echo +read -s -p "Пароль BASIC_AUTH (admin): " BASIC_AUTH_PASSWORD +echo + +# ----------------------------- +# PostgreSQL +# ----------------------------- +echo ">>> Запуск PostgreSQL" + +docker rm -f $POSTGRES_CONTAINER 2>/dev/null || true + +docker run -d \ + --name $POSTGRES_CONTAINER \ + --network $NETWORK \ + -e POSTGRES_DB=$POSTGRES_DB \ + -e POSTGRES_USER=$POSTGRES_USER \ + -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \ + -p ${POSTGRES_PORT}:5432 \ + -v $VOLUME:/var/lib/postgresql/data \ + --restart unless-stopped \ + --health-cmd="pg_isready -U $POSTGRES_USER" \ + --health-interval=5s \ + --health-timeout=5s \ + --health-retries=5 \ + postgres:16 + +echo ">>> Ожидание PostgreSQL" +sleep 10 + +# ----------------------------- +# Nginx (HTTP) +# ----------------------------- +echo ">>> Запуск nginx" + +docker rm -f $NGINX_CONTAINER 2>/dev/null || true + +docker run -d \ + --name $NGINX_CONTAINER \ + --network $NETWORK \ + -p 80:80 \ + -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ + nginx:alpine + +# ----------------------------- +# Сборка приложения +# ----------------------------- +echo ">>> Сборка приложения" +docker build -t $APP_NAME . + +# ----------------------------- +# Запуск приложения +# ----------------------------- +echo ">>> Запуск приложения" + +docker rm -f $APP_NAME 2>/dev/null || true + +docker run -d \ + --name $APP_NAME \ + --network $NETWORK \ + -e DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_CONTAINER}:5432/${POSTGRES_DB}" \ + -e BASIC_AUTH_USERNAME=admin \ + -e BASIC_AUTH_PASSWORD=$BASIC_AUTH_PASSWORD \ + -p 3000:3000 \ + --restart unless-stopped \ + $APP_NAME + +# ----------------------------- +# Загрузка дампа (опционально) +# ----------------------------- +echo ">>> Загрузить дамп из Neon?" +read -p "Загрузить дамп? (y/n): " LOAD_DUMP + +if [[ "$LOAD_DUMP" == "y" ]]; then + read -p "Neon host: " NEON_HOST + read -p "Neon user: " NEON_USER + read -p "Neon db name: " NEON_DB + read -s -p "Neon password: " NEON_PASSWORD + echo + + docker run --rm -it \ + -e PGPASSWORD="$NEON_PASSWORD" \ + postgres:16 \ + pg_dump -h "$NEON_HOST" \ + -U "$NEON_USER" \ + -p 5432 \ + -d "$NEON_DB" \ + -F c > neon_tt_tournament.dump + + docker cp neon_tt_tournament.dump $POSTGRES_CONTAINER:/neon_tt_tournament.dump + + docker exec -i $POSTGRES_CONTAINER pg_restore \ + -U $POSTGRES_USER \ + -C \ + -d postgres \ + --no-owner \ + --no-privileges \ + /neon_tt_tournament.dump +fi + +# ----------------------------- +# Автозапуск +# ----------------------------- +docker update --restart=always $APP_NAME +docker update --restart=always $POSTGRES_CONTAINER +docker update --restart=always $NGINX_CONTAINER + +echo "✅ Deploy completed successfully" +echo "🌍 Открой сайт по IP VPS" From a6ae26da744a10c68a144afc8e2c80911abb3fcd Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 13:43:41 +0700 Subject: [PATCH 08/25] Update deploy.sh --- deploy.sh | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/deploy.sh b/deploy.sh index b6fbffa..ee49764 100644 --- a/deploy.sh +++ b/deploy.sh @@ -34,17 +34,6 @@ POSTGRES_PORT="5433" echo ">>> Обновление системы" apt update && apt upgrade -y -# ----------------------------- -# Установка базовых пакетов -# ----------------------------- -echo ">>> Установка базовых пакетов" -apt install -y \ - ca-certificates \ - curl \ - gnupg \ - lsb-release \ - git - # ----------------------------- # Установка Docker # ----------------------------- From e22cd64fe2df58e812522c4554c40ada39121180 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 13:52:13 +0700 Subject: [PATCH 09/25] Update deploy.sh --- deploy.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/deploy.sh b/deploy.sh index ee49764..3759a8d 100644 --- a/deploy.sh +++ b/deploy.sh @@ -57,7 +57,6 @@ if ! command -v docker &> /dev/null; then containerd.io \ docker-buildx-plugin \ docker-compose-plugin \ - docker.io fi # ----------------------------- From 8fa26c05e37a17160d7fc91781eecaa8abdd2e8b Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 13:54:27 +0700 Subject: [PATCH 10/25] Update deploy.sh --- deploy.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/deploy.sh b/deploy.sh index 3759a8d..fc89c37 100644 --- a/deploy.sh +++ b/deploy.sh @@ -35,15 +35,27 @@ echo ">>> Обновление системы" apt update && apt upgrade -y # ----------------------------- -# Установка Docker +# Установка Docker (docker-ce) # ----------------------------- if ! command -v docker &> /dev/null; then - echo ">>> Установка Docker" + echo ">>> Установка Docker (docker-ce)" + # снимаем hold, если есть + apt-mark unhold docker docker.io containerd runc 2>/dev/null || true + + # полностью удаляем конфликтующие пакеты + apt purge -y docker docker-engine docker.io containerd runc || true + apt autoremove -y + apt autoclean -y + + # ключ Docker (БЕЗ интерактива) mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ - gpg --dearmor -o /etc/apt/keyrings/docker.gpg + gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg + chmod a+r /etc/apt/keyrings/docker.gpg + + # репозиторий Docker echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu \ @@ -51,12 +63,14 @@ if ! command -v docker &> /dev/null; then tee /etc/apt/sources.list.d/docker.list > /dev/null apt update + + # УСТАНАВЛИВАЕМ ТОЛЬКО docker-ce apt install -y \ docker-ce \ docker-ce-cli \ containerd.io \ docker-buildx-plugin \ - docker-compose-plugin \ + docker-compose-plugin fi # ----------------------------- From 06bbeffa769e91d121be73289b4b9b48622fff37 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 14:05:12 +0700 Subject: [PATCH 11/25] Update deploy.sh --- deploy.sh | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/deploy.sh b/deploy.sh index fc89c37..a8427cf 100644 --- a/deploy.sh +++ b/deploy.sh @@ -95,15 +95,16 @@ docker network inspect $NETWORK >/dev/null 2>&1 || docker network create $NETWOR docker volume inspect $VOLUME >/dev/null 2>&1 || docker volume create $VOLUME # ----------------------------- -# Ввод паролей +# Ввод паролей (через TTY) # ----------------------------- echo ">>> Ввод паролей" -read -s -p "Пароль для локального PostgreSQL: " POSTGRES_PASSWORD +read -s -p "Пароль для локального PostgreSQL: " POSTGRES_PASSWORD >> Загрузить дамп из Neon?" -read -p "Загрузить дамп? (y/n): " LOAD_DUMP +read -p "Загрузить дамп? (y/n): " LOAD_DUMP Date: Mon, 5 Jan 2026 14:12:52 +0700 Subject: [PATCH 12/25] Update deploy.sh --- deploy.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/deploy.sh b/deploy.sh index a8427cf..a9647e8 100644 --- a/deploy.sh +++ b/deploy.sh @@ -147,8 +147,12 @@ docker run -d \ # ----------------------------- # Сборка приложения # ----------------------------- -echo ">>> Сборка приложения" -docker build -t $APP_NAME . +if docker image inspect "$APP_NAME" >/dev/null 2>&1; then + echo ">>> Docker image '$APP_NAME' уже существует, пропускаем сборку" +else + echo ">>> Сборка Docker image '$APP_NAME'" + docker build -t "$APP_NAME" . +fi # ----------------------------- # Запуск приложения @@ -180,7 +184,7 @@ if [[ "$LOAD_DUMP" == "y" ]]; then read -s -p "Neon password: " NEON_PASSWORD Date: Mon, 5 Jan 2026 14:22:06 +0700 Subject: [PATCH 13/25] Update deploy.sh --- deploy.sh | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/deploy.sh b/deploy.sh index a9647e8..3b57a59 100644 --- a/deploy.sh +++ b/deploy.sh @@ -16,7 +16,7 @@ fi # ----------------------------- REPO_URL="https://github.com/DeepDight/tt-tournament.git" REPO_BRANCH="instdockervpsnginx" -APP_DIR="/opt/tt-tournament" +APP_DIR="$HOME/tt-tournament" # Клонируем в домашнюю папку пользователя APP_NAME="tt-app" POSTGRES_CONTAINER="tt-postgres" @@ -40,31 +40,21 @@ apt update && apt upgrade -y if ! command -v docker &> /dev/null; then echo ">>> Установка Docker (docker-ce)" - # снимаем hold, если есть apt-mark unhold docker docker.io containerd runc 2>/dev/null || true - - # полностью удаляем конфликтующие пакеты apt purge -y docker docker-engine docker.io containerd runc || true apt autoremove -y apt autoclean -y - # ключ Docker (БЕЗ интерактива) mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg - chmod a+r /etc/apt/keyrings/docker.gpg - # репозиторий Docker - echo \ - "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ - https://download.docker.com/linux/ubuntu \ - $(lsb_release -cs) stable" | \ + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \ tee /etc/apt/sources.list.d/docker.list > /dev/null apt update - - # УСТАНАВЛИВАЕМ ТОЛЬКО docker-ce apt install -y \ docker-ce \ docker-ce-cli \ @@ -77,7 +67,6 @@ fi # Клонирование репозитория # ----------------------------- echo ">>> Клонирование репозитория" - if [ -d "$APP_DIR" ]; then echo "⚠️ $APP_DIR уже существует, используем его" else @@ -98,18 +87,15 @@ docker volume inspect $VOLUME >/dev/null 2>&1 || docker volume create $VOLUME # Ввод паролей (через TTY) # ----------------------------- echo ">>> Ввод паролей" - read -s -p "Пароль для локального PostgreSQL: " POSTGRES_PASSWORD >> Запуск PostgreSQL" - docker rm -f $POSTGRES_CONTAINER 2>/dev/null || true docker run -d \ @@ -134,14 +120,13 @@ sleep 10 # Nginx (HTTP) # ----------------------------- echo ">>> Запуск nginx" - docker rm -f $NGINX_CONTAINER 2>/dev/null || true docker run -d \ --name $NGINX_CONTAINER \ --network $NETWORK \ -p 80:80 \ - -v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ + -v $APP_DIR/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ nginx:alpine # ----------------------------- @@ -158,7 +143,6 @@ fi # Запуск приложения # ----------------------------- echo ">>> Запуск приложения" - docker rm -f $APP_NAME 2>/dev/null || true docker run -d \ @@ -213,3 +197,4 @@ docker update --restart=always $NGINX_CONTAINER echo "✅ Deploy completed successfully" echo "🌍 Открой сайт по IP VPS" +echo "📂 Репозиторий находится в $APP_DIR, можно зайти: cd ~/tt-tournament" From 9729966647eb5ef87cc3c4772c1130569e689e12 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 14:51:35 +0700 Subject: [PATCH 14/25] Update deploy.sh --- deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy.sh b/deploy.sh index 3b57a59..6397ade 100644 --- a/deploy.sh +++ b/deploy.sh @@ -16,7 +16,7 @@ fi # ----------------------------- REPO_URL="https://github.com/DeepDight/tt-tournament.git" REPO_BRANCH="instdockervpsnginx" -APP_DIR="$HOME/tt-tournament" # Клонируем в домашнюю папку пользователя +APP_DIR="/home/platonfokin2017/tt-tournament" # Клонируем в домашнюю папку пользователя APP_NAME="tt-app" POSTGRES_CONTAINER="tt-postgres" From 874e9cb33528add58f770d256313c590983a77a6 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 15:12:49 +0700 Subject: [PATCH 15/25] Update deploy.sh --- deploy.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/deploy.sh b/deploy.sh index 6397ade..8d412d0 100644 --- a/deploy.sh +++ b/deploy.sh @@ -3,14 +3,6 @@ set -e echo "=== TT Tournament auto-deploy started ===" -# ----------------------------- -# Проверка root -# ----------------------------- -if [ "$EUID" -ne 0 ]; then - echo "❌ Запусти скрипт через sudo" - exit 1 -fi - # ----------------------------- # Переменные # ----------------------------- From fa941f609acd15dcb4616b86898d8491d107ecdf Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 15:25:54 +0700 Subject: [PATCH 16/25] Update deploy.sh --- deploy.sh | 224 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 149 insertions(+), 75 deletions(-) diff --git a/deploy.sh b/deploy.sh index 8d412d0..557217c 100644 --- a/deploy.sh +++ b/deploy.sh @@ -8,7 +8,7 @@ echo "=== TT Tournament auto-deploy started ===" # ----------------------------- REPO_URL="https://github.com/DeepDight/tt-tournament.git" REPO_BRANCH="instdockervpsnginx" -APP_DIR="/home/platonfokin2017/tt-tournament" # Клонируем в домашнюю папку пользователя +APP_DIR="$HOME/tt-tournament" APP_NAME="tt-app" POSTGRES_CONTAINER="tt-postgres" @@ -20,40 +20,7 @@ POSTGRES_DB="tt_tournament" POSTGRES_USER="tournament_user" POSTGRES_PORT="5433" -# ----------------------------- -# Обновление системы -# ----------------------------- -echo ">>> Обновление системы" -apt update && apt upgrade -y - -# ----------------------------- -# Установка Docker (docker-ce) -# ----------------------------- -if ! command -v docker &> /dev/null; then - echo ">>> Установка Docker (docker-ce)" - - apt-mark unhold docker docker.io containerd runc 2>/dev/null || true - apt purge -y docker docker-engine docker.io containerd runc || true - apt autoremove -y - apt autoclean -y - - mkdir -p /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ - gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg - chmod a+r /etc/apt/keyrings/docker.gpg - - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ - https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \ - tee /etc/apt/sources.list.d/docker.list > /dev/null - - apt update - apt install -y \ - docker-ce \ - docker-ce-cli \ - containerd.io \ - docker-buildx-plugin \ - docker-compose-plugin -fi +CERTBOT_DIR="$APP_DIR/certbot" # ----------------------------- # Клонирование репозитория @@ -66,7 +33,9 @@ else fi cd $APP_DIR +git fetch git checkout $REPO_BRANCH +git pull origin $REPO_BRANCH # ----------------------------- # Docker network & volume @@ -76,13 +45,14 @@ docker network inspect $NETWORK >/dev/null 2>&1 || docker network create $NETWOR docker volume inspect $VOLUME >/dev/null 2>&1 || docker volume create $VOLUME # ----------------------------- -# Ввод паролей (через TTY) +# Ввод паролей и домена # ----------------------------- -echo ">>> Ввод паролей" +echo ">>> Ввод паролей и домена" read -s -p "Пароль для локального PostgreSQL: " POSTGRES_PASSWORD >> Ожидание PostgreSQL" sleep 10 # ----------------------------- -# Nginx (HTTP) +# Загрузка дампа (опционально) # ----------------------------- -echo ">>> Запуск nginx" +echo ">>> Загрузить дамп из Neon?" +read -p "Загрузить дамп? (y/n): " LOAD_DUMP >> Скачивание дампа из Neon" + docker run --rm \ + -e PGPASSWORD="$NEON_PASSWORD" \ + postgres:16 \ + pg_dump -h "$NEON_HOST" \ + -U "$NEON_USER" \ + -p 5432 \ + -d "$NEON_DB" \ + -F c > "$APP_DIR/neon_tt_tournament.dump" + + echo ">>> Копирование дампа в локальный контейнер PostgreSQL" + docker cp "$APP_DIR/neon_tt_tournament.dump" $POSTGRES_CONTAINER:/neon_tt_tournament.dump + + echo ">>> Восстановление дампа в локальную базу" + docker exec -i $POSTGRES_CONTAINER pg_restore \ + -U $POSTGRES_USER \ + -C \ + -d postgres \ + --no-owner \ + --no-privileges \ + /neon_tt_tournament.dump + + echo "✅ Дамп успешно восстановлен" +fi + +# ----------------------------- +# Подготовка certbot +# ----------------------------- +mkdir -p "$CERTBOT_DIR/conf" "$CERTBOT_DIR/www" + +# ----------------------------- +# Временный nginx для certbot +# ----------------------------- +echo ">>> Запуск временного nginx для certbot" docker rm -f $NGINX_CONTAINER 2>/dev/null || true +cat > nginx/nginx-temp.conf <>> Генерация Let's Encrypt сертификата для $DOMAIN" + read -p "Введите email для сертификата: " CERT_EMAIL nginx/nginx.conf <>> Запуск nginx с HTTPS" +docker rm -f $NGINX_CONTAINER 2>/dev/null || true + +docker run -d \ + --name $NGINX_CONTAINER \ + --network $NETWORK \ + -p 80:80 -p 443:443 \ + -v $APP_DIR/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \ + -v $CERTBOT_DIR/conf:/etc/letsencrypt \ + -v $CERTBOT_DIR/www:/var/www/certbot \ + nginx:alpine + # ----------------------------- # Запуск приложения # ----------------------------- @@ -147,39 +254,6 @@ docker run -d \ --restart unless-stopped \ $APP_NAME -# ----------------------------- -# Загрузка дампа (опционально) -# ----------------------------- -echo ">>> Загрузить дамп из Neon?" -read -p "Загрузить дамп? (y/n): " LOAD_DUMP neon_tt_tournament.dump - - docker cp neon_tt_tournament.dump $POSTGRES_CONTAINER:/neon_tt_tournament.dump - - docker exec -i $POSTGRES_CONTAINER pg_restore \ - -U $POSTGRES_USER \ - -C \ - -d postgres \ - --no-owner \ - --no-privileges \ - /neon_tt_tournament.dump -fi - # ----------------------------- # Автозапуск # ----------------------------- @@ -188,5 +262,5 @@ docker update --restart=always $POSTGRES_CONTAINER docker update --restart=always $NGINX_CONTAINER echo "✅ Deploy completed successfully" -echo "🌍 Открой сайт по IP VPS" -echo "📂 Репозиторий находится в $APP_DIR, можно зайти: cd ~/tt-tournament" +echo "🌍 Сайт доступен по https://$DOMAIN" +echo "📂 Репозиторий находится в $APP_DIR, можно зайти: cd $APP_DIR" From 491a42f05b1801e0dca166b5b2e7e3f673e6b80d Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 15:33:45 +0700 Subject: [PATCH 17/25] Update deploy.sh --- deploy.sh | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/deploy.sh b/deploy.sh index 557217c..1f69af0 100644 --- a/deploy.sh +++ b/deploy.sh @@ -21,6 +21,34 @@ POSTGRES_USER="tournament_user" POSTGRES_PORT="5433" CERTBOT_DIR="$APP_DIR/certbot" +# ----------------------------- +# Обновление системы +# ----------------------------- +echo ">>> Обновление системы" +apt update && apt upgrade -y + +# ----------------------------- +# Проверка и установка Docker +# ----------------------------- +if ! command -v docker &> /dev/null; then + echo ">>> Docker не найден, устанавливаем Docker CE" + + # Добавляем официальный репозиторий Docker + mkdir -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg + chmod a+r /etc/apt/keyrings/docker.gpg + + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + + apt update + apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + echo "✅ Docker установлен" +else + echo "✅ Docker уже установлен" +fi # ----------------------------- # Клонирование репозитория From c8c755e728bc9a931b8185ff0d83181e9a5b6e35 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 15:52:17 +0700 Subject: [PATCH 18/25] Create setup.sh --- setup.sh | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 setup.sh diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..0dce8c3 --- /dev/null +++ b/setup.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +set -e + +echo "=== TT Tournament setup (update & Docker install) ===" + +# ----------------------------- +# Обновление системы +# ----------------------------- +echo ">>> Обновление системы" +sudo apt update && sudo apt upgrade -y + +# ----------------------------- +# Проверка и установка Docker +# ----------------------------- +if ! command -v docker &> /dev/null; then + echo ">>> Docker не найден, устанавливаем Docker CE" + + # Добавляем официальный репозиторий Docker + sudo mkdir -p /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + sudo chmod a+r /etc/apt/keyrings/docker.gpg + + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + + sudo apt update + sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + echo "✅ Docker установлен" +else + echo "✅ Docker уже установлен" +fi From 5f6867187afc961db2dba88928f800a1b8f94a43 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 15:54:46 +0700 Subject: [PATCH 19/25] Update deploy.sh --- deploy.sh | 33 ++------------------------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/deploy.sh b/deploy.sh index 1f69af0..4afec54 100644 --- a/deploy.sh +++ b/deploy.sh @@ -21,34 +21,6 @@ POSTGRES_USER="tournament_user" POSTGRES_PORT="5433" CERTBOT_DIR="$APP_DIR/certbot" -# ----------------------------- -# Обновление системы -# ----------------------------- -echo ">>> Обновление системы" -apt update && apt upgrade -y - -# ----------------------------- -# Проверка и установка Docker -# ----------------------------- -if ! command -v docker &> /dev/null; then - echo ">>> Docker не найден, устанавливаем Docker CE" - - # Добавляем официальный репозиторий Docker - mkdir -p /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg - chmod a+r /etc/apt/keyrings/docker.gpg - - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ - https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \ - tee /etc/apt/sources.list.d/docker.list > /dev/null - - apt update - apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - - echo "✅ Docker установлен" -else - echo "✅ Docker уже установлен" -fi # ----------------------------- # Клонирование репозитория @@ -186,8 +158,7 @@ docker run -d \ # ----------------------------- if [ ! -d "$CERTBOT_DIR/conf/live/$DOMAIN" ]; then echo ">>> Генерация Let's Encrypt сертификата для $DOMAIN" - read -p "Введите email для сертификата: " CERT_EMAIL Date: Mon, 5 Jan 2026 16:33:14 +0700 Subject: [PATCH 20/25] Update deploy.sh --- deploy.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/deploy.sh b/deploy.sh index 4afec54..826a0ed 100644 --- a/deploy.sh +++ b/deploy.sh @@ -253,6 +253,9 @@ docker run -d \ --restart unless-stopped \ $APP_NAME +docker exec -it $APP_NAME npx prisma generate +docker restart $APP_NAME + # ----------------------------- # Автозапуск # ----------------------------- From 6d9251c32925b77cef1a28f670112fd7255ae364 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 16:34:10 +0700 Subject: [PATCH 21/25] Update Dockerfile --- Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9255e45..ac9ec18 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,6 @@ RUN npm ci COPY . . # Prisma client -RUN npx prisma generate # 🔥 ВАЖНО: билд Next.js RUN npm run build From a9c2dc014e3feb5dd46e787fa2cda9d99aacea2c Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 17:07:21 +0700 Subject: [PATCH 22/25] Create .dockerignore --- .dockerignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..8aa3396 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +certbot +node_modules +*.log From 08367452eb401e16cdf1793ade9faa78e1343f89 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 17:11:18 +0700 Subject: [PATCH 23/25] Update deploy.sh --- deploy.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deploy.sh b/deploy.sh index 826a0ed..84b23e5 100644 --- a/deploy.sh +++ b/deploy.sh @@ -169,7 +169,9 @@ if [ ! -d "$CERTBOT_DIR/conf/live/$DOMAIN" ]; then -d www.$DOMAIN \ --email your@email.com \ --agree-tos \ - --no-eff-email + --no-eff-email \ + --non-interactive \ + --keep-until-expiring else echo "✅ Сертификат для $DOMAIN уже существует, пропускаем генерацию" fi From 848b22348b6e5711a57b0a426899e8c1017b3d7c Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 17:23:56 +0700 Subject: [PATCH 24/25] Update FreshVPSInstGuide.md --- FreshVPSInstGuide.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/FreshVPSInstGuide.md b/FreshVPSInstGuide.md index aa45f6b..65abf8e 100644 --- a/FreshVPSInstGuide.md +++ b/FreshVPSInstGuide.md @@ -1,3 +1,17 @@ +**AUTOMATICALLY:** +curl -L -o setup.sh https://raw.githubusercontent.com/DeepDight/tt-tournament/instdockervpsnginx/setup.sh +chmod +x setup.sh +sudo ./setup.sh + +sudo usermod -aG docker $USER +echo "⚠️ Чтобы изменения вступили в силу, выйдите из сессии и зайдите снова, или выполните: newgrp docker" +docker ps + +curl -L -o deploy.sh https://raw.githubusercontent.com/DeepDight/tt-tournament/instdockervpsnginx/deploy.sh +chmod +x deploy.sh +./deploy.sh + +**MANUAL:** **Только, что созданная VPS:** sudo apt update && sudo apt upgrade -y (Обновление пакетов) @@ -186,4 +200,4 @@ CREATE SCHEMA public; После этого: docker cp neon_tt_tournament.dump tt-postgres:/neon_tt_tournament.dump -docker exec -i tt-postgres pg_restore -U tournament_user -d tt_tournament --no-owner --no-privileges /neon_tt_tournament.dump \ No newline at end of file +docker exec -i tt-postgres pg_restore -U tournament_user -d tt_tournament --no-owner --no-privileges /neon_tt_tournament.dump From b827b43f1116137808b868d87485f0a380a928a4 Mon Sep 17 00:00:00 2001 From: DeepDight <121107317+DeepDight@users.noreply.github.com> Date: Mon, 5 Jan 2026 17:31:21 +0700 Subject: [PATCH 25/25] Update deploy.sh --- deploy.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deploy.sh b/deploy.sh index 84b23e5..3a71f07 100644 --- a/deploy.sh +++ b/deploy.sh @@ -107,8 +107,7 @@ if [[ "$LOAD_DUMP" == "y" ]]; then echo ">>> Восстановление дампа в локальную базу" docker exec -i $POSTGRES_CONTAINER pg_restore \ -U $POSTGRES_USER \ - -C \ - -d postgres \ + -d $POSTGRES_DB \ --no-owner \ --no-privileges \ /neon_tt_tournament.dump