Takip et

Next.js, NestJS ve PostgreSQL Uygulamasını Docker ve Nginx ile Dağıtma

Next.js, NestJS ve PostgreSQL Uygulamasını Docker ve Nginx ile Dağıtma

Merhaba! Bu makalede, Next.js (frontend), NestJS (backend) ve PostgreSQL (veritabanı) kullanan bir uygulamanın Docker ve Nginx ile nasıl kolayca dağıtılacağını adım adım göstereceğim. Bu süreç, uygulamanızın tutarlı ve ölçeklenebilir bir şekilde çalışmasını sağlar. Öncelikle, her bir bileşenin Docker imajını nasıl oluşturacağımızı ve ardından bunları Nginx ters proxy’si ile nasıl birleştireceğimizi inceleyeceğiz.

Docker Dosyalarını Hazırlama

Başlangıçta, her bir hizmet (Next.js, NestJS, PostgreSQL) için ayrı Dockerfile’lar oluşturmalıyız. Bu dosyalar, her bir servisin çalışma ortamını tanımlar. Örneğin, Next.js için Dockerfile şu şekilde olabilir:


# Next.js Dockerfile
FROM node:16-alpine

WORKDIR /app

COPY package.json package-lock.json ./

RUN npm install

COPY . .

RUN npm run build

EXPOSE 3000

CMD ["npm", "start"]

Benzer şekilde, NestJS ve PostgreSQL için de Dockerfile’lar oluşturmanız gerekecek. PostgreSQL için, veritabanı ayarlarını (örneğin, kullanıcı adı, şifre ve veritabanı adı) docker-compose.yml dosyasında ayarlayacağız.

docker-compose.yml Dosyası

Tüm servisleri yönetmek için docker-compose.yml dosyasını kullanacağız. Bu dosya, her bir servisin nasıl çalıştırılacağını ve aralarındaki bağlantıları tanımlar. İşte örnek bir docker-compose.yml dosyası:


version: "3.9"
services:
  db:
    image: postgres:13
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydatabase
    ports:
      - "5432:5432"
  api:
    build: ./backend
    ports:
      - "3001:3001"
    depends_on:
      - db
    environment:
      DATABASE_URL: postgres://myuser:mypassword@db:5432/mydatabase
  web:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - api

Bu dosya, PostgreSQL, NestJS (api) ve Next.js (web) servislerini tanımlar ve aralarındaki bağımlılıkları belirtir. Örneğin, api servisi db servisinden bağımlıdır, yani db çalışmadan önce api çalışamaz.

Nginx Ters Proxy’si

Son olarak, Nginx’i tüm istekleri doğru servise yönlendirmek için kullanacağız. Bu, daha iyi performans ve güvenlik sağlar. Nginx konfigürasyon dosyası (nginx.conf) şu şekilde olabilir:


server {
    listen 80;
    server_name your_domain.com;

    location /api {
        proxy_pass http://api:3001;
    }

    location / {
        proxy_pass http://web:3000;
    }
}

Bu konfigürasyon, /api ile başlayan istekleri NestJS uygulamasına, diğer tüm istekleri ise Next.js uygulamasına yönlendirir. Nginx’in de Docker ile çalıştırılması gerekecektir. Bu, başka bir Dockerfile veya docker-compose.yml dosyasına eklenerek yapılabilir.

Dağıtım Süreci

Tüm dosyalar hazır olduktan sonra, docker-compose up -d –build komutu ile tüm servisleri başlatabilirsiniz. Uygulamanız artık Docker container’larında çalışıyor olacak. Bu işlem, uygulamanızın farklı ortamlarda (geliştirme, test, üretim) tutarlı bir şekilde çalışmasını sağlar. Daha fazla ölçeklenebilirlik için, Docker Swarm veya Kubernetes gibi araçları kullanabilirsiniz.

Umarım bu makale yardımcı olmuştur. Daha fazla bilgi ve örnek için fatihsoysal.com adresini ziyaret edebilirsiniz. Ayrıca, Docker ve ilgili teknolojiler hakkında daha fazla bilgi için aşağıdaki kaynakları inceleyebilirsiniz:

Bu makalede, uygulamanızı Docker ve Nginx ile nasıl dağıtacağınızı adım adım anlattık. Bu, uygulamanızın güvenli, ölçeklenebilir ve tutarlı bir şekilde çalışmasını sağlar. Unutmayın ki bu sadece bir başlangıç noktasıdır ve uygulamanızın özel gereksinimlerine göre ayarlanması gerekebilir.

#Etiketler

Next.js, NestJS, PostgreSQL, Docker, Nginx, Dağıtım, Deployment, Containerization, Uygulama Dağıtımı, Rehber, Tutorial, Docker Compose, Nginx Ters Proxy

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.