diff --git a/.dockerignore b/.dockerignore index 263798e07..ffbadbdde 100644 --- a/.dockerignore +++ b/.dockerignore @@ -5,7 +5,6 @@ .git # Ignore build artifacts -_output/ logs/ # Ignore non-essential documentation @@ -18,8 +17,6 @@ CHANGELOG/ # Ignore testing and linting configuration .golangci.yml -# Ignore deployment-related files -docker-compose.yaml # Ignore assets assets/ diff --git a/Dockerfile b/Dockerfile index eda24096c..8c204c08c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,49 +2,53 @@ FROM golang:1.21 as builder # Define the base directory for the application as an environment variable -ENV OPENIM_SERVER_DIR=/openim-server +ENV SERVER_DIR=/openim-chat # Set the working directory inside the container based on the environment variable -WORKDIR $OPENIM_SERVER_DIR +WORKDIR $SERVER_DIR # Set the Go proxy to improve dependency resolution speed -ENV GOPROXY=https://goproxy.cn,direct - -# Copy go.mod and go.sum files first to leverage Docker cache -COPY go.mod go.sum ./ -RUN go mod download +ENV GOPROXY=https://goproxy.io,direct # Copy all files from the current directory into the container COPY . . +RUN go mod download + + # Install Mage to use for building the application RUN go install github.com/magefile/mage@latest -# Execute the build command using Mage -RUN mage build +# Uncomment and ensure your build command is correctly specified +#RUN mage build + # Use Alpine Linux as the final base image due to its small size and included utilities FROM alpine:latest -# Define the base directory for the application as an environment variable again -ENV OPENIM_SERVER_DIR=/openim-server - # Install necessary packages, such as bash, to ensure compatibility and functionality RUN apk add --no-cache bash +ENV SERVER_DIR=/openim-chat + +# Set the working directory inside the container based on the environment variable +WORKDIR $SERVER_DIR + + + # Copy the compiled binaries and mage from the builder image to the final image -COPY --from=builder $OPENIM_SERVER_DIR/_output $OPENIM_SERVER_DIR/_output + +COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/ +COPY --from=builder $SERVER_DIR/config $SERVER_DIR/ COPY --from=builder /go/bin/mage /usr/local/bin/mage -COPY --from=builder $OPENIM_SERVER_DIR/magefile_windows.go $OPENIM_SERVER_DIR/ -COPY --from=builder $OPENIM_SERVER_DIR/magefile_unix.go $OPENIM_SERVER_DIR/ -COPY --from=builder $OPENIM_SERVER_DIR/magefile.go $OPENIM_SERVER_DIR/ -COPY --from=builder $OPENIM_SERVER_DIR/start-config.yml $OPENIM_SERVER_DIR/ +COPY --from=builder $SERVER_DIR/magefile_windows.go $SERVER_DIR/ +COPY --from=builder $SERVER_DIR/magefile_unix.go $SERVER_DIR/ +COPY --from=builder $SERVER_DIR/magefile.go $SERVER_DIR/ +COPY --from=builder $SERVER_DIR/start-config.yml $SERVER_DIR/ -# Set the working directory to the application directory within the container -WORKDIR $OPENIM_SERVER_DIR # Set up volume mounts for the configuration directory and logs directory -VOLUME ["$OPENIM_SERVER_DIR/config", "$OPENIM_SERVER_DIR/_output/logs"] +VOLUME ["$SERVER_DIR/config", "$SERVER_DIR/_output/logs"] # Set the command to run when the container starts ENTRYPOINT ["sh", "-c", "mage start && tail -f /dev/null"]