From c73c71cc83fc48581c49cf1698d05fbc7aa54fe3 Mon Sep 17 00:00:00 2001 From: itspooya Date: Mon, 8 May 2023 05:40:36 +0330 Subject: [PATCH] Fixed Dockerfile --- .github/DockerfileARM | 47 ------------------------------------ .github/workflows/docker.yml | 12 +-------- Dockerfile | 30 ++++++++++++++++++++--- 3 files changed, 27 insertions(+), 62 deletions(-) delete mode 100644 .github/DockerfileARM diff --git a/.github/DockerfileARM b/.github/DockerfileARM deleted file mode 100644 index 148a4f1a..00000000 --- a/.github/DockerfileARM +++ /dev/null @@ -1,47 +0,0 @@ -# Use the official Golang image as the base image -FROM golang:1.20 as builder -# Set up the working directory -WORKDIR /app - -# Copy the Go modules and download the dependencies -COPY go.mod go.sum ./ -RUN go mod download -# Copy the source code -COPY . . -RUN apt update && apt install gcc-aarch64-linux-gnu -y -# Build the X-ui binary -RUN GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc go build -o xui-release-arm64 -v main.go - -# Start a new stage using the base image -FROM ubuntu:20.04 -# Set up the working directory -WORKDIR /app -# Copy the X-ui binary and required files from the builder stage -COPY --from=builder /app/xui-release-arm64 /app/x-ui/xui-release -COPY x-ui.service /app/x-ui/x-ui.service -COPY x-ui.sh /app/x-ui/x-ui.sh - -# Set up the runtime environment -RUN apt-get update && apt-get install -y \ - wget \ - unzip \ - tzdata \ - ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /app/x-ui/bin - -# Download and set up the required files -RUN wget https://github.com/mhsanaei/xray-core/releases/latest/download/Xray-linux-arm64-v8a.zip \ - && unzip Xray-linux-arm64-v8a.zip \ - && rm -f Xray-linux-arm64-v8a.zip geoip.dat geosite.dat iran.dat \ - && wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat \ - && wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat \ - && wget https://github.com/bootmortis/iran-hosted-domains/releases/latest/download/iran.dat \ - && mv xray xray-linux-arm64 - -WORKDIR /app -RUN chmod +x /app/x-ui/x-ui.sh - -# Set the entrypoint -ENTRYPOINT ["/app/x-ui/xui-release"] diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 053b6833..d2c2629a 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -36,16 +36,6 @@ jobs: with: context: . push: ${{ github.event_name != 'pull_request' }} - platforms: linux/amd64 - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - - - name: Build and push Docker image ARM64 - uses: docker/build-push-action@v4 - with: - context: . - file: .github/DockerfileARM - push: ${{ github.event_name != 'pull_request' }} - platforms: linux/arm64 + platforms: linux/amd64, linux/arm64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile index bf89cb1d..810f9ca9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,6 @@ # Use the official Golang image as the base image FROM --platform=$BUILDPLATFORM golang:1.20 as builder + # Set up the working directory WORKDIR /app @@ -8,15 +9,23 @@ COPY go.mod go.sum ./ RUN go mod download # Copy the source code COPY . . +ARG TARGETPARCH +RUN if $TARGETPARCH == "arm64"; then apt update && apt install gcc-aarch64-linux-gnu -y; fi # Build the X-ui binary -RUN GOOS=linux GOARCH=amd64 go build -o xui-release-amd64 -v main.go +RUN if $TARGETPARCH == "arm64"; then GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc go build -o xui-release-arm64 -v main.go; fi +RUN if $TARGETPARCH == "amd64"; then GOOS=linux GOARCH=amd64 go build -o xui-release-amd64 -v main.go; fi # Start a new stage using the base image FROM ubuntu:20.04 # Set up the working directory WORKDIR /app # Copy the X-ui binary and required files from the builder stage -COPY --from=builder /app/xui-release-amd64 /app/x-ui/xui-release +RUN arch=$(uname -m); \ + if [ "$arch" = "aarch64" ]; then \ + COPY --from=builder /app/xui-release-arm64 /app/x-ui/xui-release; \ + else \ + COPY --from=builder /app/xui-release-amd64 /app/x-ui/xui-release; \ + fi COPY x-ui.service /app/x-ui/x-ui.service COPY x-ui.sh /app/x-ui/x-ui.sh @@ -31,13 +40,26 @@ RUN apt-get update && apt-get install -y \ WORKDIR /app/x-ui/bin # Download and set up the required files -RUN wget https://github.com/mhsanaei/Xray-core/releases/latest/download/Xray-linux-64.zip \ + +RUN if [ "$arch" = "aarch64" ]; then \ + wget https://github.com/mhsanaei/xray-core/releases/latest/download/Xray-linux-arm64-v8a.zip \ + && unzip Xray-linux-arm64-v8a.zip \ + && rm -f Xray-linux-arm64-v8a.zip geoip.dat geosite.dat iran.dat \ + && wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat \ + && wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat \ + && wget https://github.com/bootmortis/iran-hosted-domains/releases/latest/download/iran.dat \ + && mv xray xray-linux-arm64 \ + fi + +RUN if [ "$arch" = "amd64" ]; then \ + wget https://github.com/mhsanaei/Xray-core/releases/latest/download/Xray-linux-64.zip \ && unzip Xray-linux-64.zip \ && rm -f Xray-linux-64.zip geoip.dat geosite.dat iran.dat \ && wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat \ && wget https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat \ && wget https://github.com/bootmortis/iran-hosted-domains/releases/latest/download/iran.dat \ - && mv xray xray-linux-amd64 + && mv xray xray-linux-amd64 \ + fi WORKDIR /app RUN chmod +x /app/x-ui/x-ui.sh