57 lines
1.5 KiB
Docker
57 lines
1.5 KiB
Docker
# Build stage
|
|
FROM rust:1.72-slim-bookworm AS builder
|
|
|
|
# Install necessary build dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
musl-tools \
|
|
build-essential \
|
|
pkg-config \
|
|
libssl-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Add support for cross-compilation to Alpine
|
|
RUN rustup target add x86_64-unknown-linux-musl
|
|
|
|
# Create a new empty project
|
|
WORKDIR /app
|
|
COPY . .
|
|
|
|
# Build the project with musl target
|
|
RUN cargo build --target x86_64-unknown-linux-musl --release
|
|
|
|
# Runtime stage
|
|
FROM alpine:3.18
|
|
|
|
# Install runtime dependencies
|
|
RUN apk --no-cache add ca-certificates sqlite tzdata
|
|
|
|
# Create a non-root user for running the application
|
|
RUN addgroup -S dns && adduser -S dnsuser -G dns
|
|
|
|
# Create necessary directories
|
|
RUN mkdir -p /var/nx9-dns-server /var/log/nx9-dns-server /etc/nx9-dns-server
|
|
RUN chown -R dnsuser:dns /var/nx9-dns-server /var/log/nx9-dns-server /etc/nx9-dns-server
|
|
|
|
# Copy the compiled binary
|
|
COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/dns_server /usr/local/bin/
|
|
RUN chmod +x /usr/local/bin/dns_server
|
|
|
|
# Copy configuration files
|
|
COPY --from=builder /app/conf/dns_records.sql /etc/nx9-dns-server/
|
|
COPY --from=builder /app/conf/dns.db.sample /etc/nx9-dns-server/
|
|
|
|
# Expose DNS ports
|
|
EXPOSE 53/udp 53/tcp
|
|
# Expose Web UI port
|
|
EXPOSE 8080/tcp
|
|
# Expose API port
|
|
EXPOSE 8081/tcp
|
|
|
|
# Set working directory
|
|
WORKDIR /var/nx9-dns-server
|
|
|
|
# Switch to non-root user
|
|
USER dnsuser
|
|
|
|
# Command to run the application
|
|
CMD ["/usr/local/bin/dns_server"] |