Локальна розробка сайту в Docker Compose: повне налаштування

Як Docker Compose спрощує локальну розробку

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Локальна розробка сайту в Docker Compose: повне налаштування
Середній
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1249
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1000

Як Docker Compose спрощує локальну розробку

Розробники витрачають до 30% часу на налаштування оточення: конфлікти версій PHP, відмінності PostgreSQL між macOS та Windows, порти, зайняті іншими сервісами. Docker Compose вирішує це єдиним файлом конфігурації. Згідно з документацією: Docker Compose — це інструмент для визначення та запуску багатоконтейнерних додатків Docker Compose documentation. Ми налаштовуємо такий docker-compose.yml, який підіймає весь стек однією командою. Забудьте про ручне керування сервісами — все відтворюється та автоматизовано.

Типова ситуація: розробник клонує репозиторій, запускає make up і через 5 хвилин вже працює з Laravel, PostgreSQL та Redis. Жодних шаманств із brew, apt або ручним встановленням. Єдине середовище для всієї команди — і жодних "у мене працює".

Нещодавно до нас звернулася команда з 5 розробників: кожен витрачав від 4 годин на налаштування MAMP під свій проект, а при перемиканні між задачами виникали конфлікти версій PHP та PostgreSQL. Після впровадження Docker Compose час розгортання скоротився до 10 хвилин, а кількість помилок середовища знизилася на 80%. Це конкретний приклад, який показує, наскільки контейнеризація ефективніша за традиційні інструменти.

Проблеми, які вирішуємо

  • Версійне пекло: PHP 8.1 на одному проекті, 8.3 на іншому — перемикання через brew/apt ламає залежності. Docker ізолює кожен проект у своєму контейнері, дозволяючи мати будь-які версії без конфліктів.
  • Healthcheck-залежності: без depends_on з condition сервіси стартують у хаотичному порядку — app падає, поки PostgreSQL не готовий. Рішення — прописати healthcheck з перевіркою готовності бази даних по pg_isready.
  • Права доступу: файли, створені в контейнері, належать root — на хості їх не можна редагувати. Рішення — маппінг UID/GID у Dockerfile через аргументи збірки.

Ці проблеми типові для команд, які переходять на Docker. Наш досвід показує, що їх правильне вирішення скорочує час онбордингу нових розробників з 2 днів до 20 хвилин.

Чому Docker Compose швидший за XAMPP?

Параметр XAMPP Docker Compose
Ізоляція версій Одна глобальна Пер-проект
PostgreSQL Не підтримується Повна підтримка
Redis/дод. сервіси Не входить Будь-які образи
Відтворюваність Залежить від ОС Ідентично на будь-якій машині
Час встановлення для команди з 3 осіб 6 годин 1 година

Docker Compose виграє в 5 разів за часом встановлення для команди з 3 розробників. Крім того, він знижує витрати на інфраструктуру: ви використовуєте лише ті ресурси, які потрібні проекту, а не тримаєте глобальний стек.

Як ми це робимо

Стандартний стек: PHP 8.3, PostgreSQL 16, Redis 7, Vite. Використовуємо docker/dev/Dockerfile з Composer та pdo_pgsql. Для hot reload монтуємо код через volumes, виключаючи vendor та node_modules. Makefile спрощує команди: make up, make artisan, make test.

Кейс: проект на Laravel 11 з Vite. Раніше розробники використовували MAMP — база падала при навантаженні, Redis не працював з коробки. Ми перевели на Docker Compose за 4 години. Час розгортання оточення для новачка скоротився з 2 днів до 20 хвилин. Додатково налаштували Xdebug через docker-compose.override.yml, що прискорило налагодження на 50%.

Як налаштувати hot reload з Vite?

Для Vite в Docker Compose потрібно пробросити порт 5173 та використовувати --host флаг. У нашому прикладі vite-сервіс запускає npm run dev -- --host. Це дозволяє hot reload працювати на хості через localhost:5173. Єдине важливе зауваження: переконайтеся, що в vite.config.js не вказано strictPort та server.hmr налаштовано на '0.0.0.0'. Інакше HMR не працюватиме в контейнері.

Процес роботи

  1. Аналітика — визначаємо стек, версії, особливості проекту.
  2. Проектування — пишемо docker-compose.yml, Dockerfile, Makefile.
  3. Реалізація — конфігуруємо healthcheck, volumes, змінні оточення.
  4. Тест — перевіряємо запуск, міграції, Vite hot reload.
  5. Деплой — передаємо інструкцію та Makefile команді.

Що входить у роботу

  • docker-compose.yml з сервісами app, vite, db, redis, mailpit, adminer
  • Dockerfile для dev-середовища (PHP 8.3, Composer, pdo_pgsql)
  • Makefile з командами up/down/shell/artisan/test
  • docker-compose.override.yml для Xdebug
  • Інструкція для команди (README)
  • Підтримка 1 місяць після здачі

Етапи налаштування Docker Compose

Етап Тривалість Результат
Аналітика 2 години Визначено стек та версії
Проектування 1 день Готові docker-compose.yml, Dockerfile, Makefile
Реалізація 1 день Налаштовані healthcheck, volumes, env
Тестування 2 години Перевірено запуск, міграції, hot reload
Документація 1 година README та інструкція для команди

Типові помилки при налаштуванні (і як їх уникнути)

  • Використовуйте depends_on з condition: service_healthy — інакше app стартує до готовності БД.
  • Завжди монтуйте vendor та node_modules як анонімні томи — інакше вони перезаписуються з контейнера.
  • Для macOS додайте extra_hosts для Xdebug: host.docker.internal.
  • Переконайтеся, що порти на хості не зайняті: перевірте через lsof -i :5432.

Приклад конфігурації

services: app: build: context: . dockerfile: docker/dev/Dockerfile ports: - "8000:8000" volumes: - .:/var/www/html - /var/www/html/vendor - /var/www/html/node_modules environment: APP_ENV: local DB_HOST: db DB_DATABASE: myapp DB_USERNAME: myapp DB_PASSWORD: secret REDIS_HOST: redis MAIL_HOST: mailpit depends_on: db: { condition: service_healthy } redis: { condition: service_healthy } command: php artisan serve --host=0.0.0.0 --port=8000 vite: image: node:20-alpine working_dir: /app volumes: - .:/app - /app/node_modules ports: - "5173:5173" command: npm run dev -- --host db: image: postgres:16-alpine ports: - "5432:5432" environment: POSTGRES_DB: myapp POSTGRES_USER: myapp POSTGRES_PASSWORD: secret volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U myapp"] interval: 5s timeout: 3s retries: 5 redis: image: redis:7-alpine ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s mailpit: image: axllent/mailpit:latest ports: - "1025:1025" - "8025:8025" adminer: image: adminer:latest ports: - "8080:8080" environment: ADMINER_DEFAULT_SERVER: db depends_on: [db] volumes: postgres_data: 
# docker/dev/Dockerfile FROM php:8.3-cli RUN apt-get update && apt-get install -y \ git curl zip unzip libpq-dev \ && docker-php-ext-install pdo_pgsql \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer WORKDIR /var/www/html 
# Makefile .PHONY: up down shell artisan up: docker compose up -d --build @echo "App: http://localhost:8000" @echo "Mail: http://localhost:8025" @echo "DB UI: http://localhost:8080" down: docker compose down shell: docker compose exec app bash artisan: docker compose exec app php artisan $(filter-out $@,$(MAKECMDGOALS)) tinker: docker compose exec app php artisan tinker test: docker compose exec app php artisan test --parallel migrate: docker compose exec app php artisan migrate fresh: docker compose exec app php artisan migrate:fresh --seed npm: docker compose exec vite npm $(filter-out $@,$(MAKECMDGOALS)) 

Після запуску make up додаток доступний на localhost:8000, Mailpit — на localhost:8025, Adminer — на localhost:8080. Для виконання Artisan команд використовуйте make artisan <command>, наприклад make artisan make:model Product -mcr.

Перевизначення для різних оточень

# docker-compose.override.yml (git-ignored) services: app: environment: XDEBUG_MODE: debug XDEBUG_CONFIG: "client_host=host-docker-internal" extra_hosts: - "host.docker.internal:host-gateway" 

Для опціональних сервісів використовуємо profiles: docker compose --profile tools up запускає, наприклад, redis-commander.

Строки та вартість

Налаштування типового стеку (PHP + PostgreSQL + Redis + Vite) займає 1 день. Складні конфігурації (кілька проектів, власні образи) — до 3 днів. Вартість розраховується індивідуально. Замовте налаштування Docker Compose для вашого проекту — це заощадить час і нерви вашої команди. Отримайте консультацію прямо зараз.

Про наш досвід: 10+ років на ринку, 40+ успішних проектів із Docker, 10 інженерів рівня senior. Гарантуємо сумісність із будь-якою інфраструктурою.