| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  | # Use the official Golang image as the base image | 
					
						
							| 
									
										
										
										
											2023-05-07 23:47:38 +00:00
										 |  |  | FROM --platform=$BUILDPLATFORM golang:1.20 as builder | 
					
						
							| 
									
										
										
										
											2023-05-08 02:27:43 +00:00
										 |  |  | ARG TARGETOS TARGETARCH | 
					
						
							| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  | # Set up the working directory | 
					
						
							|  |  |  | WORKDIR /app | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Copy the Go modules and download the dependencies | 
					
						
							|  |  |  | COPY go.mod go.sum ./ | 
					
						
							|  |  |  | RUN go mod download | 
					
						
							| 
									
										
										
										
											2023-05-08 02:22:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  | # Copy the source code | 
					
						
							|  |  |  | COPY . . | 
					
						
							| 
									
										
										
										
											2023-05-08 02:22:48 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 02:27:43 +00:00
										 |  |  | RUN if [ "$TARGETARCH" = "arm64" ]; then apt update && apt install gcc-aarch64-linux-gnu -y; fi | 
					
						
							| 
									
										
										
										
											2023-05-08 02:22:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  | # Build the X-ui binary | 
					
						
							| 
									
										
										
										
											2023-05-08 02:27:43 +00:00
										 |  |  | RUN if [ "$TARGETARCH" = "arm64" ]; then \ | 
					
						
							| 
									
										
										
										
											2023-05-08 02:41:44 +00:00
										 |  |  |        CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc go build -o xui-release -v main.go; \ | 
					
						
							| 
									
										
										
										
											2023-05-08 02:27:43 +00:00
										 |  |  |     elif [ "$TARGETARCH" = "amd64" ]; then \ | 
					
						
							| 
									
										
										
										
											2023-05-08 02:41:44 +00:00
										 |  |  |        CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o xui-release -v main.go; \ | 
					
						
							| 
									
										
										
										
											2023-05-08 02:22:48 +00:00
										 |  |  |     fi | 
					
						
							| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Start a new stage using the base image | 
					
						
							|  |  |  | FROM ubuntu:20.04 | 
					
						
							| 
									
										
										
										
											2023-05-08 02:22:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  | # Set up the working directory | 
					
						
							|  |  |  | WORKDIR /app | 
					
						
							| 
									
										
										
										
											2023-05-08 02:22:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  | # Copy the X-ui binary and required files from the builder stage | 
					
						
							| 
									
										
										
										
											2023-05-08 02:17:43 +00:00
										 |  |  | COPY --from=builder /app/xui-release /app/x-ui/xui-release | 
					
						
							| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  | 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 \ | 
					
						
							| 
									
										
										
										
											2023-05-07 23:13:48 +00:00
										 |  |  |     tzdata \ | 
					
						
							|  |  |  |     ca-certificates \ | 
					
						
							| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  |  && rm -rf /var/lib/apt/lists/* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | WORKDIR /app/x-ui/bin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Download and set up the required files | 
					
						
							| 
									
										
										
										
											2023-05-08 02:22:48 +00:00
										 |  |  | RUN arch=$(uname -m) && \ | 
					
						
							|  |  |  |     if [ "$arch" = "aarch64" ]; then \ | 
					
						
							| 
									
										
										
										
											2023-05-08 02:10:36 +00:00
										 |  |  |         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 \ | 
					
						
							| 
									
										
										
										
											2023-05-08 02:22:48 +00:00
										 |  |  |         && mv xray xray-linux-arm64; \ | 
					
						
							| 
									
										
										
										
											2023-05-08 02:50:33 +00:00
										 |  |  |     elif [ "$arch" = "x86_64" ]; then \ | 
					
						
							| 
									
										
										
										
											2023-05-08 02:22:48 +00:00
										 |  |  |         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 | 
					
						
							| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 03:02:59 +00:00
										 |  |  | WORKDIR /app/x-ui | 
					
						
							| 
									
										
										
										
											2023-05-07 18:00:58 +00:00
										 |  |  | RUN chmod +x /app/x-ui/x-ui.sh | 
					
						
							| 
									
										
										
										
											2023-05-07 16:59:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Set the entrypoint | 
					
						
							| 
									
										
										
										
											2023-05-07 22:29:07 +00:00
										 |  |  | ENTRYPOINT ["/app/x-ui/xui-release"] |