برنامه نویسی

استقرار یک پشته Medusa + Minio + MeiliSearch با Docker و Traefik

استقرار یک پشته مدوسا آماده تولید با یک موتور جستجوی مناسب و یک فضای ذخیره سازی ابری می تواند بسیار چالش برانگیز باشد، به خصوص برای مبتدیان. با این حال، با چند مرحله ساده، می توانید پشته خود را مستقر کنید و آن را در کمترین زمان راه اندازی و اجرا کنید. در این پست وبلاگ، من شما را در طول فرآیند راهنمایی می کنم و نکاتی را برای عیب یابی به شما ارائه می دهم.

فهرست مطالب

اجزای پشته

الزامات

  • VPS با حداقل 1 گیگابایت رم.
  • Docker و Docker Compose.
  • یک دامنه سفارشی که به CloudFlare اشاره می کند.
  • یک حساب کاربری CloudFlare

هاست و (زیر) دامنه های خود را راه اندازی کنید

پس از دسترسی به VPS خود، باید Docker و Docker compose را نصب و پیکربندی کنید.

هنگامی که سرور خود را پیکربندی کردید، دامنه خود را راه اندازی می کنیم. ما از CloudFlare برای مدیریت سوابق DNS دامنه خود استفاده خواهیم کرد و اعتبار گواهینامه رایگان SSL LetsEncrypt را به روشی آسان انجام می دهیم.

  1. دستورالعمل ها را دنبال کنید تا سایت خود را به حساب CloudFlare خود اضافه کنید.
  2. هر رکورد A را برای نشان دادن آدرس IP VPS خود تنظیم کنید.
    DNS A Records
  3. حالت رمزگذاری SSL/TLS خود را روی “کامل (سخت)” تنظیم کنید.
    حالت رمزگذاری SSL/TLS
  4. توکن های API CloudFlare خود را دریافت کنید.

توکن های CloudFlare API

آن کدها را یادداشت کنید، در مراحل زیر از آنها استفاده می کنیم.

توجه: TLD های رایگان مانند .GA، .ml یا .tk با اعتبارسنجی خودکار DNS کار نخواهد کرد.

پشته مدوزا را راه اندازی کنید

هنگامی که Docker را نصب کردید و VPS خود را ایمن کردید، وقت آن است که پشته Medusa را راه اندازی کنید:

مرحله 1: مخزن Github را شبیه سازی کنید.

با استفاده از دستور زیر می توانید مخزن Github را کلون کنید:

git clone https://github.com/beakman/medusa-stack-dockerized.git
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 2: ویرایش .env فایل.

در دایرکتوری اصلی مخزن کلون شده، فایلی با نام پیدا خواهید کرد .env.example. شما باید این فایل را کپی کرده و نام آن را تغییر دهید .env. باز کن .env مقادیر را فایل کنید و متناسب با محیط خود ویرایش کنید.

پیکربندی CloudFlare

# LetsEncrypt CloudFlare verification
EMAIL=user@example.com
CERT_RESOLVER=letsencrypt
CLOUDFLARE_EMAIL=
CLOUDFLARE_API_KEY=
CLOUDFLARE_DNS_API_TOKEN=
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا باید توکن API ایجاد شده قبلی و ایمیل CloudFlare خود را ارائه دهید.

سرور مدوسا

MEDUSA_DOMAIN=example.com
MEDUSA_CERT_RESOLVER=letsencrypt
ADMIN_CORS=https://admin.example.com
STORE_CORS=https://store.example.com
JWT_SECRET=
COOKIE_SECRET=
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ادمین و آدرس فروشگاه هنوز در دسترس نیستند. همانطور که در پست دیگری توضیح داده خواهد شد آنها را در یک پلتفرم دیگر مستقر خواهیم کرد.

را MEDUSA_DOMAIN آدرس باطن ما خواهد بود. ما می توانیم از چیزی شبیه به استفاده کنیم api.example.com.

ترافیک و داشبورد

TRAEFIK_DOMAIN=traefik.example.com
TRAEFIK_CERT_RESOLVER=letsencrypt
TRAEFIK_USER=admin
TRAEFIK_PASSWORD_HASH= # echo $(htpasswd -nB user) | sed -e s/\\$/\\$\\$/g% 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

داشبورد Traefik

ما بقیه متغیرها را در مرحله دوم پیکربندی می کنیم، زیرا باید کلیدهای api برخی از سرویس ها را تولید کنیم.

مرحله 3: ظروف را راه اندازی کنید.

پشته از فایل های مختلف docker-compose برای استقرار هر قسمت از پشته تشکیل شده است. برای شروع کانتینرها، به سادگی اجرا کنید:

sh start.sh
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا به طور واضح تر:

docker compose \
-f docker-compose.medusa.yml \
-f docker-compose.minio.yml \
-f docker-compose.search.yml \
-f docker-compose.traefik.yml \
up -d
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 4: به پشته مدوسا دسترسی پیدا کنید.

اگر همه چیز خوب پیش برود، می توانید به اجزای مختلف پشته خود دسترسی داشته باشید:

همچنین می توانید با اجرای زیر سلامت ظروف را بررسی کنید:

turbo@test-medusa:~$ cd medusa-stack-dockerized/
turbo@test-medusa:~/medusa-stack-dockerized$ docker compose ps
NAME                                    COMMAND                  SERVICE             STATUS              PORTS
medusa-server-default                   "./develop.sh"           backend             running (healthy)   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp
medusa-stack-dockerized-meilisearch-1   "tini -- /bin/sh -c …"   meilisearch         running             0.0.0.0:7700->7700/tcp, :::7700->7700/tcp
medusa-stack-dockerized-postgres-1      "docker-entrypoint.s…"   postgres            running (healthy)   
medusa-stack-dockerized-redis-1         "docker-entrypoint.s…"   redis               running             
service-storage                         "/usr/bin/docker-ent…"   storage             running (healthy)   9000/tcp
traefik                                 "/entrypoint.sh --pr…"   traefik             running             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, :::80->80/tcp, :::443->443/tcp
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر هر یک از سرویس ها ناسالم است، می توانید آن را در حال اجرا اشکال زدایی کنید:

docker-compose logs -f <service-name>
In the above command, replace <service-name> with the name of the service you want to debug.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثال:

turbo@test-medusa:~/medusa-stack-dockerized$ docker compose logs traefik
traefik  | time="2023-03-02T22:47:26Z" level=info msg="Configuration loaded from flags."
traefik  | time="2023-03-02T22:47:26Z" level=info msg="Traefik version 2.9.8 built on 2023-02-15T15:23:25Z"
traefik  | time="2023-03-02T22:47:26Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://doc.traefik.io/traefik/contributing/data-collection/\n"
traefik  | time="2023-03-02T22:47:26Z" level=info msg="Starting provider aggregator aggregator.ProviderAggregator"
traefik  | time="2023-03-02T22:47:26Z" level=info msg="Starting provider *traefik.Provider"
traefik  | time="2023-03-02T22:47:26Z" level=info msg="Starting provider *docker.Provider"
traefik  | time="2023-03-02T22:47:26Z" level=info msg="Starting provider *acme.ChallengeTLSALPN"
traefik  | time="2023-03-02T22:47:26Z" level=info msg="Starting provider *acme.Provider"
traefik  | time="2023-03-02T22:47:26Z" level=info msg="Testing certificate renew..." providerName=letsencrypt.acme ACME CA="https://acme-v02.api.letsencrypt.org/directory"
traefik  | time="2023-03-03T22:47:26Z" level=info msg="Testing certificate renew..." providerName=letsencrypt.acme ACME CA="https://acme-v02.api.letsencrypt.org/directory"
traefik  | time="2023-03-04T12:20:26Z" level=error msg="Error while Peeking first byte: read tcp 172.18.0.4:80->151.235.195.76:33779: read: connection timed out"
traefik  | time="2023-03-04T22:47:26Z" level=info msg="Testing certificate renew..." providerName=letsencrypt.acme ACME CA="https://acme-v02.api.letsencrypt.org/directory"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ذخیره سازی ابری Minio را پیکربندی کنید

  1. به کنسول Minio خود دسترسی پیدا کنید و یک سطل جدید ایجاد کنید.
  2. خط مشی سطل را روی “Public” تنظیم کنید.
  3. به «کلیدهای دسترسی» بروید و کلید دسترسی و کلید مخفی را ایجاد کنید.
  4. متغیرها را در .env بر این اساس.
MINIO_ENDPOINT=https://minio.example.com
MINIO_BUCKET=medusa-test
MINIO_ACCESS_KEY=supers3cr3t
MINIO_SECRET_KEY=v3rystr0ngpassw0rd
MINIO_ROOT_USER=admin
MINIO_ROOT_PASS=changeme1234
MINIO_DOMAIN=minio.example.com
MINIO_CONSOLE_DOMAIN=minio-console.example.com
MINIO_CERT_RESOLVER=letsencrypt
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرهای MeiliSearch را پیکربندی کنید

MEILI_DOMAIN=search.example.com
MEILI_CERT_RESOLVER=letsencrypt
MEILISEARCH_HOST=https://search.example.com
MEILISEARCH_API_KEY=
MEILI_MASTER_KEY=
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نمونه MeiliSearch خود را ایمن کنید.

پس از تنظیم کلید اصلی و راه اندازی مجدد ظرف، درخواست شما محافظت می شود. نقطه پایانی https://search.example.com/keys را بررسی کنید، باید پیامی به شما نشان دهد که درخواست مجاز نیست.

MeiliSearch درخواست مجاز نیست

عیب یابی

پ: کانتینرهای داکر بلند نمی شوند
S: بررسی کنید که VPS شما حداقل 1 گیگابایت رم در دسترس داشته باشد.

P: خطا در درخواست گواهینامه های SSL LetsEncrypt.
S: از TLD های رایگان مانند .ga، .ml، .tk، و غیره استفاده نکنید. مطمئن شوید که زمان کافی برای انتشار تغییرات DNS را منتظر کرده اید.

P: نمی توان به داشبورد Traefik وارد شد.
S: مطمئن شوید که یک کاربر صحیح و رمز عبور هش شده ایجاد کرده اید.

امیدوارم پست من برای شما مفید بوده باشد! اگر این کار را کردید، لطفاً در Github به آن ستاره بدهید. این به دیگران کمک می کند پست را پیدا کنند و از آن بهره ببرند.

از حمایت شما متشکرم

https://github.com/beakman/medusa-stack-dockerized.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا