chore(deploy): make deploy — единственный способ деплоя (SFTP paramiko вместо rsync)

- Makefile Unix: tools/deploy_sftp.py (paramiko mirror --delete), autovenv
- tools/deploy_sftp.py: рекурсивный SFTP-mirror public/ -> /dedinit.ru
- Jino SFTP-only: rsync/ssh-exec запрещены (exec request failed on channel 0)
- README/DEPLOY_INSTRUCTIONS: обновлены, деплой только через make deploy
- .gitignore: + .venv/
This commit is contained in:
2026-09-09 02:59:16 +00:00
parent 4ec03cddd5
commit 70a3671d61
5 changed files with 182 additions and 46 deletions
+30 -14
View File
@@ -7,35 +7,48 @@ ifeq ($(OS),Windows_NT)
DRYRUN_CMD = echo "Windows: проверка SFTP-соединения..."
else
PLATFORM = Unix
# На Unix-подобных системах используем rsync для SFTP
HOST = kpa39l.myjino.ru
PORT = 2222
USERNAME = kpa39l_dedinit
REMOTE_PATH = /dedinit.ru
# На Unix используем paramiko (SFTP). Аккаунт Jino — SFTP-only: rsync/ssh-exec
# запрещены ("exec request failed on channel 0"), поэтому deploy через
# tools/deploy_sftp.py (рекурсивный mirror + удаление лишнего).
# Венв .venv создаётся автоматически таргетом venv (нужен paramiko).
DEPLOY_CMD = .venv/bin/python tools/deploy_sftp.py
DRYRUN_CMD = .venv/bin/python tools/deploy_sftp.py --dry-run
# Пароль берётся из переменной окружения SSHPASS (см. README.md / DEPLOY_INSTRUCTIONS.md)
endif
.PHONY: build deploy deploy-dry-run clean rebuild help
.PHONY: build deploy deploy-dry-run clean rebuild help venv
build:
hugo --minify
@echo "Сайт успешно собран в папку public/"
deploy: build
# ЕДИНСТВЕННЫЙ способ деплоя — через make deploy.
# Никогда не заменять на rsync/ssh-exec напрямую: на Jino аккаунт SFTP-only.
deploy: build venv
ifeq ($(PLATFORM),Windows)
$(DEPLOY_CMD)
else
rsync -avz --delete -e 'ssh -p $(PORT)' public/ $(USERNAME)@$(HOST):$(REMOTE_PATH)/
@test -n "$$SSHPASS" || (echo "ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / DEPLOY_INSTRUCTIONS.md"; exit 1)
$(DEPLOY_CMD)
endif
deploy-dry-run: build
deploy-dry-run: build venv
ifeq ($(PLATFORM),Windows)
@echo "Выполняем проверку соединения с сервером..."
$(DRYRUN_CMD)
else
rsync -avn --delete -e 'ssh -p $(PORT)' public/ $(USERNAME)@$(HOST):$(REMOTE_PATH)/
@test -n "$$SSHPASS" || (echo "ОШИБКА: переменная SSHPASS (пароль SFTP) не задана. См. README.md / DEPLOY_INSTRUCTIONS.md"; exit 1)
$(DRYRUN_CMD)
endif
# Создаёт venv с paramiko для Unix-деплоя (единожды)
venv:
@if [ ! -x .venv/bin/python ]; then \
echo "Создаю .venv и ставлю paramiko..."; \
python3 -m venv .venv && .venv/bin/pip install -q paramiko; \
fi
clean:
ifeq ($(OS),Windows_NT)
del /q /s public\
del /q /s public\/
else
rm -rf public/
endif
@@ -46,8 +59,11 @@ rebuild: clean deploy
help:
@echo "Доступные команды:"
@echo " make build - собрать сайт"
@echo " make deploy - собрать и задеплоить сайт"
@echo " make deploy-dry-run - симуляция деплоя"
@echo " make deploy - собрать и задеплоить сайт (SFTP через lftp, требуется SSHPASS)"
@echo " make deploy-dry-run - симуляция деплоя (требуется SSHPASS)"
@echo " make clean - удалить папку public"
@echo " make rebuild - полная пересборка сайта"
@echo " make help - показать это сообщение"
@echo " make help - показать это сообщение"
@echo ""
@echo "Деплой: export SSHPASS='<пароль SFTP>'; make deploy"
@echo "Пароль хранится в DEPLOY_INSTRUCTIONS.md (winscp_script.txt для Windows)."