
Go یک زبان برنامه نویسی با هدف عمومی منبع باز است. این برنامه از عملکرد پایتون الهام گرفته شده است در حالی که قابلیت C را ارائه می دهد. در ابتدا توسط گوگل برای رسیدگی به مشکلاتی که آنها در زمینه کدهای خود با آن مواجه بودند (پیچیدگی کد و زمان طولانی کامپایل) توسعه داده شد. مانند هر زبان برنامه نویسی مدرن دیگری، Go برای همه مقاصد مناسب است. به عنوان مثال، می توان از آن برای توسعه وب، برنامه نویسی خط فرمان، برنامه های کاربردی سرور شبکه، توسعه front-end و موارد دیگر استفاده کرد.
در این راهنما ما شما را از طریق مراحل استقرار یک برنامه وب ساده Go در اوبونتو 22.04 LTS راهنمایی می کند. ما همچنین یک پروکسی معکوس Nginx را برای مدیریت ترافیک پیاده سازی خواهیم کرد.
پیش نیازها
برای انجام مراحل نشان داده شده در این راهنما، به اجزای زیر از قبل پیکربندی شده نیاز دارید:
اگر قرار است از طریق یک نام دامنه به سرویس دسترسی داشته باشید، باید یک FQDN داشته باشید که به سرور اشاره دارد. در چنین شرایطی توصیه می شود Nginx را با SSL ایمن کنید. می توانید از آموزش ما درباره ایمن سازی Nginx با Let’s Encrypt در اوبونتو بیشتر بیاموزید.
مرحله 1 – یک برنامه Go Web ایجاد کنید
ما یک برنامه وب ساده Go ایجاد خواهیم کرد که با دسترسی به دامنه، “Hello World” را روی صفحه نمایش چاپ می کند. علاوه بر این، برنامه پس از دسترسی به کاربر خوش آمد می گوید<دامنه>/من تبریک می گویم/<نام کاربری>.
با ایجاد یک پروژه جدید در زیر شروع کنید$GOPATH. دایرکتوری پروژه را ایجاد کنید:
دایرکتوری فعلی را تغییر دهید:
سپس یک پروژه را آغاز کنید:
برو مود init
من دارم میروم مد در او <نام بسته> |
سپس ایجاد کنیداصلی.من دارم میروم که به عنوان ریشه برنامه Go ما عمل می کند. کد منبع برنامه وب ما را میزبانی می کند:
پروژه را در VS Code باز کنید:
کد زیر را در فایل قرار دهیداصلی.من دارم میروم:
بسته اصلی import ( “fmt” “net/http” ) func main() { http.HandleFunc(“/”, func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, “Hello World” ) }) http.HandleFunc(“/greet/”, func(w http.ResponseWriter, r *http.Request) {name:= r.URL.Path[len(“/greet/”):]fmt.Fprintf(w، “Hello %sn”، نام) }) http.ListenAndServe(“:9990″، null) }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | بسته بندی اصلی وارد كردن ( “fmt” “net/http” ) تابع اصلی() { http.HandleFunc(“/”، تابع(w http.پاسخ نویس، r *http.درخواست) { fmt.Fprintf(w، “سلام دنیا”) }) http.HandleFunc(“/با درود/”، تابع(w http.پاسخ نویس، r *http.درخواست) { نام:= r.آدرس URL.مسیر[len(“/greet/”):] fmt.Fprintf(w، “سلام %sn”، نام) }) http.ListenAndServe(“:9990”، صفر) } |
بیایید یک تفکیک سریع از برنامه Go را که به تازگی ایجاد کردیم انجام دهیم:
- عبارتبسته بندی اصلی به عنوان نقطه ورود به برنامه ما عمل می کند. همچنین به کامپایلر Go دستور می دهد تا فایل را به عنوان یک فایل اجرایی به جای کتابخانه اشتراکی کامپایل کند.
- راوارد كردن تمام ماژول های اضافی مورد نیاز برای کار برنامه را وارد می کند. در اینجا ما وارد کرده ایمfmt (برای چاپ متون) وخالص/http بسته های (برای برنامه های کاربردی وب سرور).
- با استفاده از تابعhttp.HandleFuncما دو مسیر ایجاد کردیم:
- مسیر اول/ به عنوان مسیر والد در داخل عمل می کندتابع اصلی.
- مسیر دوم/من تبریک می گویم/ یک پارامتر URL (در این مورد یک رشته) را می گیرد. سپس رشته همراه با پیام تبریک نمایش داده می شود.
- آدرس URL مسیر برای ذخیره مقدار بعد استفاده می شود/من تبریک می گویم/. سپس مقدار به عنوان ارسال می شودنام از پارامتر URL
- راhttp.ListenAndServe تابع وب سرور را مقداردهی اولیه می کند. اینجا پورت گوش دادن است9990.
اکنون که برنامه ما آماده است، فایل را به یک فایل اجرایی کامپایل کنید:
کامپایلر Go یک فایل اجرایی با همان نام فایل ایجاد می کند. نتیجه را ببینید:
مرحله 2 – یک فایل systemd unit را برای اجرا در پس زمینه پیکربندی کنید
تا به حال، اگر کاربر فعلی از سیستم خارج شود، برنامه وب Go از کار می افتد. این طراحی بدی برای وب سرور است. برای حل این مشکل، ما یک فایل سیستمی با یک واحد ایجاد می کنیم تا حتی زمانی که کاربر از سرور خارج می شود، در پس زمینه اجرا شود. این پیکربندی را یک قدم به استقرار در سطح تولید نزدیکتر میکند.
یک فایل سیستمی خاص ایجاد کنیدوب.سرویس زیر/lib/سیستم شده/سیستم:
sudo nano /lib/systemd/system/goweb.service
سودو نانو /lib/سیستم شده/سیستم/وب.سرویس |
قطعه زیر را به فایل ماژول اضافه کنید:
[Unit] شرح=وب [Service] تایپ کنید=فقط من در حال راه اندازی مجدد هستم=همیشه RestartSec=5 ثانیه ExecStart=/در خانه/<نام کاربری>/من دارم میروم/من دارم میروم–وب/اصلی [Install] تحت تعقیب=چند–کاربر.هدف |
اینجا،
- متغیرExecStart نقطه ورودی سرویس را از طریق فایل اجرایی اصلی واقع در فهرست پروژه ما نشان می دهد ($GOPATH/من دارم میروم–وب). توجه داشته باشید که به جای ذکر$GOPATH، وارد مسیر کامل فایل اجرایی شدیم. به این دلیل است که$GOPATH متغیر فقط برای کاربر قابل مشاهده است.
- متغیرمن در حال راه اندازی مجدد هستم می گویدسیستم شده اگر برنامه از کار افتاد چه باید کرد. ارزشهمیشه می گویدسیستم شده برای راه اندازی مجدد برنامه هر زمان که اجرای آن متوقف شد.
- متغیر RestartSec می گویدسیستم شده قبل از شروع مجدد برنامه، مدت زمان مشخصی منتظر بمانید. در اینجا مقدار تنظیم شده است5 ثانیه (5 ثانیه).
- صورتحسابتحت تعقیب=چند–کاربر.هدف مشخص می کند در چه حالتیسیستم شده سرویس را فعال خواهد کرد.
فایل را ذخیره کنید و ویرایشگر را ببندید. سرویس را شروع کنید:
بررسی کنید که آیا سرویس راه اندازی و اجرا می شود:
وضعیت سرویس sudo goweb
سودو سرویس وب وضعیت |
همانطور که خروجی نشان می دهد، برنامه در حال اجرا است. ما اکنون آماده استفاده از Nginx به عنوان یک پروکسی معکوس هستیم.
مرحله 3 – Nginx را به عنوان یک پروکسی معکوس پیکربندی کنید
اکنون یک بلوک سرور برای Nginx ایجاد می کنیم تا به عنوان یک پروکسی معکوس عمل کند. برنامه وب از طریق پروکسی معکوس (برای عملکرد و امنیت بیشتر) در معرض اینترنت قرار می گیرد.
دایرکتوری فعال فعلی را به تغییر دهیدسایت های–در دسترس:
cd /etc/nginx/sites-available
سی دی /و غیره/nginx/سایت های–در دسترس |
اکنون یک فایل با نام دامنه ای که می خواهید در معرض برنامه خود قرار دهید ایجاد کنید. برای نمایش استفاده خواهیم کردمثال.com:
کد زیر را در فایل بلوک وارد کنید:
سرور {server_name example.com www.example.com; مکان / { proxy_pass http: //localhost:9990; }}
سرور { نام ارائهکننده مثال.com www.مثال.com; محل / { proxy_pass http: //localhost:9990; } } |
در اینجا ما استفاده می کنیمproxy_pass برای ارائه برنامه وب Go بر روی آدرس IP سرور (localhost) در یک پورت9990.
برای فعال کردن بلوک Nginx، یک پیوند نمادین (همچنین به عنوان پیوند نرمافزاری) از فایل به پوشهای با سایتهای فعال ایجاد کنید:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
سودو داخل –با /و غیره/nginx/سایت های–در دسترس/مثال.com /و غیره/nginx/سایت های–فعال شد/مثال.com |
برای اعمال تغییرات، پیکربندی Nginx را دوباره بارگیری کنید:
مرحله 4 – بررسی کنید
اگر همه چیز همانطور که انتظار می رود پیش برود، برنامه وب اکنون باید در دسترس باشدمیزبان محلی:9990 و دامنه ای که ما پیکربندی کردیم. URL را در مرورگر وب باز کنید:
همانطور که انتظار می رفت، برنامه “Hello World” را روی صفحه نمایش چاپ می کند. این کار مسیر اصلی است. سپس مسیر دوم را با مراجعه به URL زیر تست کنید:
localhost:9990/greet/<име>
میزبان محلی:9990/من تبریک می گویم/<نام> |
برنامه با موفقیت پیام تبریک ساده را با نام پارامتر به دست آمده از URL برمی گرداند.
اینجا! ما با موفقیت یک برنامه وب Go را در سرور محلی خود مستقر کردیم!
افکار نهایی
در این راهنما، پیاده سازی یک برنامه وب ساده Go را با استفاده از کتابخانه های استاندارد Go نشان دادیم. ما همچنین یک پروکسی معکوس را با استفاده از Nginx پیاده سازی کردیم. در حالی که نمایش بر روی یک سرور محلی انجام شد، برای یک سرور عمومی به شدت توصیه میشود که یک گواهی SSL را برای افشای امن دسترسی به اینترنت پیادهسازی کنید. برای برنامه نویسی Go بیشتر، می توانید آموزش ساخت و نصب برنامه های Go را بررسی کنید.
کار کامپیوتر مبارک!

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