12 KiB
Запуск проекта
Для запуска проекта нужен Docker >=18.06.0 с docker-compose >=1.22.0. Для использования скрипта сборки и запуска вместо устаревшего docker-compose требуется CLI-плагин Compose (доступен для Docker >=18.09.0).
Для сборки продакшен сервера используется docker-compose.yml
, для разработки — docker-compose.develop.yml
. Отличия сборки для разработки:
- все порты открываются на определённом IP-адресе, по умолчанию
127.0.0.1
, настраивается переменной окруженияHOST_IP
в файле.env
; - все изменения в папках
frontend
(ассеты) иtemplates/skin/synio/locale/ru_RU/LC_MESSAGES/parts
(языковые файлы формата GetText) отслеживаются и будут вызывать пересборку упакованных ассетов и применение их на сервере — не требуется перезапускать контейнеры; - создаётся отдельный контейнер для фронтенда, в котором крутится отслеживание упомянутых выше изменений;
- возможна отладка PHP-кода посредством xDebug;
- для управления базой данных доступен phpMyAdmin в стандартной поставке с автоматической авторизацией;
- при использовании скрипта сборки и запуска дополнительно происходит копирование папки
/vendor
из контейнера бекенда в основную среду разработки для корректной работы систем IntelliSense в IDE.
Если компьтер, на котором ведётся разработка, и компьютер, на котором запускается проект, — разные, то в файле .env
в корне проекта необходимо указать IP-адрес в локальной
сети компьютера-сервера. Пример оформления файла:
HOST_IP=10.0.1.1
tl;dr
Подготовка dev-сборки к работе:
~/project_directory$ echo "HOST_IP=<IP_ADDRESS_OF_PROJECT_SERVER>" > .env && ./run.sh dev - rebuild
Дальнейший запуск сборки:
~/project_directory$ ./run.sh dev
Запуск скриптом
Сборка и запуск осуществляются с помощью run.sh
в корневой папке проекта. Формат вызова:
run.sh [dev|- [<custom_name>|- [rebuild|- [log|-]]]]
Порядок аргументов важен. Для пропуска аргумента используйте дефис. Расшифровка:
dev
соберёт и запустит Табун для разработки.- С помощью
<custom_name>
можно задать другое имя проекта (и результирующих контейнеров). По умолчанию tabun, для dev-сборки — tabun-dev. rebuild
вызовет принудительную пересборку (с использованием кеширования, см. ниже как нивелировать) и не запустит контейнеры. Если совмещён сdev
, то в проекте появится или пересоздастся папкаvendor
с библиотеками, подтянутыми композером, изменения в ней не влияют на сервер.log
выведет подробный лог в файлbuild.log
в корневой папке проекта (в.gitignore
отсутствует, поэтому удаляйте этот файл, чтобы он не попал в репозиторий).
Контейнеры не пересобираются, если они были собраны ранее для выбранного режима (продакшен/разработка) и имени проекта и в их конфигурацию не были внесены изменения.
Запуск вручную
Сборку и запуск можно произвести вручную командой docker-compose -f docker-compose.yml up
. Для оптимизации процесса и собранных образов контейнеров рекомендуется активировать
BuildKit, который используется по умолчанию с Docker 23.0:
- либо с помощью
docker compose
(без дефиса) в Docker >=18.09.0 с CLI-плагиномcompose-cli-plugin
, - либо с указанием переменных окружения
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1
при вызовеdocker-compose
(для версий Docker < 23.0).
Как подготовить окружение к чистой пересборке сервера?
run.sh - - rebuild
пересобирает контейнеры и частично образы, если в Dockerfile
были внесены изменения (спойлер: не всегда). Если же требуется полная пересборка, можно
воспользоваться следующими командами:
docker builder prune -a
(чистит кеш сборки, не влияет на собранные образы и контейнеры)docker container rm <проект-сервис-индекс> [<проект-сервис-индекс>...]
(удаляет отдельно взятый(-е) контейнер(-ы) с названием(-ями)проект-сервис-индекс
;docker container ls -a
для вывода списка всех контейнеров)
илиdocker container prune
(удаляет все контейнеры, когда-либо созданные на хосте (не только Табунские!))docker volume rm <название> [<название>...]
(удаляет отдельно взятое(-ые) хранилище(-а), не привязанное(-ые) ни к одному контейнеру;docker volume ls
для вывода списка всех хранилищ)
илиdocker volume prune
(удаляет все тома, не привязанные ни к одному контейнеру (не только Табунские!))docker image rm <название> [<название>...]
(удаляет отдельно взятый(-ые) образы(-ы), не привязанный(-ые) ни к одному контейнеру;docker image ls
для вывода списка всех образов (-a
для показа вообще всех))
илиdocker image prune
(удаляет ненужные образы; с аргументом-a
удалит так же все образы, не привязанные ни к одному контейнеру (не только Табунские!))
Если производятся изменения в скриптах сборки, влияющие на стартовое содержимое хранилищ, их (хранилища) нужно предварительно удалить.
Работа с проектом
После запуска (в случае dev-сборки — на 127.0.0.1
или заданном адресе) будут открыты порты:
8000
— собственно, сам Табун;8080
— интерфейс phpMyAdmin (авторизация не требуется). Доступен только на dev-сборке;1080
— интерфейс отладочного почтового сервера, позволяющего тестировать связанный с отправкой писем функционал без действительной отправки. Доступен только на dev-сборке;9003
— xDebug. При использовании DBGp Proxy Tool IDE-ключ —tabun
. Доступен только на dev-сборке.3307
— БД. Доступен только на dev-сборке.
База данных инициализируется автоматически при старте её контейнера и наполняется небольшой порцией тестовых данных (несколько аккаунтов, блогов, записей в них, комментариев).
Для этого используются 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)
База данных
(этот раздел устарел)
Для загрузки SQL-дампов либо выполнения любых других корректных комманд, в т.ч. сжатые (*.sql.gz
) существует комманда _load_fixture
При использовании команды требуется остановить проект, если он запущен с помощь vagga run
. Если процессы запущены по отдельности, например, vagga run --only php
, vagga run --only mysql
и т.д., то нужно остановить только процесс mysql
Например, загрузка сжатого дампа будет выглядеть примерно так:
vagga _load_fixture my/test/dump.sql.gz
Либо, применение патча:
vagga _load_fixture my/patches/31337_info.sql
ElasticSearch
docker-compose exec <app> php /app/engine/console/ls.php reindex topics
docker-compose exec <app> php /app/engine/console/ls.php reindex comments
(<app>
заменить на имя контейнера с бекендом)