פיתוח אתר מקומי עם Docker Compose: הגדרה מלאה

מפתחים מבזבזים זמן רב מדי על הגדרת סביבות עבודה, ונתקלים בקונפליקטי גרסאות ובחוסר תאימות בין שירותים. אנחנו מגדירים Docker Compose שמעלה את כל התשתית שלכם בפקודה אחת. הצוות שלנו מספק את הפרויקט במלואו—מההגדרה ועד התמיכה, ומבטיח סביבה יציבה וניתנת לשחזור עבור כל הצוות.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
פיתוח אתר מקומי עם Docker Compose: הגדרה מלאה
בינוני
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1504
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1050
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

כיצד Docker Compose מפשט פיתוח מקומי

מפתחים מבזבזים עד 30% מזמנם על הגדרת סביבות: קונפליקטי גרסאות עם PHP, הבדלים בין PostgreSQL ב-macOS וב-Windows, פורטים תפוסים על ידי שירותים אחרים. Docker Compose פותר זאת עם קובץ תצורה אחד. לפי התיעוד: Docker Compose הוא כלי להגדרה והרצה של יישומים מרובי-קונטיינרים תיעוד Docker Compose. אנו מגדירים 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, שירותים מתחילים בצורה כאוטית — האפליקציה קורסת עד ש-PostgreSQL מוכן. הפתרון הוא הוספת healthcheck הבודק את מוכנות מסד הנתונים דרך pg_isready.
  • הרשאות קבצים: קבצים שנוצרים בתוך הקונטיינר שייכים ל-root — במארח, אי אפשר לערוך אותם. הפתרון הוא מיפוי UID/GID ב-Dockerfile דרך ארגומנטים של build.

בעיות אלה אופייניות לצוותים העוברים ל-Docker. הניסיון שלנו מראה שפתרון נכון שלהן מקצר את זמן הקליטה של מפתחים חדשים מיומיים ל-20 דקות.

למה Docker Compose מהיר יותר מ-XAMPP

פרמטר XAMPP Docker Compose
בידוד גרסאות גלובלי אחד לפי פרויקט
PostgreSQL לא נתמך תמיכה מלאה
Redis/שירותים נוספים לא כלול כל תמונה
יכולת שחזור תלוי מערכת הפעלה זהה בכל מכונה
זמן הגדרה לצוות של 3 אנשים 6 שעות שעה

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 שעות. זמן הגדרת הסביבה למפתח חדש ירד מיומיים ל-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 לסביבת פיתוח (PHP 8.3, Composer, pdo_pgsql)
  • Makefile עם פקודות: up/down/shell/artisan/test
  • docker-compose.override.yml עבור Xdebug
  • הוראות לצוות (README)
  • חודש תמיכה לאחר המסירה

שלבי הגדרת Docker Compose

שלב משך תוצאה
ניתוח שעתיים הערימה והגרסאות הוגדרו
עיצוב יום אחד docker-compose.yml, Dockerfile, Makefile מוכנים
יישום יום אחד Healthcheck, volumes, env הוגדרו
בדיקות שעתיים עלייה, מיגרציות, hot reload אומתו
תיעוד שעה README והוראות לצוות

טעויות הגדרה טיפוסיות (ואיך להימנע מהן)

  • השתמשו ב-depends_on עם condition: service_healthy — אחרת האפליקציה מתחילה לפני שמסד הנתונים מוכן.
  • תמיד התקינו vendor ו-node_modules כ-volumes אנונימיים — אחרת הם נדרסים מהקונטיינר.
  • ב-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))

לאחר הרצת 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 , Mailpit ב-# 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)) , Adminer ב-make up. לביצוע פקודות Artisan, השתמשו ב-localhost:8000, לדוגמה, localhost:8025.

Override לסביבות שונות

---
# 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: localhost:8080 מתחיל, לדוגמה, redis-commander.

ציר זמן ועלות

הגדרת ערימה טיפוסית (PHP + PostgreSQL + Redis + Vite) אורכת יום אחד. תצורות מורכבות (מספר פרויקטים, תמונות מותאמות אישית) אורכות עד 3 ימים. העלות מחושבת באופן אישי. הזמינו הגדרת Docker Compose לפרויקט שלכם — זה יחסוך זמן לצוות שלכם ויפחית כאבי ראש. קבלו ייעוץ עכשיו.

על הניסיון שלנו: מעל 5 שנים בשוק, 20+ פרויקטי Docker מוצלחים, 10 מהנדסים ברמת senior. אנו מבטיחים תאימות לכל תשתית.