मुख्य सामग्री पर जाएं

Devin के साथ सॉफ़्टवेयर डेवलपमेंट: सुरक्षा, डिप्लॉयमेंट, मेंटेनेंस (भाग 4)

जानें कि Devin का उपयोग करके NextAuth से वास्तविक यूज़र ऑथ कैसे जोड़ें, Sentry से त्रुटियाँ मॉनिटर करें, और प्रीव्यू URL के साथ फ्रंटएंड को Vercel पर डिप्लॉय करें।
अपडेट किया गया 25 सित॰ 2026  · 12 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

फिर से स्वागत है! हम लगभग पहुँच चुके हैं: Slack गूंज रहा है, Jira में टिकट्स हैं, टेस्ट्स हरे हैं, और हमारी CI हर लापरवाह PR को ब्लॉक कर रही है। भाग चार अंतिम धक्का है जिसमें हम fp-ts प्लेग्राउंड को ऐसी चीज़ में बदलेंगे जिसे, सिद्धांततः, हम पब्लिक के सामने पेश कर सकें।

Devin सीरीज़ के सभी ट्यूटोरियल यहाँ उपलब्ध हैं:

  1. सेटअप और पहला पुल रिक्वेस्ट (भाग 1)
  2. Devin के साथ एक वर्टिकल स्लाइस शिप करना (भाग 2)
  3. इंटीग्रेशन्स, टेस्टिंग, और CI/CD (भाग 3) 
  4. सुरक्षा, डिप्लॉयमेंट, मेंटेनेंस (भाग 4)

चौथे ट्यूटोरियल की योजना यह है:

  • ऑथ: अब अनाम UUID नहीं; हम NextAuth क्रेडेंशियल्स, JWT कुकीज़, और GqlAuthGuard जोड़ेंगे ताकि प्रगति वास्तविक यूज़र्स से जुड़ी हो।
  • प्रोडक्शन पर नज़र: वेब ऐप में Sentry की एक पंक्ति, Nest API में एक पंक्ति, और हर अपवाद डैशबोर्ड में दिखाई देगा।
  • पुश-बटन डिप्लॉय: फ्रंट-एंड Vercel पर लाइव जाएगा और हर PR पर प्रीव्यू URL मिलेगा। (API अभी लोकल ही रहेगी, हम Docker से प्रोडक्शन जैसा माहौल बनाएंगे।)

हम Devin के साथ पेयर प्रोग्रामिंग पर भी विचार करेंगे—जहाँ यह चमकता है और जहाँ दुनिया के सामने रेपो दिखाने से पहले इंसान को ढीले छोर समेटने पड़ते हैं। अंतिम पड़ाव के लिए तैयार?

अनाम UUID से वास्तविक यूज़र्स तक

मैंने Devin से क्या करने को कहा

संक्षेप में, मैंने Devin से अनाम UUID फ्लो हटाकर एक वास्तविक ऑथ स्टैक देने को कहा:

  • NextAuth v6 क्रेडेंशियल्स प्रोवाइडर apps/web में
  • NestJS AuthModule, Argon2 हैशिंग और JWT कुकीज़ के साथ
  • Prisma माइग्रेशन जो User टेबल जोड़ती है और Progress.sessionId → userId (नॉन-नल) में बदलती है
  • मौजूदा UUID प्रोग्रेस पंक्तियों को एक प्लेसहोल्डर यूज़र में कॉपी करें ताकि शिक्षार्थियों के बैज बने रहें
  • Postgres को SQLite से न बदलें

क्या वापस आया (अधिकतर अच्छा)

यह परिणामों का सारांश है:

लेयर

Devin का आउटपुट

डेटाबेस

Session टेबल हटाई; User मॉडल जोड़ा जिसमें email, hash, स्ट्रीक फ़ील्ड्स और टाइमस्टैम्प्स हैं। माइग्रेशन स्क्रिप्ट ने हर पुराने sessionId रो को legacy-<uuid>@anon.local नाम के छद्म-यूज़र में बैक-फिल किया।

बैकएंड

AuthModule, AuthService, GraphQL AuthResolver, JwtStrategy, और एक GqlAuthGuard। सब Nest-आइडियोमैटिक, 100% टाइप्ड।

फ्रंटएंड

AuthProvider React कॉन्टेक्स्ट, LoginForm, RegisterForm, प्रोटेक्टेड रूट्स पर उभरने वाला मोडल, और डैशबोर्ड हेडर में लॉगआउट बटन।

सुरक्षा

Argon2 (12 राउंड), class-validator के जरिए DTO वैलिडेशन, JWTs localStorage में स्टोर, हर प्रोग्रेस रिज़ॉल्वर पर गार्ड्स।

टेस्ट्स

AuthService.register/login के लिए यूनिट टेस्ट और एक e2e म्यूटेशन टेस्ट जो यह सुनिश्चित करता है कि गार्ड गायब टोकन को अस्वीकार करता है। (टेस्ट जोड़ने के लिए दूसरी बार प्रॉम्प्ट किया)

एक और SQLite माइग्रेशन

बताइए, Devin के छोटे सोचने वाले बॉक्स में मुझे क्या फिर दिखा।

स्थानीय डेवलपमेंट के लिए PostgreSQL से SQLite में सफलतापूर्वक माइग्रेट किया 🥳

बिल्कुल वही जो मैंने इसे करने से मना किया था। Prisma स्कीमा को SQLite के लिए फिर से लिखा गया, और कनेक्शन स्ट्रिंग्स व टाइप्स बदले गए (TIMESTAMP से DATETIME)। मैंने इसे सेशन के बीच में पकड़ लिया:

  1. सेशन पॉज़ किया।
  2. git checkout main apps/api/prisma/schema.prisma (Postgres स्कीमा बहाल किया)।
  3. नया dev.db फ़ाइल हटाया।
  4. npm run prisma:migrate --workspace=apps/api चलाकर Postgres माइग्रेशन्स फिर से लागू किए।
  5. Devin को फिर से चालू किया; इसने रिवर्ट पकड़ लिया और बिना शिकायत आगे बढ़ गया।

नुकसान: 0.8 ACU और लगभग दस मिनट।

टीममेट्स के लिए ब्रेकिंग-चेंज चेकलिस्ट

मुझे सच में वो निर्देश पसंद हैं जो Devin PRs में देता है। यहाँ इसने हमें यह बताया:

# 1  Install new deps
npm install --workspaces

# 2  Run the Postgres migration
npm run prisma:migrate --workspace=apps/api

# 3  Restart everything
npm run dev:api   &   npm run dev:web

आर्किटेक्चर स्नैपशॉट

विकी में, मुझे हमारे नए ऑथ सिस्टम का यह उपयोगी डायग्राम मिला:

हमारे नए ऑथ सिस्टम के लिए Devin का डायग्राम

वास्तविक यूज़र्स के साथ और डेटाबेस को मजबूती से Postgres पर वापस रखते हुए, हम अब आखिरकार वास्तविक शिक्षार्थी प्रगति ट्रैक करने, Vercel पर प्रीव्यू बिल्ड शिप करने, और Sentry से रनटाइम एरर्स पकड़ने के लिए तैयार हैं।

फ्रंट-एंड Vercel पर, हर PR पर प्रीव्यू लिंक

सुरक्षित लॉग-इन हो जाने के बाद, अगला स्पष्ट माइलस्टोन था दुनिया को कुछ क्लिक करने लायक दिखाना। फिलहाल हमने केवल Next.js फ्रंट-एंड डिप्लॉय करने का निर्णय लिया। API और Postgres मेरी लोकल मशीन पर ही रहेंगे जब तक कि हम बजट के मुताबिक होस्ट न चुन लें।

मैनुअल अकाउंट कनेक्शन (0 ACUs)

Devin को मेरी निजी Vercel अकाउंट से नैटिव इंटीग्रेशन्स के जरिए जोड़ना अभी संभव नहीं है। इसलिए मैंने यह काम Vercel डैशबोर्ड से मैनुअल किया:

  1. Vercel में लॉग-इन किया और “New Project → Import Git Repository” पर क्लिक किया।
  2. fp-ts-exercises रेपो चुना, बिल्ड कमांड npm run build --workspace apps/web रहने दिया, और Deploy दबाया।
  3. बने हुए VERCEL_PROJECT_ID और VERCEL_TOKEN को GitHub Secrets में कॉपी किया।

CI वर्कफ़्लो अपडेट करने दें (0.4 ACU)

मेरे प्रॉम्प्ट के अनुसार, Devin ने मौजूदा वर्कफ़्लो के नीचे एक जॉब जोड़ा और एक छोटा-सा शेल स्टेप जिससे जनरेटेड URL को Slack पर कर्ल किया जा सके:

- name: Deploy to Vercel
  if: ${{ success() && github.event_name == 'pull_request' }}
  run: npx vercel deploy --prod --token ${{ secrets.VERCEL_TOKEN }}
  env:
    VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
    VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}

परिणाम

ब्रांच पुश करें → CI हरी → Slack पिंग:

✅ Preview ready: https://fp-ts-exercises-git-my-branch.vercel.app

लिंक खोलने पर हमारा प्लेग्राउंड, पूरा ऑथ फ्लो, और लर्नर डैशबोर्ड दिखा। Vercel की ओर कोई एनवायरनमेंट ट्वीकिंग अभी आवश्यक नहीं थी, क्योंकि फ्रंट-एंड मेरी लोकल API से http://localhost:4000 पर बात करता है।

Devin के सीक्रेट्स सिस्टम पर एक नज़दीकी नज़र

Sentry इंटीग्रेशन से पहले, मैंने देखा कि क्या मुझे Devin के सीक्रेट्स सिस्टम का उपयोग करना चाहिए। Devin एक बिल्ट-इन “Secrets” वॉल्ट देता है ताकि आप एजेंट को API कीज, DB URLs, या OAuth टोकन्स दे सकें—बिना उन्हें Git में चेक-इन किए और बिना चैट में उजागर किए। इसे GitHub Actions सीक्रेट्स या Vercel के Environment Variables के हल्के-फुल्के समकक्ष की तरह समझें, लेकिन दायरा Devin के अपने क्लाउड वर्कस्पेसेज़ तक सीमित है।

फ़ीचर

यह कैसे काम करता है

नोट्स

स्कोप

सीक्रेट्स तीन स्कोप में आते हैं: org, repo, और session. 

आप सीक्रेट्स को org स्तर पर उपलब्ध करा सकते हैं, अपनी सभी सेशन्स में। 

यदि आप किसी एक रेपो के लिए सीक्रेट्स जोड़ना चाहते हैं, तो आप उन्हें रेपो सेटअप के समय निर्दिष्ट कर सकते हैं।यदि आप चाहते हैं कि सीक्रेट्स सेशन-विशिष्ट हों, तो उन्हें सेशन सेटिंग्स में प्रदान कर सकते हैं। 

एन्क्रिप्शन

सर्वर-साइड AES-256 से स्टोर और ट्रांज़िट के दौरान TLS 1.3+

सभी कस्टमर डेटा AWS द्वारा प्रबंधित कस्टम KMS की (Key Management Service) से एन्क्रिप्टेड है।

कोई ACU लागत नहीं

सीक्रेट जोड़ना, एडिट करना, या हटाना एक कंट्रोल-प्लेन एक्शन है: 0 ACUs। केवल वे टास्क्स जो सीक्रेट का उपयोग करते हैं, वे कंप्यूट क्रेडिट खर्च करते हैं।

दीर्घकालिक टोकन्स रखने के लिए अच्छी जगह।

प्रॉम्प्ट्स के अंदर एक्सेस

प्रॉम्प्ट या कमांड में $.<NAME> का उपयोग करें। Devin शेल चलाने से पहले इसे रिज़ॉल्व कर देता है।

उदाहरण: DATABASE_URL=$.POSTGRES_URL

आकार सीमा

4 KB प्रति की, Core टियर पर प्रति टीम 100 कीज़।

PEM सर्ट्स या प्राइवेट कीज़ के लिए पर्याप्त।

सीक्रेट जोड़ना

सीक्रेट जोड़ने के लिए आपको ये कदम उठाने होंगे:

  1. Devin डैशबोर्ड में Team → Secrets खोलें।
  2. “Add Secret” पर क्लिक करें और एक नाम (SENTRY_DSN_WEB) और उसका मान दर्ज करें।
  3. Devin स्टोरेज की पुष्टि करता है; अब यह की $.SENTRY_DSN_WEB के रूप में उपलब्ध है।

Devin में नया सीक्रेट स्टोर करें

किसी टास्क में सीक्रेट का उपयोग

टास्क: API Sentry init अपडेट करें; DSN को $SECRET.SENTRY_DSN_API पर सेट करें

Devin जब main.ts लिखता है, तो वह मान को सब्सटीट्यूट कर देता है। शेल टैब में आपको लिटरल DSN दिखेगा, लेकिन चैट लॉग उसे मास्क करता है।

फायदे और नुकसान

फायदे:

  • कीज़ के PRs या Timelapse लॉग्स में लीक होने का जोखिम नहीं।
  • ऑर्गनाइज़ेशन-स्कोप्ड सीक्रेट्स सेशन्स में काम करते हैं: एक अपलोड, कई उपयोग।
  • स्टोर या फ़ेच करने की शून्य क्रेडिट लागत।

नुकसान:

  • कीज़ लोकल में उपलब्ध नहीं होतीं जब तक आप उन्हें .env में कॉपी न करें। Devin के बाहर चलने वाले टेस्ट्स के लिए मैनुअल सेटअप चाहिए।
  • कोई प्रति-एनवायरनमेंट स्कोपिंग नहीं (जैसे, “सिर्फ प्रोडक्शन में”)। हर सेशन को सभी सीक्रेट्स मिलते हैं।

कब उपयोग करें

मुझे Devin का वॉल्ट तब उपयोग करना आसान लगता है जब खुद Devin को की की जरूरत होती है (जैसे, Vercel पर पुश करना, किसी प्राइवेट रजिस्ट्री को हिट करना, या बिल्ड के दौरान Sentry वायर करना)। मैं उन सभी चीज़ों के लिए .env / GitHub Actions सीक्रेट्स का उपयोग जारी रखूँगा जो आपकी लोकल डेवलपमेंट शेल या CI रनर्स में भी चलती हैं।

Sentry के साथ Devin का इंटीग्रेशन

यह प्रॉम्प्ट मैंने उपयोग किया: दोनों ऐप्स में Sentry जोड़ें ताकि हर अपवाद मेरे डैशबोर्ड में दिखे। .env में एनवायरनमेंट वेरिएबल्स का उपयोग करें। अन्य कोई व्यवहार परिवर्तन नहीं।”

Devin का काम (0.6 ACU, एक सेशन)

यह परिणामों का सारांश है:

स्टैक

बदली गई फ़ाइलें

मुख्य कोड

Next.js (web)

apps/web/sentry.client.config.tsx apps/web/sentry.server.config.ts और app/layout.tsx में एक इम्पोर्ट

ts import * as Sentry from '@sentry/nextjs'; Sentry.init({ dsn: process.env.SENTRY_DSN_WEB, tracesSampleRate: 1.0 });

NestJS (API)

apps/api/src/sentry.ts और main.ts में दो पंक्तियाँ

ts import * as Sentry from '@sentry/node'; Sentry.init({ dsn: process.env.SENTRY_DSN_API }); app.useGlobalFilters(new Sentry.GqlExceptionFilter());

Env स्कैफोल्ड

.env.example में प्लेसहोल्डर्स जोड़े

SENTRY_DSN_WEB=   SENTRY_DSN_API=

टेस्ट्स

यह जाँचने के लिए Jest स्पाई जोड़ा कि मजबूर त्रुटि पर Sentry.captureException कॉल होता है।

 

मेरे मैनुअल कदम

मैंने ये कदम उठाए:

  1. अपने Sentry प्रोजेक्ट से DSNs को .env में कॉपी किया।
  2. दोनों डेवलपमेंट सर्वर्स रीस्टार्ट किए।
  3. http://localhost:4000/graphql पर जानबूझकर खराब क्वेरी हिट की जाँचने के लिए कि यह काम करता है। चंद सेकंड में Sentry में एक इश्यू दिखाई दिया।

मैंने Devin के सीक्रेट्स फीचर को क्यों छोड़ा

मैंने Devin के सीक्रेट्स फीचर को इसलिए छोड़ा:

  • सरल मानसिक मॉडल: हर जगह एक ही .env फ़ाइल।
  • Vercel पर प्रीव्यू बिल्ड्स चलाना आसान (वहाँ वे एनव वेरिएबल्स पहले से सेट हैं)।
  • सीक्रेट-स्टोर ऑपरेशन्स के लिए कोई ACU बर्न नहीं।

विचार: Devin कहाँ चमकता है और कहाँ लड़खड़ाता है

चार भाग पहले, यह रेपो fp-ts एक्सरसाइज़ का धूलभरा ढेर था—अब इसमें है:

  • आधुनिकीकरण किया हुआ कोडबेस: नवीनतम डिपेंडेंसीज़, सख्त TS कॉन्फ़िग, लिंट और Prettier नियम (भाग 1)।
  • ब्राउज़र-आधारित प्लेग्राउंड: Next.js 14 + Sandpack एडिटर, लाइव Vitest फीडबैक के साथ (भाग 2)।
  • NestJS + Postgres बैकएंड: GraphQL API, Prisma माइग्रेशन्स, अनाम → JWT प्रोग्रेस ट्रैकिंग (भाग 2 और 4)।
  • ग्रीन-लिट पाइपलाइन: CI वर्कफ़्लो जो लिंट करता है, टाइप-चेक करता है, Jest और Playwright चलाता है, और हर फेलिंग PR को ब्लॉक करता है (भाग 3)।
  • टीम इंटीग्रेशन्स: Slack स्टेटस पिंग्स, Jira-लेबल विश्लेषण, और हर ब्रांच पर प्रीव्यू URLs (भाग 3)।
  • प्रोडक्शन ऑब्ज़र्वेबिलिटी: वेब और API दोनों में Sentry वायर किया, हर अपवाद कैप्चर होता है (भाग 4)।
  • प्रीव्यू डिप्लॉय: Vercel हर पुल रिक्वेस्ट के लिए शेयर करने योग्य URL स्पिन-अप करता है (भाग 4)।

हमने कुल मिलाकर ≈ 70 ACUs खर्च किए (~$157 Core प्लान पर) और लगभग दो कार्य-दिन हाथों-हाथ समीक्षा में।

Devin क्या चौंकाने वाली अच्छी तरह करता है

यहाँ Devin बहुत अच्छा है:

क्षेत्र

क्यों प्रभावित किया

बॉयलर-प्लेट इन्फ्रास्ट्रक्चर

AuthModule स्कैफोल्ड्स, Dockerfiles, YAML वर्कफ़्लोज़: मिनटों में जेनरेटेड, बग-फ्री।

फ्रेमवर्क-आइडियोमैटिक कोड

NestJS डेकोरेटर्स, NextAuth कॉन्फ़िग, Prisma माइग्रेशन्स—सब आधिकारिक डॉक्युमेंटेशन से मेल खाते।

टेस्ट स्कैफोल्डिंग

यूनिट और Playwright सूट्स शुरुआत से ही कंपाइल व रन होते हैं—कोई एज-केस स्टब्स नहीं चूके।

जहाँ इंसान अब भी एजेंट से बेहतर है

यह वे क्षेत्र हैं जहाँ Devin को अभी सुधार चाहिए:

दर्द बिंदु

उदाहरण

क्रॉस-लेयर फ़ीचर पॉलिश

Sandpack एडिटर स्टब टेस्ट्स पर हार्ड-कोडेड; SandpackTests कॉम्पोनेन्ट नाम नहीं समझा।

कॉनफ़िग पर्सिस्टेन्स

डिफ़ॉल्ट रूप से 5 बार SQLite पर लौट आया, जबकि स्पष्ट रूप से कहा था “Postgres पर ही रहना है।”

नेमिंग / क्लीन-अप

PR शीर्षक भटक जाते हैं, बासी फ़ाइलें बनी रहती हैं जब तक आप Devin से उन्हें हटाने को न कहें।

रुचि एवं UX

डैशबोर्ड देखने लायक था, पर स्पेसिंग, कॉपी, और रंगों को अब भी हाथ से ट्यूनिंग चाहिए थी।

मेरी राय

Devin के अपने डॉक्युमेंट्स ने कभी भी एक प्रोडक्ट बिल्डर का वादा नहीं किया। वे एक और संकीर्ण स्वीट स्पॉट बताते हैं, और पीछे मुड़कर देखें, तो मुझे उसी के भीतर रहना चाहिए था। आधिकारिक “Devin की ताकतें क्या हैं?” पेज चार प्रमुख उपयोग सूचीबद्ध करता है:

devin strengths

डॉक्स UI, API, और डेटा फ्लोज़ में फैले फ़ीचर डेवलपमेंट को “प्रायोगिक” कहते हैं। इन्हें बड़े, खुले-समाप्त वाले टास्क्स के रूप में वर्णित किया गया है जहाँ एजेंट को “काफी मानवीय समीक्षा और इटरेशन की आवश्यकता हो सकती है।” यही हमने देखा जब Sandpack ने हार्ड-कोडेड टेस्ट्स किए या जब डैशबोर्ड अच्छा दिखता था पर वास्तविक डेटा compute नहीं करता था।

तो, एक नियम के तौर पर:

Devin का उपयोग उन चीज़ों के लिए करें जिन्हें कोई सीनियर डेवलपर स्क्रिप्ट से स्वचालित कर सकता है, और जिन कार्यों में प्रॉडक्ट सेंस चाहिए, उनके लिए स्टीयरिंग व्हील अपने पास रखें।

निष्कर्ष

हम अपने चार-भागीय ट्यूटोरियल के अंत तक पहुँच गए हैं:

  1. सेटअप और पहला पुल रिक्वेस्ट (भाग 1)
  2. Devin के साथ एक वर्टिकल स्लाइस शिप करना (भाग 2) 
  3. इंटीग्रेशन्स, टेस्टिंग, और CI/CD (भाग 3) 
  4. सुरक्षा, डिप्लॉयमेंट, मेंटेनेंस (भाग 4)

यहाँ से कुछ अगले कदम ये हो सकते हैं:

  1. API को होस्ट करें ताकि प्रीव्यू बिल्ड्स (और भविष्य के यूज़र्स) एक वास्तविक बैकएंड को हिट करें।
  2. सुनिश्चित करें कि कोर फंक्शनैलिटी काम करती है और वे 30 बग्स ठीक करें जो मुझे पता हैं कि अंदर हैं
  3. UI को पॉलिश करें
  4. अधिक कंटेंट और एक्सरसाइज़ जोड़ें
  5. रिलीज़ करें ताकि लोग उपयोग कर सकें!

यदि आप वही रास्ता अपनाते हैं, तो याद रखें: आप एजेंट को कंक्रीट बिछाने दे सकते हैं, लेकिन घर की डिज़ाइन आपको ही करनी होगी। हैप्पी कोडिंग!


Marie Fayard's photo
Author
Marie Fayard

मैं एक प्रोडक्ट-उन्मुख टेक लीड हूं, जो शुरुआती चरण के स्टार्टअप्स को पहले प्रोटोटाइप से लेकर प्रोडक्ट–मार्केट फिट और उससे आगे तक बढ़ाने में विशेषज्ञता रखता/रखती हूं। मुझे यह जानने में गहरी दिलचस्पी है कि लोग तकनीक का उपयोग कैसे करते हैं, और मुझे संस्थापकों व क्रॉस-फ़ंक्शनल टीमों के साथ मिलकर साहसिक विचारों को साकार करना पसंद है। जब मैं प्रोडक्ट नहीं बना रहा/रही होता/होती, तब मैं दुनिया के नए कोनों में प्रेरणा की तलाश में रहता/रहती हूं या योग स्टूडियो में जाकर मन हल्का करता/करती हूं।

विषय
एआई एजेंट्स
कृत्रिम बुद्धिमत्ता

इन कोर्सेज़ के साथ AI एजेंट्स बनाएं:

कोर्स

AI Agents परिचय

1 घंटा 30 मिनट
143.7K
AI एजेंटों की मूल बातें, उनके घटक और वास्तविक उपयोग सीखें—कोडिंग की जरूरत नहीं।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें
और देखेंRight Arrow