הגדרת Docker Container עבור 1C-Bitrix: מתוהו ליציבות

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

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

שאלות נפוצות

הגדרת Docker Container עבור 1C-Bitrix: מתוהו ליציבות

לעתים קרובות אנו רואים Bitrix מורץ ב-Docker עם docker-compose up פשוט. אבל פעולה יציבה בסביבת production—עם מדיניות restart נכונה, הרשאות, רוטציית לוגים ועדכונים חלקים—היא המומחיות שלנו. סטטיסטיקות: 90% מהפניות לעזרה כוללות Bitrix שכותב קבצים כמשתמש אחד בעוד nginx קורא אותם כמשתמש אחר; OPcache לא רואה שינויי קוד; agents לא רצים בגלל חוסר cron בתוך הקונטיינר. בואו נפתור את אלה עם דוגמאות מעשיות שחוסכות עד 40% מזמן התחזוקה.

בעיות שנפתרות על ידי הגדרת Docker נכונה עבור Bitrix

ללא הגדרה נכונה, קונטיינרים של Bitrix ב-production הופכים לכאב ראש. הנה מה שאנו נתקלים בו לרוב:

  • הרשאות קבצים: קבצים שנוצרו על ידי משתמשים שונים, גורמים לשגיאות 403 או 500. מקרה: לקוח איבד יומיים בניסיון למצוא את הסיבה עד שהגדרנו UID דרך build-arg. מיפוי UID אמין פי 10 מאשר chmod ידני אחרי כל deploy.
  • השבתה במהלך עדכונים: ללא אסטרטגיית עדכון מתגלגל (rolling update), כל release משמעותו דקות של חוסר זמינות. עבור חנות אונליין עם מחזור מכירות משמעותי, זהו הפסד גדול אפילו עבור כמה דקות של השבתה.
  • גלישת דיסק: לוגים של קונטיינר ללא רוטציה גדלים ל-5 GB בשבוע. בעוד שעלות SSD ניתנת לניהול, הסיכון לכשל בגלל דיסק מלא הוא אמיתי.

הגדרת הרשאות קבצים ב-Docker עבור Bitrix

בעיה קלאסית: PHP-FPM בתוך הקונטיינר רץ כ-www-data (UID 33), בעוד שקבצים על ה-volume בבעלות root או משתמש host אחר. Bitrix לא יכול לכתוב cache או לשמור קבצים שהועלו.

אנו פותרים זאת על ידי הגדרה מפורשת של UID ב-Dockerfile:

FROM php:8.1-fpm-alpine
ARG HOST_UID=1000
RUN addgroup -g $HOST_UID bitrix && adduser -u $HOST_UID -G bitrix -D bitrix
RUN sed -i 's/user = www-data/user = bitrix/g' /usr/local/etc/php-fpm.d/www.conf \
    && sed -i 's/group = www-data/group = bitrix/g' /usr/local/etc/php-fpm.d/www.conf

ב-FROM php:8.1-fpm-alpine ARG HOST_UID=1000 RUN addgroup -g $HOST_UID bitrix && adduser -u $HOST_UID -G bitrix -D bitrix RUN sed -i 's/user = www-data/user = bitrix/g' /usr/local/etc/php-fpm.d/www.conf \ && sed -i 's/group = www-data/group = bitrix/g' /usr/local/etc/php-fpm.d/www.conf העבירו את הארגומנט:

php-fpm: build: context: ./docker/php args: HOST_UID: ${HOST_UID:-1000} 

התיעוד הרשמי של 1С-Bitrix ממליץ על מיפוי UID עבור קונטיינרים של Docker.

השוואה: עם docker-compose.yml ברירת מחדל מקבלים שגיאות 403 בכל מקום; עם מיפוי UID—תאימות מלאה להרשאות ה-host. לאבטחה, אנו גם חוסמים גישה לתיקיות שירות של Bitrix דרך nginx.

הגדרת nginx ל-Production

server {
    listen 80;
    server_name _;
    root /var/www/html;
    index index.php;
    charset utf-8;
    client_max_body_size 256m;

    location ~* /\.ht {
        deny all;
    }

    location ~* /bitrix/modules {
        deny all;
    }

    location ~* /bitrix/php_interface {
        deny all;
    }

    location ~* /bitrix/tools {
        deny all;
    }

    location ~* \.(jpg|jpeg|png|gif|webp|svg|ico|css|js|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
        try_files $uri =404;
    }

    location / {
        try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_read_timeout 300;
        fastcgi_send_timeout 300;
    }

    location = /bitrix/urlrewrite.php {
        fastcgi_pass php-fpm:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$$fastcgi_script_name;
        include fastcgi_params;
    }
}

Healthcheck ומדיניות Restart

הוסיפו healthcheck כדי לוודא את מצב הקונטיינר:

---
healthcheck:
  test: ["CMD-SHELL", "php-fpm -t && kill -0 1"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 40s

זה בודק תקינות קונפיגורציה וחיות תהליך. כפי שצוין ב-Docker, healthcheck הוא חובה ל-production.

בחרו מדיניות restart:

מדיניות התנהגות המלצה
php-fpm: build: context: ./docker/php args: HOST_UID: ${HOST_UID:-1000} תמיד מאתחל מחדש—אחרי קריסה, אתחול Docker, אפילו אחרי www-data. עבור MySQL: מבטיח שה-DB יתחיל בכל פעם שה-daemon עולה.
server { listen 80; server_name _; root /var/www/html; index index.php; charset utf-8; client_max_body_size 256m; location ~* /\.ht { deny all; } location ~* /bitrix/modules { deny all; } location ~* /bitrix/php_interface { deny all; } location ~* /bitrix/tools { deny all; } location ~* \.(jpg|jpeg|png|gif|webp|svg|ico|css|js|woff2)$ { expires 30d; add_header Cache-Control "public, no-transform"; try_files $uri =404; } location / { try_files $uri $uri/ /bitrix/urlrewrite.php$is_args$args; } location ~ \.php$ { fastcgi_pass php-fpm:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_read_timeout 300; fastcgi_send_timeout 300; } location = /bitrix/urlrewrite.php { fastcgi_pass php-fpm:9000; fastcgi_param SCRIPT_FILENAME $document_root$$fastcgi_script_name; include fastcgi_params; } } מאתחל מחדש אחרי קריסה ואתחול Docker, אבל לא אחרי healthcheck: test: ["CMD-SHELL", "php-fpm -t && kill -0 1"] interval: 30s timeout: 10s retries: 3 start_period: 40s . עבור nginx ו-php-fpm: נותן שליטה—אם הופסק ידנית, הייתה סיבה.

השוואת בעיות ופתרונות נפוצים

בעיה פתרון יעילות
הרשאות קבצים מיפוי UID ב-Dockerfile חיסול 100% של שגיאות 403
גלישת דיסק רוטציית לוגים (max-size, max-file) חיסכון של עד 80% בשטח דיסק
השבתה במהלך עדכונים עדכון מתגלגל דרך --no-deps עדכון ללא השבתה, 0 שניות downtime

למה רוטציית לוגים חשובה

ללא רוטציה, לוגים יכולים לאכול עשרות ג'יגה-בייט בשבוע. הגדירו ב-restart: always:

---
services:
  nginx:
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "5"
  php-fpm:
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "3"

או גלובלית דרך docker stop. חיסכון בשטח דיסק עד 80%.

איך לעדכן קונטיינרים של Bitrix ללא השבתה

השתמשו באסטרטגיה שמעדכנת רק את php-fpm, ומשאירה את nginx ללא שינוי:

  1. restart: unless-stopped
  2. docker stop

זה לוקח שניות—nginx ממשיך לקבל בקשות ומנתב אותן לקונטיינר הישן בזמן שהחדש עולה. עבור פרויקטים גדולים עם replicas, עדכנו אותם אחד אחד. קונפיגורציה מתקדמת יכולה להשיג 100% זמינות במהלך עדכונים.

מה כלול בהתקנה סוהר

  • הגדרת nginx, PHP-FPM, MySQL עם כיוונון ספציפי לפלטפורמה.
  • פתרון הרשאות קבצים דרך מיפוי UID.
  • Healthcheck ומדיניות restart לכל השירותים.
  • רוטציית לוגים וגיבוי (מסד נתונים + קבצים).
  • תיעוד deployment ותחזוקה.
  • 30 ימי תמיכה חינם לאחר ההשקה.

אסטרטגיית גיבוי

לאמינות, אנו משתמשים בסקריפט שמבצע dump למסד הנתונים ומאחסן קבצים. הסקריפט רץ דרך cron של ה-host ושומר גיבויים ל-7 הימים האחרונים.

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