added docker files

This commit is contained in:
Ahmadreza Badiei 2025-12-04 18:21:55 +03:30
parent ab297039ba
commit ae22236943
6 changed files with 247 additions and 2 deletions

56
.dockerignore Normal file
View File

@ -0,0 +1,56 @@
# Dependencies
node_modules
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# Testing
coverage
.nyc_output
# Next.js
.next
out
dist
build
# Production
*.log
# Misc
.DS_Store
*.pem
# Debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Local env files
.env*.local
.env
# Vercel
.vercel
# TypeScript
*.tsbuildinfo
next-env.d.ts
# IDE
.vscode
.idea
*.swp
*.swo
*~
# Git
.git
.gitignore
# Docker
Dockerfile
docker-compose.yml
.dockerignore
DOCKER.md

120
DOCKER.md Normal file
View File

@ -0,0 +1,120 @@
# راهنمای استفاده از Docker
## نصب Docker
اگر Docker روی سیستم شما نصب نیست، می‌توانید از یکی از روش‌های زیر استفاده کنید:
### Windows
1. **Docker Desktop برای Windows** را دانلود و نصب کنید:
- دانلود از: https://www.docker.com/products/docker-desktop/
- پس از نصب، Docker Desktop را اجرا کنید
- منتظر بمانید تا Docker شروع به کار کند
2. **بررسی نصب:**
```powershell
docker --version
docker compose version
```
### Linux
```bash
# Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# اضافه کردن کاربر به گروه docker
sudo usermod -aG docker $USER
```
### macOS
1. **Docker Desktop برای Mac** را دانلود و نصب کنید:
- دانلود از: https://www.docker.com/products/docker-desktop/
## ساخت و اجرای کانتینر
### استفاده از Docker Compose (پیشنهادی)
**نکته:** در نسخه‌های جدید Docker، از `docker compose` (با فاصله) استفاده می‌شود به جای `docker-compose` (با خط تیره).
```bash
# ساخت و اجرای کانتینر
docker compose up -d
# مشاهده لاگ‌ها
docker compose logs -f
# توقف کانتینر
docker compose down
# ساخت مجدد و اجرا
docker compose up -d --build
```
**اگر دستور بالا کار نکرد، از نسخه قدیمی استفاده کنید:**
```bash
docker-compose up -d
```
### استفاده مستقیم از Docker
```bash
# ساخت image
docker build -t next-ctrlp .
# اجرای کانتینر
docker run -p 3000:3000 next-ctrlp
# اجرا در حالت detached
docker run -d -p 3000:3000 --name next-ctrlp-app next-ctrlp
```
## دسترسی به اپلیکیشن
پس از اجرای کانتینر، اپلیکیشن در آدرس زیر در دسترس است:
- http://localhost:3000
## عیب‌یابی
### مشکل: دستور docker شناسایی نمی‌شود
**راه حل:**
1. مطمئن شوید Docker Desktop نصب و در حال اجرا است
2. PowerShell را بسته و دوباره باز کنید
3. یا از Command Prompt استفاده کنید
4. بررسی کنید که Docker در PATH سیستم قرار دارد
### مشکل: Port 3000 در حال استفاده است
**راه حل:**
```bash
# تغییر پورت در docker-compose.yml
ports:
- "3001:3000" # حالا از پورت 3001 استفاده کنید
```
یا کانتینر دیگری که از پورت 3000 استفاده می‌کند را متوقف کنید.
## متغیرهای محیطی
اگر نیاز به تنظیم متغیرهای محیطی دارید، می‌توانید فایل `.env` را ایجاد کنید و در `docker-compose.yml` آن را اضافه کنید:
```yaml
services:
next-app:
env_file:
- .env
```
یا به صورت مستقیم:
```yaml
services:
next-app:
environment:
- NODE_ENV=production
- NEXT_PUBLIC_API_URL=https://api.example.com
```

52
Dockerfile Normal file
View File

@ -0,0 +1,52 @@
# Stage 1: Dependencies
FROM node:20-alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
# Copy package files
COPY package.json package-lock.json* yarn.lock* ./
# Install dependencies
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
else echo "Lockfile not found." && exit 1; \
fi
# Stage 2: Builder
FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Set environment variables for build
ENV NEXT_TELEMETRY_DISABLED 1
# Build the application
RUN npm run build
# Stage 3: Runner
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# Copy necessary files from standalone build
COPY --from=builder /app/public ./public
# Copy standalone build files
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
ENV HOSTNAME "0.0.0.0"
CMD ["node", "server.js"]

View File

@ -51,8 +51,7 @@ export default function ContentSection() {
</p>
<div className="mt-6 space-y-3">
<div className="block font-medium not-italic">احمدرضا بدیعی، مدیرعامل</div>
<div className="block font-medium not-italic">احمدرضا عزیزان</div>
<div className="block font-medium not-italic">احمدرضا عزیزان، مدیر</div>
</div>
</blockquote>
</div>

17
docker-compose.yml Normal file
View File

@ -0,0 +1,17 @@
services:
next-app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- NODE_ENV=production
restart: unless-stopped
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s

View File

@ -1,6 +1,7 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
output: 'standalone',
images: {
remotePatterns: [
{