FROM alpine:3.20 ARG SINGBOX_VER=1.12.13 # Устанавливаем зависимости, включая dos2unix для исправления скриптов RUN apk add --no-cache curl ca-certificates tar jq bash coreutils netcat-openbsd nodejs npm dos2unix && update-ca-certificates # Устанавливаем pnpm RUN npm install -g pnpm # Автоматическое определение архитектуры и установка sing-box RUN ARCH=$(uname -m) && \ if [ "$ARCH" = "x86_64" ]; then SB_ARCH="amd64"; \ elif [ "$ARCH" = "aarch64" ]; then SB_ARCH="arm64"; \ else SB_ARCH="amd64"; fi && \ curl -L -o /tmp/sb.tar.gz https://github.com/SagerNet/sing-box/releases/download/v${SINGBOX_VER}/sing-box-${SINGBOX_VER}-linux-${SB_ARCH}.tar.gz \ && tar -xf /tmp/sb.tar.gz -C /tmp \ && mv /tmp/sing-box-${SINGBOX_VER}-linux-${SB_ARCH}/sing-box /usr/local/bin/sing-box \ && chmod +x /usr/local/bin/sing-box \ && adduser -D -u 1000 suser COPY --chown=suser:suser docker/entrypoint.sh /app/ COPY --chown=suser:suser web/ /app/web/ # Собираем NestJS бэкенд WORKDIR /app/web/api RUN CI=true pnpm install --frozen-lockfile && pnpm run build && CI=true pnpm prune --prod WORKDIR /app # Исправляем окончания строк (важно для Windows пользователей) и даем права на запуск RUN dos2unix /app/*.sh && chmod +x /app/entrypoint.sh # Порты по умолчанию (можно переопределить через ENV) # PORT - веб-интерфейс, PROXY_PORT - прокси EXPOSE 3456 8080 9090 ENTRYPOINT ["/app/entrypoint.sh"]