diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..66dfd91 --- /dev/null +++ b/.dockerignore @@ -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 diff --git a/DOCKER.md b/DOCKER.md new file mode 100644 index 0000000..ac45b6f --- /dev/null +++ b/DOCKER.md @@ -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 +``` + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5ca81b6 --- /dev/null +++ b/Dockerfile @@ -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"] diff --git a/components/content-1.tsx b/components/content-1.tsx index 4a808e6..be584f4 100644 --- a/components/content-1.tsx +++ b/components/content-1.tsx @@ -51,8 +51,7 @@ export default function ContentSection() {