परिचय: डेवलपमेंट से Go पर प्रोडक्शन-सर्वर तक
\nआपने Go (Golang) में एक उच्च-प्रदर्शन वाला वेब एप्लिकेशन लिखा है। एक बाइनरी में कंपाइलेशन, स्टैटिक टाइपिंग, बिल्ट-इन नेटवर्किंग - ये सब Node.js या Python से बढ़त देते हैं। लेकिन "यह मेरी मशीन पर काम करता है" प्रोडक्शन के लिए कोई तर्क नहीं है। VPS पर Go एप्लिकेशन का उन्नत डिप्लॉय सिर्फ SSH के माध्यम से फ़ाइलों को कॉपी करना नहीं है। यह CI/CD पाइपलाइन सेटअप, कंटेनरीकरण, reverse proxy, सर्टिफिकेट का ऑटोमैटिक अपडेट, मॉनिटरिंग और graceful shutdown है।
\nइस लेख में, हम Ubuntu 22.04 LTS पर Golang एप्लिकेशन के लिए एक पूर्ण production-ready स्क्रिप्ट पर चर्चा करेंगे। आप सीखेंगे कि Docker बिल्ड कैसे सेटअप करें, GitHub Actions के माध्यम से zero-downtime डिप्लॉय कैसे व्यवस्थित करें, SSL के साथ Nginx कैसे जोड़ें और Prometheus मेट्रिक्स मॉनिटरिंग कैसे सेटअप करें।
\n\n1. VPS तैयार करना और एनवायरनमेंट सेटअप
\nमान लीजिए कि आपके पास Ubuntu 22.04 के साथ एक VPS (DigitalOcean, Hetzner, Timeweb) है। सबसे पहले सिस्टम को अपडेट करें और बेसिक टूल्स का सेट इंस्टॉल करें:
\nssh root@your_server_ip\napt update && apt upgrade -y\napt install -y git curl htop net-tools ufw\nsudo-अधिकारों (बिना पासवर्ड, केवल SSH-की से) के साथ deploy यूज़र बनाएँ:
adduser deploy\nusermod -aG sudo deploy\nmkdir /home/deploy/.ssh\ncp ~/.ssh/authorized_keys /home/deploy/.ssh/\nchown -R deploy:deploy /home/deploy/.ssh\nchmod 700 /home/deploy/.ssh && chmod 600 /home/deploy/.ssh/authorized_keys\nUFW फ़ायरवॉल सेटअप करें:
\nufw allow OpenSSH\nufw allow 80/tcp\nufw allow 443/tcp\nufw enable\nमहत्वपूर्ण: /etc/ssh/sshd_config में root के लिए लॉगिन बंद करें (PermitRootLogin no) और SSH को रीस्टार्ट करें (systemctl restart sshd)।
1.1 Docker और Docker Compose इंस्टॉल करना
\nGo एप्लिकेशन के लिए कंटेनरीकरण डी-फैक्टो मानक है। आधिकारिक निर्देशों के अनुसार Docker इंस्टॉल करें:
\ncurl -fsSL https://get.docker.com -o get-docker.sh\nsh get-docker.sh\nusermod -aG docker deploy\nवर्जन चेक करें: docker --version। इसके बाद Docker Compose v2 (प्लगइन) इंस्टॉल करें:
apt install -y docker-compose-plugin\n\n2. GitHub Actions और Docker के साथ CI/CD पाइपलाइन
\nउन्नत डिप्लॉय में ऑटोमेशन शामिल है। हम इमेज बनाने और SSH के माध्यम से सर्वर पर भेजने के लिए GitHub Actions का उपयोग करेंगे, जिसके बाद नया कंटेनर चलाया जाएगा।
\nGo प्रोजेक्ट की संरचना:
\nmyapp/\n├── main.go\n├── go.mod\n├── Dockerfile\n├── docker-compose.yml\n└── .github/workflows/deploy.yml\nDockerfile (Multi-stage build):
\nFROM golang:1.22-alpine AS builder\nWORKDIR /app\nCOPY go.mod go.sum ./\nRUN go mod download\nCOPY . .\nRUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /app/myapp .\n\nFROM alpine:latest\nRUN apk --no-cache add ca-certificates tzdata\nWORKDIR /root/\nCOPY --from=builder /app/myapp .\nEXPOSE 8080\nCMD ["./myapp"]\ndocker-compose.yml (प्रोडक्शन के लिए):
\nversion: '3.8'\nservices:\n app:\n image: ghcr.io/your_username/myapp:latest\n restart: always\n ports:\n - "127.0.0.1:8080:8080"\n environment:\n - DB_URL=postgres://user:pass@db:5432/mydb\n depends_on:\n - db\n db:\n image: postgres:16-alpine\n restart: always\n environment:\n POSTGRES_USER: user\n POSTGRES_PASSWORD: pass\n volumes:\n - pg_data:/var/lib/postgresql/data\nvolumes:\n pg_data:\nGitHub Actions workflow (.github/workflows/deploy.yml):
\nname: Deploy Go App\non:\n push:\n branches: [ main ]\njobs:\n build-and-deploy:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - name: Login to GitHub Container Registry\n uses: docker/login-action@v3\n with:\n registry: ghcr.io\n