added docker files
This commit is contained in:
@@ -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
|
||||||
|
```
|
||||||
|
|
||||||
+52
@@ -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>
|
</p>
|
||||||
|
|
||||||
<div className="mt-6 space-y-3">
|
<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>
|
</div>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</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";
|
import type { NextConfig } from "next";
|
||||||
|
|
||||||
const nextConfig: NextConfig = {
|
const nextConfig: NextConfig = {
|
||||||
|
output: 'standalone',
|
||||||
images: {
|
images: {
|
||||||
remotePatterns: [
|
remotePatterns: [
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user