از ماشین من تا جایی که همیشه روشن است
deploy — «دیپلوی» — یعنی بردنِ چیزی که ساختهای به جایی که واقعاً کار کند و بماند. با واژههای فصل ۷.۱.۴ دقیقتر میشود گفت: deploy یعنی تبدیلِ یک فرآیند به یک سرویس، روی ماشینی که خاموش نمیشود.
و سؤال درست این است: چرا این یک مرحلهی جداست؟ چرا نمیشود فقط فایلها را کپی کرد؟ چون چهار چیز باید تأمین شود که روی لپتاپ تو خودبهخود بودند:
- محیط. همان نسخهها و کتابخانهها — که فصل ۷.۳ گفت چطور حل میشود.
- پیوستگی. اگر برنامه مرد، باید خودش برگردد. یعنی باید سرویس باشد، نه فرآیند.
- دسترسی. اگر قرار است کسی از بیرون استفاده کند، باید آدرسی داشته باشد که به آن برسد.
- رمزها. کلیدهایی که روی دستگاه تو بودند، الان باید جای دیگری باشند — و این خودش یک فصل کامل است (۷.۵).
بهخاطر بسپار «روی لپتاپم کار میکند» تقریباً هیچچیز دربارهی deploy نمیگوید. فاصلهی بین «یک بار کار کرد» و «هر روز بدون من کار میکند» همانجایی است که کلِ این مرحله در آن مینشیند — و کسی که این فاصله را دستکم بگیرد، همیشه دیر تحویل میدهد.
دامنه و آدرس در یک نگاه
هر ماشین روی اینترنت یک آدرس عددی دارد (IP) — چیزی مثل
203.0.113.42. کار میکند، ولی کسی حفظش نمیکند.
دامنه یک نام خواندنی است که به آن عدد اشاره میکند. و DNS همان دفترچهی تلفنی است که نام را به عدد ترجمه میکند. همین. سه چیز که در عمل به کارت میآید:
- دامنه را اجاره میکنی، نمیخری — سالانه، و اگر تمدید نکنی از دستش میدهی.
- زیردامنه آزاد است. اگر یک دامنه داری، میتوانی بینهایت
bot.example.comوapi.example.comبسازی، بدون هزینهی اضافه. - تغییرات DNS فوری نیستند. ممکن است تا چند ساعت طول بکشد که همهجا پخش شود. این علتِ رایجِ «عوضش کردم ولی هنوز آدرس قبلی را نشان میدهد» است — و راهش صبر است، نه عوضکردنِ دوباره.
و یک کلمهی چهارم که همیشه با اینها میآید: HTTPS. آن قفلِ کنار آدرس، یعنی ارتباط رمزنگاریشده است. برای هر چیزی که به بیرون باز میشود لازم است، و امروز گرفتنش رایگان و خودکار است — پس دلیلی برای نداشتنش نیست.
چه چیزی میتواند خراب شود
این بخش برای این است که وقتی خراب شد، بدانی از کجا شروع کنی — نه اینکه خودت درستش کنی. پنج خرابیِ رایج، به ترتیبِ فراوانی:
- روی سرور محیط فرق دارد. نسخهای که آنجاست با اینجا یکی نیست. علامتش: خطایی که local هیچوقت ندیده بودی.
- رمزها منتقل نشدهاند. علامتش روشن است: خطاهای «اجازه ندارید» یا «کلید نامعتبر». تقریباً همیشه اولین خرابیِ اولین deploy است.
- مسیرها عوض شدهاند. مسیر نسبیای که روی لپتاپ تو درست بود، آنجا به جای دیگری اشاره میکند (فصل ۷.۱.۳).
- خاموش شد و برنگشت. یعنی بهعنوان سرویس تنظیم نشده بوده، فقط اجرا شده بوده.
- پر شد. دیسک یا حافظه تمام شد — معمولاً چون چیزی (فایل ثبتِ رخدادها) بیسقف بزرگ شده است. این خرابیِ هفتهی سوم است، نه روز اول، و به همین دلیل غافلگیرکننده است.
و یک چیزِ مشترک در هر پنج مورد: هیچکدام «کد اشتباه است» نیستند. همهشان تفاوتِ محیطاند. به همین دلیل است که deploy مهارتِ جدایی از ساختن است — و به همین دلیل هم اولین deploy همیشه بیشتر از انتظار طول میکشد.
تمرین (فکری)
در بکلاگت (فصل ۰.۱۱) یک اتوماسیون پیدا کن که واقعاً deploy لازم دارد — و یکی که لازم ندارد. برای آن یکی که لازم دارد:
- بگو کدامیک از چهار چیزِ بخش ۷.۴.۱ برایش لازم است. (همهشان؟ یا فقط دو تا؟)
- بگو آیا باید عمومی باشد یا فقط خودت به آن دسترسی داری — و اگر عمومی، سؤالِ بلوکِ هشدار را جواب بده.
- و حدس بزن کدامیک از پنج خرابیِ بخش ۷.۴.۳ اول سرت میآید.
پاسخنامه — و اینکه چرا حدسِ درست تقریباً همیشه شمارهی ۲ است
کاری که deploy لازم دارد: رباتی که هر شب ساعت ۲ فایل فروش روز را از یک سرویس میگیرد و خلاصهاش را صبح میفرستد.
- محیط: لازم. پیوستگی: لازم — قلبِ ماجراست. رمزها: لازم، چون به سرویسی وصل میشود. دسترسیِ عمومی: لازم نیست — این نکتهی مهم است. خروجی به تلگرام تو میرود؛ لازم نیست هیچ آدرسی از بیرون باز باشد.
- پس جواب «همهشان» نیست، و هرچه کمتر باز باشد، امنتر است (بلوک هشدار).
کاری که deploy لازم ندارد: تمیزکردن فایل اکسل مشتری — چون خودت شروعش میکنی و منتظر نتیجهای (همان تمرین فصل ۷.۲.۴).
و حدسِ خرابی: تقریباً همیشه شمارهی ۲ — رمزها. دلیلش ساده و کمی خندهدار است: روی لپتاپ تو کلیدها مدتها پیش تنظیم شدهاند و دیگر یادت نیست کجا هستند. پس وقتی کار را منتقل میکنی، تنها چیزی که فراموش میشود همان چیزی است که هیچوقت به آن فکر نمیکردی. فصل بعد دقیقاً دربارهی همین است.