برنامه نویسی

ساخت یک کلون Slack با محیط های پیش نمایش

TL; DR

در این آموزش، ما قصد داریم یک برنامه کاربردی Full Stack مانند Slack با چندین سرویس در حال اجرا بسازیم. ما همچنین محیط‌های پیش‌نمایش را برای هر commit در هر شاخه، با تمام خدمات در حال اجرا، راه‌اندازی می‌کنیم. (هشدار اسپویلر – اگر ترجیح می دهید مستقیماً به کد نگاه کنید، می توانید بررسی کنید که محصول نهایی در این مخزن موجود است).

برای انجام این کار از ترکیبی از supabase + Next.js استفاده خواهیم کرد. ما همچنین از ابزاری به نام Preevy برای ارائه محیط های پیش نمایش برای پروژه خود استفاده خواهیم کرد.

شروع شدن

از طرف دیگر، ما قصد داریم از Supabase استفاده کنیم، یک پروژه OSS که به عنوان جایگزینی برای Firebase گوگل طراحی شده است – یک پلتفرم برای DB، ارتباطات بلادرنگ، احراز هویت و موارد دیگر.

در قسمت جلویی همه چیز، ما از یک برنامه ساده Next.js استفاده خواهیم کرد – یک کلون Slack، که از یکی از نمونه‌های Supabase گرفته شده است – در اینجا پیوندی به مخزن است که از آن استفاده خواهیم کرد.

در حالی که این برنامه دارای بسیاری از خدمات باطن و یک سرور frontend است، ما می خواهیم نشان دهیم که چگونه می توان به راحتی محیط پیش نمایش را تنظیم کرد که به طور خودکار در هر commit در هر شعبه ساخته و مستقر می شود.

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

یک درخواست سریع 🤗

من سعی می کنم اولین ستاره های 1K خود را برای Preevy کسب کنم. آیا می توانید با ستاره گذاری مخزن به من کمک کنید؟ این به توسعه دهندگان بیشتر کمک می کند تا Preevy را کشف کنند و به ما کمک می کند به ایجاد محتوای جالب برای جامعه ادامه دهیم. با تشکر!

چرا این جالب است

محیط های پیش نمایش یک تغییر دهنده بازی در جریان های کاری توسعه سریع هستند. آن‌ها به تیم‌ها اجازه می‌دهند تا نسخه‌های در حال اجرا واقعی برنامه را در زمان بررسی، قبل از استقرار تا مرحله‌بندی یا تولید، بررسی کنند.

محیط‌های پیش‌نمایش (همچنین به‌عنوان «پیش‌نمایش‌های مستقر» یا «محیط‌های زودگذر» نیز شناخته می‌شوند) هر ذینفع در تیم را قادر می‌سازد تا تغییر کد را در زمان روابط عمومی مشاهده کرده و با آن همکاری کند، که باعث توسعه سریع‌تر محصول می‌شود.

از آنجایی که supabase اجازه توسعه محلی را می‌دهد، می‌توانیم از آن برای ایجاد یک محیط مستقل استفاده کنیم – به این معنی که به راحتی می‌توانیم برنامه را با تمام وابستگی‌هایش تنها بر اساس کد منبع بسازیم. هیچ سرویس خارجی برای کارکرد برنامه مورد نیاز نیست.

بنابراین این پروژه یک نمونه عالی از ساخت یک برنامه کاربردی چند سرویس با چند ابزار منبع باز عالی است و تجربه می کند که چگونه محیط های پیش نمایش می توانند بر گردش کار و تجربه کلی توسعه دهنده شما تأثیر بگذارند.

چگونه آن را بسازیم

1. ایجاد کنید docker-compose.yaml

اول، ما قصد داریم یک را ایجاد کنیم docker-compose.yaml فایل با تمام خدمات supabase. ما فایل نوشتن خود را از فایل نوشتن خود supabase پایه گذاری می کنیم. همراه با docker-compose.yaml به خودی خود، ما به برخی از تنظیمات و فایل های SQL برای مقداردهی اولیه سرویس ها و DB ها نیاز داریم. اساساً آنها از مخزن supabase کپی شده اند، بنابراین ما در مورد آنها صحبت نمی کنیم.

2. ایجاد یک Dockerfile برای برنامه Next.js

باید اپلیکیشن Slack clone را به فایل compose اضافه کنیم. برای انجام این کار، باید یک فایل Docker برای آن ایجاد کنیم.

در اینجا مطالب آن است

FROM node:18-alpine AS base

FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app

COPY yarn.lock ./
RUN yarn --frozen-lockfile


FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ARG NEXT_PUBLIC_SUPABASE_URL
ARG NEXT_PUBLIC_SUPABASE_KEY

RUN yarn build

FROM base AS runner
WORKDIR /app

ENV NODE_ENV production

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs

COPY --from=builder /app/public ./public

COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

USER nextjs

EXPOSE 1988

ENV PORT 1988

CMD ["node", "server.js"]
وارد حالت تمام صفحه شوید

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

توجه کنید ما در حال عبور از NEXT_PUBLIC_SUPABASE_URL و NEXT_PUBLIC_SUPABASE_KEY args بنابراین آنها به عنوان متغیرهای محیطی در ساخت برنامه استفاده می شوند، که امکان اتصال به سرویس های supabase را از برنامه frontend ما فراهم می کند.

3. طرحواره برنامه را به حجم سرویس نوشتن اضافه کنید

برنامه Slack انتظار دارد یک طرح واره خاص در پایگاه داده خود، مانند جداول کانال و پیام ها. هنگام بوت کردن، باید طرحواره را در پایگاه داده بارگذاری کنیم. در اینجا فایل SQL طرحواره در مخزن نمونه است.

برای انجام این کار، ما در حال اضافه کردن full-schema.sql فایل به ./docker/volumes/db پوشه و اضافه کردن آن به حجم خدمات db composes مانند این است:

  db:
    # Removed the rest of the configurations for clarity
    volumes:
      # add the following line after the rest of the volumes: 
      - ./volumes/db/full-schema.sql:/docker-entrypoint-initdb.d/init-scripts/100-full-schema.sql:Z

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

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

4. URL های خدمات محیطی پیش نمایش را به متغیرهای محیطی تزریق کنید

برای اینکه سرویس ها با یکدیگر ارتباط برقرار کنند، به آدرس های یکدیگر نیاز دارند. در اصل ./docker/.env.example فایل از مخزن supabase، localhost URL ها برای اتصال به سرویس های مختلف استفاده می شوند، زیرا فرض بر این است که محیط بر روی ماشین خصوصی توسعه دهنده اجرا می شود. در مورد ما، محیط قرار است در محیط پیش نمایش اجرا شود و URL های اینترنتی عمومی داشته باشد.

برای دریافت URL ها، Preevy URI های عمومی را با استفاده از متغیرهای محیط زمان ساخت خاص، همانطور که در اسناد توضیح داده شده است، در معرض دید عموم قرار می دهد.

ما می‌توانیم با استفاده از جایگزینی پارامتر bash، متغیرهای محیطی خود را از URLهای Preevy و توسعه محلی پشتیبانی کنیم.

به عنوان مثال، به جای تعریف کردن SITE_URL متغیر با URL محلی

SITE_URL=http://localhost:3000
وارد حالت تمام صفحه شوید

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

تعریف می کنیم

SITE_URL=${PREEVY_BASE_URI_STUDIO_3000:-http://localhost:3000}
وارد حالت تمام صفحه شوید

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

که ما مقدار آن را تعیین می کنیم http://localhost:3000 اگر ارزش PREEVY_BASE_URI_STUDIO_3000 null است، به این معنی که ما خارج از Preevy اجرا می کنیم. می توانید به اصلاح شده نگاه کنید ./docker/.env.example فایل در مخزن این مثال – در اینجا

5. استفاده از Preevy برای استقرار محیط در دستگاه محلی خود

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

اولین قدم این است که مطمئن شوید Preevy همانطور که در مستندات توضیح داده شده است، نصب و پیکربندی شده است.

پس از انجام این کار، موارد زیر را انجام دهید:

  1. این مخزن را شبیه سازی کنید https://github.com/livecycle/supabase-nexjs-preevy-example
  2. درون docker دایرکتوری، اجرا کنید cp .env.example .env
  3. درون docker دایرکتوری، اجرا کنید preevy up

و بس!

6. ایجاد یک گردش کار عمل GH به طور خودکار در هر به روز رسانی مستقر می شود

Preevy یک اکشن GitHub راحت دارد – livecycle/preevy-up-action، همانطور که در مستندات آن توضیح داده شده است، در اینجا یک مثال استفاده وجود دارد:

name: Deploy Preevy environment
on:
  pull_request:
    types:
      - opened
      - synchronize
permissions:
  id-token: write
  contents: read
  pull-requests: write
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: aws-actions/configure-aws-credentials@v2
        with:
          role-to-assume: arn:aws:iam::12345678:role/my-role
          aws-region: eu-west-1
      - uses: actions/checkout@v3
      - uses: livecycle/preevy-up-action@latest
        id: preevy
        with:
          profile-url: "s3://preevy-12345678-my-profile?region=eu-west-1"
          docker-compose-yaml-path: "./docker/docker-compose.yaml"
      - uses: mshick/add-pr-comment@v2
        with:
          message: ${{ steps.preevy.outputs.urls-markdown }}           
وارد حالت تمام صفحه شوید

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

خلاصه

به طور خلاصه، استفاده از ابزارها و فریم ورک‌های منبع باز مانند supabase، Next.js و Preevy می‌تواند ترکیبی قدرتمند برای ایجاد برنامه‌های کاربردی تمام پشته مقیاس‌پذیر و گردش کار توسعه مؤثرتر باشد.

با دنبال کردن مراحل ارائه شده و استفاده از Docker Compose، توسعه‌دهندگان می‌توانند به راحتی محیط‌های پیش‌نمایش را راه‌اندازی کنند که به‌طور خودکار با هر commit ساخته و مستقر می‌شوند و بررسی و همکاری کارآمد کد را تسهیل می‌کنند.

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

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

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

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

همچنین ببینید
بستن
دکمه بازگشت به بالا