Docker עבור 1С-Bitrix: מדריך מעשי לקונטיינריזציה

פריסת 1C-Bitrix בסביבת Docker היא אתגר שרבים מכירים: הכלים הסטנדרטיים לא תמיד מתמודדים עם עומסי שיא, והגדרת הסביבה גוזלת זמן רב. פיתחנו מדריך מעשי שיעזור לכם למכלל את Bitrix בצורה נכונה. הצוות שלנו חולק את ניסיונו ומספק פרויקטים במפתח מלא—מביקורת ועד הטמעה—תוך הבטחת פעילות יציבה ותמיכה שוטפת.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
Docker עבור 1С-Bitrix: מדריך מעשי לקונטיינריזציה
בינוני
~1-2 שבועות

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

שאלות נפוצות

מדוע Docker היא הבחירה הטובה ביותר עבור 1С-Bitrix?

תארו לעצמכם חנות מסחר אלקטרוני מבוססת Bitrix עם קטלוג של 100,000 מוצרים. BitrixVM קורסת תחת עומס שיא, והקמת סביבת פיתוח היא סאגה. זהו תרחיש מוכר. פתרנו אותו עם Docker. אין תמונת Docker רשמית מ-1С-Bitrix, למרות ש-BitrixVM היא הסביבה המומלצת היחידה (מקור: helpdesk.bitrix24.ru). בפועל, זה אומר ש-כל פריסת Docker היא עבודה ידנית עם פשרות. אבל התוצאה שווה את זה: סביבה זהה מפיתוח ועד ייצור, בידוד תלויות, והיכולת להריץ את אותו פרויקט על מחשב נייד, ב-CI, ובייצור. צברנו ניסיון בהגדרת Docker עבור Bitrix על עשרות פרויקטים במשך 7+ שנים. המעבר ל-Docker מפחית את עלויות התשתית פי 2–3 בהשוואה ל-BitrixVM על שרת ייעודי.

אילו בעיות Docker פותרת?

Bitrix דורשת גרסאות PHP ספציפיות (8.1–8.2 למהדורות הנוכחיות) והרחבות ספציפיות (iconv, mbstring, gd, opcache, memcached). כתיבה למערכת הקבצים סותרת את הרעיון של קונטיינרים בלתי ניתנים לשינוי. BitrixVM מסתגלת בצורה גרועה ל-CI/CD מודרני וארכיטקטורות מיקרוסרוויסים. טעויות אופייניות בהגדרה עצמית כוללות הגדרות OPcache שגויות, חוסר בקאש מתויג, ומנהל סשן שגוי (קבצים במקום Memcached). Docker פותרת בעיות אלה: כל שירות מבודד, התצורה מנוהלת בגרסאות, והסביבה ניתנת לשחזור בפקודה אחת. בנוסף, Docker מפחיתה את זמני הבנייה ב-CI/CD ב-30%, ומקצצת בעלויות הפיתוח ב-20–30%.

כיצד להגדיר PHP-FPM עבור Bitrix?

אנו מתכננים ארכיטקטורת ריבוי קונטיינרים: Nginx + PHP-FPM + MySQL + Memcached + Elasticsearch (או OpenSearch). הליבה היא Dockerfile מותאם אישית עבור PHP-FPM עם ההרחבות הנדרשות ו-php.ini מותאם.

מבנה Docker Compose

---
# docker-compose.yml
version: '3.9'

services:
  nginx:
    image: nginx:1.24-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./nginx/ssl:/etc/nginx/ssl:ro
      - bitrix_files:/var/www/html
    depends_on:
      - php-fpm

  php-fpm:
    build: ./docker/php
    volumes:
      - bitrix_files:/var/www/html
      - ./docker/php/php.ini:/usr/local/etc/php/conf.d/bitrix.ini:ro
    environment:
      - DB_HOST=mysql
      - DB_NAME=bitrix
      - DB_USER=bitrix
      - DB_PASS=${DB_PASSWORD}
    depends_on:
      mysql:
        condition: service_healthy

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: bitrix
      MYSQL_USER: bitrix
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/conf.d/bitrix.cnf:ro
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  memcached:
    image: memcached:1.6-alpine
    command: memcached -m 512 -I 32m

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
      - xpack.security.enabled=false
    volumes:
      - es_data:/usr/share/elasticsearch/data

volumes:
  bitrix_files:
  mysql_data:
  es_data:

Dockerfile עבור PHP-FPM

# docker/php/Dockerfile
FROM php:8.1-fpm-alpine

# Зависимости для расширений
RUN apk add --no-cache \
    freetype-dev libjpeg-turbo-dev libpng-dev libwebp-dev \
    libzip-dev libxml2-dev oniguruma-dev \
    icu-dev libmemcached-dev zlib-dev

# PHP расширения, требуемые Битрикс
RUN docker-php-ext-configure gd \
    --with-freetype --with-jpeg --with-webp \
    && docker-php-ext-install -j$(nproc) \
    gd mbstring opcache pdo_mysql mysqli \
    xml zip intl bcmath exif

# Memcached через PECL
RUN pecl install memcached \
    && docker-php-ext-enable memcached

# Redis через PECL
RUN pecl install redis \
    && docker-php-ext-enable redis

WORKDIR /var/www/html

ARG UID=1000
RUN adduser -u $UID -D -S -G www-data bitrix

USER bitrix

תצורת PHP עבור Bitrix

; docker/php/php.ini
memory_limit = 256M
upload_max_filesize = 256M
post_max_size = 256M
max_execution_time = 90

; OPcache
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 2

; Сессии через Memcached
session.save_handler = memcached
session.save_path = "memcached:11211"

עבור PHP 8.1, אנו משתמשים ב-PHP-FPM בשילוב עם Nginx לביצועים גבוהים.

כיצד לפתור את בעיית הקבצים עם מצב (Stateful Files)?

Bitrix מאחסנת קבצים שהועלו (# docker-compose.yml version: '3.9' services: nginx: image: nginx:1.24-alpine ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/ssl:/etc/nginx/ssl:ro - bitrix_files:/var/www/html depends_on: - php-fpm php-fpm: build: ./docker/php volumes: - bitrix_files:/var/www/html - ./docker/php/php.ini:/usr/local/etc/php/conf.d/bitrix.ini:ro environment: - DB_HOST=mysql - DB_NAME=bitrix - DB_USER=bitrix - DB_PASS=${DB_PASSWORD} depends_on: mysql: condition: service_healthy mysql: image: mysql:8.0 environment: MYSQL_DATABASE: bitrix MYSQL_USER: bitrix MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} volumes: - mysql_data:/var/lib/mysql - ./docker/mysql/my.cnf:/etc/mysql/conf.d/bitrix.cnf:ro healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 memcached: image: memcached:1.6-alpine command: memcached -m 512 -I 32m elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0 environment: - discovery.type=single-node - ES_JAVA_OPTS=-Xms512m -Xmx512m - xpack.security.enabled=false volumes: - es_data:/usr/share/elasticsearch/data volumes: bitrix_files: mysql_data: es_data: ), קאש (# docker/php/Dockerfile FROM php:8.1-fpm-alpine # Зависимости для расширений RUN apk add --no-cache \ freetype-dev libjpeg-turbo-dev libpng-dev libwebp-dev \ libzip-dev libxml2-dev oniguruma-dev \ icu-dev libmemcached-dev zlib-dev # PHP расширения, требуемые Битрикс RUN docker-php-ext-configure gd \ --with-freetype --with-jpeg --with-webp \ && docker-php-ext-install -j$(nproc) \ gd mbstring opcache pdo_mysql mysqli \ xml zip intl bcmath exif # Memcached через PECL RUN pecl install memcached \ && docker-php-ext-enable memcached # Redis через PECL RUN pecl install redis \ && docker-php-ext-enable redis WORKDIR /var/www/html ARG UID=1000 RUN adduser -u $UID -D -S -G www-data bitrix USER bitrix ), ותצורה (; docker/php/php.ini memory_limit = 256M upload_max_filesize = 256M post_max_size = 256M max_execution_time = 90 ; OPcache opcache.enable = 1 opcache.memory_consumption = 128 opcache.max_accelerated_files = 10000 opcache.validate_timestamps = 1 opcache.revalidate_freq = 2 ; Сессии через Memcached session.save_handler = memcached session.save_path = "memcached:11211" ). הגישה הטובה ביותר היא אחסון תואם S3 עבור העלאות, מה שהופך את הקונטיינרים לחסרי מצב. אם S3 אינו זמין, השתמשו ב-volumes בעלי שם או bind mounts עם גיבויים קבועים.

מדוע Docker מהירה יותר מ-BitrixVM בפיתוח?

קריטריון Docker BitrixVM
שחזור סביבה מלא (באמצעות compose ו-Dockerfile) רק סביבה אחת
קנה מידה של שירותים בנפרד רק יחד
אינטגרציית CI/CD טבעית דורשת שינויים
בידוד תלויות מלא (קונטיינרים) חלקי (וירטואליזציה)
מהירות פריסה לפיתוח 2–3 ימים 1–2 שעות
מהירות פריסה לייצור 7–14 ימים 1–2 שעות
גמישות תצורה גבוהה נמוכה

סביבת Docker רצה 30% מהר יותר ב-CI/CD בהשוואה ל-BitrixVM. זה בולט במיוחד עם פריסות תכופות.

גרסאות PHP מומלצות למהדורות Bitrix שונות

מהדורת Bitrix גרסת PHP סטטוס
Start / עסק קטן 8.1 נתמך
Business / Enterprise 8.2 מומלץ
פרויקטים legacy 7.4 הגירה בלבד

תהליך העבודה

  1. ניתוח: בחינת התשתית הנוכחית, העומס, דרישות הקאש והאחסון.
  2. עיצוב: פיתוח docker-compose.yml, Dockerfile, קובצי תצורת Nginx, php.ini, my.cnf.
  3. יישום: פריסת הסביבה בפיתוח, הגדרת קאש מתויג, Memcached, Elasticsearch.
  4. אינטגרציה: חיבור צינור CI/CD (GitLab CI / GitHub Actions), ניטור ורישום מרכזי.
  5. בדיקות: אימות פונקציונליות, ביצוע בדיקות עומס.
  6. פריסה: מעבר לייצור עם הבטחות לסבילות לתקלות.

מה כלול בעבודה

  • הכנת סביבת Docker (Compose, PHP, Nginx, MySQL, Memcached, Elasticsearch)
  • הגדרת צינור CI/CD (בנייה, בדיקות, פריסה)
  • אינטגרציית S3 לאחסון קבצים (אופציונלי)
  • תיעוד לפריסה ותפעול
  • העברת גישה ומאגר הקוד
  • הדרכת הצוות על סביבת Docker

טעויות אופייניות בהגדרת Docker עבור Bitrix

  • מנהל סשן שגוי: Bitrix משתמשת בקבצים כברירת מחדל, מה שמוביל לשגיאות כתיבה ב-Docker. הגדירו Memcached.
  • OPcache: בלעדיו, דפים נוצרים מחדש בכל בקשה. הפעילו אותו והגדירו memory_consumption.
  • חוסר healthcheck: קונטיינר MySQL עשוי לא להיות מוכן, מה שמונע מ-PHP להתחבר. הוסיפו condition: service_healthy.
  • הרשאות שגויות: קבצים חייבים להיות שייכים למשתמש bitrix בתוך הקונטיינר. השתמשו בארגומנט UID.
  • רישום לקבצים: השתמשו ב-php://stderr לאיסוף באמצעות מנהל הרישום של Docker.

ציר זמן ועלות

סביבת Docker בסיסית לפיתוח — 2–3 ימים. תצורה מוכנה לייצור עם CI/CD, ניטור ו-S3 לקבצים — 7–14 ימים. העלות מחושבת באופן אישי. בקשו ייעוץ להערכת הפרויקט שלכם — קבלו ייעוץ ממומחה מוסמך. צרו קשר כדי להעריך את הפרויקט שלכם: נעזור לכם ליישם Docker ולהפחית עלויות תשתית.