|
||
---|---|---|
backend | ||
docker | ||
fixtures | ||
frontend | ||
lang | ||
.gitignore | ||
docker-compose.develop.yml | ||
docker-compose.yml | ||
README.md |
Да, это — </Табун>!
Блог-платформа на базе сильно переписанного LiveStreet 1.0.3. С понями.
PHP 7.4
с шаблонизаторомSmarty
;JS
/CoffeeScript
иCSS
/Stylus
в сборкеWebPack 4
сBabel
;- БД
MySQL
; - кеш
Redis
; - движок поиска
ElasticSearch
.
Запуск проекта
Для запуска проекта нужен Docker >=19.03 (поддерживает buildx
) с CLI-плагином Compose.
# запуск проекта из docker-compose по умолчанию (опция -f для переопределения)
docker compose up -d
# выполнение команды в работающем контейнере бекенда (например, composer update)
docker compose exec app ...
# выполнение команды в работающем контейнере фронтенда (например, npm install)
docker compose exec frontend ...
# остановка проекта
docker compose down
Для сборки продакшен сервера используется docker-compose.yml
, для разработки — docker-compose.develop.yml
. Отличия сборки для разработки:
- все порты открываются на определённом IP-адресе, по умолчанию
127.0.0.1
, настраивается переменной окруженияHOST_IP
в файле.env
; - все изменения в папках
frontend
(ассеты) иlang
(языковые файлы формата MessageFormat) отслеживаются и будут вызывать пересборку упакованных ассетов и применение их на сервере — не требуется перезапускать контейнеры; - создаётся отдельный контейнер для фронтенда, в котором крутится отслеживание упомянутых выше изменений;
- возможна отладка PHP-кода посредством xDebug;
- для управления базой данных доступен phpMyAdmin в стандартной поставке с автоматической авторизацией;
- после первой сборки в проект загружаются пакеты Composer и NPM для корректной работы систем IntelliSense в IDE.
Если компьтер, на котором ведётся разработка, и компьютер, на котором запускается проект, — разные, то в файле .env
в корне проекта необходимо указать IP-адрес в локальной
сети компьютера-сервера. Пример оформления файла:
HOST_IP=10.0.1.1
COMPOSE_FILE=docker-compose.develop.yml
COMPOSE_PROJECT_NAME=tabun-dev
COMPOSE_FILE
нужен, чтобы не писать при запуске/остановке контейнеров -f <...>
.
Добавьте COMPOSE_PROJECT_NAME
, чтобы образы, контейнеры и хранилища создавались с нужным префиксом. По умолчанию это имя папки проекта.
Работа с проектом
После запуска (в случае dev-сборки — на 127.0.0.1
или заданном адресе) будут открыты порты:
8000
— собственно, сам Табун;8080
— интерфейс phpMyAdmin (авторизация не требуется). Доступен только на dev-сборке;1080
— интерфейс отладочного почтового сервера, позволяющего тестировать связанный с отправкой писем функционал без действительной отправки. Доступен только на dev-сборке;3307
— БД. Доступен только на dev-сборке.
При использовании xDebug укажите порт 9003 в конфигурации своей IDE. Если дополнительно используете DBGp Proxy Tool — IDE-ключ tabun
.
База данных инициализируется автоматически при старте её контейнера и наполняется небольшой порцией тестовых данных (несколько аккаунтов, блогов, записей в них, комментариев).
Для этого используются sql-файлы из папки fixtures
— в migrations/
находится схема БД и в data/
тестовое наполнение.
Преднастроенные аккаунты на сайте для тестирования (логин:пароль):
Celestia:celestia
Luna:constellations
Sparkle:scrolls
Spitfire:feathers
При изменении существующей структуры БД на dev-сборке помимо создания дополнительных файлов миграции необходимо проверять соответствие тестового наполнения внесённым
изменениям. Иными словами, после добавления файла миграции, изменяющего структуру БД, нужно заглянуть во все файлы в папке data/
и проверить SQL-запросы в них.
Например, при добавлении новых столбцов нужно внести значения для них в соответствующих INSERT
-запросах в 0001_example.sql
, т.к. в них не прописан список заполняемых столбцов
и при попытке выполнить такой запрос в таблице с изменённым набором столбцов БД упадёт (как ни странно).
Прочие сервисы
Redis
Порт 6379
(внутренний, не открывается за пределы docker)
Базы:
- 1 — брокер Celery
- 2 — результаты задач
- 3 — сессии PHP
- 4 — кеш приложения
php-fpm
Порт 9000
(внутренний, не открывается за пределы docker)
ElasticSearch
Переиндексация постов и комментов:
docker compose exec app php /var/www/backend/engine/console/ls.php reindex topics
docker compose exec app php /var/www/backend/engine/console/ls.php reindex comments