Files
play-life/Dockerfile

69 lines
2.3 KiB
Docker
Raw Normal View History

2025-12-29 20:01:55 +03:00
# Multi-stage build для единого образа frontend + backend
# Stage 1: Build Frontend
FROM node:20-alpine AS frontend-builder
WORKDIR /app/frontend
COPY play-life-web/package*.json ./
RUN npm ci
# Копируем исходники (node_modules исключены через .dockerignore)
COPY play-life-web/ .
RUN npm run build
# Stage 2: Build Backend
FROM golang:1.21-alpine AS backend-builder
WORKDIR /app/backend
COPY play-life-backend/go.mod play-life-backend/go.sum ./
RUN go mod download
COPY play-life-backend/ .
RUN go mod tidy
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
# Stage 3: Final image
FROM alpine:latest
# Устанавливаем необходимые пакеты
# tzdata — данные о часовых поясах для корректной работы планировщика
2025-12-29 20:01:55 +03:00
RUN apk --no-cache add \
ca-certificates \
nginx \
supervisor \
curl \
tzdata
2025-12-29 20:01:55 +03:00
# Создаем директории
WORKDIR /app
# Создаем директорию для загруженных файлов
RUN mkdir -p /app/uploads/wishlist && \
chmod 755 /app/uploads
2025-12-29 20:01:55 +03:00
# Копируем собранный frontend
COPY --from=frontend-builder /app/frontend/dist /usr/share/nginx/html
# Копируем собранный backend
COPY --from=backend-builder /app/backend/main /app/backend/main
COPY play-life-backend/admin.html /app/backend/admin.html
# Копируем миграции для применения при запуске
COPY play-life-backend/migrations /migrations
# Копируем файл версии
COPY VERSION /app/VERSION
2025-12-29 20:01:55 +03:00
# Копируем конфигурацию nginx
COPY nginx.conf /etc/nginx/nginx.conf
COPY nginx-unified.conf /etc/nginx/conf.d/default.conf
# Копируем конфигурацию supervisor для запуска backend
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# Создаем директории для логов
RUN mkdir -p /var/log/supervisor && \
mkdir -p /var/log/nginx && \
mkdir -p /var/run
# Открываем порт 80
EXPOSE 80
# Запускаем supervisor, который запустит nginx и backend
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]