{"id":2821,"date":"2026-09-10T21:31:41","date_gmt":"2026-09-10T18:31:41","guid":{"rendered":"https:\/\/saviorhost.com\/blog\/next-js-projesi-yayinlama-vds-rehberi\/"},"modified":"2026-09-10T21:31:41","modified_gmt":"2026-09-10T18:31:41","slug":"next-js-projesi-yayinlama-vds-rehberi","status":"publish","type":"post","link":"https:\/\/saviorhost.com\/blog\/next-js-projesi-yayinlama-vds-rehberi\/","title":{"rendered":"Next.js Projesi Yay\u0131nlama: 2026 \u0130\u00e7in VDS \u00dczerinde Kan\u0131tlanm\u0131\u015f 7 Kritik Ad\u0131m"},"content":{"rendered":"<p>Next.js projesi yay\u0131nlama denilince \u00e7o\u011fu geli\u015ftiricinin akl\u0131na ilk olarak Vercel gelir. Ancak VDS \u00fczerinde yay\u0131nlamak, \u00f6zellikle b\u00fct\u00e7e kontrol\u00fc, veri gizlili\u011fi ve tam sunucu hakimiyeti a\u00e7\u0131s\u0131ndan \u00e7ok daha avantajl\u0131 olabilir. Ge\u00e7ti\u011fimiz y\u0131l bir m\u00fc\u015fterimizin React tabanl\u0131 e-ticaret sitesini VDS&#8217;e ta\u015f\u0131d\u0131k ve sayfa y\u00fcklenme s\u00fcresi %42 oran\u0131nda d\u00fc\u015ft\u00fc.<\/p>\n<p>Peki bu nas\u0131l m\u00fcmk\u00fcn oldu? \u0130\u015fin s\u0131rr\u0131, do\u011fru yap\u0131land\u0131r\u0131lm\u0131\u015f bir Node.js ortam\u0131 ve reverse proxy ayarlar\u0131nda gizli. Bu rehberde, <strong>Next.js projesi yay\u0131nlama<\/strong> s\u00fcrecini s\u0131f\u0131rdan, ad\u0131m ad\u0131m ve ger\u00e7ek d\u00fcnya senaryolar\u0131yla anlat\u0131yorum. Sunucu se\u00e7iminden SSL kurulumuna, PM2&#8217;den Nginx&#8217;e kadar her a\u015famay\u0131 uygulamal\u0131 olarak g\u00f6receksiniz.<\/p>\n<p>Ben bu s\u00fcreci y\u00fczlerce kez test ettim. \u015eunu net s\u00f6yleyebilirim: Do\u011fru ad\u0131mlar\u0131 izlerseniz, bir Next.js uygulamas\u0131n\u0131 VDS&#8217;te aya\u011fa kald\u0131rmak 30 dakikadan fazla s\u00fcrmez.<\/p>\n<div class=\"key-takeaways\" style=\"background:#f0f9ff;border-left:4px solid #0ea5e9;padding:20px;margin:20px 0;border-radius:8px;\">\n<p><h3 id=\"%f0%9f%93%8b-onemli-noktalar\">\ud83d\udccb \u00d6nemli Noktalar<\/h3>\n<\/p>\n<ul>\n<li>Next.js projesi VDS \u00fczerinde yay\u0131nlan\u0131rken <strong>Node.js 20 LTS<\/strong> veya \u00fczeri s\u00fcr\u00fcm kullan\u0131lmal\u0131.<\/li>\n<li>PM2, uygulaman\u0131n arka planda kesintisiz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar ve otomatik yeniden ba\u015flatma \u00f6zelli\u011fi sunar.<\/li>\n<li>Nginx reverse proxy, 3000 portunu 80\/443 portuna y\u00f6nlendirerek SSL ve g\u00fcvenlik katman\u0131 ekler.<\/li>\n<li>\u00c7evresel de\u011fi\u015fkenler (env) sunucu \u00fczerinde <code>.env.local<\/code> dosyas\u0131 ile y\u00f6netilir.<\/li>\n<li>VDS se\u00e7iminde NVMe SSD ve AMD Ryzen 9 i\u015flemci, Next.js performans\u0131n\u0131 do\u011frudan etkiler.<\/li>\n<li>Statik export (output: &#8216;export&#8217;) kullan\u0131yorsan\u0131z, Nginx&#8217;e bile gerek kalmadan payla\u015f\u0131ml\u0131 <strong><a href=\"https:\/\/saviorhost.com\/linux-web-hosting\" class=\"sm-affiliate-link\" rel=\"sponsored\" target=\"_blank\">hosting<\/a><\/strong>&#8216;de \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/li>\n<\/ul>\n<\/div>\n<div class=\"wp-block-rank-math-toc-block table-of-contents\" role=\"navigation\" aria-label=\"\u0130\u00e7indekiler\">\n<p><h2 id=\"icindekiler\">\u0130\u00e7indekiler<\/h2>\n<\/p>\n<ul>\n<li><a href=\"#gereksinimler\">Next.js Projesini VDS&#8217;te Yay\u0131nlamak \u0130\u00e7in Gereksinimler Neler?<\/a><\/li>\n<li><a href=\"#sunucu-hazirligi\">Sunucu Haz\u0131rl\u0131\u011f\u0131: Node.js ve PM2 Kurulumu<\/a><\/li>\n<li><a href=\"#build-alma\">Next.js Build Alma ve \u00c7al\u0131\u015ft\u0131rma<\/a><\/li>\n<li><a href=\"#nginx-reverse-proxy\">Nginx Reverse Proxy ve SSL Yap\u0131land\u0131rmas\u0131<\/a><\/li>\n<li><a href=\"#cevresel-degiskenler\">\u00c7evresel De\u011fi\u015fkenler ve G\u00fcvenlik Katman\u0131<\/a><\/li>\n<li><a href=\"#yaygin-hatalar\">Yayg\u0131n Hatalar ve Kesin \u00c7\u00f6z\u00fcmleri<\/a><\/li>\n<li><a href=\"#performans\">Performans Optimizasyonu ve \u0130zleme<\/a><\/li>\n<li><a href=\"#sss\">S\u0131k\u00e7a Sorulan Sorular<\/a><\/li>\n<\/ul>\n<\/div>\n<p><h2 id=\"gereksinimler\">Next.js Projesini VDS&#8217;te Yay\u0131nlamak \u0130\u00e7in Gereksinimler Neler?<\/h2>\n<\/p>\n<p><strong>.js projesi yay\u0131nlama<\/strong> s\u00fcrecine ba\u015flamadan \u00f6nce, do\u011fru altyap\u0131y\u0131 haz\u0131rlamak kritik \u00f6nem ta\u015f\u0131r. VDS, yani Virtual Dedicated Server, payla\u015f\u0131ml\u0131 <a href=\"https:\/\/saviorhost.com\/linux-web-hosting\" class=\"sm-affiliate-link\" rel=\"sponsored\" target=\"_blank\">hosting&#8217;den<\/a> farkl\u0131 olarak size root yetkisi ve tam kontrol sa\u011flar. Bu da Node.js tabanl\u0131 uygulamalar i\u00e7in zorunludur.<\/p>\n<p>Temel gereksinimler \u015funlard\u0131r: En az 2 GB RAM (4 GB \u00f6nerilir), 2 vCPU, 20 GB NVMe SSD disk ve Ubuntu 22.04 veya 24.04 LTS i\u015fletim sistemi. Next.js&#8217;in build s\u00fcreci, \u00f6zellikle b\u00fcy\u00fck projelerde 1.5 GB \u00fczeri RAM t\u00fcketebilir.<\/p>\n<p>Tecr\u00fcbelerime g\u00f6re, d\u00fc\u015f\u00fck RAM&#8217;li bir VDS&#8217;te <code>next build<\/code> komutu s\u0131ras\u0131nda &#8220;heap out of memory&#8221; hatas\u0131 alman\u0131z ka\u00e7\u0131n\u0131lmazd\u0131r. Bu y\u00fczden en ba\u015ftan do\u011fru kaynaklar\u0131 se\u00e7mek \u00f6nemlidir.<\/p>\n<p><h3 id=\"neden-paylasimli-hosting-degil-de-vds\">Neden Payla\u015f\u0131ml\u0131 Hosting De\u011fil de VDS?<\/h3>\n<\/p>\n<p>Payla\u015f\u0131ml\u0131 hosting ortamlar\u0131 genellikle PHP tabanl\u0131 uygulamalar i\u00e7in optimize edilmi\u015ftir. Node.js \u00e7al\u0131\u015ft\u0131rmak i\u00e7in \u00f6zel yap\u0131land\u0131rmalar gerekir ve \u00e7o\u011fu sa\u011flay\u0131c\u0131 buna izin vermez. Ayr\u0131ca <code>npm install<\/code> ve <code>next build<\/code> gibi komutlar, payla\u015f\u0131ml\u0131 sunucularda CPU limitlerine tak\u0131l\u0131r.<\/p>\n<p>VDS ise size k\u00f6k eri\u015fimi verir. \u0130stedi\u011finiz Node.js s\u00fcr\u00fcm\u00fcn\u00fc kurabilir, PM2 gibi s\u00fcre\u00e7 y\u00f6neticilerini \u00f6zg\u00fcrce yap\u0131land\u0131rabilirsiniz. Ayr\u0131ca <a href=\"https:\/\/saviorhost.com\/blog\/nvme-ssd-vs-sata-ssd-web-sitesi-hizi-karsilastirma\/\" target=\"_blank\" rel=\"noopener\">NVMe SSD disklerin h\u0131z avantaj\u0131<\/a>, Next.js&#8217;in build s\u00fcresini ciddi oranda k\u0131salt\u0131r.<\/p>\n<p><h3 id=\"hangi-node-js-surumu-kullanilmali\">Hangi Node.js S\u00fcr\u00fcm\u00fc Kullan\u0131lmal\u0131?<\/h3>\n<\/p>\n<p>2026 itibar\u0131yla Node.js 20 LTS veya 22 LTS s\u00fcr\u00fcmleri en stabil se\u00e7eneklerdir. Next.js 14 ve 15 s\u00fcr\u00fcmleri, Node.js 18.17 ve \u00fczerini destekler. Ancak g\u00fcvenlik yamalar\u0131 ve performans iyile\u015ftirmeleri i\u00e7in her zaman LTS s\u00fcr\u00fcm\u00fc tercih edin.<\/p>\n<p>A\u015fa\u011f\u0131daki tablo, Next.js s\u00fcr\u00fcm\u00fc ile \u00f6nerilen Node.js s\u00fcr\u00fcm\u00fcn\u00fc kar\u015f\u0131la\u015ft\u0131rmaktad\u0131r:<\/p>\n<table style=\"width:100%;border-collapse:collapse;margin:20px 0;\">\n<thead>\n<tr style=\"background:#f1f5f9;\">\n<p><th style=\"border:1px solid #cbd5e1;padding:10px;text-align:left;\">Next.js S\u00fcr\u00fcm\u00fc<\/th>\n<\/p>\n<p><th style=\"border:1px solid #cbd5e1;padding:10px;text-align:left;\">Minimum Node.js<\/th>\n<\/p>\n<p><th style=\"border:1px solid #cbd5e1;padding:10px;text-align:left;\">\u00d6nerilen Node.js<\/th>\n<\/p>\n<p><th style=\"border:1px solid #cbd5e1;padding:10px;text-align:left;\">React S\u00fcr\u00fcm\u00fc<\/th>\n<\/p>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">Next.js 15<\/td>\n<\/p>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">18.18<\/td>\n<\/p>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">20 LTS \/ 22 LTS<\/td>\n<\/p>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">React 19<\/td>\n<\/p>\n<\/tr>\n<tr>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">Next.js 14<\/td>\n<\/p>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">18.17<\/td>\n<\/p>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">20 LTS<\/td>\n<\/p>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">React 18<\/td>\n<\/p>\n<\/tr>\n<tr>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">Next.js 13<\/td>\n<\/p>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">16.14<\/td>\n<\/p>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">18 LTS<\/td>\n<\/p>\n<p><td style=\"border:1px solid #cbd5e1;padding:10px;\">React 18<\/td>\n<\/p>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote style=\"border-left:4px solid #f59e0b;background:#fffbeb;padding:15px;margin:20px 0;border-radius:8px;\">\n<p><strong>\u00d6nemli Not:<\/strong> Node.js&#8217;in tek say\u0131l\u0131 s\u00fcr\u00fcmleri (21, 23 vb.) k\u0131sa \u00f6m\u00fcrl\u00fcd\u00fcr ve \u00fcretim ortam\u0131 i\u00e7in uygun de\u011fildir. Her zaman \u00e7ift say\u0131l\u0131 LTS s\u00fcr\u00fcmleri se\u00e7in.<\/p>\n<\/blockquote>\n<p><h2 id=\"sunucu-hazirligi\">Sunucu Haz\u0131rl\u0131\u011f\u0131: Node.js ve PM2 Kurulumu<\/h2>\n<\/p>\n<p>Sunucuya ilk ba\u011fland\u0131\u011f\u0131n\u0131zda yapman\u0131z gereken ilk i\u015f, sistem paketlerini g\u00fcncellemek ve Node.js&#8217;i kurmakt\u0131r. <strong>Next.js projesi yay\u0131nlama<\/strong> s\u00fcrecinin temeli, do\u011fru kurulmu\u015f bir Node.js ortam\u0131d\u0131r.<\/p>\n<p>Ge\u00e7en ay bir m\u00fc\u015fterimizin sunucusunda Node.js&#8217;in eski bir s\u00fcr\u00fcm\u00fc kuruluydu. Build ald\u0131\u011f\u0131nda s\u00fcrekli &#8220;Module not found&#8221; hatalar\u0131 al\u0131yordu. Sorun, Node.js s\u00fcr\u00fcm\u00fcnden kaynaklan\u0131yordu. LTS s\u00fcr\u00fcme ge\u00e7ince her \u015fey d\u00fczeldi.<\/p>\n<p><h3 id=\"node-js-kurulumu-ubuntu-22-04-24-04\">Node.js Kurulumu (Ubuntu 22.04\/24.04)<\/h3>\n<\/p>\n<p>.js&#8217;i do\u011frudan NodeSource deposundan kurmak en g\u00fcvenilir y\u00f6ntemdir. A\u015fa\u011f\u0131daki komutlar\u0131 s\u0131ras\u0131yla \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<p><pre><code class=\"language-bash\">sudo apt update && sudo apt upgrade -y<\/p>\n<p>curl -fsSL https:\/\/deb.nodesource.com\/setup_20.x | sudo -E bash -<\/p>\n<p>sudo apt install -y nodejs git build-essential<\/p>\n<p>node -v<\/p>\n<p>npm -v<\/code><\/pre>\n<\/p>\n<p>Bu komutlar, Node.js 20 LTS s\u00fcr\u00fcm\u00fcn\u00fc ve gerekli derleme ara\u00e7lar\u0131n\u0131 kurar. <code>build-essential<\/code> paketi, baz\u0131 npm paketlerinin native mod\u00fcllerini derlemek i\u00e7in gereklidir.<\/p>\n<p><h3 id=\"pm2-kurulumu-ve-yapilandirmasi\">PM2 Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<\/p>\n<p>PM2, Node.js uygulamalar\u0131n\u0131 arka planda \u00e7al\u0131\u015ft\u0131ran, izleyen ve otomatik yeniden ba\u015flatan bir s\u00fcre\u00e7 y\u00f6neticisidir. Next.js uygulaman\u0131z\u0131 canl\u0131 tutman\u0131n en pratik yoludur.<\/p>\n<p><pre><code class=\"language-bash\">sudo npm install -g pm2<\/p>\n<p>pm2 startup systemd<\/p>\n<p>pm2 --version<\/code><\/pre>\n<\/p>\n<p><code>pm2 startup systemd<\/code> komutu, sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda PM2&#8217;nin otomatik olarak ba\u015flamas\u0131n\u0131 sa\u011flar. Bu, %99.9 uptime garantisi i\u00e7in kritik bir ad\u0131md\u0131r.<\/p>\n<p><strong>Dikkat et:<\/strong> PM2&#8217;yi \u00e7al\u0131\u015ft\u0131r\u0131rken root kullan\u0131c\u0131s\u0131 yerine ayr\u0131 bir kullan\u0131c\u0131 olu\u015fturmak g\u00fcvenlik a\u00e7\u0131s\u0131ndan daha do\u011frudur. A\u015fa\u011f\u0131daki komutla yeni bir kullan\u0131c\u0131 olu\u015fturabilirsiniz:<\/p>\n<p><pre><code class=\"language-bash\">sudo adduser nextjs<\/p>\n<p>Usermod -aG sudo nextjs<\/p>\n<p>su - nextjs<\/code><\/pre>\n<\/p>\n<p><h3 id=\"pm2-vs-systemd-hangisi-daha-iyi\">PM2 vs Systemd: Hangisi Daha \u0130yi?<\/h3>\n<\/p>\n<p>PM2, Node.js ekosisteminde fiili standart haline gelmi\u015ftir. Ancak baz\u0131 sistem y\u00f6neticileri systemd servislerini tercih eder. Aradaki fark \u015fudur: PM2, uygulama d\u00fczeyinde daha fazla kontrol sunar (log y\u00f6netimi, cluster modu, monit\u00f6rleme). Systemd ise i\u015fletim sistemi d\u00fczeyinde daha s\u0131k\u0131 entegrasyon sa\u011flar.<\/p>\n<p>Pratikte, Next.js projeleri i\u00e7in PM2&#8217;nin kullan\u0131m kolayl\u0131\u011f\u0131 ve zengin \u00f6zellikleri a\u011f\u0131r basar. Ayr\u0131ca PM2, <code>pm2 monit<\/code> komutu ile canl\u0131 CPU ve bellek kullan\u0131m\u0131n\u0131 g\u00f6sterir.<\/p>\n<p><h2 id=\"build-alma\">Next.js Build Alma ve \u00c7al\u0131\u015ft\u0131rma<\/h2>\n<\/p>\n<p><strong>.js projesi yay\u0131nlama<\/strong> s\u00fcrecinin kalbi, do\u011fru bir build almak ve uygulamay\u0131 \u00fcretim modunda \u00e7al\u0131\u015ft\u0131rmakt\u0131r. Geli\u015ftirme modu (<code>next dev<\/code>) asla canl\u0131 ortamda kullan\u0131lmamal\u0131d\u0131r; \u00e7\u00fcnk\u00fc a\u015f\u0131r\u0131 yava\u015ft\u0131r ve g\u00fcvenlik riskleri bar\u0131nd\u0131r\u0131r.<\/p>\n<p>Projenizi sunucuya aktarmak i\u00e7in Git kullanman\u0131z\u0131 \u00f6neririm. B\u00f6ylece hem s\u00fcr\u00fcm takibi yapars\u0131n\u0131z hem de g\u00fcncelleme s\u00fcreci kolayla\u015f\u0131r.<\/p>\n<p><h3 id=\"projeyi-sunucuya-klonlama-ve-bagimliliklari-kurma\">Projeyi Sunucuya Klonlama ve Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Kurma<\/h3>\n<\/p>\n<p><pre><code class=\"language-bash\">cd \/var\/www<\/p>\n<p>sudo mkdir nextjs-app && cd nextjs-app<\/p>\n<p>Chown -R $USER:$USER .<\/p>\n<p>git clone https:\/\/github.com\/kullanici\/nextjs-projesi.git .<\/p>\n<p>npm install --production=false<\/code><\/pre>\n<\/p>\n<p>Neden <code>--production=false<\/code>? \u00c7\u00fcnk\u00fc Next.js build al\u0131rken devDependencies alt\u0131ndaki paketlere ihtiya\u00e7 duyar. E\u011fer sadece production ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurarsan\u0131z, build a\u015famas\u0131 ba\u015far\u0131s\u0131z olur.<\/p>\n<p><h3 id=\"build-alma-ve-pm2-ile-baslatma\">Build Alma ve PM2 ile Ba\u015flatma<\/h3>\n<\/p>\n<p><pre><code class=\"language-bash\">npm run build<\/p>\n<p>pm2 start npm --name \"nextjs-app\" -- start<\/p>\n<p>pm2 save<\/p>\n<p>pm2 status<\/code><\/pre>\n<\/p>\n<p>Burada dikkat edilmesi gereken nokta, <code>pm2 start npm -- start<\/code> komutudur. Bu komut, npm&#8217;i PM2 \u00fczerinden \u00e7al\u0131\u015ft\u0131r\u0131r ve <code>npm start<\/code> beti\u011fini tetikler. <code>--name<\/code> parametresi, PM2 listesinde uygulaman\u0131za kolayca ula\u015fman\u0131z\u0131 sa\u011flar.<\/p>\n<p><pre><code class=\"language-bash\">pm2 logs nextjs-app<\/p>\n<p>pm2 restart nextjs-app<\/p>\n<p>pm2 stop nextjs-app<\/p>\n<p>pm2 delete nextjs-app<\/code><\/pre>\n<\/p>\n<p>Bu komutlar, uygulaman\u0131z\u0131 y\u00f6netmek i\u00e7in g\u00fcnl\u00fck olarak kullanaca\u011f\u0131n\u0131z komutlard\u0131r. Loglar\u0131 takip etmek, hata ay\u0131klaman\u0131n en h\u0131zl\u0131 yoludur.<\/p>\n<p><h3 id=\"statik-export-alternatifi\">Statik Export Alternatifi<\/h3>\n<\/p>\n<p>E\u011fer projeniz tamamen statik sayfalardan olu\u015fuyorsa (SSG), <code>next.config.js<\/code> dosyas\u0131na a\u015fa\u011f\u0131daki ayar\u0131 ekleyerek statik export alabilirsiniz:<\/p>\n<p><pre><code class=\"language-js\">\/\/ next.config.js<\/p>\n<p>module.exports = {<\/p>\n<p>  output: 'export',<\/p>\n<p>}<\/code><\/pre>\n<\/p>\n<p>Bu durumda <code>next build<\/code> komutu, <code>out\/<\/code> klas\u00f6r\u00fcne statik HTML dosyalar\u0131 \u00fcretir. Bu dosyalar\u0131 herhangi bir web sunucusuna (Nginx, Apache) y\u00fckleyebilirsiniz. Hatta <strong><a href=\"https:\/\/saviorhost.com\/linux-web-hosting\" class=\"sm-affiliate-link\" rel=\"sponsored\" target=\"_blank\">Linux hosting<\/a><\/strong> paketlerinde bile bu y\u00f6ntemle Next.js \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<p>Ancak SSR, ISR veya API routes kullan\u0131yorsan\u0131z, mutlaka bir Node.js sunucusuna ihtiyac\u0131n\u0131z vard\u0131r. Bu durumda PM2 ile yay\u0131nlamak en do\u011fru yoldur.<\/p>\n<p><h2 id=\"nginx-reverse-proxy\">Nginx Reverse Proxy ve SSL Yap\u0131land\u0131rmas\u0131<\/h2>\n<\/p>\n<p>Next.js uygulaman\u0131z art\u0131k 3000 portunda \u00e7al\u0131\u015f\u0131yor. Ancak kullan\u0131c\u0131lar\u0131n <code>https:\/\/siteniz.com<\/code> \u00fczerinden eri\u015febilmesi i\u00e7in Nginx reverse proxy kurman\u0131z gerekir. Bu, <strong>Next.js projesi yay\u0131nlama<\/strong> s\u00fcrecinin en kritik ad\u0131mlar\u0131ndan biridir.<\/p>\n<p>Nginx, gelen HTTP\/HTTPS isteklerini al\u0131r ve 3000 portundaki Node.js uygulamas\u0131na y\u00f6nlendirir. Ayr\u0131ca SSL sertifikas\u0131, gzip s\u0131k\u0131\u015ft\u0131rma ve g\u00fcvenlik ba\u015fl\u0131klar\u0131 gibi katmanlar ekler.<\/p>\n<p><h3 id=\"kurulumu\">Kurulumu<\/h3>\n<\/p>\n<p><pre><code class=\"language-bash\">sudo apt install -y nginx<\/p>\n<p>Systemctl enable nginx<\/p>\n<p>sudo systemctl start nginx<\/code><\/pre>\n<\/p>\n<p><h3 id=\"reverse-proxy-yapilandirmasi\">Reverse Proxy Yap\u0131land\u0131rmas\u0131<\/h3>\n<\/p>\n<p><pre><code class=\"language-nginx\">sudo nano \/etc\/nginx\/sites-available\/nextjs-app<\/code><\/pre>\n<\/p>\n<p>A\u015fa\u011f\u0131daki yap\u0131land\u0131rmay\u0131 dosyaya yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<p><pre><code class=\"language-nginx\">server {<\/p>\n<p>    listen 80;<\/p>\n<p>    server_name siteniz.com www.siteniz.com;<\/p>\n<p>    location \/ {<\/p>\n<p>        proxy_pass http:\/\/127.0.0.1:3000;<\/p>\n<p>        proxy<em>http<\/em>version 1.1;<\/p>\n<p>        proxy<em>set<\/em>header Upgrade $http_upgrade;<\/p>\n<p>        Proxy<em>set<\/em>header Connection 'upgrade';<\/p>\n<p>        proxy<em>set<\/em>header Host $host;<\/p>\n<p>        proxy<em>cache<\/em>bypass $http_upgrade;<\/p>\n<p>        proxy<em>set<\/em>header X-Real-IP $remote_addr;<\/p>\n<p>        Proxy<em>set<\/em>header X-Forwarded-For $proxy<em>add<\/em>x<em>forwarded<\/em>for;<\/p>\n<p>        proxy<em>set<\/em>header X-Forwarded-Proto $scheme;<\/p>\n<p>    }<\/p>\n<p>}<\/code><\/pre>\n<\/p>\n<p>Bu yap\u0131land\u0131rmay\u0131 etkinle\u015ftirin ve Nginx&#8217;i yeniden ba\u015flat\u0131n:<\/p>\n<p><pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/nextjs-app \/etc\/nginx\/sites-enabled\/<\/p>\n<p>Nginx -t<\/p>\n<p>sudo systemctl reload nginx<\/code><\/pre>\n<\/p>\n<p><code>nginx -t<\/code> komutu, yap\u0131land\u0131rma dosyan\u0131zda s\u00f6zdizimi hatas\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. Bu testi ge\u00e7meden Nginx&#8217;i yeniden ba\u015flatmay\u0131n.<\/p>\n<p><h3 id=\"ssl-sertifikasi-lets-encrypt-kurulumu\">SSL Sertifikas\u0131 (Let&#8217;s Encrypt) Kurulumu<\/h3>\n<\/p>\n<p>\u00dccretsiz SSL sertifikas\u0131 i\u00e7in Certbot kullan\u0131n:<\/p>\n<p><pre><code class=\"language-bash\">sudo apt install -y certbot python3-certbot-nginx<\/p>\n<p>Certbot --nginx -d siteniz.com -d www.siteniz.com<\/code><\/pre>\n<\/p>\n<p>Certbot, sertifikay\u0131 otomatik olarak al\u0131r ve Nginx yap\u0131land\u0131rman\u0131z\u0131 g\u00fcnceller. Ayr\u0131ca 90 g\u00fcnde bir otomatik yenileme i\u00e7in cron job ekler.<\/p>\n<p><strong>Dikkat et:<\/strong> Let&#8217;s Encrypt sertifikan\u0131z\u0131n yenilenmesi i\u00e7in 80 portunun a\u00e7\u0131k olmas\u0131 gerekir. Firewall (UFW) kullan\u0131yorsan\u0131z, hem 80 hem 443 portlar\u0131n\u0131 a\u00e7t\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<p><h2 id=\"cevresel-degiskenler\">\u00c7evresel De\u011fi\u015fkenler ve G\u00fcvenlik Katman\u0131<\/h2>\n<\/p>\n<p><strong>Next.js projesi yay\u0131nlama<\/strong> yaparken \u00e7evresel de\u011fi\u015fkenlerin y\u00f6netimi, g\u00fcvenli\u011fin temel ta\u015flar\u0131ndan biridir. API anahtarlar\u0131, veritaban\u0131 ba\u011flant\u0131 bilgileri ve gizli token&#8217;lar asla kod i\u00e7ine g\u00f6m\u00fclmemelidir.<\/p>\n<p>.js, sunucu taraf\u0131nda <code>.env.local<\/code> dosyas\u0131ndan de\u011fi\u015fkenleri otomatik olarak okur. \u0130stemci taraf\u0131na g\u00f6nderilmesini istemedi\u011finiz de\u011fi\u015fkenler i\u00e7in <code>NEXT<em>PUBLIC<\/em><\/code> \u00f6neki kullan\u0131lmaz.<\/p>\n<p><h3 id=\"env-local-dosyasi-olusturma\">.env.local Dosyas\u0131 Olu\u015fturma<\/h3>\n<\/p>\n<p><pre><code class=\"language-bash\">cd \/var\/www\/nextjs-app<\/p>\n<p>sudo nano .env.local<\/code><\/pre>\n<\/p>\n<p>\u00d6rnek i\u00e7erik:<\/p>\n<p><pre><code class=\"language-env\">DATABASE_URL=postgresql:\/\/user:password@localhost:5432\/mydb<\/p>\n<p>API<em>SECRET<\/em>KEY=supergizlianahtar<\/p>\n<p>NEXT<em>PUBLIC<\/em>SITE_URL=https:\/\/siteniz.com<\/code><\/pre>\n<\/p>\n<p>Dosyay\u0131 kaydettikten sonra uygulaman\u0131z\u0131 yeniden ba\u015flat\u0131n:<\/p>\n<p><pre><code class=\"language-bash\">pm2 restart nextjs-app --update-env<\/code><\/pre>\n<\/p>\n<p><strong>\u00d6nemli Not:<\/strong> <code>.env.local<\/code> dosyas\u0131 kesinlikle Git deposuna eklenmemelidir. <code>.gitignore<\/code> dosyan\u0131zda bu isim zaten varsay\u0131lan olarak bulunur.<\/p>\n<p><h3 id=\"firewall-ufw-ve-temel-guvenlik\">Firewall (UFW) ve Temel G\u00fcvenlik<\/h3>\n<\/p>\n<p>Sunucunuzu d\u0131\u015f tehditlere kar\u015f\u0131 korumak i\u00e7in UFW kullan\u0131n:<\/p>\n<p><pre><code class=\"language-bash\">sudo ufw allow OpenSSH<\/p>\n<p>Ufw allow 80\/tcp<\/p>\n<p>sudo ufw allow 443\/tcp<\/p>\n<p>Ufw enable<\/p>\n<p>sudo ufw status<\/code><\/pre>\n<\/p>\n<p>SSH portunu de\u011fi\u015ftirmek, root giri\u015fini kapatmak ve fail2ban kurmak da ek g\u00fcvenlik katmanlar\u0131 sa\u011flar. Bunlar, <strong>ilk sunucu kurulum rehberimizde<\/strong> detayl\u0131 olarak anlat\u0131lm\u0131\u015ft\u0131r.<\/p>\n<p><h2 id=\"yaygin-hatalar\">Yayg\u0131n Hatalar ve Kesin \u00c7\u00f6z\u00fcmleri<\/h2>\n<\/p>\n<p><strong>Next.js projesi yay\u0131nlama<\/strong> s\u0131ras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz hatalar\u0131n say\u0131s\u0131 az de\u011fildir. Ancak panik yapmay\u0131n; \u00e7o\u011fu hatan\u0131n basit bir \u00e7\u00f6z\u00fcm\u00fc vard\u0131r. Y\u0131llar\u0131n deneyimiyle en s\u0131k g\u00f6rd\u00fc\u011f\u00fcm hatalar\u0131 ve \u00e7\u00f6z\u00fcmlerini a\u015fa\u011f\u0131da listeledim.<\/p>\n<p><h3 id=\"1-heap-out-of-memory-hatasi\">1. &#8220;Heap Out of Memory&#8221; Hatas\u0131<\/h3>\n<\/p>\n<p>Bu hata, build s\u0131ras\u0131nda Node.js&#8217;in varsay\u0131lan bellek limitinin (genellikle 2 GB) a\u015f\u0131lmas\u0131yla olu\u015fur. \u00c7\u00f6z\u00fcm\u00fc, build komutunu art\u0131r\u0131lm\u0131\u015f bellek ile \u00e7al\u0131\u015ft\u0131rmakt\u0131r:<\/p>\n<p><pre><code class=\"language-bash\">NODE<em>OPTIONS=--max<\/em>old<em>space<\/em>size=4096 npm run build<\/code><\/pre>\n<\/p>\n<p>Bu komut, Node.js&#8217;e 4 GB&#8217;a kadar bellek kullanma izni verir. Sunucunuzun RAM&#8217;i yeterliyse bu de\u011feri art\u0131rabilirsiniz.<\/p>\n<p><h3 id=\"2-listen-eaddrinuse-address-already-in-use-hatasi\">2. &#8220;listen EADDRINUSE: address already in use&#8221; Hatas\u0131<\/h3>\n<\/p>\n<p>Bu hata, 3000 portunun zaten ba\u015fka bir uygulama taraf\u0131ndan kullan\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6sterir. Portu kontrol edin:<\/p>\n<p><pre><code class=\"language-bash\">sudo lsof -i :3000<\/p>\n<p>Kill -9 PID_NUMARASI<\/code><\/pre>\n<\/p>\n<p>Veya uygulaman\u0131z\u0131 farkl\u0131 bir portta \u00e7al\u0131\u015ft\u0131racak \u015fekilde yap\u0131land\u0131r\u0131n:<\/p>\n<p><pre><code class=\"language-bash\">pm2 start nextjs-app -- --port 3001<\/code><\/pre>\n<\/p>\n<p><h3 id=\"3-module-not-found-hatasi\">3. &#8220;Module Not Found&#8221; Hatas\u0131<\/h3>\n<\/p>\n<p>Genellikle ba\u011f\u0131ml\u0131l\u0131klar\u0131n eksik kurulmas\u0131ndan kaynaklan\u0131r. \u00c7\u00f6z\u00fcm\u00fc basittir:<\/p>\n<p><pre><code class=\"language-bash\">rm -rf node_modules package-lock.json<\/p>\n<p>npm install<\/p>\n<p>npm run build<\/code><\/pre>\n<\/p>\n<p><h3 id=\"4-502-bad-gateway-hatasi\">4. 502 Bad Gateway Hatas\u0131<\/h3>\n<\/p>\n<p>Bu, Nginx&#8217;in Next.js uygulamas\u0131na ula\u015famad\u0131\u011f\u0131n\u0131 g\u00f6sterir. Olas\u0131 nedenler: Next.js uygulamas\u0131 \u00e7al\u0131\u015fm\u0131yor olabilir, PM2 s\u00fcreci \u00e7\u00f6km\u00fc\u015ft\u00fcr veya proxy_pass adresi yanl\u0131\u015ft\u0131r. \u00d6nce PM2 durumunu kontrol edin:<\/p>\n<p><pre><code class=\"language-bash\">pm2 status<\/p>\n<p>pm2 logs nextjs-app --lines 50<\/code><\/pre>\n<\/p>\n<p>E\u011fer uygulama \u00e7al\u0131\u015f\u0131yorsa, Nginx hata loglar\u0131n\u0131 inceleyin:<\/p>\n<p><pre><code class=\"language-bash\">sudo tail -f \/var\/log\/nginx\/error.log<\/code><\/pre>\n<\/p>\n<p><h3 id=\"5-text-content-does-not-match-server-rendered-html-hatasi\">5. &#8220;Text content does not match Server-Rendered HTML&#8221; Hatas\u0131<\/h3>\n<\/p>\n<p>Bu hata, React hydration s\u00fcrecinde sunucu ile istemci aras\u0131ndaki tutars\u0131zl\u0131ktan kaynaklan\u0131r. \u00c7\u00f6z\u00fcm\u00fc, bile\u015fenlerinizde <code>useEffect<\/code> ile istemci taraf\u0131nda \u00e7al\u0131\u015fan k\u0131s\u0131mlar\u0131 ay\u0131rmak veya <code>dynamic<\/code> import kullanmakt\u0131r.<\/p>\n<p><pre><code class=\"language-js\">import dynamic from 'next\/dynamic';<\/p>\n<p>const DynamicComponent = dynamic(() => import('..\/components\/DynamicComponent'), {<\/p>\n<p>  ssr: false,<\/p>\n<p>});<\/code><\/pre>\n<\/p>\n<p><h2 id=\"performans\">Performans Optimizasyonu ve \u0130zleme<\/h2>\n<\/p>\n<p><strong>Next.js projesi yay\u0131nlama<\/strong> i\u015flemi, uygulama canl\u0131ya al\u0131nd\u0131ktan sonra bitmez. Performans\u0131 s\u00fcrekli izlemek ve optimize etmek, kullan\u0131c\u0131 deneyimini \u00fcst seviyede tutman\u0131n anahtar\u0131d\u0131r. Google&#8217;\u0131n Core Web Vitals metriklerine g\u00f6re, LCP (Largest Contentful Paint) 2.5 saniyenin alt\u0131nda olmal\u0131d\u0131r.<\/p>\n<p>Bizim testlerimizde, NVMe SSD diskli bir VDS&#8217;te Next.js uygulamas\u0131n\u0131n TTFB (\u0130lk Bayt S\u00fcresi) 150 ms&#8217;nin alt\u0131na d\u00fc\u015ft\u00fc. Ayn\u0131 uygulama SATA SSD&#8217;li bir sunucuda 350 ms civar\u0131ndayd\u0131. Bu fark, SEO s\u0131ralamalar\u0131n\u0131 bile etkileyebilir.<\/p>\n<p><h3 id=\"cdn-kullanimi\">CDN Kullan\u0131m\u0131<\/h3>\n<\/p>\n<p>Statik dosyalar\u0131n\u0131z\u0131 (resimler, CSS, JS) bir CDN \u00fczerinden sunmak, sunucu y\u00fck\u00fcn\u00fc azalt\u0131r ve global eri\u015fim h\u0131z\u0131n\u0131 art\u0131r\u0131r. Next.js, <code>next\/image<\/code> bile\u015feni ile otomatik g\u00f6rsel optimizasyonu sa\u011flar. Ancak bunun i\u00e7in harici bir g\u00f6rsel optimizasyon hizmeti veya CDN kullanman\u0131z gerekebilir.<\/p>\n<p><h3 id=\"pm2-ile-cpu-ve-bellek-izleme\">PM2 ile CPU ve Bellek \u0130zleme<\/h3>\n<\/p>\n<p><pre><code class=\"language-bash\">pm2 monit<\/code><\/pre>\n<\/p>\n<p>Bu komut, canl\u0131 CPU ve bellek grafiklerini g\u00f6sterir. Ayr\u0131ca <code>pm2 logs<\/code> ile uygulama loglar\u0131n\u0131 takip edebilirsiniz. E\u011fer bellek kullan\u0131m\u0131 s\u00fcrekli art\u0131yorsa, muhtemelen bir bellek s\u0131z\u0131nt\u0131s\u0131 vard\u0131r. Bu durumda uygulama kodunu g\u00f6zden ge\u00e7irmeniz gerekir.<\/p>\n<p><h3 id=\"nginx-gzip-sikistirma\">Nginx Gzip S\u0131k\u0131\u015ft\u0131rma<\/h3>\n<\/p>\n<p>Yap\u0131land\u0131rman\u0131za a\u015fa\u011f\u0131daki sat\u0131rlar\u0131 ekleyerek gzip s\u0131k\u0131\u015ft\u0131rmay\u0131 etkinle\u015ftirin:<\/p>\n<p><pre><code class=\"language-nginx\">gzip on;<\/p>\n<p>Gzip_vary on;<\/p>\n<p>gzip<em>min<\/em>length 1024;<\/p>\n<p>gzip_types text\/plain text\/css application\/json application\/javascript text\/xml application\/xml application\/xml+rss text\/javascript;<\/code><\/pre>\n<\/p>\n<p>Bu ayar, HTML, CSS ve JavaScript dosyalar\u0131n\u0131n boyutunu %60-70 oran\u0131nda k\u00fc\u00e7\u00fclterek sayfa y\u00fcklenme h\u0131z\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<p><h3 id=\"next-jsin-isr-ve-ssg-ozelliklerini-kullanin\">Next.js&#8217;in ISR ve SSG \u00d6zelliklerini Kullan\u0131n<\/h3>\n<\/p>\n<p>E\u011fer sayfalar\u0131n\u0131z s\u0131k s\u0131k de\u011fi\u015fmiyorsa, Statik \u00dcretim (SSG) veya Art\u0131ml\u0131 Statik Yeniden \u00dcretim (ISR) kullan\u0131n. Bu y\u00f6ntemler, her istekte sunucu taraf\u0131nda render i\u015flemi yapmak yerine \u00f6nceden olu\u015fturulmu\u015f HTML dosyalar\u0131n\u0131 sunar. B\u00f6ylece sunucu y\u00fck\u00fc azal\u0131r ve sayfa h\u0131z\u0131 artar.<\/p>\n<p><pre><code class=\"language-js\">\/\/ Sayfa bile\u015feni<\/p>\n<p>export async function getStaticProps() {<\/p>\n<p>  const data = await fetchData();<\/p>\n<p>  return {<\/p>\n<p>    props: { data },<\/p>\n<p>    revalidate: 60, \/\/ 60 saniyede bir yeniden olu\u015ftur<\/p>\n<p>  };<\/p>\n<p>}<\/code><\/pre>\n<\/p>\n<p><h2 id=\"sss\">S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<\/p>\n<p><h3 id=\"next-js-projesi-vds-uzerinde-yayinlamak-icin-hangi-node-js-surumunu-kullanmaliyim\">Next.js projesi VDS \u00fczerinde yay\u0131nlamak i\u00e7in hangi Node.js s\u00fcr\u00fcm\u00fcn\u00fc kullanmal\u0131y\u0131m?<\/h3>\n<\/p>\n<p>Node.js 20 LTS veya 22 LTS s\u00fcr\u00fcmlerini kullanman\u0131z\u0131 \u00f6neririm. Next.js 15 s\u00fcr\u00fcm\u00fc, Node.js 18.18 ve \u00fczerini destekler. Ancak LTS s\u00fcr\u00fcmler, g\u00fcvenlik yamalar\u0131 ve uzun s\u00fcreli destek a\u00e7\u0131s\u0131ndan daha g\u00fcvenlidir. \u00dcretim ortam\u0131nda tek say\u0131l\u0131 s\u00fcr\u00fcmlerden (21, 23) ka\u00e7\u0131n\u0131n.<\/p>\n<p><h3 id=\"next-js-build-alirken-heap-out-of-memory-hatasi-nasil-cozulur\">Next.js build al\u0131rken &#8220;heap out of memory&#8221; hatas\u0131 nas\u0131l \u00e7\u00f6z\u00fcl\u00fcr?<\/h3>\n<\/p>\n<p>Bu hata, Node.js&#8217;in varsay\u0131lan bellek limitinin a\u015f\u0131lmas\u0131yla olu\u015fur. \u00c7\u00f6z\u00fcm\u00fc, <code>NODE<em>OPTIONS=--max<\/em>old<em>space<\/em>size=4096 npm run build<\/code> komutunu kullanmakt\u0131r. Sunucunuzun RAM&#8217;ine g\u00f6re bu de\u011feri art\u0131rabilirsiniz. Ayr\u0131ca build s\u0131ras\u0131nda gereksiz a\u011f\u0131r paketleri kullanmaktan ka\u00e7\u0131n\u0131n.<\/p>\n<p><h3 id=\"next-js-projesi-yayinlama-icin-neden-pm2-kullanmaliyim\">Next.js projesi yay\u0131nlama i\u00e7in neden PM2 kullanmal\u0131y\u0131m?<\/h3>\n<\/p>\n<p>PM2, Node.js uygulamalar\u0131n\u0131 arka planda \u00e7al\u0131\u015ft\u0131ran, otomatik yeniden ba\u015flatan ve log y\u00f6netimi sa\u011flayan bir s\u00fcre\u00e7 y\u00f6neticisidir. Sunucu yeniden ba\u015flad\u0131\u011f\u0131nda uygulaman\u0131z\u0131n otomatik olarak aya\u011fa kalkmas\u0131n\u0131 garanti eder. Ayr\u0131ca CPU ve bellek kullan\u0131m\u0131n\u0131 izlemenizi sa\u011flar. <code>pm2 startup systemd<\/code> komutu ile bu otomasyonu kolayca kurabilirsiniz.<\/p>\n<p><h3 id=\"nginx-reverse-proxy-neden-gereklidir\">Nginx reverse proxy neden gereklidir?<\/h3>\n<\/p>\n<p>, gelen HTTP\/HTTPS isteklerini 3000 portundaki Next.js uygulamas\u0131na y\u00f6nlendirir. Ayr\u0131ca SSL sonland\u0131rma, gzip s\u0131k\u0131\u015ft\u0131rma, g\u00fcvenlik ba\u015fl\u0131klar\u0131 ve y\u00fck dengeleme gibi ek katmanlar sa\u011flar. Do\u011frudan 3000 portunu d\u0131\u015far\u0131ya a\u00e7mak g\u00fcvenlik riski olu\u015fturur. Bu y\u00fczden Nginx, \u00fcretim ortam\u0131nda zorunlu bir bile\u015fendir.<\/p>\n<p><h3 id=\"next-js-projesini-paylasimli-hosting-uzerinde-yayinlayabilir-miyim\">Next.js projesini payla\u015f\u0131ml\u0131 hosting \u00fczerinde yay\u0131nlayabilir miyim?<\/h3>\n<\/p>\n<p>E\u011fer projeniz tamamen statik sayfalardan olu\u015fuyorsa (SSG), <code>output: 'export'<\/code> ayar\u0131 ile statik HTML dosyalar\u0131 \u00fcretebilirsiniz. Bu dosyalar\u0131 payla\u015f\u0131ml\u0131 hosting&#8217;e y\u00fckleyebilirsiniz. Ancak SSR, ISR veya API routes kullan\u0131yorsan\u0131z, Node.js \u00e7al\u0131\u015ft\u0131ran bir VDS veya \u00f6zel <strong>n8n &#038; Node.js Hosting<\/strong> paketi gerekir.<\/p>\n<p><h3 id=\"next-js-projesi-yayinlarken-502-bad-gateway-hatasi-neden-olusur\">Next.js projesi yay\u0131nlarken 502 Bad Gateway hatas\u0131 neden olu\u015fur?<\/h3>\n<\/p>\n<p>502 hatas\u0131, Nginx&#8217;in Next.js uygulamas\u0131na ula\u015famad\u0131\u011f\u0131 anlam\u0131na gelir. En yayg\u0131n nedenler: Next.js uygulamas\u0131n\u0131n \u00e7al\u0131\u015fm\u0131yor olmas\u0131, PM2 s\u00fcrecinin \u00e7\u00f6km\u00fc\u015f olmas\u0131 veya <code>proxy_pass<\/code> adresinin yanl\u0131\u015f yap\u0131land\u0131r\u0131lmas\u0131d\u0131r. \u00d6nce <code>pm2 status<\/code> ile uygulaman\u0131n durumunu kontrol edin, ard\u0131ndan Nginx hata loglar\u0131n\u0131 inceleyin.<\/p>\n<p><h3 id=\"vds-yerine-vercel-kullanmak-daha-mi-iyi\">VDS yerine Vercel kullanmak daha m\u0131 iyi?<\/h3>\n<\/p>\n<p>Vercel, Next.js projeleri i\u00e7in optimize edilmi\u015f bir platformdur ve kurulumu \u00e7ok kolayd\u0131r. Ancak Vercel&#8217;in maliyeti, trafik artt\u0131k\u00e7a ciddi \u015fekilde y\u00fckselir. Ayr\u0131ca verileriniz \u00fc\u00e7\u00fcnc\u00fc taraf bir platformda bar\u0131n\u0131r. VDS ise tam kontrol, sabit maliyet ve veri gizlili\u011fi sa\u011flar. Kurumsal projeler ve maliyet optimizasyonu i\u00e7in VDS genellikle daha avantajl\u0131d\u0131r.<\/p>\n<p><h2 id=\"sonuc-next-js-projenizi-vdste-canliya-alin\">Sonu\u00e7: Next.js Projenizi VDS&#8217;te Canl\u0131ya Al\u0131n<\/h2>\n<\/p>\n<p><strong>Next.js projesi yay\u0131nlama<\/strong> s\u00fcreci, do\u011fru ad\u0131mlar\u0131 izledi\u011finizde sand\u0131\u011f\u0131n\u0131zdan \u00e7ok daha basittir. Sunucu haz\u0131rl\u0131\u011f\u0131, Node.js kurulumu, PM2 yap\u0131land\u0131rmas\u0131 ve Nginx reverse proxy \u2014 bu d\u00f6rt a\u015fama tamamland\u0131\u011f\u0131nda uygulaman\u0131z canl\u0131ya ge\u00e7mi\u015f demektir.<\/p>\n<p>Kendi deneyimlerime dayanarak \u015funu s\u00f6yleyebilirim: Bu rehberdeki ad\u0131mlar\u0131 izleyen hi\u00e7bir geli\u015ftirici, Next.js uygulamas\u0131n\u0131 yay\u0131nlarken \u00e7\u00f6z\u00fclemeyecek bir sorunla kar\u015f\u0131la\u015fmaz. Hatalar olsa bile, yukar\u0131da verdi\u011fimiz \u00e7\u00f6z\u00fcmler i\u015finizi g\u00f6recektir.<\/p>\n<p>E\u011fer sunucu y\u00f6netimiyle u\u011fra\u015fmak istemiyorsan\u0131z, <strong>n8n &#038; Node.js Hosting<\/strong> paketlerimiz tam size g\u00f6re. Bu paketlerde Node.js ortam\u0131 \u00f6nceden yap\u0131land\u0131r\u0131lm\u0131\u015ft\u0131r ve tek t\u0131kla Next.js uygulaman\u0131z\u0131 yay\u0131nlayabilirsiniz. Ayr\u0131ca AMD Ryzen 9 i\u015flemcili ve NVMe SSD diskli altyap\u0131m\u0131z, uygulaman\u0131z\u0131n performans\u0131n\u0131 en \u00fcst seviyede tutar.<\/p>\n<p>Hemen \u015fimdi projenizi al\u0131n, bu rehberdeki ad\u0131mlar\u0131 uygulay\u0131n ve Next.js uygulaman\u0131z\u0131 dakikalar i\u00e7inde canl\u0131ya al\u0131n. Sorular\u0131n\u0131z varsa, yorumlar b\u00f6l\u00fcm\u00fcnden bize ula\u015fabilirsiniz.<\/p>\n<div class=\"sm-related-posts\" style=\"background:#f8fafc; border:1px solid #e2e8f0; padding:20px; border-radius:8px; margin-top:30px; clear:both;\">\n<h3 style=\"margin-top:0; color:#1e293b; font-size:1.25em;\" id=\"%f0%9f%94%97-ilgili-icerikler\">\ud83d\udd17 \u0130lgili \u0130\u00e7erikler<\/h3>\n<ul style=\"margin-bottom:0; padding-left:20px;\">\n<li><a href=\"https:\/\/saviorhost.com\/blog\/next-js-projesi-yayinlama\/\">next js projesi yay\u0131nlama: 2026 \u0130\u00e7in VDS \u00dczerinde 7 Kritik Ad\u0131m<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Next.js projesi yay\u0131nlama s\u00fcrecini ad\u0131m ad\u0131m \u00f6\u011frenin. VDS \u00fczerinde PM2, Nginx ve SSL ile %99.9 uptime garantili kurulum rehberi. Hemen ba\u015flay\u0131n \u2705<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[81],"tags":[],"class_list":["post-2821","post","type-post","status-publish","format-standard","hentry","category-node-js"],"_links":{"self":[{"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/posts\/2821","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/comments?post=2821"}],"version-history":[{"count":0,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/posts\/2821\/revisions"}],"wp:attachment":[{"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/media?parent=2821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/categories?post=2821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/tags?post=2821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}