Об этом проекте
Pagoda — это полнофункциональный стартовый набор для веб-разработки и админ-панель, написанные на Go. Это не фреймворк, а репозиторий-шаблон: вы клонируете его, а не используете `go get`, а затем адаптируете код под своё приложение. Заявленная цель — предоставить большую часть функциональности, ожидаемой от полноценного веб-фреймворка, сохраняя весь код под вашим контролем, без строгих интерфейсов и без привязки к конкретным решениям.
Основа и стек
- Бэкенд: Echo (HTTP-фреймворк), Ent (ORM с генерацией кода), Gomponents (HTML-компоненты, написанные на Go).
- Фронтенд: серверный рендеринг HTML с HTMX для AJAX/частичных обновлений, Alpine.js для клиентского поведения и DaisyUI поверх Tailwind CSS для стилизации. Проект делает акцент на создании современных интерфейсов без написания JavaScript или CSS и даже без прямого написания HTML.
- Хранение: SQLite — база данных по умолчанию, также используемая для постоянных очередей фоновых задач; кэширование выполняется в памяти. В README отмечено, что Postgres и Redis ранее были настройками по умолчанию, и указана неподдерживаемая ветка для такой конфигурации.
Включённая функциональность
- Контейнер сервисов с внедрением зависимостей для аутентификации, кэша, конфигурации, базы данных, файлов, почты, ORM, задач, валидатора и веб-сервисов; он может быть инициализирован и корректно остановлен одним вызовом и передаётся обработчикам маршрутов.
- Конфигурация через YAML с переопределением переменными окружения с помощью viper, а также переключение окружений (в частности, тестового окружения).
- Автоматические миграции базы данных через Ent и отдельная тестовая база данных (по умолчанию SQLite в памяти).
- Типы сущностей ORM для User и PasswordToken с помощниками в Makefile для создания и генерации новых типов сущностей. Удаление Ent также удаляет динамическую админ-панель.
- Сессии через Gorilla sessions, хранящиеся в зашифрованных cookie; в README предупреждают о необходимости сменить ключ шифрования по умолчанию для рабочих окружений.
- Аутентификация: вход/выход, токены сброса пароля (хешированные с помощью bcrypt, с настраиваемым сроком действия), регистрация, флаг администратора у пользователей, middleware для требования аутентификации, отсутствия аутентификации или доступа администратора, а также подтверждение email.
- Админ-панель с генерацией кода, контролем доступа и планом развития; скриншоты показывают представления списка/редактирования сущностей и мониторинг очереди задач.
- Маршрутизация с пользовательским middleware, обработчиками, обработкой ошибок, перенаправлениями и помощниками для тестирования (HTTP-сервер, помощники запросов/ответов, Goquery).
- Слой UI: компоненты на основе Gomponents, макеты, страницы, формы с обработкой отправки, встроенной валидацией и защитой от CSRF, модели, иконки, кэширование узлов и flash-сообщения.
- Дополнительные сервисы: пагинатор, кэш (установка/получение/сброс данных и тегов), задачи с очередями, диспетчер и мониторинг, cron, загрузка файлов и статические/публичные файлы с обходом кэша и заголовками управления кэшем, электронная почта, HTTPS и логирование.
Начало работы
Установите Go, клонируйте репозиторий, выполните `make install` для опциональных инструментов (генератор Ent, Air для live reloading, Tailwind CLI), создайте учётную запись администратора с помощью `make admin email=...` (консоль выведет сгенерированный пароль), затем выполните `make run`; приложение доступно по адресу localhost:8000 по умолчанию, данные находятся в каталоге `dbs`. `make watch` включает live reloading с автоматической перекомпиляцией CSS.
Лицензия и статус
Проект распространяется под лицензией MIT, упомянут в Awesome Go и имеет бейджи CI-тестов и Go Report Card. README подробный и в значительной степени представляет собой экскурсию по кодовой базе, что делает его подходящим для разработчиков, которым нужна готовая отправная точка со всем необходимым, но с сохранением возможности заменить любой компонент.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.