Initial commit
This commit is contained in:
58
Dockerfile
Normal file
58
Dockerfile
Normal file
@@ -0,0 +1,58 @@
|
||||
# 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
|
||||
|
||||
# Устанавливаем необходимые пакеты
|
||||
RUN apk --no-cache add \
|
||||
ca-certificates \
|
||||
nginx \
|
||||
supervisor \
|
||||
curl
|
||||
|
||||
# Создаем директории
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем собранный 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
|
||||
|
||||
# Копируем конфигурацию 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"]
|
||||
|
||||
Reference in New Issue
Block a user