Fix Docker configuration for deployment
- Update backend Dockerfile to use Rust 1.85 (edition 2024 support) - Add Aliyun mirrors for Alpine packages - Add rsproxy.cn mirror for cargo crates - Enable static OpenSSL linking - Fix frontend Dockerfile to use NEXT_PUBLIC_API_BASE - Add mkdir -p public to ensure public dir exists - Update docker-compose files to use correct env var names - Add docker-compose.deploy.yml for production deployment Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,16 @@
|
|||||||
# Build stage
|
# Build stage
|
||||||
FROM rust:1.84-alpine AS builder
|
FROM rust:1.85-alpine AS builder
|
||||||
|
|
||||||
RUN apk add --no-cache musl-dev pkgconfig openssl-dev
|
# Use Aliyun mirrors for faster package downloads in China
|
||||||
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||||
|
|
||||||
|
RUN apk add --no-cache musl-dev pkgconfig openssl-dev openssl-libs-static
|
||||||
|
|
||||||
|
# Configure cargo to use rsproxy.cn mirror for crates
|
||||||
|
RUN mkdir -p /usr/local/cargo && printf '[source.crates-io]\nreplace-with = "rsproxy-sparse"\n\n[source.rsproxy-sparse]\nregistry = "sparse+https://rsproxy.cn/index/"\n\n[net]\ngit-fetch-with-cli = true\n' > /usr/local/cargo/config.toml
|
||||||
|
|
||||||
|
# Static OpenSSL linking
|
||||||
|
ENV OPENSSL_STATIC=1
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
@@ -30,13 +39,15 @@ RUN cargo build --release
|
|||||||
# Runtime stage
|
# Runtime stage
|
||||||
FROM alpine:3.21
|
FROM alpine:3.21
|
||||||
|
|
||||||
|
# Use Aliyun mirrors
|
||||||
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates libgcc
|
RUN apk add --no-cache ca-certificates libgcc
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Copy the binary from builder
|
# Copy the binary from builder
|
||||||
COPY --from=builder /app/target/release/backend_rust /app/backend_rust
|
COPY --from=builder /app/target/release/backend_rust /app/backend_rust
|
||||||
COPY --from=builder /app/target/release/migration /app/migration
|
|
||||||
|
|
||||||
# Create uploads directory
|
# Create uploads directory
|
||||||
RUN mkdir -p /app/uploads/avatars
|
RUN mkdir -p /app/uploads/avatars
|
||||||
|
|||||||
37
docker-compose.deploy.yml
Normal file
37
docker-compose.deploy.yml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
backend:
|
||||||
|
build:
|
||||||
|
context: ./backend_rust
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: notify-backend
|
||||||
|
restart: unless-stopped
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
environment:
|
||||||
|
DATABASE_URL: postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD}@host.docker.internal:5432/${POSTGRES_DB:-notify}
|
||||||
|
JWT_SECRET: ${JWT_SECRET:?JWT_SECRET is required}
|
||||||
|
BASE_URL: ${BASE_URL:-http://localhost}
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:4000:4000"
|
||||||
|
volumes:
|
||||||
|
- uploads_data:/app/uploads
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
build:
|
||||||
|
context: ./frontend
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
args:
|
||||||
|
NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:-http://localhost}
|
||||||
|
container_name: notify-frontend
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- backend
|
||||||
|
environment:
|
||||||
|
NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:-http://localhost}
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:3001:3000"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
uploads_data:
|
||||||
@@ -44,14 +44,14 @@ services:
|
|||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
args:
|
args:
|
||||||
# 构建时注入 API URL(用于 Next.js 静态优化)
|
# 构建时注入 API URL(用于 Next.js 静态优化)
|
||||||
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-}
|
NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:-}
|
||||||
container_name: notify-frontend
|
container_name: notify-frontend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- backend
|
- backend
|
||||||
environment:
|
environment:
|
||||||
# 运行时 API URL(用于 SSR)
|
# 运行时 API URL(用于 SSR)
|
||||||
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-}
|
NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:-}
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:3000:3000"
|
- "127.0.0.1:3000:3000"
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ FROM node:20-alpine AS builder
|
|||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# 构建参数(NEXT_PUBLIC_* 变量需要在构建时注入)
|
# 构建参数(NEXT_PUBLIC_* 变量需要在构建时注入)
|
||||||
ARG NEXT_PUBLIC_API_URL
|
ARG NEXT_PUBLIC_API_BASE
|
||||||
ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
|
ENV NEXT_PUBLIC_API_BASE=${NEXT_PUBLIC_API_BASE}
|
||||||
|
|
||||||
# Copy package files
|
# Copy package files
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
@@ -16,6 +16,9 @@ RUN npm ci
|
|||||||
# Copy source code
|
# Copy source code
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
|
# Ensure public directory exists
|
||||||
|
RUN mkdir -p public
|
||||||
|
|
||||||
# Build Next.js app
|
# Build Next.js app
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user