add building from mac to linux

This commit is contained in:
solodecode 2024-11-04 05:44:11 +03:00
parent 50890fd19c
commit 87f4b17c5f
6 changed files with 1801 additions and 29 deletions

View file

@ -1,47 +1,66 @@
# ======================================================== # ========================================================
# Stage: Builder # Stage: Builder
# ======================================================== # ========================================================
FROM golang:1.23-alpine AS builder FROM --platform=linux/amd64 golang:1.23.2-bullseye AS builder
WORKDIR /app WORKDIR /app
ARG TARGETARCH
RUN apk --no-cache --update add \ # Устанавливаем необходимые пакеты
build-base \ RUN apt-get update && apt-get install -y \
build-essential \
gcc \ gcc \
wget \ wget \
unzip unzip \
tar \
&& rm -rf /var/lib/apt/lists/*
COPY . . COPY . .
# Устанавливаем переменные окружения для компиляции
ENV CGO_ENABLED=1 ENV CGO_ENABLED=1
ENV CGO_CFLAGS="-D_LARGEFILE64_SOURCE" ENV CGO_CFLAGS="-D_LARGEFILE64_SOURCE"
RUN go build -o build/x-ui main.go ENV GOOS=linux
RUN ./DockerInit.sh "$TARGETARCH" ENV GOARCH=amd64
# Сборка бинарного файла
RUN go build -o x-ui main.go
RUN ./DockerInit.sh "amd64"
# Копирование файлов из build_files
COPY build_files /app/build_files
# Создание директории build и каталога x-ui внутри неё
RUN mkdir -p build/x-ui
# Копирование файлов в каталог x-ui внутри build
RUN cp x-ui build/x-ui/
RUN cp -r build_files/* build/x-ui/
# Создание архива tar.gz, включая каталог x-ui
RUN tar -czvf x-ui-linux-amd64.tar.gz -C build x-ui
# ======================================================== # ========================================================
# Stage: Final Image of 3x-ui # Stage: Final Image of x-ui
# ======================================================== # ========================================================
FROM alpine FROM debian:bullseye-slim AS final
ENV TZ=Asia/Tehran ENV TZ=Asia/Tehran
WORKDIR /app WORKDIR /app
RUN apk add --no-cache --update \ RUN apt-get update && apt-get install -y \
ca-certificates \ ca-certificates \
tzdata \ tzdata \
fail2ban \ fail2ban \
bash bash \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/build/ /app/ COPY --from=builder /app/build/x-ui/ /app/
COPY --from=builder /app/DockerEntrypoint.sh /app/ COPY --from=builder /app/DockerEntrypoint.sh /app/
COPY --from=builder /app/x-ui.sh /usr/bin/x-ui COPY --from=builder /app/x-ui.sh /usr/bin/x-ui
# Настройка fail2ban
# Configure fail2ban RUN rm -f /etc/fail2ban/jail.d/defaults-debian.conf \
RUN rm -f /etc/fail2ban/jail.d/alpine-ssh.conf \
&& cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local \ && cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local \
&& sed -i "s/^\[ssh\]$/&\nenabled = false/" /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/^\[sshd\]$/&\nenabled = false/" /etc/fail2ban/jail.local
&& sed -i "s/#allowipv6 = auto/allowipv6 = auto/g" /etc/fail2ban/fail2ban.conf
RUN chmod +x \ RUN chmod +x \
/app/DockerEntrypoint.sh \ /app/DockerEntrypoint.sh \
@ -51,3 +70,9 @@ RUN chmod +x \
VOLUME [ "/etc/x-ui" ] VOLUME [ "/etc/x-ui" ]
CMD [ "./x-ui" ] CMD [ "./x-ui" ]
ENTRYPOINT [ "/app/DockerEntrypoint.sh" ] ENTRYPOINT [ "/app/DockerEntrypoint.sh" ]
# ========================================================
# Stage: Export Archive
# ========================================================
FROM scratch AS export-stage
COPY --from=builder /app/x-ui-linux-amd64.tar.gz /x-ui-linux-amd64.tar.gz

21
Makefile Normal file
View file

@ -0,0 +1,21 @@
APP_NAME = x-ui
DOCKER_IMAGE = my-go-app
BUILD_DIR = build
TARGETARCH ?= amd64
TARGETOS ?= linux
ARCHIVE_NAME = x-ui-$(TARGETOS)-$(TARGETARCH).tar.gz
.PHONY: build clean
build:
mkdir -p $(BUILD_DIR)
docker build \
--build-arg TARGETOS=$(TARGETOS) \
--build-arg TARGETARCH=$(TARGETARCH) \
--target export-stage \
-o $(BUILD_DIR) .
clean:
rm -rf $(BUILD_DIR)
docker rmi $(DOCKER_IMAGE)

15
build_files/x-ui.service Normal file
View file

@ -0,0 +1,15 @@
[Unit]
Description=x-ui Service
After=network.target
Wants=network.target
[Service]
Environment="XRAY_VMESS_AEAD_FORCED=false"
Type=simple
WorkingDirectory=/usr/local/x-ui/
ExecStart=/usr/local/x-ui/x-ui
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target

1710
build_files/x-ui.sh Normal file

File diff suppressed because it is too large Load diff

View file

@ -1246,7 +1246,7 @@ func (t *Tgbot) clientInfoMsg(
) string { ) string {
now := time.Now().Unix() now := time.Now().Unix()
expiryTime := "" expiryTime := ""
flag := false flag := true
diff := traffic.ExpiryTime/1000 - now diff := traffic.ExpiryTime/1000 - now
if traffic.ExpiryTime == 0 { if traffic.ExpiryTime == 0 {
expiryTime = t.I18nBot("tgbot.unlimited") expiryTime = t.I18nBot("tgbot.unlimited")

View file

@ -552,7 +552,7 @@
"depleteSoon" = "Скоро исчерпание" "depleteSoon" = "Скоро исчерпание"
"clientUsage" = "Получить использование" "clientUsage" = "Получить использование"
"onlines" = "Онлайн-клиенты" "onlines" = "Онлайн-клиенты"
"commands" = "Команды" "adminContact" = "Нужна помощь"
"refresh" = "🔄 Обновить" "refresh" = "🔄 Обновить"
"clearIPs" = "❌ Очистить IP" "clearIPs" = "❌ Очистить IP"
"removeTGUser" = "❌ Удалить пользователя Telegram" "removeTGUser" = "❌ Удалить пользователя Telegram"
@ -593,3 +593,4 @@
"askToAddUserId" = "Ваша конфигурация не найдена!\r\nПожалуйста, попросите администратора использовать ваш идентификатор пользователя Telegram в ваших конфигурациях.\r\n\r\nВаш идентификатор пользователя: <code>{{ .TgUserID }}</code>" "askToAddUserId" = "Ваша конфигурация не найдена!\r\nПожалуйста, попросите администратора использовать ваш идентификатор пользователя Telegram в ваших конфигурациях.\r\n\r\nВаш идентификатор пользователя: <code>{{ .TgUserID }}</code>"
"chooseClient" = "Выберите пользователя для подключения {{ .Inbound }}" "chooseClient" = "Выберите пользователя для подключения {{ .Inbound }}"
"chooseInbound" = "Выберите подключение" "chooseInbound" = "Выберите подключение"
"adminContact" = "Если вам нужна помощь, свяжитесь с администратором: @sainthrill"