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
