From 3a45647daaeec8a705b4028854690e62f9191084 Mon Sep 17 00:00:00 2001 From: Storozhenko Evgeny Vladimirovich aka kpa39l Date: Sun, 1 Feb 2026 11:08:44 +0300 Subject: [PATCH] Update deployment solution for Windows compatibility --- DEPLOY_INSTRUCTIONS.md | 36 +++++++++++++++++++-------- Makefile | 34 +++++++++++++++++++++----- README.md | 7 ++++-- deploy.ps1 | 55 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 114 insertions(+), 18 deletions(-) create mode 100644 deploy.ps1 diff --git a/DEPLOY_INSTRUCTIONS.md b/DEPLOY_INSTRUCTIONS.md index becb8e5..ced54ec 100644 --- a/DEPLOY_INSTRUCTIONS.md +++ b/DEPLOY_INSTRUCTIONS.md @@ -1,23 +1,29 @@ -# Инструкция по публикации сайта через rsync +# Инструкция по публикации сайта через SFTP ## Описание -Этот документ описывает процесс публикации сгенерированного сайта (папка `public`) на хостинге через `rsync`. +Этот документ описывает процесс публикации сгенерированного сайта (папка `public`) на хостинге через SFTP. Решение кроссплатформенное и работает как на Unix-подобных системах (Linux/macOS), так и на Windows. ## Учетные данные и параметры подключения -Для работы используются следующие параметры, задаваемые в Makefile: +Для работы используются следующие параметры: - **Хост**: kpa39l.myjino.ru - **Порт SSH**: 2222 - **Пользователь**: kpa39l_dedinit +- **Пароль**: -Zp4ep747t25 - **Целевой путь**: /domains/dedinit.ru ## Установка зависимостей -Для работы скрипта деплоя требуются: -1. **rsync** - обычно предустановлен в большинстве Linux-систем, для Windows может потребоваться установка через Git Bash или WSL -2. **SSH-клиент** - для подключения к серверу -3. **Make** - для выполнения команд из Makefile +### Для Linux/macOS: +- **rsync** - обычно предустановлен в большинстве систем +- **SSH-клиент** - для подключения к серверу +- **Make** - для выполнения команд из Makefile + +### Для Windows: +- **WinSCP** - установите с официального сайта (https://winscp.net/) +- **PowerShell** - предустановлен в Windows 7 и выше +- **Make** - можно установить через Chocolatey, MinGW или Git for Windows ## Использование Makefile @@ -33,11 +39,15 @@ make deploy ``` Команда сначала собирает сайт, затем загружает содержимое папки `public/` на удаленный сервер. +Для Windows используется PowerShell-скрипт с WinSCP, для Unix-подобных систем - rsync. + ### Симуляция деплоя ```bash make deploy-dry-run ``` -Команда сначала собирает сайт, затем симулирует загрузку на сервер без фактического копирования файлов. +Команда сначала собирает сайт, затем симулирует загрузку на сервер: +- На Unix-подобных системах используется флаг `-n` для симуляции rsync +- На Windows симуляция пока не реализована, будет выведено соответствующее сообщение ### Очистка ```bash @@ -59,7 +69,7 @@ make help ## Конфигурация -Все параметры подключения находятся в начале файла Makefile: +Параметры подключения находятся в файле Makefile: - HOST - адрес сервера - PORT - порт SSH - USERNAME - имя пользователя @@ -67,7 +77,13 @@ make help При необходимости вы можете изменить эти параметры в файле Makefile. -## Настройка SSH +## Настройка для Windows + +Для корректной работы на Windows необходимо: +1. Установить WinSCP с официального сайта +2. По умолчанию скрипт ищет WinSCP в "C:\Program Files (x86)\WinSCP\WinSCP.exe", если у вас другой путь, измените его в файле deploy.ps1 + +## Настройка SSH (для Unix-подобных систем) Для удобства рекомендуется настроить SSH-ключи для подключения к серверу. Также можно настроить подключение через SSH config, добавив в ~/.ssh/config: diff --git a/Makefile b/Makefile index 28f904e..f2b4597 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,45 @@ -.PHONY: build deploy +# Определяем операционную систему +ifeq ($(OS),Windows_NT) + PLATFORM = Windows + # На Windows используем PowerShell-скрипт + DEPLOY_CMD = powershell -ExecutionPolicy Bypass -File ../deploy.ps1 + DRYRUN_CMD = powershell -ExecutionPolicy Bypass -File ../deploy.ps1 +else + PLATFORM = Unix + # На Unix-подобных системах используем rsync + HOST = kpa39l.myjino.ru + PORT = 2222 + USERNAME = kpa39l_dedinit + REMOTE_PATH = /domains/dedinit.ru +endif -# Параметры подключения к серверу -HOST = kpa39l.myjino.ru -PORT = 2222 -USERNAME = kpa39l_dedinit -REMOTE_PATH = /domains/dedinit.ru +.PHONY: build deploy deploy-dry-run clean rebuild help build: hugo --minify @echo "Сайт успешно собран в папку public/" deploy: build +ifeq ($(PLATFORM),Windows) + $(DEPLOY_CMD) +else rsync -avz --delete -e 'ssh -p $(PORT)' public/ $(USERNAME)@$(HOST):$(REMOTE_PATH)/ +endif deploy-dry-run: build +ifeq ($(PLATFORM),Windows) + @echo "Для Windows симуляция деплоя пока не реализована." + @echo "Для реального деплоя используйте команду: make deploy" +else rsync -avn --delete -e 'ssh -p $(PORT)' public/ $(USERNAME)@$(HOST):$(REMOTE_PATH)/ +endif clean: +ifeq ($(OS),Windows_NT) + del /q /s public\ +else rm -rf public/ +endif @echo "Папка public удалена" rebuild: clean deploy diff --git a/README.md b/README.md index fd58953..37835dd 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,8 @@ Для автоматизации процесса деплоя созданы специальные файлы: -- `Makefile` - содержит команды для сборки и публикации сайта на хостинге +- `Makefile` - содержит команды для сборки и публикации сайта на хостинге (работает как на Unix-подобных системах, так и на Windows) +- `deploy.ps1` - PowerShell-скрипт для деплоя на Windows с использованием WinSCP - `DEPLOY_INSTRUCTIONS.md` - инструкция по использованию команд деплоя Для публикации сайта на хостинге используйте команду: @@ -62,4 +63,6 @@ make deploy Для получения полного списка доступных команд используйте: ``` make help -``` \ No newline at end of file +``` + +Процесс деплоя кроссплатформенный: на Unix-подобных системах используется rsync, на Windows - PowerShell-скрипт с WinSCP. \ No newline at end of file diff --git a/deploy.ps1 b/deploy.ps1 new file mode 100644 index 0000000..653a4a4 --- /dev/null +++ b/deploy.ps1 @@ -0,0 +1,55 @@ +# PowerShell-скрипт для деплоя сайта через SFTP +# Параметры подключения к серверу +$HOST = "kpa39l.myjino.ru" +$PORT = "2222" +$USERNAME = "kpa39l_dedinit" +$REMOTE_PATH = "/domains/dedinit.ru" +$LOCAL_PATH = "public" + +# Путь к исполняемому файлу WinSCP +$WINSCP_PATH = "C:\Program Files (x86)\WinSCP\WinSCP.exe" + +# Проверяем, установлен ли WinSCP +if (-Not (Test-Path $WINSCP_PATH)) { + Write-Host "WinSCP не найден по пути $WINSCP_PATH" + Write-Host "Пожалуйста, установите WinSCP или укажите правильный путь к исполняемому файлу" + exit 1 +} + +# Проверяем, существует ли локальная папка +if (-Not (Test-Path $LOCAL_PATH)) { + Write-Host "Локальная папка $LOCAL_PATH не существует" + exit 1 +} + +# Создаем временный скрипт для WinSCP +$TEMP_SCRIPT = [System.IO.Path]::GetTempFileName() +$TEMP_SCRIPT += ".txt" + +# Формируем команды для WinSCP +$SCRIPT_CONTENT = @" +open sftp://${USERNAME}@${HOST}:${PORT} -hostkey=""*"" -rawsettings Password=-Zp4ep747t25 +synchronize remote ${LOCAL_PATH}/ ${REMOTE_PATH}/ -delete -transfer=binary +close +exit +"@ + +# Записываем команды в временный файл +Set-Content -Path $TEMP_SCRIPT -Value $SCRIPT_CONTENT + +try { + # Выполняем команды через WinSCP + Write-Host "Начинаем деплой содержимого папки ${LOCAL_PATH} на сервер ${HOST}..." + Start-Process -FilePath $WINSCP_PATH -ArgumentList "/script=$TEMP_SCRIPT" -Wait -NoNewWindow + Write-Host "Деплой завершен успешно!" +} +catch { + Write-Host "Произошла ошибка при деплое: $_" + exit 1 +} +finally { + # Удаляем временный файл + if (Test-Path $TEMP_SCRIPT) { + Remove-Item $TEMP_SCRIPT + } +} \ No newline at end of file