ваше сообщение коммита
This commit is contained in:
178
sync-to-vds.sh
178
sync-to-vds.sh
@@ -1,178 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Скрипт для синхронизации кода с localhost на VDS
|
||||
|
||||
# Цвета для вывода
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${GREEN}🔄 Синхронизация кода с VDS...${NC}"
|
||||
|
||||
# Параметры VDS (из настроек)
|
||||
VDS_HOST="185.26.121.127"
|
||||
VDS_USER="root"
|
||||
VDS_PORT="22"
|
||||
VDS_PATH="/home/docker/dapp"
|
||||
|
||||
# SSH опции
|
||||
SSH_OPTS="-p $VDS_PORT -o StrictHostKeyChecking=no"
|
||||
# SCP опции (scp использует -P для порта, а не -p)
|
||||
SCP_OPTS="-P $VDS_PORT -o StrictHostKeyChecking=no"
|
||||
|
||||
# Проверяем наличие rsync на удаленном сервере
|
||||
echo -e "${YELLOW}🔍 Проверка наличия rsync на VDS...${NC}"
|
||||
if ssh $SSH_OPTS $VDS_USER@$VDS_HOST "command -v rsync >/dev/null 2>&1"; then
|
||||
USE_RSYNC=true
|
||||
echo -e "${GREEN}✅ rsync найден на VDS${NC}"
|
||||
else
|
||||
USE_RSYNC=false
|
||||
echo -e "${YELLOW}⚠️ rsync не найден на VDS, будет использован метод tar/scp${NC}"
|
||||
read -p "Установить rsync на VDS? (y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo -e "${YELLOW}📦 Установка rsync на VDS...${NC}"
|
||||
ssh $SSH_OPTS $VDS_USER@$VDS_HOST "apt-get update && apt-get install -y rsync"
|
||||
if ssh $SSH_OPTS $VDS_USER@$VDS_HOST "command -v rsync >/dev/null 2>&1"; then
|
||||
USE_RSYNC=true
|
||||
echo -e "${GREEN}✅ rsync успешно установлен${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Не удалось установить rsync, используется tar/scp${NC}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Функция синхронизации через rsync
|
||||
sync_with_rsync() {
|
||||
local SRC=$1
|
||||
local DST=$2
|
||||
rsync -avz --progress -e "ssh $SSH_OPTS" \
|
||||
--exclude='.git' \
|
||||
--exclude='node_modules' \
|
||||
--exclude='*.log' \
|
||||
--exclude='.env' \
|
||||
--exclude='dist' \
|
||||
--exclude='build' \
|
||||
--exclude='.next' \
|
||||
--exclude='coverage' \
|
||||
--exclude='.nyc_output' \
|
||||
--exclude='sessions' \
|
||||
--exclude='temp' \
|
||||
--exclude='tmp' \
|
||||
--exclude='*.swp' \
|
||||
--exclude='*.swo' \
|
||||
--exclude='*~' \
|
||||
--exclude='.DS_Store' \
|
||||
"$SRC" "$DST"
|
||||
}
|
||||
|
||||
# Функция синхронизации через tar/scp
|
||||
sync_with_tar() {
|
||||
local SRC_DIR=$1
|
||||
local DST_DIR=$2
|
||||
local DIR_NAME=$(basename "$SRC_DIR")
|
||||
|
||||
# Создаем временный архив
|
||||
local TMP_TAR="/tmp/${DIR_NAME}_sync_$$.tar.gz"
|
||||
|
||||
# Упаковываем директорию с исключениями
|
||||
tar -czf "$TMP_TAR" \
|
||||
--exclude='.git' \
|
||||
--exclude='node_modules' \
|
||||
--exclude='*.log' \
|
||||
--exclude='.env' \
|
||||
--exclude='dist' \
|
||||
--exclude='build' \
|
||||
--exclude='.next' \
|
||||
--exclude='coverage' \
|
||||
--exclude='.nyc_output' \
|
||||
--exclude='sessions' \
|
||||
--exclude='temp' \
|
||||
--exclude='tmp' \
|
||||
--exclude='*.swp' \
|
||||
--exclude='*.swo' \
|
||||
--exclude='*~' \
|
||||
--exclude='.DS_Store' \
|
||||
-C "$(dirname "$SRC_DIR")" "$DIR_NAME"
|
||||
|
||||
# Копируем архив на VDS
|
||||
scp $SCP_OPTS "$TMP_TAR" "$VDS_USER@$VDS_HOST:/tmp/"
|
||||
|
||||
# Распаковываем на VDS
|
||||
ssh $SSH_OPTS $VDS_USER@$VDS_HOST "mkdir -p $DST_DIR && tar -xzf /tmp/$(basename $TMP_TAR) -C $DST_DIR --strip-components=1 && rm /tmp/$(basename $TMP_TAR)"
|
||||
|
||||
# Удаляем локальный архив
|
||||
rm -f "$TMP_TAR"
|
||||
}
|
||||
|
||||
# Синхронизация backend
|
||||
echo -e "${YELLOW}📦 Синхронизация backend...${NC}"
|
||||
if [ "$USE_RSYNC" = true ]; then
|
||||
sync_with_rsync "./backend/" "$VDS_USER@$VDS_HOST:$VDS_PATH/backend/"
|
||||
else
|
||||
sync_with_tar "./backend" "$VDS_PATH/backend"
|
||||
fi
|
||||
|
||||
# Синхронизация frontend
|
||||
echo -e "${YELLOW}📦 Синхронизация frontend...${NC}"
|
||||
if [ "$USE_RSYNC" = true ]; then
|
||||
sync_with_rsync "./frontend/" "$VDS_USER@$VDS_HOST:$VDS_PATH/frontend/"
|
||||
else
|
||||
sync_with_tar "./frontend" "$VDS_PATH/frontend"
|
||||
fi
|
||||
|
||||
# Синхронизация shared
|
||||
echo -e "${YELLOW}📦 Синхронизация shared...${NC}"
|
||||
if [ "$USE_RSYNC" = true ]; then
|
||||
sync_with_rsync "./shared/" "$VDS_USER@$VDS_HOST:$VDS_PATH/shared/"
|
||||
else
|
||||
sync_with_tar "./shared" "$VDS_PATH/shared"
|
||||
fi
|
||||
|
||||
# Синхронизация docker-compose.prod.yml
|
||||
echo -e "${YELLOW}📦 Синхронизация docker-compose.prod.yml...${NC}"
|
||||
scp $SCP_OPTS ./webssh-agent/docker-compose.prod.yml "$VDS_USER@$VDS_HOST:$VDS_PATH/docker-compose.prod.yml"
|
||||
|
||||
# Синхронизация Dockerfile файлов (если они изменились)
|
||||
echo -e "${YELLOW}📦 Синхронизация Dockerfile файлов...${NC}"
|
||||
scp $SCP_OPTS ./backend/Dockerfile "$VDS_USER@$VDS_HOST:$VDS_PATH/backend/Dockerfile" 2>/dev/null || true
|
||||
scp $SCP_OPTS ./frontend/Dockerfile "$VDS_USER@$VDS_HOST:$VDS_PATH/frontend/Dockerfile" 2>/dev/null || true
|
||||
scp $SCP_OPTS ./frontend/nginx.Dockerfile "$VDS_USER@$VDS_HOST:$VDS_PATH/frontend/nginx.Dockerfile" 2>/dev/null || true
|
||||
|
||||
# Синхронизация nginx конфигураций (критично для SEO исправлений)
|
||||
echo -e "${YELLOW}📦 Синхронизация nginx конфигураций...${NC}"
|
||||
scp $SCP_OPTS ./frontend/nginx-simple.conf "$VDS_USER@$VDS_HOST:$VDS_PATH/frontend/nginx-simple.conf" 2>/dev/null || true
|
||||
scp $SCP_OPTS ./frontend/nginx-local.conf "$VDS_USER@$VDS_HOST:$VDS_PATH/frontend/nginx-local.conf" 2>/dev/null || true
|
||||
scp $SCP_OPTS ./frontend/docker-entrypoint.sh "$VDS_USER@$VDS_HOST:$VDS_PATH/frontend/docker-entrypoint.sh" 2>/dev/null || true
|
||||
|
||||
echo -e "${GREEN}✅ Синхронизация завершена!${NC}"
|
||||
|
||||
# Спрашиваем, нужно ли пересобрать образы
|
||||
read -p "Пересобрать Docker образы на VDS? (y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo -e "${YELLOW}🔨 Пересборка Docker образов на VDS (без кеша)...${NC}"
|
||||
echo -e "${YELLOW}⏳ Это может занять несколько минут...${NC}"
|
||||
|
||||
# Пересобираем образы БЕЗ кеша для гарантированного применения изменений
|
||||
ssh $SSH_OPTS $VDS_USER@$VDS_HOST "cd $VDS_PATH && \
|
||||
docker compose -f docker-compose.prod.yml build --no-cache backend frontend frontend-nginx && \
|
||||
docker compose -f docker-compose.prod.yml up -d --force-recreate backend frontend frontend-nginx"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ Образы пересобраны и контейнеры перезапущены!${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Ошибка при пересборке образов!${NC}"
|
||||
echo -e "${YELLOW}💡 Попробуйте пересобрать вручную:${NC}"
|
||||
echo -e " ssh -p $VDS_PORT $VDS_USER@$VDS_HOST"
|
||||
echo -e " cd $VDS_PATH"
|
||||
echo -e " docker compose -f docker-compose.prod.yml build --no-cache backend frontend frontend-nginx"
|
||||
echo -e " docker compose -f docker-compose.prod.yml up -d --force-recreate backend frontend frontend-nginx"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}💡 Для пересборки образов выполните:${NC}"
|
||||
echo -e " ssh -p $VDS_PORT $VDS_USER@$VDS_HOST"
|
||||
echo -e " cd $VDS_PATH"
|
||||
echo -e " docker compose -f docker-compose.prod.yml build --no-cache backend frontend frontend-nginx"
|
||||
echo -e " docker compose -f docker-compose.prod.yml up -d --force-recreate backend frontend frontend-nginx"
|
||||
fi
|
||||
Reference in New Issue
Block a user