{"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-10-12T17:05:32","modified_gmt":"2026-10-12T14:05:32","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><strong>Next.js projesi yay\u0131nlama<\/strong> denildi\u011finde \u00e7o\u011fu geli\u015ftiricinin akl\u0131na ilk olarak Vercel gelir. Ancak VDS \u00fczerinde yay\u0131nlamak; b\u00fct\u00e7e kontrol\u00fc, veri gizlili\u011fi ve tam sunucu hakimiyeti a\u00e7\u0131s\u0131ndan ciddi avantajlar sa\u011flar.<\/p>\n<p>\u0130\u015fin s\u0131rr\u0131, do\u011fru yap\u0131land\u0131r\u0131lm\u0131\u015f bir Node.js ortam\u0131 ve reverse proxy ayarlar\u0131nda yatar. Uygulaman\u0131z\u0131 VDS \u00fczerinde canl\u0131ya almak i\u00e7in sunucu se\u00e7imi, PM2, Nginx ve SSL ad\u0131mlar\u0131n\u0131 eksiksiz uygulaman\u0131z gerekir.<\/p>\n<p>Bu rehberde s\u00fcreci s\u0131f\u0131rdan anlat\u0131yorum: Node.js 20 LTS kurulumundan g\u00fcvenlik duvar\u0131na, build alma komutlar\u0131ndan yayg\u0131n hata \u00e7\u00f6z\u00fcmlerine kadar. Do\u011fru ad\u0131mlar\u0131 izledi\u011finizde SSR veya ISR kullanan bir Next.js uygulamas\u0131n\u0131 k\u0131sa s\u00fcrede VDS \u00fczerinde yay\u0131nlayabilirsiniz. Statik export senaryosunda ise farkl\u0131 bir yol var: Nginx\u2019e bile ihtiya\u00e7 duymadan dosyalar\u0131 payla\u015f\u0131ml\u0131 bir <strong>hosting<\/strong> hesab\u0131na y\u00fckleyebilirsiniz.<\/p>\n<div class=\"key-takeaways\">\n<p class=\"key-takeaways-title\"><strong>\ud83d\udccb \u00d6nemli Noktalar<\/strong><\/p>\n<ul>\n<li><strong>Next.js projesi yay\u0131nlama<\/strong> s\u00fcrecinde Node.js 20 LTS veya 22 LTS kullan\u0131lmal\u0131; tek say\u0131l\u0131 s\u00fcr\u00fcmler \u00fcretim i\u00e7in uygun de\u011fildir.<\/li>\n<li>PM2, uygulaman\u0131n arka planda \u00e7al\u0131\u015fmas\u0131n\u0131 ve sunucu yeniden ba\u015flad\u0131\u011f\u0131nda otomatik aya\u011fa kalkmas\u0131n\u0131 sa\u011flar.<\/li>\n<li>Nginx reverse proxy, 3000 portunu 80\/443\u2019e y\u00f6nlendirir; SSL, gzip ve g\u00fcvenlik ba\u015fl\u0131klar\u0131 ekler.<\/li>\n<li><code>.env.local<\/code> dosyas\u0131 API anahtarlar\u0131n\u0131 g\u00fcvenle y\u00f6netmek i\u00e7in kullan\u0131l\u0131r ve asla Git deposuna eklenmemelidir.<\/li>\n<li>Statik export kullan\u0131yorsan\u0131z <code>output: 'export'<\/code> ayar\u0131yla olu\u015fan dosyalar\u0131 payla\u015f\u0131ml\u0131 hosting \u00fczerinde \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/li>\n<\/ul>\n<\/div>\n<div class=\"table-of-contents\" role=\"navigation\" aria-label=\"\u0130\u00e7indekiler\">\n<p class=\"toc-title\"><strong>\u0130\u00e7indekiler<\/strong><\/p>\n<ul>\n<li><a href=\"#gereksinimler\">Next.js Projesini VDS\u2019te 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<\/ul>\n<\/div>\n<h2 id=\"gereksinimler\">Next.js Projesini VDS\u2019te Yay\u0131nlamak \u0130\u00e7in Gereksinimler Neler?<\/h2>\n<p><strong>Next.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 hosting\u2019den farkl\u0131 olarak size root yetkisi ve tam kontrol sa\u011flar. Bu da Node.js tabanl\u0131 uygulamalar i\u00e7in \u00f6nemli bir gereksinimdir.<\/p>\n<p>Temel donan\u0131m ihtiyac\u0131 ise \u015f\u00f6yledir: en az 2 GB RAM (4 GB \u00f6nerilir), 2 vCPU ve 20 GB NVMe SSD disk. Next.js\u2019in build s\u00fcreci, \u00f6zellikle b\u00fcy\u00fck projelerde 1.5 GB \u00fczeri RAM t\u00fcketebilir.<\/p>\n<figure class=\"wp-block-image size-large sm-inline-image\"><img width=\"1024\" height=\"576\" src=\"https:\/\/saviorhost.com\/blog\/wp-content\/uploads\/2026\/09\/next-js-projesi-yayinlama-next-js-chOv.webp\" class=\"sm-ai-image wp-image-2873\" alt=\"Next.js projesi yay\u0131nlama \u00f6ncesinde sunucuya terminal komutlar\u0131 yazan geli\u015ftirici\" loading=\"lazy\" decoding=\"async\" srcset=\"https:\/\/saviorhost.com\/blog\/wp-content\/uploads\/2026\/09\/next-js-projesi-yayinlama-next-js-chOv.webp 1024w, https:\/\/saviorhost.com\/blog\/wp-content\/uploads\/2026\/09\/next-js-projesi-yayinlama-next-js-chOv-300x169.webp 300w, https:\/\/saviorhost.com\/blog\/wp-content\/uploads\/2026\/09\/next-js-projesi-yayinlama-next-js-chOv-768x432.webp 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<p>D\u00fc\u015f\u00fck RAM\u2019li bir VDS\u2019te <code>next build<\/code> komutu s\u0131ras\u0131nda \u201cheap out of memory\u201d hatas\u0131 alman\u0131z m\u00fcmk\u00fcnd\u00fcr. Bu y\u00fczden en ba\u015ftan do\u011fru kaynaklar\u0131 se\u00e7mek gerekir.<\/p>\n<h3 id=\"neden-paylasimli-hosting-degil-de-vds\">Neden Payla\u015f\u0131ml\u0131 Hosting De\u011fil de VDS?<\/h3>\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.<\/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\/\">NVMe SSD disklerin h\u0131z avantaj\u0131<\/a>, Next.js\u2019in build s\u00fcresini belirgin bi\u00e7imde k\u0131salt\u0131r.<\/p>\n<h3 id=\"hangi-node-js-surumu-kullanilmali\">Hangi Node.js S\u00fcr\u00fcm\u00fc Kullan\u0131lmal\u0131?<\/h3>\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 \u00e7ift say\u0131l\u0131 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<div class=\"sm-table-wrap\">\n<table>\n<thead>\n<tr>\n<th>Next.js S\u00fcr\u00fcm\u00fc<\/th>\n<th>Minimum Node.js<\/th>\n<th>\u00d6nerilen Node.js<\/th>\n<th>React S\u00fcr\u00fcm\u00fc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Next.js 15<\/td>\n<td>18.18<\/td>\n<td>20 LTS \/ 22 LTS<\/td>\n<td>React 19<\/td>\n<\/tr>\n<tr>\n<td>Next.js 14<\/td>\n<td>18.17<\/td>\n<td>20 LTS<\/td>\n<td>React 18<\/td>\n<\/tr>\n<tr>\n<td>Next.js 13<\/td>\n<td>16.14<\/td>\n<td>18 LTS<\/td>\n<td>React 18<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"sm-note sm-note-warning\"><strong>\u26a0\ufe0f Dikkat:<\/strong> Node.js\u2019in 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.<\/div>\n<h2 id=\"sunucu-hazirligi\">Sunucu Haz\u0131rl\u0131\u011f\u0131: Node.js ve PM2 Kurulumu<\/h2>\n<p>Sunucuya ilk ba\u011fland\u0131\u011f\u0131n\u0131zda yapman\u0131z gereken ilk i\u015f, sistem paketlerini g\u00fcncellemek ve Node.js\u2019i 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>Node.js\u2019i 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<pre><code class=\"language-bash\">sudo apt update &amp;&amp; sudo apt upgrade -y\ncurl -fsSL https:\/\/deb.nodesource.com\/setup_20.x | sudo -E bash -\nsudo apt install -y nodejs git build-essential\nnode -v\nnpm -v<\/code><\/pre>\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<h3 id=\"pm2-kurulumu-ve-yapilandirmasi\">PM2 Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\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<pre><code class=\"language-bash\">sudo npm install -g pm2\npm2 startup systemd\npm2 --version<\/code><\/pre>\n<p><code>pm2 startup systemd<\/code> komutu, sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda PM2\u2019nin otomatik olarak ba\u015flamas\u0131n\u0131 sa\u011flar. Bu, y\u00fcksek uptime hedefleyen bir yap\u0131 i\u00e7in kritik bir ad\u0131md\u0131r.<\/p>\n<p><strong>Dikkat edin:<\/strong> PM2\u2019yi \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<pre><code class=\"language-bash\">sudo adduser nextjs\nsudo usermod -aG sudo nextjs\nsu - nextjs<\/code><\/pre>\n<h3 id=\"pm2-vs-systemd-hangisi-daha-iyi\">PM2 vs Systemd: Hangisi Daha \u0130yi?<\/h3>\n<p>PM2, Node.js ekosisteminde fiili standart haline gelmi\u015ftir. Baz\u0131 sistem y\u00f6neticileri ise systemd servislerini tercih eder. PM2; log y\u00f6netimi, cluster modu ve kolay izleme sunar. Systemd ise i\u015fletim sistemi d\u00fczeyinde daha s\u0131k\u0131 entegrasyon sa\u011flar.<\/p>\n<p>Pratikte Next.js projeleri i\u00e7in PM2\u2019nin kullan\u0131m kolayl\u0131\u011f\u0131 ve zengin \u00f6zellikleri a\u011f\u0131r basar. Ayr\u0131ca <code>pm2 monit<\/code> komutu ile canl\u0131 CPU ve bellek kullan\u0131m\u0131n\u0131 g\u00f6rebilirsiniz.<\/p>\n<h2 id=\"build-alma\">Next.js Build Alma ve \u00c7al\u0131\u015ft\u0131rma<\/h2>\n<p><strong>Next.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 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<h3 id=\"projeyi-sunucuya-klonlama-ve-bagimliliklari-kurma\">Projeyi Sunucuya Klonlama ve Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Kurma<\/h3>\n<pre><code class=\"language-bash\">cd \/var\/www\nsudo mkdir nextjs-app &amp;&amp; cd nextjs-app\nsudo chown -R $USER:$USER .\ngit clone https:\/\/github.com\/kullanici\/nextjs-projesi.git .\nnpm install<\/code><\/pre>\n<p>Next.js build al\u0131rken devDependencies alt\u0131ndaki paketlere ihtiya\u00e7 duyar. Bu y\u00fczden yaln\u0131zca production ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kuran komutlardan ka\u00e7\u0131n\u0131n; varsay\u0131lan <code>npm install<\/code> t\u00fcm gerekli paketleri kurar.<\/p>\n<h3 id=\"build-alma-ve-pm2-ile-baslatma\">Build Alma ve PM2 ile Ba\u015flatma<\/h3>\n<pre><code class=\"language-bash\">npm run build\npm2 start npm --name \"nextjs-app\" -- start\npm2 save\npm2 status<\/code><\/pre>\n<p><code>pm2 start npm -- start<\/code> komutu, npm\u2019i 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<pre><code class=\"language-bash\">pm2 logs nextjs-app\npm2 restart nextjs-app\npm2 stop nextjs-app\npm2 delete nextjs-app<\/code><\/pre>\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<h3 id=\"statik-export-alternatifi\">Statik Export Alternatifi<\/h3>\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<pre><code class=\"language-js\">\/\/ next.config.js\nmodule.exports = {\n  output: 'export',\n}<\/code><\/pre>\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 linux hosting 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<h2 id=\"nginx-reverse-proxy\">Nginx Reverse Proxy ve SSL Yap\u0131land\u0131rmas\u0131<\/h2>\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><!-- image_prompt: a server room with two physical servers connected by glowing blue ethernet cables, data flow visualized as soft light streams, no readable text or labels on screens, low angle shot, dark background\n<\/p>\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":2875,"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","has-post-thumbnail","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":2,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/posts\/2821\/revisions"}],"predecessor-version":[{"id":2874,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/posts\/2821\/revisions\/2874"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/saviorhost.com\/blog\/wp-json\/wp\/v2\/media\/2875"}],"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}]}}