استقرار یک برنامه وب Go با استفاده از Nginx در اوبونتو 22.04

استقرار یک برنامه وب Go با استفاده از Nginx در اوبونتو 22.04


Go یک زبان برنامه نویسی با هدف عمومی منبع باز است. این برنامه از عملکرد پایتون الهام گرفته شده است در حالی که قابلیت C را ارائه می دهد. در ابتدا توسط گوگل برای رسیدگی به مشکلاتی که آنها در زمینه کدهای خود با آن مواجه بودند (پیچیدگی کد و زمان طولانی کامپایل) توسعه داده شد. مانند هر زبان برنامه نویسی مدرن دیگری، Go برای همه مقاصد مناسب است. به عنوان مثال، می توان از آن برای توسعه وب، برنامه نویسی خط فرمان، برنامه های کاربردی سرور شبکه، توسعه front-end و موارد دیگر استفاده کرد.

در این راهنما ما شما را از طریق مراحل استقرار یک برنامه وب ساده Go در اوبونتو 22.04 LTS راهنمایی می کند. ما همچنین یک پروکسی معکوس Nginx را برای مدیریت ترافیک پیاده سازی خواهیم کرد.

پیش نیازها

برای انجام مراحل نشان داده شده در این راهنما، به اجزای زیر از قبل پیکربندی شده نیاز دارید:

اگر قرار است از طریق یک نام دامنه به سرویس دسترسی داشته باشید، باید یک FQDN داشته باشید که به سرور اشاره دارد. در چنین شرایطی توصیه می شود Nginx را با SSL ایمن کنید. می توانید از آموزش ما درباره ایمن سازی Nginx با Let’s Encrypt در اوبونتو بیشتر بیاموزید.

مرحله 1 – یک برنامه Go Web ایجاد کنید

ما یک برنامه وب ساده Go ایجاد خواهیم کرد که با دسترسی به دامنه، “Hello World” را روی صفحه نمایش چاپ می کند. علاوه بر این، برنامه پس از دسترسی به کاربر خوش آمد می گوید <دامنه>/من تبریک می گویم/<نام کاربری>.

با ایجاد یک پروژه جدید در زیر شروع کنید $GOPATH. دایرکتوری پروژه را ایجاد کنید:

دایرکتوری فعلی را تغییر دهید:

سپس یک پروژه را آغاز کنید:

سپس ایجاد کنید اصلی.من دارم میروم که به عنوان ریشه برنامه Go ما عمل می کند. کد منبع برنامه وب ما را میزبانی می کند:

پروژه را در VS Code باز کنید:

کد زیر را در فایل قرار دهید اصلی.من دارم میروم:

بیایید یک تفکیک سریع از برنامه Go را که به تازگی ایجاد کردیم انجام دهیم:

  • عبارت بسته بندی اصلی به عنوان نقطه ورود به برنامه ما عمل می کند. همچنین به کامپایلر Go دستور می دهد تا فایل را به عنوان یک فایل اجرایی به جای کتابخانه اشتراکی کامپایل کند.
  • را وارد كردن تمام ماژول های اضافی مورد نیاز برای کار برنامه را وارد می کند. در اینجا ما وارد کرده ایم fmt (برای چاپ متون) و خالص/http بسته های (برای برنامه های کاربردی وب سرور).
  • با استفاده از تابع http.HandleFuncما دو مسیر ایجاد کردیم:
    • مسیر اول / به عنوان مسیر والد در داخل عمل می کند تابع اصلی.
    • مسیر دوم /من تبریک می گویم/ یک پارامتر URL (در این مورد یک رشته) را می گیرد. سپس رشته همراه با پیام تبریک نمایش داده می شود.
      • آدرس URL مسیر برای ذخیره مقدار بعد استفاده می شود /من تبریک می گویم/. سپس مقدار به عنوان ارسال می شود نام از پارامتر URL
    • را http.ListenAndServe تابع وب سرور را مقداردهی اولیه می کند. اینجا پورت گوش دادن است 9990.

اکنون که برنامه ما آماده است، فایل را به یک فایل اجرایی کامپایل کنید:

کامپایلر Go یک فایل اجرایی با همان نام فایل ایجاد می کند. نتیجه را ببینید:

مرحله 2 – یک فایل systemd unit را برای اجرا در پس زمینه پیکربندی کنید

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

یک فایل سیستمی خاص ایجاد کنید وب.سرویس زیر /lib/سیستم شده/سیستم:

قطعه زیر را به فایل ماژول اضافه کنید:

اینجا،

  • متغیر ExecStart نقطه ورودی سرویس را از طریق فایل اجرایی اصلی واقع در فهرست پروژه ما نشان می دهد ($GOPATH/من دارم میروموب). توجه داشته باشید که به جای ذکر $GOPATH، وارد مسیر کامل فایل اجرایی شدیم. به این دلیل است که $GOPATH متغیر فقط برای کاربر قابل مشاهده است.
  • متغیر من در حال راه اندازی مجدد هستم می گوید سیستم شده اگر برنامه از کار افتاد چه باید کرد. ارزش همیشه می گوید سیستم شده برای راه اندازی مجدد برنامه هر زمان که اجرای آن متوقف شد.
  • متغیر RestartSec می گوید سیستم شده قبل از شروع مجدد برنامه، مدت زمان مشخصی منتظر بمانید. در اینجا مقدار تنظیم شده است 5 ثانیه (5 ثانیه).
  • صورتحساب تحت تعقیب=چندکاربر.هدف مشخص می کند در چه حالتی سیستم شده سرویس را فعال خواهد کرد.

فایل را ذخیره کنید و ویرایشگر را ببندید. سرویس را شروع کنید:

بررسی کنید که آیا سرویس راه اندازی و اجرا می شود:

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

مرحله 3 – Nginx را به عنوان یک پروکسی معکوس پیکربندی کنید

اکنون یک بلوک سرور برای Nginx ایجاد می کنیم تا به عنوان یک پروکسی معکوس عمل کند. برنامه وب از طریق پروکسی معکوس (برای عملکرد و امنیت بیشتر) در معرض اینترنت قرار می گیرد.

دایرکتوری فعال فعلی را به تغییر دهید سایت هایدر دسترس:

اکنون یک فایل با نام دامنه ای که می خواهید در معرض برنامه خود قرار دهید ایجاد کنید. برای نمایش استفاده خواهیم کرد مثال.com:

کد زیر را در فایل بلوک وارد کنید:

در اینجا ما استفاده می کنیم proxy_pass برای ارائه برنامه وب Go بر روی آدرس IP سرور (localhost) در یک پورت 9990.

برای فعال کردن بلوک Nginx، یک پیوند نمادین (همچنین به عنوان پیوند نرم‌افزاری) از فایل به پوشه‌ای با سایت‌های فعال ایجاد کنید:

برای اعمال تغییرات، پیکربندی Nginx را دوباره بارگیری کنید:

مرحله 4 – بررسی کنید

اگر همه چیز همانطور که انتظار می رود پیش برود، برنامه وب اکنون باید در دسترس باشد میزبان محلی:9990 و دامنه ای که ما پیکربندی کردیم. URL را در مرورگر وب باز کنید:

همانطور که انتظار می رفت، برنامه “Hello World” را روی صفحه نمایش چاپ می کند. این کار مسیر اصلی است. سپس مسیر دوم را با مراجعه به URL زیر تست کنید:

برنامه با موفقیت پیام تبریک ساده را با نام پارامتر به دست آمده از URL برمی گرداند.

اینجا! ما با موفقیت یک برنامه وب Go را در سرور محلی خود مستقر کردیم!

افکار نهایی

در این راهنما، پیاده سازی یک برنامه وب ساده Go را با استفاده از کتابخانه های استاندارد Go نشان دادیم. ما همچنین یک پروکسی معکوس را با استفاده از Nginx پیاده سازی کردیم. در حالی که نمایش بر روی یک سرور محلی انجام شد، برای یک سرور عمومی به شدت توصیه می‌شود که یک گواهی SSL را برای افشای امن دسترسی به اینترنت پیاده‌سازی کنید. برای برنامه نویسی Go بیشتر، می توانید آموزش ساخت و نصب برنامه های Go را بررسی کنید.

کار کامپیوتر مبارک!

درباره Pranay Kapgate

مهندس نرم افزار | علاقه مندان به نرم افزارهای متن باز