added docker files
This commit is contained in:
parent
ab297039ba
commit
ae22236943
|
|
@ -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
|
||||
|
|
@ -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
|
||||
```
|
||||
|
||||
|
|
@ -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"]
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
import type { NextConfig } from "next";
|
||||
|
||||
const nextConfig: NextConfig = {
|
||||
output: 'standalone',
|
||||
images: {
|
||||
remotePatterns: [
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue