Розгортання Laravel додатку з Traefik та Cloudflare: повний гайд з усіма підводними каменями

Вступ

У цій статті ми детально розглянемо процес розгортання Laravel додатку з використанням Traefik як reverse proxy, Cloudflare для SSL та Docker Compose для оркестрації. Ви дізнаєтеся про всі проблеми, з якими ми зіткнулися, та як їх вирішити.

Архітектура рішення

Наша кінцева архітектура включає:

  • Traefik v3.0 – reverse proxy з автоматичним SSL через Cloudflare DNS Challenge
  • Laravel 10 – PHP додаток з Inertia.js
  • PHP 8.3-FPM – для обробки PHP коду
  • Nginx – веб-сервер для обслуговування статичних файлів та проксування до PHP-FPM
  • MySQL 8.0 – база даних
  • Redis – кеш та черги
  • PHPMyAdmin – адміністрування бази даних
  • Worker контейнери – для обробки черг та cron завдань

Початкові налаштування

1. Підготовка сервера

2. Створення мереж Docker

Налаштування Traefik

docker-compose.yml для Traefik та сопутніх сервісів

Laravel додаток

Структура проекту

docker-compose-php83.yml

Підводні камені та їх вирішення

1. Проблема: “SQLSTATE[HY000] [1130] Host not allowed”

Симптоми: Laravel не може підключитися до MySQL з помилкою доступу.

Причина: MySQL за замовчуванням дозволяє підключення тільки з localhost.

Рішення:

2. Проблема: “Gateway Timeout” від Traefik

Симптоми: Traefik не може підключитися до nginx контейнера.

Причина: Коли контейнер підключений до кількох мереж, Traefik вибирає випадкову IP адресу.

Рішення:

3. Проблема: Nginx дає 404 на PHP файли

Симптоми: Статичні файли обслуговуються, але PHP файли повертають 404.

Причина: Неправильна конфігурація PHP блоку в nginx.

Рішення:

4. Проблема: “Permission denied” для Laravel логів

Симптоми: Laravel дає 500 помилку через неможливість писати в лог файли.

Причина: Неправильні права доступу до папки storage.

Рішення:

5. Проблема: Різні назви баз даних у .env файлах

Симптоми: Docker створює одну базу, а Laravel шукає іншу.

Причина: Два різні .env файли – один для Docker Compose, інший для Laravel.

Рішення:

6. Проблема: PHP-FPM не запущений

Симптоми: Nginx дає 502 Bad Gateway для PHP файлів.

Причина: PHP-FPM процес не запущений в контейнері.

Рішення:

Налаштування Cloudflare

DNS записи

Створіть наступні A записи в Cloudflare:

API токен

  1. Cloudflare Dashboard → My Profile → API Tokens
  2. Create Token з правами:
    • Zone:Read
    • DNS:Edit
  3. Додати токен в docker-compose.yml

Діагностика та моніторинг

Корисні команди для діагностики

SSH тунель для PHPMyAdmin

Оптимізація та безпека

Nginx оптимізація

PHP оптимізація

MySQL оптимізація

Моніторинг продуктивності

Метрики для відстеження

  • Час відповіді Laravel додатку
  • Використання пам’яті PHP-FPM
  • Навантаження на MySQL
  • Статус SSL сертифікатів
  • Доступність сервісів через Traefik

Логування

Висновки

Розгортання Laravel додатку з Traefik та Cloudflare вимагає уваги до деталей, особливо в частині мережевої конфігурації. Основні виклики:

  1. Мережева ізоляція – правильне налаштування Docker мереж
  2. Service Discovery – забезпечення того, щоб Traefik знайшов та зміг підключитися до сервісів
  3. Права доступу – Laravel потребує специфічних прав для storage та cache папок
  4. База даних – MySQL вимагає додаткового налаштування для підключень з інших контейнерів

Проте після налаштування ви отримуєте надійну, масштабовану систему з автоматичним SSL, що значно спрощує подальшу підтримку та розгортання нових сервісів.

Корисні ресурси


Ця стаття базується на реальному досвіді розгортання та вирішення проблем у production середовищі.

Опубліковано в Docker

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *