Node.js veya Python uygulamamı sunucuda nasıl yayınlarım?
Bilgisayarınızda çalışan bir Node.js, Flask, Django ya da başka bir web uygulamasını gerçek bir adreste yayınlamak için sunucuda dört iş yapılır: uygulamayı sunucuya almak, kapanmayacak şekilde çalıştırmak, internete Nginx üzerinden açmak ve https eklemek. Aşağıda hepsinin kısa yol haritası ve her adımın ayrıntılı rehberine bağlantı bulunur.
Yol haritası
- Sunucuya bağlanın ve temel hazırlığı yapın. Güvenlik duvarı, güncellemeler ve yetkisiz bir kullanıcı: yeni sunucuda ilk işler.
- Çalışma ortamını kurun. Node.js için
nodejsvenpm; Python içinpython3-venvve bir sanal ortam. Python'dapiphatası alırsanız: venv çözümü. - Kodu sunucuya alın.
git cloneile ya da SFTP ile. Bağımlılıkları kurun (npm install,pip install -r requirements.txt). - Elle çalıştırıp deneyin. Uygulama bir portta (örneğin 3000 ya da 8000) dinlemeli.
curl -I http://127.0.0.1:3000ile yerelde cevap verdiğini doğrulayın. Uygulamayı yalnızca127.0.0.1adresinde dinletmek, portu dışarıya kapalı tutar. - Kapanmayacak şekilde çalıştırın. SSH penceresini kapatınca uygulama durmamalı, sunucu yeniden başlayınca kendiliğinden açılmalı:
- Node.js için PM2,
- Python için Gunicorn ve systemd,
- her dil için genel çözüm olarak systemd servisi: systemd servisi ve hata ayıklama.
- Nginx'i önüne koyun. Nginx 80/443 portlarını dinler, istekleri uygulamanıza iletir: Nginx ters proxy.
- Alan adını yönlendirin ve https ekleyin. A kaydı: alan adı yönlendirme; sertifika: ücretsiz SSL.
- Güvenlik duvarını kapatın. Yalnızca 22, 80 ve 443 dışarıya açık olsun; uygulamanın kendi portunu (3000, 8000) açmayın: UFW.
En kısa Nginx ayarı
server {
listen 80;
server_name ornek.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Dosyayı /etc/nginx/sites-available/ altına yazıp sites-enabled klasörüne bağlayın, sonra sudo nginx -t && sudo systemctl reload nginx çalıştırın. WebSocket gibi ek başlıklar için tam ayar rehberdedir.
Hangi çözüm bana uygun?
- Kendi sunucunuzda tam kontrol istiyorsanız yukarıdaki yol: Linux VDS.
- Sadece bir Discord botu ya da küçük Node.js/Python uygulaması çalıştıracaksanız Nginx ve sunucu bakımıyla uğraşmanıza gerek yok: Bot ve Uygulama Hosting.
- Yalnızca PHP ya da WordPress sitesi için web hosting daha az emek ister.
- Docker kullanıyorsanız: Docker kurulumu ve Compose.
Sık sorunlar
- 502 Bad Gateway: Uygulama çalışmıyor ya da Nginx'teki port yanlış: 502 çözümü.
- Uygulama kodu güncelledim ama değişmedi: Süreci yeniden başlatın (
pm2 restartya dasystemctl restart). - Sunucu yeniden başlayınca uygulama açılmadı: Otomatik başlatmayı kurmamışsınızdır (
pm2 savevepm2 startupya dasystemctl enable). - Dışarıdan erişilmiyor: Güvenlik duvarı (sunucuda ve panelde), DNS ve Nginx
server_namesırayla kontrol edilir: sitem açılmıyor.
Sık sorulanlar
Veritabanım var, nereye kurmalıyım?
Aynı sunucuya kurmak en basitidir: MySQL ve MariaDB ya da PostgreSQL. Veritabanı portunu dışarıya açmayın.
Kaç GB RAM yeter?
Küçük bir uygulama için 1 ila 2 GB yeter; trafik ve veritabanı büyüdükçe artar. Kullanımı izleyin: kaynak kullanımı.
root olarak mı çalıştırmalıyım?
Hayır. Uygulama için yetkisiz bir kullanıcı kullanın ve yönetim işleri için ayrı bir sudo kullanıcısı açın: sudo kullanıcı açma.
İlgili makaleler
- PM2 ile Node.js uygulamasını arka planda çalıştırma ve otomatik başlatma
- Python Flask ya da Django uygulamasını Gunicorn ve systemd ile yayınlama
- Nginx ters proxy: Node.js ya da Python uygulamasını Nginx arkasında yayınlama
Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.
Geri bildiriminiz için teşekkürler!