package softmodules import ( "rubric/utils" ) var ZolaModule = Module{ Key: "zola", Aliases: []string{"z", "static"}, Title: "Zola — генератор статических сайтов", Description: "Однобинарный SSG на Rust: сборка, деплой через rsync, Angie", Run: showZola, } func showZola() { utils.Header("Soft — Zola") utils.Section("Что это") utils.Code(`Zola — генератор статических сайтов (SSG), написанный на Rust. Один бинарь без зависимостей, встроенный шаблонизатор Tera, встроенный Sass-компилятор и Markdown-парсер — ничего ставить отдельно не нужно (в отличие от Jekyll/Hugo-плагинов и npm-тулчейнов). Подходит для блогов, документации, персональных сайтов — как раз для thebookofmagnus.ru.`) utils.Section("Основные команды") utils.Command("zola init mysite", "создать новый проект сайта") utils.Command("zola build", "собрать сайт в папку public/") utils.Command("zola serve", "локальный dev-сервер с live reload") utils.Command("zola check", "проверить ссылки и конфигурацию") utils.Section("Модель развёртывания: локальная сборка + rsync") utils.Code(`Zola не обязательно ставить на сервер — она нужна только там, где собирается сайт. Рабочая схема: 1. Пишешь контент локально 2. zola build → получаешь папку public/ 3. rsync -avz --delete public/ user@server:/var/www/mysite/public/ 4. Angie отдаёт статику из /var/www/mysite/public Разбор флагов rsync: -a archive-режим: права, симлинки, время модификации -v verbose — видно что копируется -z сжатие при передаче --delete удаляет на сервере файлы, которых больше нет локально (важно при переименовании/удалении страниц) Альтернатива — автосборка на сервере: bare git-репозиторий + post-receive хук, который сам делает checkout + zola build + копирование в /var/www/mysite/public. Проще для старта — вариант с локальной сборкой и rsync, без Zola на самом VDS.`) utils.Section("Раздача через Angie") utils.Code(`server { listen 443 ssl; server_name thebookofmagnus.ru www.thebookofmagnus.ru; root /var/www/mysite/public; index index.html; ssl_certificate /etc/letsencrypt/live/thebookofmagnus.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/thebookofmagnus.ru/privkey.pem; }`) utils.Note("certbot с Angie: плагин --nginx конфликтует с Angie. Всегда используй --webroot (webroot-папка вроде /var/www/certbot + location /.well-known/acme-challenge/ в HTTP-server-блоке)") utils.Footer() }