3x-ui/Dockerfile
2026-02-15 07:55:53 +02:00

237 lines
7.7 KiB
Docker
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Hi, I'm trying to fix my Fly.io deployment. There's a build error on my Dockerfile.
Please fix my Dockerfile for me to the best of your ability. And give me the updated version so I can paste in Fly.io web deployment UI.
Error logs:
```
flyctl deploy --build-only --push -a 3x-ui--cxykg --image-label deployment-d293a6140906d8d4a65e23e6864d86ef --config fly.toml
==> Verifying app config
Validating fly.toml
✓ Configuration is valid
--> Verified app config
==> Building image
Waiting for depot builder...
==> Building image with Depot
--> build: ()
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 2.13kB done
#1 DONE 0.0s
#2 [internal] load metadata for docker.io/library/golang:1.22-alpine
#2 DONE 0.2s
#3 [internal] load metadata for docker.io/library/alpine:latest
#3 DONE 0.2s
#4 [internal] load .dockerignore
#4 transferring context: 2B 0.0s done
#4 DONE 0.0s
#5 [builder 1/6] FROM docker.io/library/golang:1.22-alpine@sha256:1699c10032ca2582ec89a24a1312d986a3f094aed3d5c1147b19880afe40e052
#5 resolve docker.io/library/golang:1.22-alpine@sha256:1699c10032ca2582ec89a24a1312d986a3f094aed3d5c1147b19880afe40e052 done
#5 DONE 0.0s
#6 [stage-1 1/9] FROM docker.io/library/alpine:latest@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659
#6 resolve docker.io/library/alpine:latest@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659 done
#6 DONE 0.0s
#7 [stage-1 3/9] RUN apk add --no-cache --update ca-certificates tzdata fail2ban bash curl openssl
#7 CACHED
#8 [stage-1 2/9] WORKDIR /app
#8 CACHED
#9 [stage-1 4/9] RUN mkdir -p /app/bin && curl -L -o /app/bin/geoip.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat && curl -L -o /app/bin/geosite.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat
#9 CACHED
#10 [internal] load build context
#10 ...
#11 [builder 2/6] WORKDIR /app
#11 CACHED
#12 [builder 3/6] RUN apk --no-cache --update add build-base gcc curl unzip
#12 CACHED
#10 [internal] load build context
#10 transferring context: 58.79MB 0.8s done
#10 ...
#13 [builder 4/6] COPY . .
#13 DONE 0.3s
#14 [builder 5/6] RUN go build -ldflags "-w -s" -o build/x-ui main.go
#14 0.080 go: go.mod requires go >= 1.25.7 (running go 1.22.12; GOTOOLCHAIN=local)
#14 ERROR: process "/bin/sh -c go build -ldflags \"-w -s\" -o build/x-ui main.go" did not complete successfully: exit code: 1
#10 [internal] load build context
------
> [builder 5/6] RUN go build -ldflags "-w -s" -o build/x-ui main.go:
0.080 go: go.mod requires go >= 1.25.7 (running go 1.22.12; GOTOOLCHAIN=local)
------
==> Building image
Waiting for depot builder...
==> Building image with Depot
--> build: ()
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 2.13kB 0.0s done
#1 DONE 0.0s
#2 [internal] load metadata for docker.io/library/golang:1.22-alpine
#2 DONE 0.2s
#3 [internal] load metadata for docker.io/library/alpine:latest
#3 DONE 0.2s
#4 [internal] load .dockerignore
#4 transferring context: 2B done
#4 DONE 0.0s
#5 [builder 1/6] FROM docker.io/library/golang:1.22-alpine@sha256:1699c10032ca2582ec89a24a1312d986a3f094aed3d5c1147b19880afe40e052
#5 resolve docker.io/library/golang:1.22-alpine@sha256:1699c10032ca2582ec89a24a1312d986a3f094aed3d5c1147b19880afe40e052 done
#5 DONE 0.0s
#6 [stage-1 1/9] FROM docker.io/library/alpine:latest@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659
#6 resolve docker.io/library/alpine:latest@sha256:25109184c71bdad752c8312a8623239686a9a2071e8825f20acb8f2198c3f659 done
#6 DONE 0.0s
#7 [stage-1 3/9] RUN apk add --no-cache --update ca-certificates tzdata fail2ban bash curl openssl
#7 CACHED
#8 [stage-1 2/9] WORKDIR /app
#8 CACHED
#9 [stage-1 4/9] RUN mkdir -p /app/bin && curl -L -o /app/bin/geoip.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat && curl -L -o /app/bin/geosite.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat
#9 CACHED
#10 [internal] load build context
#10 transferring context: 16.80kB 0.0s done
#10 DONE 0.0s
#11 [builder 3/6] RUN apk --no-cache --update add build-base gcc curl unzip
#11 CACHED
#12 [builder 2/6] WORKDIR /app
#12 CACHED
#13 [builder 4/6] COPY . .
#13 CACHED
#14 [builder 5/6] RUN go build -ldflags "-w -s" -o build/x-ui main.go
#14 0.079 go: go.mod requires go >= 1.25.7 (running go 1.22.12; GOTOOLCHAIN=local)
#14 ERROR: process "/bin/sh -c go build -ldflags \"-w -s\" -o build/x-ui main.go" did not complete successfully: exit code: 1
------
> [builder 5/6] RUN go build -ldflags "-w -s" -o build/x-ui main.go:
0.079 go: go.mod requires go >= 1.25.7 (running go 1.22.12; GOTOOLCHAIN=local)
------
Error: failed to fetch an image or build from source: error building: failed to solve: process "/bin/sh -c go build -ldflags \"-w -s\" -o build/x-ui main.go" did not complete successfully: exit code: 1
Dockerfile failed to build error
unsuccessful command 'flyctl deploy --build-only --push -a 3x-ui--cxykg --image-label deployment-d293a6140906d8d4a65e23e6864d86ef --config fly.toml'
```
Dockerfile
```
# ========================================================
# Stage: Builder
# ========================================================
FROM golang:1.22-alpine AS builder
WORKDIR /app
ARG TARGETARCH
RUN apk --no-cache --update add \
build-base \
gcc \
curl \
unzip
COPY . .
ENV CGO_ENABLED=1
ENV CGO_CFLAGS="-D_LARGEFILE64_SOURCE"
RUN go build -ldflags "-w -s" -o build/x-ui main.go
RUN if [ -f "./DockerInit.sh" ]; then chmod +x ./DockerInit.sh && ./DockerInit.sh "$TARGETARCH"; fi
# ========================================================
# Stage: Final Image of 3x-ui
# ========================================================
FROM alpine:latest
ENV TZ=Asia/Cairo
WORKDIR /app
RUN apk add --no-cache --update \
ca-certificates \
tzdata \
fail2ban \
bash \
curl \
openssl
# --------------------------------------------------------
# [هام] إضافة ملفات GeoIP و GeoSite لتجنب توقف السيرفر مستقبلاً
# --------------------------------------------------------
RUN mkdir -p /app/bin \
&& curl -L -o /app/bin/geoip.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat \
&& curl -L -o /app/bin/geosite.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat
COPY --from=builder /app/build/ /app/
# تأكدنا هنا من نسخ السكربتات الضرورية
COPY --from=builder /app/DockerEntrypoint.sh /app/
COPY --from=builder /app/x-ui.sh /usr/bin/x-ui
# Configure fail2ban
RUN rm -f /etc/fail2ban/jail.d/alpine-ssh.conf \
&& cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local \
&& sed -i "s/^\[ssh\]$/&\nenabled = false/" /etc/fail2ban/jail.local \
&& sed -i "s/^\[sshd\]$/&\nenabled = false/" /etc/fail2ban/jail.local \
&& sed -i "s/#allowipv6 = auto/allowipv6 = auto/g" /etc/fail2ban/fail2ban.conf
RUN chmod +x \
/app/DockerEntrypoint.sh \
/app/x-ui \
/usr/bin/x-ui
ENV XUI_ENABLE_FAIL2BAN="true"
ENV XRAY_LOCATION_ASSET=/app/bin/
EXPOSE 2053
VOLUME [ "/etc/x-ui" ]
CMD [ "./x-ui" ]
ENTRYPOINT [ "/app/DockerEntrypoint.sh" ]
```
fly.toml
```
# fly.toml app configuration file generated for 3x-ui--cxykg on 2026-02-15T05:54:59Z
#
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
#
app = '3x-ui--cxykg'
primary_region = 'iad'
[build]
[http_service]
internal_port = 2053
force_https = true
auto_stop_machines = 'stop'
auto_start_machines = true
min_machines_running = 0
processes = ['app']
[[vm]]
memory = '1gb'
cpu_kind = 'shared'
cpus = 1
memory_mb = 1024
```