গো প্রোগ্রামগুলি 80 পোর্টে শুনতে এবং সরাসরি HTTP অনুরোধগুলি সরবরাহ করতে পারে। পরিবর্তে, আপনি আপনার গো প্রোগ্রামের সামনে একটি বিপরীত প্রক্সি ব্যবহার করতে চাইতে পারেন, যাতে এটি 80 বন্দরটি শুনতে এবং পোর্টে আপনার প্রোগ্রামের সাথে সংযুক্ত হয়, বলুন, 4000. পরবর্তীটি করার অনেক কারণ রয়েছে: চালাতে হবে না আপনার গো প্রোগ্রামটি রুট হিসাবে, একই হোস্টে অন্যান্য ওয়েবসাইট / পরিষেবাদি সরবরাহ করে, এসএসএল সমাপ্তি, লোড ব্যালেন্সিং, লগিং ইত্যাদি
আমি সামনে HAProxy ব্যবহার । যে কোনও বিপরীত প্রক্সি কাজ করতে পারে। এনগিনেক্সও একটি দুর্দান্ত বিকল্প (HAProxy এর চেয়ে অনেক বেশি জনপ্রিয় এবং আরও কিছু করতে সক্ষম)।
আপনি যদি এর ডকুমেন্টেশন ( এইচটিএমএল সংস্করণ ) পড়ে থাকেন তবে কনফিগার করতে HAProxy খুব সহজ easy আমার haproxy.cfg
গো প্রকল্পগুলির একটির জন্য আমার সম্পূর্ণ ফাইলটি অনুসরণ করে, যদি আপনার কোনও প্রারম্ভিক পন্টের প্রয়োজন হয়।
global
log 127.0.0.1 local0
maxconn 10000
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http
bind :80
acl is_stats hdr(host) -i hastats.myapp.com
use_backend stats if is_stats
default_backend myapp
capture request header Host len 20
capture request header Referer len 50
backend myapp
server main 127.0.0.1:4000
backend stats
mode http
stats enable
stats scope http
stats scope myapp
stats realm Haproxy\ Statistics
stats uri /
stats auth username:password
এনগিনেক্স আরও সহজ।
পরিষেবা নিয়ন্ত্রণ সম্পর্কিত, আমি সিস্টেম পরিষেবা হিসাবে আমার গো প্রোগ্রামটি চালাই। আমি মনে করি সবাই তা করে। আমার সার্ভার উবুন্টু চালায় তাই এটি আপস্টার্ট ব্যবহার করে। আমি /etc/init/myapp.conf
আমার প্রোগ্রামটি নিয়ন্ত্রণ করতে এটি আপস্টার্টের জন্য রেখেছি:
start on runlevel [2345]
stop on runlevel [!2345]
chdir /home/myapp/myapp
setgid myapp
setuid myapp
exec ./myapp start 1>>_logs/stdout.log 2>>_logs/stderr.log
আরেকটি দিক হ'ল স্থাপনা। একটি বিকল্প হ'ল প্রোগ্রামের প্রয়োজনীয় বাইনারি ফাইল এবং প্রয়োজনীয় সম্পদ প্রেরণ করে মোতায়েন করা। এটি একটি দুর্দান্ত দুর্দান্ত সমাধান আইএমও। আমি অন্য বিকল্পটি ব্যবহার করি: সার্ভারে সংকলন। (আমি যখন একটি তথাকথিত "অবিচ্ছিন্ন একীকরণ / স্থাপনা" সিস্টেম সেটআপ করব তখন আমি বাইনারি ফাইলগুলি স্থাপনে স্যুইচ করব))
আমার সার্ভারে একটি ছোট শেল স্ক্রিপ্ট রয়েছে যা আমার প্রকল্পের জন্য একটি দূরবর্তী গিট সংগ্রহস্থল থেকে কোড টানছে, গো দিয়ে এটি তৈরি করে, বাইনারিগুলি এবং অন্যান্য সংস্থানগুলিতে অনুলিপি করে এবং ~/myapp/
পরিষেবাটি পুনরায় চালু করে।
সামগ্রিকভাবে, পুরো জিনিসটি অন্য কোনও সার্ভার সেটআপ থেকে খুব আলাদা নয়: আপনার কোড চালানোর জন্য আপনাকে একটি উপায় থাকতে হবে এবং এটিতে এইচটিটিপি অনুরোধগুলি সরবরাহ করতে হবে। অনুশীলনে, গো এই স্টাফগুলির জন্য খুব স্থিতিশীল হিসাবে প্রমাণিত হয়েছে।