Що є в цьому docker-compose.yml:
- Database. Використовується MySQL v8.0.40
- Redis v7.4.2, Alpine версія
- PHPMyAdmin v5.2.1, через проксування Nginx
- PHP v8.4.2, FPM-Alpine версія
- Nginx v1.27.3, Alpine версія
- MailPit v1.21.8
- Supervisor, винесений в окремий контейнер з PHP v8.4.2-fpm-alpine
- Schedule, винесений в окремий контейнер з PHP v8.4.2-fpm-alpine
- Nginx:
- Всі порти для налаштування nginx підставляються автоматично
- При запуску контейнеру генерується самопідписаний SSL-сертифікат
- Перехід на PHPMyAdmin відбувається через запит до основного порта проекту та шлях /phpmyadmin/, приклад: https://localhost:8080/phpmyadmin/
- Запити на NodeJS та Vite (для Laravel) переправляються через обробку шляху /(vite|node_modules)/
- Supervisor:
- При запуску також стартує CRON на збереження бази даних в ./.docker/backup/[backup-name].sql.qz який буде зберігати бекапи за останні 3 дні, 3 тижні та 3 місяці
- При запуску внутрішнього скрипта ./.docker/daemons/start.sh буде перевірятися чи запустились контейнери з Redis та MySQL, та ставити виконання на паузу поки ці контейнери не запущені
- Supervisor та Schedule:
- При запуску внутрішнього скрипта ./.docker/daemons/start.sh буде перевірятися чи створена таблиця міграцій, і в разі відсутності скрипт буде на паузі та очікувати створення міграцій
- PHP:
- При запуску внутрішнього скрипта ./.docker/php/scripts.sh буде перевірятися чи запустились контейнери з Redis та MySQL, та ставити виконання на паузу поки ці контейнери не запущені
- При запуску внутрішнього скрипта ./.docker/php/scripts.sh буде перевірятися наявність міграцій в базі даних та в разі відсутності запуститься команда:
php artisan migration:fresh --seed
Для запуску потрібно буде використовувати прописаний .env.docker наступними командами:
docker compose --env-file='./env.docker' build # Для збірки всього проекту
docker compose --env-file='./env.docker' up -d # Для запуску проекту
docker compose --env-file='./env.docker' down # Для зупинки проекту Для уникнення проблем та помилок раджу зробити наступне:
- В docker-compose.yml видалити контейнер що відповідає за schedule
- В .docker/daemons/supervisord.conf.template видалити наступні програми: program:queue_redis, program:horizon
- В .docker/nginx/default.conf.template змінити направлення запитів з root /var/www/html/public/; на потрібний для вас шлях
- В .docker/php/scripts.sh видалити наступні конструкції if:
# З 15 по 32 рядок
if [ ! -d /var/www/html/vendor/laravel ]; then
echo "Laravel installation..."
# Та інший код в цьому блоці
fiif [ ! -d /var/www/html/vendor/laravel/horizon ]; then
composer require laravel/horizon
php artisan horizon:install
fiif [ ! -d /var/www/html/vendor/laravel/telescope ]; then
composer require laravel/telescope --dev
php artisan telescope:install
fiif [ ! -f /var/www/html/.env ]; then
cp .env.example .env;
php artisan key:generate;
fi# Перевірка на наявність міграцій
checkMigrations=$(php artisan db:table migrations 2>&1)
if echo $checkMigrations | grep -q "WARN Table \[migrations\]"; then
php artisan migrate:fresh --seed;
echo "Executed migrations..."
fiecho "Clear caching configuration..."
php artisan queue:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear- В .docker/daemons/start.sh видалити наступні конструкції:
checkMigrations=$(php artisan db:table migrations 2>&1)
while echo $checkMigrations | grep -q "WARN Table \[migrations\]"; do
echo "Увага: 'Table [migrations]' не існує. Зачекаємо, поки не буде створено..."
sleep 5
checkMigrations=$(php artisan db:table migrations 2>&1)
done# Також потрібно буде видалити частину скрипта яка запускає Scheduler
elif [ "$role" = "scheduler" ]; then
while [ true ]
do
exec su - $uname -c "php /var/www/html/artisan schedule:run --verbose --no-interaction & sleep 60"
done- Потрібно буде прописати встановлення якогось пакету для форматування PHP коду та налаштувати його виклик замість наступного рядку в .docker/php/scripts.sh:
echo "docker exec $php_host composer pint" >> /var/www/html/.husky/pre-commit
# Використання вашого пакету, наприклад PHP_CodeSniffer
echo "docker exec $php_host composer phpcbf" >> /var/www/html/.husky/pre-commit- Змінити шлях публікації логів з /storage/logs/[name].log на потрібний вам
Для зміни всіх портів що використовуються контейнерами потрібно буде відредагувати файл .env.docker, де є опції налаштування всіх портів, вони мають в кінці назви "_PORT"