diff --git a/.github/DockerfileARM b/.github/DockerfileARM new file mode 100644 index 00000000..148a4f1a --- /dev/null +++ b/.github/DockerfileARM @@ -0,0 +1,47 @@ +# 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 48d1a223..053b6833 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -39,3 +39,13 @@ jobs: 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 + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }}