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

استقرار یک پشته مدوسا آماده تولید با یک موتور جستجوی مناسب و یک فضای ذخیره سازی ابری می تواند بسیار چالش برانگیز باشد، به خصوص برای مبتدیان. با این حال، با چند مرحله ساده، می توانید پشته خود را مستقر کنید و آن را در کمترین زمان راه اندازی و اجرا کنید. در این پست وبلاگ، من شما را در طول فرآیند راهنمایی می کنم و نکاتی را برای عیب یابی به شما ارائه می دهم.
فهرست مطالب
اجزای پشته
الزامات
- VPS با حداقل 1 گیگابایت رم.
- Docker و Docker Compose.
- یک دامنه سفارشی که به CloudFlare اشاره می کند.
- یک حساب کاربری CloudFlare
هاست و (زیر) دامنه های خود را راه اندازی کنید
پس از دسترسی به VPS خود، باید Docker و Docker compose را نصب و پیکربندی کنید.
هنگامی که سرور خود را پیکربندی کردید، دامنه خود را راه اندازی می کنیم. ما از CloudFlare برای مدیریت سوابق DNS دامنه خود استفاده خواهیم کرد و اعتبار گواهینامه رایگان SSL LetsEncrypt را به روشی آسان انجام می دهیم.
- دستورالعمل ها را دنبال کنید تا سایت خود را به حساب CloudFlare خود اضافه کنید.
- هر رکورد A را برای نشان دادن آدرس IP VPS خود تنظیم کنید.
- حالت رمزگذاری SSL/TLS خود را روی “کامل (سخت)” تنظیم کنید.
- توکن های API CloudFlare خود را دریافت کنید.
آن کدها را یادداشت کنید، در مراحل زیر از آنها استفاده می کنیم.
توجه: 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%
ما بقیه متغیرها را در مرحله دوم پیکربندی می کنیم، زیرا باید کلیدهای 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 را پیکربندی کنید
- به کنسول Minio خود دسترسی پیدا کنید و یک سطل جدید ایجاد کنید.
- خط مشی سطل را روی “Public” تنظیم کنید.
- به «کلیدهای دسترسی» بروید و کلید دسترسی و کلید مخفی را ایجاد کنید.
- متغیرها را در
.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 را بررسی کنید، باید پیامی به شما نشان دهد که درخواست مجاز نیست.
عیب یابی
پ: کانتینرهای داکر بلند نمی شوند
S: بررسی کنید که VPS شما حداقل 1 گیگابایت رم در دسترس داشته باشد.
P: خطا در درخواست گواهینامه های SSL LetsEncrypt.
S: از TLD های رایگان مانند .ga، .ml، .tk، و غیره استفاده نکنید. مطمئن شوید که زمان کافی برای انتشار تغییرات DNS را منتظر کرده اید.
P: نمی توان به داشبورد Traefik وارد شد.
S: مطمئن شوید که یک کاربر صحیح و رمز عبور هش شده ایجاد کرده اید.
امیدوارم پست من برای شما مفید بوده باشد! اگر این کار را کردید، لطفاً در Github به آن ستاره بدهید. این به دیگران کمک می کند پست را پیدا کنند و از آن بهره ببرند.
از حمایت شما متشکرم
https://github.com/beakman/medusa-stack-dockerized.