Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Publii Manual Sync — ручная синхронизация сайта Publii

Инструмент для надёжной ручной заливки сайта, собранного в Publii, на обычный shared-хостинг по FTP / SFTP / FTPS.

Проблема: встроенный Sync в Publii иногда не докачивает последний изменённый файл, при этом files.publii.json на сервере уже помечен как «всё залито». В итоге сайт и сервер расходятся, а повторный Sync считает, что всё актуально.

Решение: выгружать из Publii локально (Manual Deployment → output), сравнивать новый files.publii.json с прошлым снимком и копировать в папку temp только новые/изменённые файлы + список на удаление. Папку temp вы заливаете любым FTP-клиентом вручную и полностью контролируете результат.

Без зависимостей — только Python + Tkinter.

Как это работает

  1. В Publii делаете Manual Deployment в папку output (там появляется свежий files.publii.json с md5-хэшами каждого файла).
  2. Приложение сравнивает новый files.publii.json со снимком прошлого экспорта (prev_files.publii.json).
  3. Очищает папку temp, копирует туда только diff:
    • новые файлы,
    • файлы с изменившимся md5 или type,
    • пустые новые директории (чтобы структура сохранилась).
  4. Удаления не выполняет сразу, а накапливает в to_delete.txt — их вы удаляете на сервере вручную.
  5. Сохраняет текущий манифест как prev_files.publii.json для следующего запуска.
  6. При первом запуске (снимка ещё нет) снимок считается пустым — в temp копируется весь сайт.

Принцип тот же, что использует сам Publii начиная с 0.46: поэлементное сравнение чек-сумм из files.publii.json, только заливка — под вашим контролем.

Способы синхронизации Publii с хостингом (обзор)

Publii из коробки умеет деплоить сайт несколькими способами (экран Server Configuration):

Вариант Когда подходит
FTP (порт 21) Обычный shared-хостинг (Bluehost, GoDaddy, Beget, Timeweb и т.п.). Просто, но без шифрования, включая пароль.
SFTP (порт 22, пароль или ключ .pem + passphrase) Тот же хостинг, но всё шифруется. Рекомендуется, если хостер поддерживает.
FTPS FTP + TLS-шифрование данных доступа. Компромисс, если SFTP нет.
Amazon S3 / S3-совместимые Статика на объектном хранилище + CDN. Нужны bucket, endpoint, ключи.
Google Cloud Storage Аналог S3 в экосистеме Google.
Netlify Хостинг для статики с CDN, доменами и автодеплоем.
GitHub Pages / GitLab Pages Бесплатный хостинг для личных проектов и блогов.
Manual Deployment Выгрузка в локальную папку / ZIP / TAR — именно этот режим использует данное приложение. Дальше заливаете файлы куда угодно вручную.

Данное приложение рассчитано на связку Manual Deployment + любой FTP-клиент (FileZilla, WinSCP, Cyberduck, встроенный в панель хостинга). Это самый переносимый путь: работает с любым хостингом, где есть доступ по FTP/SFTP, и обходит проблему «потерянного последнего файла».

Подробности — в официальной документации: Server Configuration, Syncing your server, Recommended server settings.

Установка и запуск

Требования: Python 3.8+ с Tkinter (в официальном дистрибутиве python.org для Windows идёт по умолчанию). Сторонних библиотек не нужно.

git clone https://github.com/<user>/publii-manual-sync.git
cd publii-manual-sync
run_publii_sync.bat

Или напрямую:

python app.py

run_publii_sync.bat просто переходит в каталог скрипта, проверяет Python в PATH и запускает app.py в UTF-8.

Использование

  1. В Publii: Server → Type = Manual Deployment, Output type = uncompressed folder, укажите папку output, нажмите Sync.
  2. Запустите приложение, выберите:
    • output — папка выгрузки сайта (где лежит files.publii.json),
    • temp — пустая папка, куда ляжет diff для заливки.
  3. Нажмите Export — в temp окажутся только изменённые файлы.
  4. Залейте содержимое temp на сервер FTP-клиентом с сохранением структуры путей в корень сайта (обычно public_html/ или подпапка).
  5. Откройте Показать список удалений (to_delete.txt) и удалите эти пути на сервере вручную.
  6. После успешной заливки нажмите Обнулить файл удалений.

Настройки путей сохраняются в set_sync_publii.json рядом с app.py, поэтому выбираются один раз.

Служебные файлы (рядом с app.py)

Файл Назначение
set_sync_publii.json Сохранённые пути output/temp.
prev_files.publii.json Снимок files.publii.json с прошлого экспорта, база для diff.
to_delete.txt Накопительный список путей для ручного удаления с сервера. Дублей нет, вернувшиеся файлы вычёркиваются автоматически.

Эти файлы индивидуальны для вашего сайта — в репозиторий они не коммитятся (см. .gitignore). Бэкапьте их вместе с проектом сайта, иначе следующий экспорт посчитается «первым» и выгрузит всё.

Типовой кейс: «последний файл не долетел»

Симптомы: правите пост → Sync в Publii проходит без ошибок → на сайте изменений нет, повторный Sync тоже «всё ок».

Обходной путь с этим приложением:

  1. Переключите Publii на Manual Deployment, сделайте Sync в output.
  2. Export → получите temp с реальным diff по md5.
  3. Залейте temp по SFTP вручную, сверьте размер/дату «подозрительного» файла на сервере.
  4. Если файл битый — просто перезалейте его же из output поверх.

Так вы опираетесь на локальные хэши, а не на серверный files.publii.json, который уже мог «соврать».

Ограничения

  • Приложение не заливает файлы само — только готовит temp. Загрузка — вашим FTP-клиентом.
  • Сравнение идёт строго по path + md5 + type из files.publii.json. Файлы вне манифеста (ручные правки в output) не отслеживаются.
  • temp при каждом экспорте очищается полностью.
  • Удаления выполняются только вручную по to_delete.txt — это защита от случайного сноса.

Лицензия

MIT — можно свободно использовать и дорабатывать.

About

Ручная синхронизация сайта Publii по FTP: инкрементальный экспорт output → temp по diff files.publii.json

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages