Yükleniyor...

Birazdan kaldığınız yerden devam edeceksiniz.

Next.js Standalone Mode: Docker ile Next.js Sunucusu Dağıtımı

YayınlandıGüncellendi

Standalone Mode, Next.js projelerinin bağımlılıkları ve gerekli dosyaları bir araya getirerek Docker image boyutunu küçültmek ve dağıtımı hızlandırmak için kullanılan bir yapılandırma biçimidir. Bu makalede, standalone mode’un ne olduğu, nasıl etkinleştirildiği ve Docker kullanarak nasıl optimize edileceği detaylı olarak ele alınmaktadır.

Next.js Standalone Mode: Docker ile Next.js Sunucusu Dağıtımı

Standalone Mode Nedir?

Standalone Mode, Next.js projelerinin bağımlılıklarını ve gerekli dosyalarını tek bir bağımsız klasöre taşıyarak uygulamaların Docker gibi konteyner ortamlarında daha verimli çalışmasını sağlayan bir yapılandırmadır. Bu yapılandırma sayesinde, Docker image boyutu küçülür ve uygulama dağıtımı hızlanır.


Next.js Yapılandırması

Next.js projenizde standalone mode özelliğini etkinleştirmek için, next.config.js dosyanızda aşağıdaki ayarı yapmanız yeterlidir:

snippet.js
javascript5 satırUTF-8

Bu yapılandırma, derleme sırasında bağımsız dosyaları .next/standalone klasörüne toplar. Bu sayede bağımlılıklar izole edilir ve Docker container'ınızda daha az yer kaplar.


Standalone Mode için server.js Kullanımı

Standalone Mode, bağımsız bir server.js dosyası ile çalıştırılabilir. Aşağıda, uygulamanın yeniden başlatılmasını (retry) ve hata yakalamayı içeren bir server.js örneği verilmiştir:

snippet.js
javascript30 satırUTF-8

Bu dosya root dizinimizde olmalıdır. Bu sayede artık node server.js dediğimiz zaman next.js sunucusunu node instance'i ile ayağa kaldırabilir hale geliyoruz.


Dockerfile Örneği

Standalone Mode ile oluşturulan bir Next.js uygulamasını dağıtmak için çok aşamalı (multi-stage) bir Dockerfile kullanabilirsiniz. Aşağıdaki Dockerfile, hem derleme (build) hem de üretim (production) aşamalarını içermektedir:

snippet.dockerfile
dockerfile30 satırUTF-8

Bu makalede Next.js + Docker kullanımında next.js dosyalarını nasıl optimize edeceğinizi öğrendiniz. Dockerfile'ı 2 stage'den oluşacak şekilde kurduk. Bu sayede next.js sunucu hazırlanırken kullanılan ama runtime'da kullanılmayan dosyalardan kurtulmuş olduk. Next.js kodunu node engine ile çalıştırmak için bir server.js dosyası oluşturarak hataları logladık ve sunucuyu kapatmasını önledik. Dockerfile'ı da bu server.js dosyasına bağladık bu sayede logları tek bir yerden takip edebilir hale geldik. Bu yapıyı kullanarak GitHub actions, jenkins veya codepipeline gibi yapılarıyla kendi sunucumuza dağıtım yapabilir hale geliyoruz. Bir sonraki yazıda görüşmek üzere 👋.