diff --git a/DockerInit.sh b/DockerInit.sh new file mode 100755 index 00000000..0b83457c --- /dev/null +++ b/DockerInit.sh @@ -0,0 +1,22 @@ +#!/bin/sh +if [ $1 == "amd64" ]; then + ARCH="64"; + FNAME="amd64"; +elif [ $1 == "arm64" ]; then + ARCH="arm64-v8a" + FNAME="arm64"; +else + ARCH="64"; + FNAME="amd64"; +fi +mkdir -p build/bin +cd build/bin +wget "https://github.com/mhsanaei/xray-core/releases/latest/download/Xray-linux-${ARCH}.zip" +unzip "Xray-linux-${ARCH}.zip" +rm -f "Xray-linux-${ARCH}.zip" geoip.dat geosite.dat iran.dat +mv xray "xray-linux-${FNAME}" +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" + +cd ../../ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index be21bd15..6114d548 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,69 +1,20 @@ -# Use the official Golang image as the base image -FROM --platform=$BUILDPLATFORM golang:1.20 as builder -ARG TARGETOS TARGETARCH -# Set up the working directory +#Build latest x-ui from source +FROM --platform=$BUILDPLATFORM golang:1.20.4-alpine AS builder WORKDIR /app - -# Copy the Go modules and download the dependencies -COPY go.mod go.sum ./ -RUN go mod download - -# Copy the source code +ARG TARGETARCH +RUN apk --no-cache --update add build-base gcc wget unzip COPY . . +RUN env CGO_ENABLED=1 go build -o build/x-ui main.go +RUN ./DockerInit.sh "$TARGETARCH" -RUN if [ "$TARGETARCH" = "arm64" ]; then apt update && apt install gcc-aarch64-linux-gnu -y; fi - -# Build the X-ui binary -RUN if [ "$TARGETARCH" = "arm64" ]; then \ - CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc go build -o xui-release -v main.go; \ - elif [ "$TARGETARCH" = "amd64" ]; then \ - CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o xui-release -v main.go; \ - fi - -# Start a new stage using the base image -FROM ubuntu:20.04 - -# Set up the working directory +#Build app image using latest x-ui +FROM alpine +ENV TZ=Asia/Tehran WORKDIR /app -# Copy the X-ui binary and required files from the builder stage -COPY --from=builder /app/xui-release /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 +RUN apk add ca-certificates tzdata -# 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 arch=$(uname -m) && \ - 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; \ - elif [ "$arch" = "x86_64" ]; 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; \ - fi - -WORKDIR /app/x-ui -RUN chmod +x /app/x-ui/x-ui.sh - -# Set the entrypoint -ENTRYPOINT ["/app/x-ui/xui-release"] +COPY --from=builder /app/build/ /app/ +VOLUME [ "/etc/x-ui" ] +ENTRYPOINT [ "/app/x-ui" ]