Novu را روی یک دستگاه محلی اجرا کنید

هر محصول خوب این روزها باید راهی برای ارسال اعلان ها به کاربران در کانال های مختلف داشته باشد. به عنوان یک مهندس ، ساختمان و مدیریت زیرساخت های مورد نیاز می تواند یک تلاش وقت گیر باشد ، به خصوص اگر سناریوهای پیچیده و کانال های اطلاع رسانی چندگانه داشته باشیم. در این مقاله ، ما می آموزیم که چگونه Novu ، یک سیستم اطلاع رسانی منبع باز را برای حل این مشکل مستقر کنیم.
novu چیست؟
NOVU یک سیستم اعلان منبع باز است که برای ارسال اعلان ها از طریق چندین کانال مانند گپ ، ایمیل ، پیام کوتاه ، درون برنامه و فشار استفاده می شود.
یکی از ویژگی های عالی NOVU این است که به افراد غیر فنی اجازه می دهد تا گردش کار اعلان را ایجاد و مدیریت کنند. این بدان معناست که تیم مهندسی با همیشه در صورت لزوم کوچکترین تغییرات را دچار مشکل نمی کند.
یکی دیگر از ویژگی های عالی Novu این است
مؤلفه برنامه های وب که اعلان های زمان واقعی را امکان پذیر می کند. با چند خط کد ، یک صندوق ورودی دریافت می کنیم که در زمان واقعی و واکنشی است.
ساده ترین راه برای شروع با استفاده از NOVU ، ثبت نام در یک برنامه و شروع به ادغام بلافاصله است.
برای کنترل بیشتر در مورد استفاده و داده ها ، اجازه دهید نسخه خود را از Novu مستقر و پیکربندی کنیم.
استفاده از docker
این پست برای تکمیل مستندات رسمی NOVU ، از جمله برخی از نکات و ترفندها برای آسانتر کردن استقرار در یک دستگاه محلی است.
در این مقاله از Windows OS برای استقرار ما استفاده می شود ، اما دستورات برای لینوکس یکسان هستند ، با برخی اصلاحات جزئی.
ابتدا باید اطمینان حاصل کنیم که Docker و Docker Compose نصب شده اند.
بعد ، بیایید کد را به یک پوشه بکشیم:
> git clone --depth 1 https://github.com/novuhq/novu
بیایید باز کنیم docker/community
پوشه و ایجاد یک کپی از متغیرهای محیط پیش فرض:
> cd novu/docker/community
> copy .env.example .env
# For Linux, use cp instead of copy
این یک نسخه از .env.example
و آن را در .env
پرونده
ما باید برخی از تنظیمات را در خود تغییر دهیم .env
پرونده برای ایمن تر شدن استقرار ما. تنظیمات زیر باید تغییر یابد:JWT_SECRET
STORE_ENCRYPTION_KEY
باید 32 کاراکتر طول داشته باشد.NOVU_SECRET_KEY
MONGO_INITDB_ROOT_USERNAME
MONGO_INITDB_ROOT_PASSWORD
ما می توانیم از Guid
برای کلیدهای مخفی بیایید از PowerShell برای تولید استفاده کنیم Guid
:
PS> New-Guid
این دستور 32 کاراکتر ایجاد می کند Guid
برای استفاده ما ما می توانیم به همان اندازه که برای پیکربندی خود نیاز داریم تولید کنیم.
برای STORE_ENCRYPTION_KEY
، ما باید داشها (-) را از تولیدات خارج کنیم Guid
بشر
پس از تنظیم پیکربندی خود ، بیایید شروع به اجرای برنامه در Docker Mode Setached کنیم:
> docker compose up -d
اگر ، در حالی که در حال اجرا است docker compose
، ما خطایی دریافت می کنیم که نشان می دهد پورت در حال استفاده است ، می توانیم در یک درگاه متفاوت در خود تغییر دهیم .env
پرونده
به عنوان مثال ، اگر خطایی را که پورت 3000 در حال استفاده است ، دریافت کنیم ، باید همه منابع را به پورت 3000 در پرونده .env تغییر دهیم. ما می توانیم آن را به 3001 تغییر دهیم.
سپس می توانیم برنامه را در http: // localhost: 4200 مشاهده کنیم ، یک حساب کاربری ایجاد کنید ، وارد شوید و پردازنده را تکمیل کنید.
پیروی از دستورالعمل های روی صفحه منجر به ایجاد یک حساب کاربری در Novu خواهد شد که عالی است. در مورد ما ، ما می خواهیم تمام خدمات خود را به صورت محلی تنظیم کنیم.
اگر پس از سوار شدن ، برنامه به گردش کار هدایت نشود ، ما از http: // localhost: 4200/گردش کار/ایجاد برای حرکت به صفحه برای ایجاد گردش کار جدید استفاده می کنیم.
تنظیم برنامه Bridge و استودیوی محلی
پس از سوار شدن ، ما باید برنامه پل و استودیوی محلی خود را تنظیم کنیم.
برنامه Bridge برنامه ای است که گردش کار در آن نوشته شده است. گردش کار را به عنوان تعاریفی از نحوه پردازش اعلان ها در نظر بگیرید.
استودیوی محلی راهی برای تعریف جریان کار دقیق به صورت برنامه ای یا با استفاده از ویرایشگر بصری فراهم می کند. این امر باعث می شود تا قبل از انتقال آنها به تولید ، تعریف ، آزمایش و اصلاح گردش کار را آسان کنید.
تنظیم برنامه Bridge
برای اولیه سازی برنامه Bridge ما ، ابتدا باید یک کلید API را از برنامه خود دریافت کنیم. ما می توانیم کلید API خود را از داشبورد برنامه خود یا از طریق url http: // localhost: 4200/api-keys دریافت کنیم.
بیایید برنامه Bridge را ایجاد کنیم:
> npx novu@latest init --secret-key= --api-url=
در اینجا ،
کلید API است که ما از داشبورد خود می گیریم. در
URL API مستقر است ، از جمله شماره پورت مطابق تعریف API_ROOT_URL
در پرونده .env ما. در این حالت ، http: // localhost: 3000.
سپس وابستگی ها را نصب می کنیم و برنامه را اجرا می کنیم:
> npm install
# Run the bridge application
> npm run dev
بیایید تأیید کنیم که پل ما در حال کار با استفاده از url http: // localhost: 4000/api/novu است. ما باید یک پاسخ JSON دریافت کنیم که باید نشان دهد سرور در حال اجرا است:
{
"status": "ok",
"sdkVersion": "2.6.6",
"frameworkVersion": "2024-06-26",
"discovered": {
"workflows": 1,
"steps": 2
}
}
با استفاده از URL Application Bridge به عنوان URL Bridge
ما همچنین باید به جای آن ، از URL Bridge به عنوان یک تونل استفاده کنیم.
در صورت استفاده از لینوکس ، فقط می توانیم دستور زیر را اجرا کنیم:
> npx novu@latest dev -d -p
در این حالت ،
http: // localhost: 4200 و
4000 است
اما از آنجا که ما از ویندوز استفاده می کنیم ، باید تغییراتی در خود ایجاد کنیم docker-compose.yml
پرونده برای برنامه NOVU ما.
بیایید نمونه Docker خود را متوقف کنیم:
> docker compose down
سپس پیکربندی زیر را به هر سرویس در ما اضافه می کنیم docker-compose.yml
پرونده:
extra_hosts:
- "host.docker.internal:host-gateway"
ما باید پیکربندی را به api
با web
با worker
وت ws
خدمات در docker-compose.yml
پرونده:
#code omitted for brevity
web:
image: 'ghcr.io/novuhq/novu/web:2.1.1'
depends_on:
- api
- worker
container_name: web
restart: unless-stopped
logging:
driver: 'json-file'
options:
max-size: '50m'
max-file: '5'
environment:
REACT_APP_API_URL: ${API_ROOT_URL}
REACT_APP_ENVIRONMENT: ${NODE_ENV}
REACT_APP_WIDGET_EMBED_PATH: ${WIDGET_EMBED_PATH}
REACT_APP_IS_SELF_HOSTED: 'true'
REACT_APP_WS_URL: ${REACT_APP_WS_URL}
ports:
- 4200:4200
command: ['/bin/sh', '-c', 'pnpm run envsetup:docker && pnpm run start:static:build']
extra_hosts:
- "host.docker.internal:host-gateway"
#code omitted for brevity
به عنوان آخرین مرحله ، اجازه دهید URL API NOVU خود را به .env.local
برنامه پل ما:
NOVU_API_URL=
در این حالت ، ما
http: // localhost: 3000. این امر به جلوگیری از مشکلات مربوط به تأیید اعتبار استودیوی محلی در برابر URL API کمک می کند.
در .env.local
همچنین حاوی مقادیری برای کلید مخفی ، شناسه برنامه و شناسه مشترک است. اگر یک چرخش کلیدی انجام دهیم یا می خواهیم با یک مشترک متفاوت آزمایش کنیم ، می توانیم این مقادیر را تغییر دهیم.
در آخر ، بیایید دوباره برنامه Bridge را اجرا کنیم:
> npx novu@latest dev -d -p -t
در اینجا ،
http: // localhost: 4200 ،
4000 است و
http: //host.docker.internal: 4000.
استودیوی محلی در http: // localhost: 2022 باز خواهد شد. همچنین در برابر برنامه اصلی اجرا شده در http: // localhost: 4200 تأیید می شود.
استفاده از استودیوی محلی برای ایجاد گردش کار
توجه به این نکته حائز اهمیت است که برای شروع ایجاد گردش کار در استودیوی محلی ، ما باید این کار را به صورت برنامه ای با کد انجام دهیم.
ابتدا بیایید یک پوشه گردش کار جدید به نام Event-Notification در پوشه گردش کار در پوشه برنامه Bridge ما ایجاد کنیم. پوشه در app/novu/workflows/event-notification
بشر
بعد ، بیایید یک گردش کار به نام ایجاد کنیم eventNotification
در workflow.ts
پرونده:
import { workflow } from "@novu/framework";
import { payloadSchema } from "../welcome-onboarding-email/schemas";
export const eventNotification = workflow(
"event-notification",
async ({ step, payload }) => {
await step.inApp("In-App Step", async () => {
return {
subject: payload.inAppSubject,
body: payload.inAppBody,
avatar: payload.inAppAvatar,
};
});
},
{
payloadSchema,
}
);
سپس می رویم /app/api/novu
و گردش کار جدید ما را به routes.ts
پرونده:
import { serve } from "@novu/framework/next";
import { welcomeOnboardingEmail } from "../../novu/workflows";
import { eventNotification } from "../..//novu/workflows/event-notification/workflow";
export const { GET, POST, OPTIONS } = serve({
workflows: [welcomeOnboardingEmail, eventNotification],
});
سپس می توانیم گردش کار جدید را در صفحه گردش کار استودیوی محلی مشاهده کنیم.
همگام سازی تغییرات از استودیوی محلی به برنامه NOVU
هنگامی که ما در استودیوی محلی تغییراتی در گردش کار خود ایجاد کردیم ، باید آن را با برنامه اصلی که در https: // localhost: 4200: همگام سازی می کنیم همگام سازی کنیم.
> npx novu@latest sync --bridge-url --secret-key --api-url
در اینجا ،
http: //host.docker.internal: 4000/api/novu ، و
http: // localhost: 3000. در
کلیدی است که ما از داشبورد برنامه NOVU ما دریافت می کنیم.
ترویج گردش کار از توسعه تا تولید
پس از ایجاد گردش کار با استفاده از استودیوی محلی و همگام سازی آن با برنامه NOVU ، گردش کار در محیط توسعه در داشبورد Novu ما ظاهر می شود.
برای اینکه گردش کار در محیط تولید در دسترس باشد ، باید آن را ارتقا دهیم.
برای انجام این کار ، ما از url http: // localhost: 4200/تغییرات استفاده می کنیم تا همه تغییرات گردش کار را ببینیم و گردش کار را به سمت تولید ارتقا دهیم.
نکته:
در حال حاضر مؤلفه در حال به روزرسانی های زیادی است. اگر خطای 400 را پرتاب می کند ، از نسخه NPM 3.1.0 استفاده کنید.
پایان
در مقاله ، ما یاد گرفتیم که چگونه Novu ، یک سیستم اعلان های منبع باز را با استفاده از Docker مستقر و پیکربندی کنیم. ما همچنین یاد گرفتیم که چگونه از استودیوی محلی برای ایجاد گردش کار ، همگام سازی گردش کار با برنامه NOVU و ترویج گردش کار از توسعه تا تولید استفاده کنیم.
منابع
- https://docs.novu.co/community/self-hosting-novu/deploy-docker
- https://github.com/novuhq/novu/issues/6653
- https://github.com/novuhq/novu/issues/6710
لیست URL ها:
- URL داشبورد: http: // localhost: 4200
- URL Application Bridge: http: // localhost: 4000/
- URL API Bridge: http: // localhost: 4000/api/novu
- URL تونل پل: http: //host.docker.internal: 4000/api/novu
- URL استودیوی محلی: http: // localhost: 2022/studio
- URL API: http: // localhost: 3000/v1
- URL WebSocket: http: // localhost: 3002