Dark Souls Crud Arena – رویکرد زندانی

بعد از سه هفته تلاش با جاوا اسکریپت خام ، رویکرد زندانی را ارسال کردم. این نخستین چهار تکرار در Dark Souls Crud Arena است. زمینه برای آنچه انگیزه این پروژه در اینجا موجود است.
در اینجا پیوند Repo: Dark-Souls-Crud-Arena-Prisoner است
جزئیات پشته فنی:
- Frontend: Vanilla JavaScript ، HTML ، CSS
- Backend: node.js ، sql ، postgres
- استقرار: AWS با استفاده از EC2 + RDS
این پشته پیش از موعد تصمیم گرفته شد ، با این انتظار که من در طول راه برآمدگی و کبودی داشته باشم.
یکی از اهداف من در ساخت همان برنامه چهار روش مختلف ، به دست آوردن درک عمیق تر از چرا چارچوب هایی مانند vue.js ، React ، Express.js و Next.js وجود دارند. آنها برای ما چه مشکلی را حل می کنند؟ من فهمیدم که بهترین راه برای شروع ساختن جبهه من است که گویی اوایل دهه 2000-پیش از ژرفری-فقط با استفاده از JS/HTML/CSS بود. در مورد پس زمینه ، استفاده از فقط Node.js به من کمک می کند تا از ارزشی که چارچوب هایی مانند Express.js ارائه می دهند ، بهتر قدردانی کنم.
ستایش برای KISS (آن را احمق ساده نگه دارید)
بوسه معمولاً هنگام صحبت در مورد طراحی نرم افزار به آن اشاره می شود ، اما فکر می کنم به همان اندازه در مورد دامنه کلی پروژه صدق می کند. اغلب اوقات یک توسعه دهنده بیش از آنچه که می تواند به طور منطقی جوید ، نیش می زند و منجر به یک حلقه بازخورد منفی از بد اخلاق می شود. یک مزیت مهم در داشتن تجربه صنعت و حمل و نقل یک بازی ویدیویی کوچک ، در حال توسعه شهود آزمایش شده برای حداقل دامنه مورد نیاز برای دستیابی به اهداف پروژه است. در این حالت اهداف من مربوط به IP نیست ، بلکه کاملاً یادگیری است. من عمداً می خواستم دامنه Dark Souls Crud Arena را فقط با دو منبع – قهرمانان و تجهیزات – نگه دارم.
ملاحظات پروژه
بلافاصله چیزی برای تولید آن دریافت کنید؟
- من می دانستم که وارد این پروژه می شوم ، یادگیری اجرای ویژگی های زیادی با استفاده از فقط JS RAW در مشتری وجود خواهد داشت. بعد از وزن دادن به گزینه استقرار برنامه خود ، لحظه ای که من کار کردم ، تصمیم گرفتم که خودم را با مشکلات استقرار از RIP کم کنم. با تشکر از Claude Sonnet 3.7 ، اعزام به AWS بیشتر بدون درد بود. AWS همیشه این حباب پشت شیشه یخ زده برای من بوده است و رویکرد زندانی به من آموخت که استفاده از EC2 با RDS در واقع قابل دسترسی است. شرکت های PAAS وجود دارند که به طور انتزاعی نیاز به لمس مستقیم AWS دارند ، اما برای اهداف یادگیری ، من می خواستم به آزار دهنده ترین روش ممکن مستقر شوم. من استفاده از DigitalOcean را در نظر گرفتم ، اما عدم وجود یک ردیف رایگان آنها باعث شد که به جای آن AWS را انتخاب کنم. در مورد اینکه در واقع همه چیز را به کار گرفته و اجرا می شود ، من به عنوان بخش پایانی این گذشته نگر توضیح می دهم.
آیا از docker برای dev محلی استفاده کنید
- در پروژه های شخصی گذشته و در جدیدترین نقش من ، من از Docker برای مدیریت وابستگی برای جلوگیری از سناریوی “کار در دستگاه من” استفاده کردم. من همچنین دقیقاً دوست دارم وابستگی ها را از دستگاه خود دور نگه دارم ، اما برای این پروژه تصمیم گرفتم با توجه به عدم وابستگی خود از ظروف استفاده نکنم. من برای تمام نیازهایم از Homebrew استفاده کردم :).
آجیل و پیچ
برای هر بخش ، من یک مرور کلی از آنچه انجام دادم و یادگیری های کلیدی که به دست آوردم ارائه می دهم. من آنها را به ترتیب با هر مفهوم که با آنها روبرو شدم شماره می گیرم. من نمی خواهم بیش از حد ناخوشایند باشم که اطمینان حاصل کنم که یادگیری ها کاملاً با بخشی که من پوشش می دهم مطابقت دارد ، زیرا می خواهم شما را به روند ارگانیک چگونگی آشکار شدن اوضاع برای من دعوت کند.
متوجه خواهید شد که من همیشه به بخش های کلیدی یادگیری احترام نمی گذارم. با آن برخورد کنید
لایه داده ها
اولین مرتبه تجارت تنظیم یک لایه داده بود که شامل طرحواره و نمونه بانک اطلاعاتی محلی برای ایجاد مستقیم به روزرسانی از طریق سؤالات SQL بود. من Postgres را انتخاب کردم زیرا این همان چیزی است که من در گذشته در پروژه های مدرسه استفاده کرده ام ، اما مدت زمان طولانی آن را لمس نکرده ام. این همچنین منبع باز است ، که من سعی می کنم هر زمان ممکن از آن سوگیری کنم. من Postgres را از طریق Homebrew نصب کردم. من همچنین Pgadmin را نصب کردم ، اما در نهایت استفاده از آن را انجام ندادم. من تعامل با پایگاه داده را از طریق CLI ترجیح دادم. همین مورد برای نمونه RDS Prod من اعمال شد.
یادگیری کلیدی:
- PostgreSQL را از طریق Homebrew به همراه Pgadmin نصب کرد
- مورد استفاده
psql
به CLI دستور دهید تا به صورت محلی به پایگاه داده من دسترسی پیدا کند - مورد استفاده
brew services start/stop postgresql
برای خواندن/نوشتن از دیسک روی دستگاه من. این در واقع صرفه جویی در داده ها در M1 Macbook من بود و از من برای سرورهای ابری قدردانی کرد. - فهمیدید که برای به روزرسانی طرحواره خود “نیازی به” مهاجرت ندارید ، این فقط یک ایده خوب است و با چارچوب هایی مانند Ruby on Rail (آنچه به من آموخته شد سالها پیش در تورینگ استفاده کنم) پخته می شود. در عوض ، شما فقط می توانید در یک پرونده RAW .SQL در لایه API خود بنویسید و آن را به صورت محلی اجرا کنید
psql -U username -d database_name -f file.sql
بشر - هنگام کار با SQL ، شما از یک رشته رشته برای ساختن یک قسمت پیروی از پوشش مانند استفاده می کنید:
"minLevel" INTEGER NOT NULL,
بشر اگر مقدار رشته ای را اعمال نکنید ، SQL خواهد دیدminLevel
به عنوانminlevel
بشر - ایجاد a
new Pool
نمونه استفاده ازpkg
از Postgres راهی برای برقراری ارتباط بین پایگاه داده ما و سرور Node.js ارائه می دهد. ما یک شی را به سازنده نمونه استخر منتقل می کنیم و می گوید مواردی مانند چه چیزیhost
وتport
ما می خواهیم برای سرور وب خود استفاده کنیم. -
خلاصه ای از جانب درگاه ها: من هرگز وقت نگذاشته ام تا بفهمم بندر چیست و فهمیدم که این به همان اندازه خوب است. میزبان آدرس IP یا دامنه است ، اما من مطمئن نبودم که در واقع یک پورت چیست. این اساساً مانند درب یک اتاق در یک خانه است. اگر اتاق اشغال شده باشد ، نمی توانید به آن دسترسی پیدا کنید. خانه در این حالت یک کامپیوتر است. به عنوان مثال ، ما می توانیم از پورت استفاده کنیم
5432
برای اشاره به پایگاه داده ما همانطور که معمول برای پایگاه داده های Postgres است. HTTP به طور معمول از پورت 80 استفاده می کند ، در حالی که HTTPS از 443 و غیره استفاده می کند. با این حال ، ما می توانیم همان شماره پورت را در هر دو سرور EC2 و دستگاه خودمان ارجاع دهیم زیرا آنها دارای آدرس IP جداگانه هستند. سرانجام ، من یاد گرفتم که شما می توانید چندین درگاه داشته باشید با استفاده از همان آدرس IP. اینگونه است که شما می توانید Postgre را در دستگاه محلی خود اجرا کنید ، به همراه Docker ، یک سرور وب مانند گره و هر تعداد سرویس دیگر. این باعث شد که فکر کنم یک آدرس IP به طور مؤثر به عنوان یک فضای نام خدمت می کند ، اگرچه من مطمئن هستم که این فاقد ظرافت است.
node.js
من از node.js با Express at Work استفاده کرده ام ، و در هنگام استفاده از JavaScript در پس زمینه ، بدون توابع بدون سرور ، جفت آزمایش شده و واقعی است ، اما برای این پروژه می خواستم فقط از node.js استفاده کنم تا ببینم همه هیاهو در استفاده از آن انتزاع های اضافی چیست. من آن انتزاع ها را از دست دادم همانطور که معلوم شد.
با استفاده از نحو ESM
- در کار قبلی من ، هنگام ساخت با node.js/express ، من این حق را گرفتم که توانستم از آن استفاده کنم
import/export
نحو بیش از حدrequire
– یعنی مشترک ، که در مقایسه به نظر می رسد زشت است. من اساساً همه را داشتم اما پیر عزیز را فراموش کردمrequire
بشر خوب ، حتی در Node.js v22.14.0 ، شما نحو ESM را از جعبه خارج نمی کنید. چند روش برای رسیدگی به این کار وجود دارد ، اما ساده ترین روشی که من پیدا کردم فقط استفاده از آن بود"type": "module"
در پرونده Package.json من. این به Node.js می گوید که به طور پیش فرض با تمام پرونده های JavaScript در پروژه ما به عنوان ماژول های ES6 رفتار کند.
پرونده Server.js من
- اینجاست که درد استفاده از Node.js سر خود را پرورش داده است. Express Parses Json را برای ما ببینید. این کار با دانستن اینکه آیا یک پرونده را سرو می کند یا یک نقطه پایانی برای درخواست وارد می شود. همانطور که توسط این تعهد نشان داده شده است ، می بینید که برای به دست آوردن رفتارهای اساسی که در غیر این صورت با API مانند اکسپرس پخته می شود ، چقدر کد لازم را برای نوشتن نیاز داریم. متوجه خواهید شد که من به طور مستقیم به نقاط پایانی اضافه می کردم
server.js
بشر نترسید این برای من نیز ناخوشایند بود و من سریعاً هر مجموعه از درخواست ها را بر اساس نوع منابع شکستم. من همچنین به پایان رسیدم که توابع یاور را در یکutils.js
پرونده در پایان پروژه ، Server.js مسئول اجرای سرور وب و بررسی در صورت نیاز به ارائه پرونده یا رسیدگی به درخواست همانطور که در اینجا نشان داده شده بود.
یادگیری کلیدی:
-
__
در شروع یک نام متغیر در JavaScript ارتباط برقرار می کند که این یک متغیر شبه خصوصی است که نباید در خارج از پرونده به آن دسترسی پیدا کرد. در این حالت__filename
وت__dirname
بشر -
createServer
API ازnode
همان چیزی است که در واقع سرور وب ما را اجرا می کند و درخواست ها را می گیرد و پاسخ هایی را ارسال می کند. همه چیز دیگر فقط انتزاعی از انتخاب ما با این عملکرد به عنوان دروازه بان API ما است. - در ماژول HTTP Node.js ، شما باید صریحاً تماس بگیرید
res.end()
برای اینکه به سرور سیگنال دهید که همه هدر و بدنه پاسخ ارسال شده است و سرور باید پیام را کامل در نظر بگیرد. اگر با res.end () تماس نگیرید ، درخواست آویزان خواهد شد و در نهایت وقت خود را تمام می کند. من هنگام برقراری تماس از Postman به اولین نقطه پایانی که من کردم ، راه سختی را فهمیدم ، و نمی دانم که چرا این درخواست فقط آویزان است. این منبع مشکل بود. - همین مورد برای
res.setHeader
بشر اگر این کار را از طریق صریح ارسال نکنیم ، مرورگر باید نوع محتوایی را که ارسال می کنیم حدس بزند. چرخه درخواست/پاسخ هنوز هم کار خواهد کرد. - از آنجا که یک قهرمان یک تجهیزات تجهیزات را می پوشاند ، من تصمیم گرفتم که آیا می خواهم ساختار پوشه پرونده را قهرمان/تجهیزات/مسیرها تقسیم کنم. من تصمیم گرفتم که آنها را جدا ، سطح بالا ، فایلهای مسیر با نقاط پایانی منابع تو در تو را در داخل قهرمان نگه دارم/ برای ساده نگه داشتن چیزها. اگر برنامه ما در دامنه گسترش یابد ، این رویکرد داشتن مسیرهای سطح بالا جداگانه با رشد API انعطاف پذیری بیشتری را فراهم می کند.
-
DELETE FROM
تمام ردیف ها را از جدول حذف می کند ، اما شناسه را برای ردیف های جدید که به پایگاه داده نوشته شده است ، تنظیم نمی کند. در هر صورت; TRUNCATE
جدول را در نمونه پایگاه داده ما دور می کند و شناسه را برای هر سطر که اضافه می کنیم شروع می کنیمRESTART IDENTITIES 1
بشر - برای ارائه پرونده به مشتری ، تجزیه URL مورد نیاز بود! Regex اینجا دوست من بود.
- با ارسال کدهای وضعیت prop تمرین زیادی کردم. من نمی دانستم
201
برای درخواست های ایجاد منابع استفاده شد. - با اعتبارسنجی درخواست نوشتن در بسیاری از تمرین ها انجام شد. من یک فایل یاور را برای رسیدگی به اعتبار سنجی برای هر نوع منبع ایجاد کردم. این ساده است ، اما کار می کند.
- خوب است و در واقع خوب است که از محیط زیست محلی خود استفاده کنید
.env
و تمام منابع را به متغیرهای محیط تولید کاملاً از هم جدا و ذخیره کنید در هر کجا که استفاده می کنید. منطقی است ، اما من قبل از این پروژه مجبور نبودم با متغیرهای محیط زیست Prod در نمونه DB جداگانه کار کنم.
مشتری
من هرگز DOM (مدل شیء اسناد) را قبل از دست دستکاری نکرده ام و پسر اوه پسر این روند را مکش می کند! ما وارد آن خواهیم شد این باعث شد من به سال ارشد دانشکده برگردم ، هنگامی که من برای اولین بار به عنوان یک تجارت اصلی به دوره HTML/CSS رسیدم. این صادقانه بسیار رضایت بخش بازگشت به چنین ریشه های خانگی نوشتن HTML اساسی در یک .html
بشر صحبت از آن ، همه اینها با index.html شروع می شود. نه واقعاً
خدمت به یک پرونده
- index.html نقطه ورود به برنامه سمت مشتری ما است. این که آیا شما در JS خام کار می کنید ، مانند من اینجا هستم ، یا یک چارچوب ، index.html به عنوان نقطه شروع عمل می کند. دلیل این امر این است که سرورهای وب به طور پیش فرض برای ارائه پرونده ای به نام پیکربندی شده اند
index.html
هنگامی که دایرکتوری بدون مشخص کردن نام پرونده درخواست می شود. از آنجا که من به خودی خود از node.js استفاده می کردم ، با استفاده از یک پرونده index.html ، به طور موثری کنوانسیون را دنبال می کردم. من آن پرونده را در این قطعه بررسی می کنم:
let filePath;
if (req.url.match(/^\/heroes\/\d+$/)) {
filePath = path.join(webDirectory, 'hero/views/show.html');
} else if (req.url === "https://dev.to/") {
filePath = path.join(webDirectory, 'index.html');
} else {
filePath = path.join(webDirectory, req.url);
}
سپس به مرورگر خدمت کنید. اگر من از چیزی مانند Vite یا Webpack استفاده می کردم ، این کار را به صورت رایگان دریافت می کردم.
چارچوب ها به طور پیش فرض پیکربندی می شوند تا در index.html
، اما این فقط کنوانسیون است. می توانید برنامه خود را پیکربندی کنید تا از هر پرونده ای که می خواهید به عنوان نقطه ورود به برنامه مشتری خود استفاده کنید. برای من ، فهمیدم که فراموش کردن این نوع جزئیات بسیار آسان است وقتی که وقت زیادی را در زمینه چارچوبی مانند vue.js یا واکنش نشان می دهید.
چگونه می توانم JavaScript را دوباره در یک پرونده HTML بارگذاری کنم؟
- هنگامی که من یک پوسته اساسی در پرونده index.html خود داشتم ، با HTML استاتیک خود ، زمان آن رسیده بود که نحوه وارد کردن پرونده های JS را به آنجا بازگردانید. مشابه ما
index.html
کنوانسیون برای استفاده از a وجود داردindex.js
پرونده برای بارگیری در همه JS پروژه. با چارچوب ها ، شما آن را حدس زده اید ، این رفتار را به صورت رایگان دریافت می کنید! درhead
برچسب جایی است که ما تمام ابرداده های خود را برای بارگیری در صفحه قرار می دهیم. این شامل ما استlink
باtitle
وتscript
برچسب ها من به جزئیات جامع نخواهم رسید ، اما برچسب اسکریپت این است که چگونه پرونده های JS خود را به HTML خود پیوند می دهیم. اولین باری که سالها پیش این الگوی را دیدم ، خیلی به آن فکر نمی کردم. این دقیقاً چگونه است. این بار ، من تحت تأثیر قرار گرفتم خدایا ، این مقیاس خوبی نخواهد داشت مگر اینکه من خیلی عمدی باشمبشر خوشبختانه ، غرایز من برای نحوه سازماندهی کد شروع شده و من بلافاصله index.js را به عنوان پرونده pseudo app.js من دیدم. با استفاده از index.js به index.html ، من تشخیص دادم که تمام اسکریپت های خاص منابع خود را در فرزند خود سازماندهی می کنمindex.js
پرونده و واردات هر یک از آنهاindex.js
پرونده ها به والدین ماweb-svc/index.js
مانند بنابراین:
web-svc/hero/main.js
import { handleCreateHeroButton } from './scripts/create.js';
import { handleUpdateHeroDetailsButton, handleCancelUpdateHeroDetailsButton, handleBrowseEquipmentButton, handleEquipmentSelectionCancelButton } from './scripts/show.js';
import { handleEquipmentSelectionSubmitButton } from './equipment/scripts/submit.js';
import { handleDeleteHeroButton } from './scripts/delete.js';
import { getHeroes } from './scripts/index.js';
import { showHero } from './scripts/show.js';
const initHero = () => {
handleCreateHeroButton();
handleUpdateHeroDetailsButton();
handleCancelUpdateHeroDetailsButton();
handleBrowseEquipmentButton();
handleEquipmentSelectionCancelButton();
handleEquipmentSelectionSubmitButton();
getHeroes();
showHero();
handleDeleteHeroButton();
}
export { initHero };
...
web-svc/index.js
import { initHero } from './hero/main.js';
import { initEquipment } from './equipment/main.js';
initHero();
initEquipment();
همانطور که مشاهده می کنید ، من در استفاده از آن مستقر شدم main.js
بیش از index.js
بشر در ابتدا من استفاده می کردم index.js
برای heroes
وت equipment
، با یک show-all.js
برای نمای لیست من در مورد هر یک. این احساس بد بود زیرا من می دانم index
به طور معمول یک کلمه رزرو شده برای نمایش لیست است ، بنابراین من در نهایت استفاده مجدد از آن را کردم main.js
برای تجهیزات و منابع قهرمان من و به من تغییر نام داد show-all.js
به index.js
بشر
چند گلوله در مورد ارزش سازمان کد
-
فکر کردن در مورد نحوه سازماندهی کد چیز مورد علاقه من در مورد برنامه نویسی است. شما برای نوشتن برنامه ها به نحو نیاز دارید ، بله ، اما ارزش واقعی در یک توسعه دهنده ماهر از دیدن نحوه استفاده از نرم افزار معماری ناشی می شود ، بنابراین کار کردن در آن بدبخت نمی شود. همانطور که من بیشتر به حرفه خود می روم این مهارتی است که من بیشتر می خواهم تقویت کنم. با توجه به اینکه هوش مصنوعی در حال حاضر در صحنه است ، همچنان که در ملاحظات معماری مهارت بیشتری پیدا می کند ، از اهمیت بیشتری برخوردار خواهد بود زیرا مانع نوشتن شیب همچنان در حال سقوط است.
-
برای این پروژه ، با توجه به اینکه من مؤلفه ای ندارم ، تصمیم گرفتم پرونده های JS خود را با عملیات CRUD جدا کنم. ما قبلاً دوز درد در سرور دریافت کردیم ، اکنون من یک دوز برای مشتری دریافت می کردم. بدون پارادایم های ساختار یافته برای سازمان کد که شامل مدیریت داخلی ، مدولار بودن و قابلیت استفاده مجدد مؤلفه است-یعنی همه چیزهایی که یک چارچوب جلوی شما به شما می دهد ، می توانم احساس کنم که کد من چقدر شکننده است. این باعث شد من فکر کنم ، هنگامی که API های انتزاعی یا نظر را حذف می کنید ، آنقدر طناب بیشتری دارید که بتوانید خود را با آن آویزان کنید و این اسب بخار بسیار کمتری برای ساختن چیزها با آنهابشر کار در JS RAW آن را ایجاد می کند ، بنابراین شما باید کد بسیار بیشتری بنویسید تا در مقایسه با استفاده از یک چارچوب به سختی به هر جایی بروید و باید با نحوه سازماندهی چیزهایی که به طور کامل در شبکه تعامل با DOM گم نشوند ، بسیار نظم و انضباط بیشتری داشته باشید. من از طریق تجربه عدم داشتن آن ، راه خود را برای درک اهمیت مدیریت دولت پشت سر گذاشتم ، که وقتی چندین کاربر به طور همزمان از برنامه در تولید استفاده می کردند ، آشکار شد.
عدم در نظر گرفتن کاربران همزمان
- فقط با آزمایش محلی ، من این تصور نادرست را دریافت کردم که آنچه که من در حال ساخت هستم ، حداقل برای تعداد انگشت شماری از کاربران در تولید کار می کند. با این حال ، هنگامی که من به Discord رسیدم و به دوستانم گفتم که با آنچه ساخته ام بازی کنند ، متوجه شدم که UI تقریباً بلافاصله از همگام سازی خارج می شود. یکی از کاربران در حالی که من هیچ تجهیزات مرتبط با آن قهرمان را در پایان خود نمی دید ، تجهیزات متصل به قهرمان خود را می دید. وقتی به نمونه EC2 خود از CLI نگاه کردم تا ببینم بانک اطلاعاتی چه چیزی را نشان می دهد و همه چیز درست به نظر می رسد. اگر مسئله مربوط به پایگاه داده نیست ، باید با مشتری باشد؟ اما من عملکرد را به طور کامل روی دستگاه خود آزمایش کردم. چه چیزی می دهد؟ سپس به من ضربه زد ، من در حال اضافه کردن و حذف HTML از DOM به طور مستقیم به عنوان کاربران درخواست های پس زمینه می شوند. هیچ منبع حقیقت در لایه مشتری برنامه من برای ردیابی حالت وجود ندارد زیرا تغییرات ایجاد می شودبشر این واقعاً باحال بود من دست اول را تجربه کردم که چرا مدیریت دولت از طریق کشف آنچه اتفاق می افتد وقتی که آن را ندارید ، وجود دارد.
یادگیری کلیدی:
- همانطور که انتزاع را از بین می برید ، نقاط ضعف رویکرد شما لخت است.
- تعامل با DOM به طور مستقیم بسیار خسته کننده است ، توصیه نمی کنید.
- اگر این پروژه بزرگتر شود ، باید با دست ایجاد کنترل کننده ها را شروع کنم.
استقرار به تولید
استقرار به تولید نسبتاً ساده بود. من قبلاً AWS CLI را پیکربندی کرده بودم و قبلاً یک کاربر کنسول با مجوزهای کامل درست کرده بودم. تمام آنچه که من باید بفهمم 1 بود. در یک نمونه EC2 ایستاده و 2. تنظیم RDS برای خدمت به عنوان پایگاه داده من.
من با راه اندازی یک نمونه EC2 شروع کردم – اساساً سرور مجازی لینوکس خود در ابر. ما یک جفت کلید ایمن ایجاد کردیم تا با خیال راحت به آن دسترسی پیدا کنیم و فایروال (گروه های امنیتی) را تنظیم کنیم تا برنامه بتواند با جهان ارتباط برقرار کند.
پس از دسترسی به سرور ، Node.js را نصب کردیم ، کد خود را از GitHub کشیدیم و PM2 را تنظیم کردیم – یک مدیر فرآیند که برنامه شما را هموار نگه می دارد و در صورت خراب شدن آن را مجدداً راه اندازی می کند. ما یک فایل محیط تولید با تمام تنظیمات مناسب برای محیط ابر ایجاد کردیم و یک ترفند کوچک اما مهم برای اتصال پایگاه داده شما برای کار با AWS RDS ایجاد کردیم.
برای بانک اطلاعاتی ، من یک نمونه PostgreSQL را در سرویس RDS آمازون تنظیم کردم. این اساساً یک سرور پایگاه داده مدیریت شده و بدون تمام سردردهای نگهداری است. ما آن را به نمونه EC2 شما وصل کردیم ، پرونده SQL Schema خود را برای ایجاد جداول اجرا کردیم و پیکربندی SSL را اضافه کردیم تا اتصال پایگاه داده ایمن شود.
ما همچنین اطمینان حاصل کردیم که برنامه با تنظیم PM2 برای راه اندازی خودکار ، از راه اندازی مجدد سرور زنده می ماند ، و ما ورود به سیستم دقیق را برای عیب یابی هر مشکلی که ممکن است ایجاد کند ، پیکربندی کردیم.
آخرین مرحله اطمینان از صحت همه تنظیمات شبکه بود تا سرور EC2 بتواند با پایگاه داده RDS صحبت کند و کاربران می توانند از طریق مرورگرهای خود به برنامه دسترسی پیدا کنند.
و همین بود! برنامه کامل ما Dark Souls Crud Arena اکنون در این آدرس IP با یک سرور و تنظیم پایگاه داده مناسب در ابر در حال اجرا است.