התקנת MinIO עצמאית לאחסון תואם S3

אחסון כמויות גדולות של נתונים בענן הוא יקר, ונעילת ספק מעכבת צמיחה. אנחנו מגדירים אחסון עצמי תואם S3 המבוסס על MinIO, המשכפל במלואו את Amazon S3 API. הצוות שלנו מספק את הפרויקט במפתח מלא—מביקורת תשתית ועד פריסת cluster מבוזר עם erasure coding ותמיכה מתמשכת.

היכולות שלנו:

שאלות נפוצות

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

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אירוח עצמי של MinIO מקצץ בעלויות האחסון בעד 70% בהשוואה ל-AWS S3 עבור נפחי נתונים גדולים. אנו פורסים אחסון תואם S3 באירוח עצמי המשכפל במלואו את ממשק ה-API של Amazon S3. למהנדסים שלנו יש ניסיון של 5+ שנים בייצור עם MinIO והם פרסו למעלה מ-50 אשכולות מבוזרים עבור פרויקטים עם עומסי עבודה של עד 100 TB. MinIO אינו רק פרוקסי S3—זוהי מערכת מלאה עם קידוד מחיקה (erasure coding) לסבילות לתקלות. במאמר זה, נעבור על פריסת MinIO על bare-metal או Kubernetes, הגדרת TLS, מדיניות גישה וניטור. אם אתה צריך לפרוס MinIO בייצור—התחל עם הערכת התשתית שלך.

למה MinIO מבוזר עדיף על פני צומת יחיד לייצור

ניתן להקים MinIO עם צומת יחיד תוך שעה והוא מתאים לפיתוח, מטמוני CI/CD ופרויקטים קטנים. לייצור, יש צורך במצב מבוזר עם מספר צמתים: הוא מספק סבילות לתקלות באמצעות קידוד מחיקה. אשכול של 4 צמתים עם שני דיסקים בכל אחד (8 דיסקים) יכול לעמוד באובדן של עד 4 דיסקים ללא אובדן נתונים. קידוד המחיקה של MinIO יעיל פי 2 מבחינת אחסון בהשוואה לשכפול פי 3 ב-AWS S3, עם אותה רמת סבילות לתקלות. בתרחיש טיפוסי של 50 TB, עלויות החומרה מוחזרות תוך 12-18 חודשים, והחיסכון בהשוואה ל-AWS S3 מגיע ל-70%.

פרמטר צומת יחיד מבוזר (4+ צמתים)
סבילות לתקלות לא קידוד מחיקה, עד 50% דיסקים
ביצועים מוגבל לצומת אחד מדרגיות לינארית
מורכבות פריסה 4–8 שעות 2–3 ימים
מתאים עבור פיתוח, CI/CD, מטמון ייצור

איך MinIO מחליף את AWS S3 בסביבת אירוח עצמי

MinIO משתמש בממשק ה-API הסטנדרטי של S3, כך שכל SDK (boto3, AWS SDK ל-PHP, Java, Go) עובד ללא שינויים. פשוט הגדר את endpoint_url ו-use_path_style_endpoint = true לגישת path-style. זה מאפשר להעביר יישומים קיימים ל-MinIO באירוח עצמי ללא שכתוב קוד.

פריסת MinIO מבוזר: מדריך שלב אחר שלב

שלב 1: הכנת צמתים ודיסקים

הכן 4 צמתים עם שני דיסקים נוספים בכל אחד (לדוגמה, NVMe 500 GB כל אחד). ודא שמערכת ההפעלה היא Ubuntu 22.04 או CentOS 9. בכל צומת, צור את המשתמש minio-user והרכב את הדיסקים אל /mnt/disk1 ו-/mnt/disk2.

שלב 2: התקנת MinIO

הורד את הקובץ הבינארי, התקן והגדר את יחידת systemd:

דוגמה ליחידת systemd עבור MinIO
# Установка
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
mv minio /usr/local/bin/
useradd -r minio-user -s /sbin/nologin
chown minio-user:minio-user /mnt/disk1 /mnt/disk2

# systemd unit
cat > /etc/systemd/system/minio.service << 'UNIT'
[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local/bin/
User=minio-user
Group=minio-user
EnvironmentFile=/etc/minio/minio.env
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/minio/minio.env\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
LimitNOFILE=65536
TasksMax=infinity
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target
UNIT

שלב 3: הגדרת סביבה והפעלה

צור את הקובץ # Установка wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio mv minio /usr/local/bin/ useradd -r minio-user -s /sbin/nologin chown minio-user:minio-user /mnt/disk1 /mnt/disk2 # systemd unit cat > /etc/systemd/system/minio.service << 'UNIT' [Unit] Description=MinIO Documentation=https://min.io/docs/minio/linux/index.html Wants=network-online.target After=network-online.target AssertFileIsExecutable=/usr/local/bin/minio [Service] WorkingDirectory=/usr/local/bin/ User=minio-user Group=minio-user EnvironmentFile=/etc/minio/minio.env ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/minio/minio.env\"; exit 1; fi" ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES Restart=always LimitNOFILE=65536 TasksMax=infinity TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target UNIT :

MINIO_ROOT_USER=minioadmin \
  MINIO_ROOT_PASSWORD=strong-password \
  MINIO_VOLUMES="https://minio{1...4}.internal:9000/mnt/disk{1...2}/minio" \
  MINIO_OPTS="--console-address :9001" \
  MINIO_SITE_NAME=datacenter-1

הפעל ואפשר את השירות: /etc/minio/minio.env.

שלב 4: TLS ואבטחה

לפי התיעוד הרשמי של MinIO, בייצור השרת חייב לפעול רק דרך TLS. מקם את התעודות:

mkdir -p /etc/minio/certs
cp /etc/letsencrypt/live/minio.company.com/fullchain.pem /etc/minio/certs/public.crt
cp /etc/letsencrypt/live/minio.company.com/privkey.pem /etc/minio/certs/private.key
chown minio-user: /etc/minio/certs/private.key
chmod 600 /etc/minio/certs/private.key

עבור PKI פנימי או תעודות חתומות עצמית, מקם את ה-CA ב-MINIO_ROOT_USER=minioadmin MINIO_ROOT_PASSWORD=strong-password MINIO_VOLUMES="https://minio{1...4}.internal:9000/mnt/disk{1...2}/minio" MINIO_OPTS="--console-address :9001" MINIO_SITE_NAME=datacenter-1 .

שלב 5: הגדרת מדיניות גישה באמצעות mc

MinIO Client (systemctl start minio && systemctl enable minio) הוא כלי הניהול הראשי:

mc alias set prod https://minio.company.com:9000 minioadmin пароль
mc mb prod/app-uploads
mc admin user add prod app-service сервисный-пароль
cat > /tmp/app-policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
      "Resource": ["arn:aws:s3:::app-uploads/*"]
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::app-uploads"]
    }
  ]
}
EOF
mc admin policy create prod app-policy /tmp/app-policy.json
mc admin policy attach prod app-policy --user app-service

אינטגרציה עם יישומים

mkdir -p /etc/minio/certs cp /etc/letsencrypt/live/minio.company.com/fullchain.pem /etc/minio/certs/public.crt cp /etc/letsencrypt/live/minio.company.com/privkey.pem /etc/minio/certs/private.key chown minio-user: /etc/minio/certs/private.key chmod 600 /etc/minio/certs/private.key

import boto3
s3 = boto3.client(
    's3',
    endpoint_url='https://minio.company.com:9000',
    aws_access_key_id='app-service',
    aws_secret_access_key='сервисный-пароль',
    region_name='us-east-1',
)
s3.upload_file('localfile.pdf', 'app-uploads', 'path/to/remote.pdf')

עבור Laravel, פשוט הגדר את /etc/minio/certs/CAs/ בקונפיגורציה ואפשר mc. mc alias set prod https://minio.company.com:9000 minioadmin пароль mc mb prod/app-uploads mc admin user add prod app-service сервисный-пароль cat > /tmp/app-policy.json << 'EOF' { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], "Resource": ["arn:aws:s3:::app-uploads/*"] }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::app-uploads"] } ] } EOF mc admin policy create prod app-policy /tmp/app-policy.json mc admin policy attach prod app-policy --user app-service הוא חובה—בלעדיו, ה-SDK מנסה להגיע אל Python (boto3):, שלא יעבוד ללא DNS עם תווים כלליים (wildcard).

Kubernetes: עבור פריסות Kubernetes, השתמש ב-Helm chart של import boto3 s3 = boto3.client( 's3', endpoint_url='https://minio.company.com:9000', aws_access_key_id='app-service', aws_secret_access_key='сервисный-пароль', region_name='us-east-1', ) s3.upload_file('localfile.pdf', 'app-uploads', 'path/to/remote.pdf') וב-StatefulSet עם PVCs ייעודיים לכל צומת. זה מבטיח שחזור תקין לאחר תקלות.

ניטור וצפיות

MinIO חושף מדדים בפורמט Prometheus בכתובת endpoint. מדדים מרכזיים: use_path_style_endpoint, use_path_style_endpoint, bucket.minio.company.com. אנו מגדירים לוחות מחוונים של Grafana מהמאגר הרשמי והתראות המבוססות על SLO (זמינות לא נמוכה מ-99.9%). לאיסוף מדדים, אנו משתמשים אופציונלית בקונטיינר צדדי של OpenTelemetry Collector.

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

אתה מקבל:

  • אשכול MinIO מבוזר מוכן עם TLS;
  • מדיניות גישה וחשבונות שירות מוגדרים;
  • תיעוד על תפעול וגיבוי;
  • אינטגרציה עם היישומים שלך (Laravel, Python, Java, Go);
  • הכשרת צוות בניהול בסיסי;
  • ניטור והתראות באמצעות Prometheus/Grafana;
  • תמיכה עם אחריות ל-30 יום לאחר ההשקה.

לוחות זמנים

תרחיש זמן
MinIO עם צומת יחיד ו-TLS 4–8 שעות
מבוזר (4 צמתים) עם מדיניות 2–3 ימים
הגדרת שכפול בין מרכזי נתונים +יום אחד

העלות מחושבת באופן אישי לאחר ביקורת תשתית. אנו נעריך את הפרויקט שלך ביום אחד. קבל ייעוץ על הגדרת MinIO.

אחריות ותמיכה

5+ שנות ניסיון בייצור עם MinIO, 50+ פרויקטי אחסון אובייקטים. אנו משתמשים בגישת GitOps: כל הקונפיגורציה מאוחסנת ב-Terraform ו-Ansible. זמן פעילות מובטח של 99.9% עבור אשכולות מבוזרים. לגיבוי MinIO, ניתן להשתמש ב-mc mirror למערכת תואמת S3 אחרת או ב-rsync. אנו ממליצים להגדיר גיבויים יומיים של קונפיגורציה ונתונים.

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