| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # =============================================================================
- # Sub2API Dockerfile for GoReleaser
- # =============================================================================
- # This Dockerfile is used by GoReleaser to build Docker images.
- # It only packages the pre-built binary, no compilation needed.
- # =============================================================================
- ARG ALPINE_IMAGE=alpine:3.21
- ARG POSTGRES_IMAGE=postgres:18-alpine
- FROM ${POSTGRES_IMAGE} AS pg-client
- FROM ${ALPINE_IMAGE}
- LABEL maintainer="Wei-Shaw <github.com/Wei-Shaw>"
- LABEL description="Sub2API - AI API Gateway Platform"
- LABEL org.opencontainers.image.source="https://github.com/Wei-Shaw/sub2api"
- # Install runtime dependencies
- RUN apk add --no-cache \
- ca-certificates \
- tzdata \
- curl \
- su-exec \
- libpq \
- zstd-libs \
- lz4-libs \
- krb5-libs \
- libldap \
- libedit \
- && rm -rf /var/cache/apk/*
- # Copy pg_dump and psql from a version-matched PostgreSQL image so backup and
- # restore work in the runtime container without requiring Docker socket access.
- COPY --from=pg-client /usr/local/bin/pg_dump /usr/local/bin/pg_dump
- COPY --from=pg-client /usr/local/bin/psql /usr/local/bin/psql
- COPY --from=pg-client /usr/local/lib/libpq.so.5* /usr/local/lib/
- # Create non-root user
- RUN addgroup -g 1000 sub2api && \
- adduser -u 1000 -G sub2api -s /bin/sh -D sub2api
- WORKDIR /app
- # Copy the pre-built binary and runtime fallback resources from GoReleaser
- COPY sub2api /app/sub2api
- COPY --chown=sub2api:sub2api backend/resources /app/resources
- # Create data directory
- RUN mkdir -p /app/data && chown -R sub2api:sub2api /app
- # Copy entrypoint script (fixes volume permissions then drops to sub2api)
- COPY deploy/docker-entrypoint.sh /app/docker-entrypoint.sh
- RUN chmod +x /app/docker-entrypoint.sh
- EXPOSE 8080
- HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
- CMD curl -f http://localhost:${SERVER_PORT:-8080}/health || exit 1
- # Run the application (entrypoint fixes /app/data ownership then execs as sub2api)
- ENTRYPOINT ["/app/docker-entrypoint.sh"]
- CMD ["/app/sub2api"]
|