diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 082f619..c90fbda 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -9,7 +9,7 @@ on: env: DOCKER_BUILDKIT: "1" PRODUCT_NAME: "xxxigcc" - PACKAGE_VERSION: "3.4.6-xg2" + PACKAGE_VERSION: "3.4.6-xg1" BUILDX_NO_DEFAULT_ATTESTATIONS: "1" jobs: @@ -70,85 +70,28 @@ jobs: test/xxxigDaemon --version 2>/dev/null || echo "⚠️ 跳过版本检查" rm -rf test + - name: Build Debian package + if: matrix.distro == 'ubuntu' + run: | + # 安装 dpkg-deb(如果需要) + sudo apt-get update && sudo apt-get install -y dpkg-dev + + TARGZ="${PRODUCT_NAME}-${{ matrix.arch }}-${{ matrix.distro }}-${PACKAGE_VERSION}.tar.gz" + + echo "📦 Building Debian package for ${{ matrix.arch }}..." + chmod +x debian/build-deb.sh + ./debian/build-deb.sh ${{ matrix.arch }} ${PACKAGE_VERSION} "${TARGZ}" + + ls -lh *.deb + - uses: https://github.com/ChristopherHX/gitea-upload-artifact@v4 with: name: binaries-${{ matrix.arch }}-${{ matrix.distro }} - path: "*.tar.gz" + path: | + *.tar.gz + *.deb retention-days: 1 - docker-images: - runs-on: ubuntu-latest-amd64 - needs: build-and-test - if: github.ref_name == 'main' || github.ref_name == 'develop' || startsWith(github.ref, 'refs/tags/') - steps: - - uses: actions/checkout@v4 - - - name: Debug branch info - run: | - echo "📋 Branch Information:" - echo " github.ref: ${{ github.ref }}" - echo " github.ref_name: ${{ github.ref_name }}" - echo " github.event_name: ${{ github.event_name }}" - - - uses: https://github.com/ChristopherHX/gitea-download-artifact@v4 - with: - pattern: binaries-* - path: ./app - merge-multiple: true - - - name: Setup Docker and Login - run: | - # 尝试设置 QEMU,忽略错误 - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes 2>/dev/null || true - - # 创建 buildx builder,增加资源限制和优化参数 - docker buildx create --use --name multiarch-builder \ - --driver docker-container \ - --driver-opt network=host \ - --driver-opt env.BUILDKIT_STEP_LOG_MAX_SIZE=50000000 \ - --driver-opt env.BUILDKIT_STEP_LOG_MAX_SPEED=10000000 \ - --buildkitd-flags '--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host' \ - || true - docker buildx inspect --bootstrap - - # 登录 - echo "${{ secrets.BUILD_TOKEN }}" | docker login ${{ gitea.server_url }} -u ${{ gitea.actor }} --password-stdin - - - name: Determine Docker tag - id: tag - run: | - if [ "${{ github.ref_name }}" = "main" ]; then - TAG="latest" - elif [ "${{ github.ref_name }}" = "develop" ]; then - TAG="develop" - elif [[ "${{ github.ref }}" == refs/tags/* ]]; then - TAG="${{ github.ref_name }}" - else - TAG="${{ github.ref_name }}" - fi - echo "tag=${TAG}" >> $GITHUB_OUTPUT - echo "📦 Docker tag: ${TAG}" - - - name: Build and push Docker images - run: | - # 移除 URL 中的 https:// 前缀 - REGISTRY=$(echo "${{ gitea.server_url }}" | sed 's|https\?://||')/${{ gitea.repository }} - TAG="${{ steps.tag.outputs.tag }}" - - echo "📦 Docker Registry: ${REGISTRY}" - echo "📦 Docker Tag: ${TAG}" - - BUILD_ARGS="--pull --push --platform linux/amd64,linux/arm64 \ - --build-arg TARGZ_FILE_AMD64=${PRODUCT_NAME}-amd64-alpine-${PACKAGE_VERSION}.tar.gz \ - --build-arg TARGZ_FILE_ARM64=${PRODUCT_NAME}-arm64-alpine-${PACKAGE_VERSION}.tar.gz \ - --provenance=false --sbom=false" - - echo "🐳 Building server image..." - docker buildx build $BUILD_ARGS -t "${REGISTRY}/server:${TAG}" -f docker/Dockerfile.Server . - - echo "🐳 Building daemon image..." - docker buildx build $BUILD_ARGS -t "${REGISTRY}/daemon:${TAG}" -f docker/Dockerfile.Daemon . - release: runs-on: ubuntu-latest-amd64 needs: build-and-test @@ -178,7 +121,7 @@ jobs: echo " Package: ${PRODUCT_NAME}" echo " Version: ${TAG}" - # 上传所有包到 Generic Package Registry + # 上传所有 tar.gz 包到 Generic Package Registry for file in *.tar.gz; do [ ! -f "$file" ] && continue echo " ⬆️ $file" @@ -191,18 +134,40 @@ jobs: } done - # 生成 Release 描述(包含 Package Registry 和 Release 附件两种下载方式) + # 上传 Debian 包到 Debian Package Registry (支持多个发行版) echo "" - echo "📝 生成 Release 描述..." - BODY="## Release ${TAG}\n\n" - BODY="${BODY}### 📥 下载方式\n\n" - BODY="${BODY}#### 方式 1: 直接下载(推荐)\n\n" - BODY="${BODY}点击下面 **Assets** 部分的文件名直接下载。\n\n" - BODY="${BODY}#### 方式 2: Package Registry\n\n" - for file in *.tar.gz; do - [ -f "$file" ] && BODY="${BODY}- [\`${file}\`](https://${REGISTRY}/api/packages/${OWNER}/generic/${PRODUCT_NAME}/${TAG}/${file})\n" + echo "📦 上传 Debian 包到 Debian Package Registry..." + for file in *.deb; do + [ ! -f "$file" ] && continue + + # 上传到 bookworm (Debian 12) + echo " ⬆️ $file → bookworm" + curl -fsSL -X PUT \ + -H "Authorization: token ${TOKEN}" \ + --upload-file "$file" \ + "https://${REGISTRY}/api/packages/${OWNER}/debian/pool/bookworm/main/upload" || { + echo "❌ Debian 包上传失败: $file (bookworm)" + exit 1 + } + + # 上传到 trixie (Debian 13) + echo " ⬆️ $file → trixie" + curl -fsSL -X PUT \ + -H "Authorization: token ${TOKEN}" \ + --upload-file "$file" \ + "https://${REGISTRY}/api/packages/${OWNER}/debian/pool/trixie/main/upload" || { + echo "❌ Debian 包上传失败: $file (trixie)" + exit 1 + } done + # 生成 Release JSON payload + echo "" + echo "📝 生成 Release..." + + export REGISTRY OWNER TAG + RELEASE_DATA=$(python3 -c 'import json,glob,os;r=os.environ["REGISTRY"];o=os.environ["OWNER"];p=os.environ["PRODUCT_NAME"];t=os.environ["TAG"];b=["## Release "+t,"","### 📥 下载方式","","#### 方式 1: 直接下载(推荐)","","点击下面 **Assets** 部分的文件名直接下载。","","#### 方式 2: Generic Package Registry",""]+[f"- [`{f}`](https://{r}/api/packages/{o}/generic/{p}/{t}/{f})" for f in sorted(glob.glob("*.tar.gz"))]+["","#### 方式 3: Debian Repository","","**Debian 12 (bookworm):**","","```bash","# Download GPG key",f"sudo curl https://{r}/api/packages/{o}/debian/repository.key -o /etc/apt/keyrings/gitea-{o}.asc","","# Add repository",f"echo \"deb [signed-by=/etc/apt/keyrings/gitea-{o}.asc] https://{r}/api/packages/{o}/debian bookworm main\" | sudo tee -a /etc/apt/sources.list.d/{o}.list","","# Update and install","sudo apt-get update","sudo apt-get install xxxigcc","```","","**Debian 13 (trixie):**","","```bash","# Download GPG key",f"sudo curl https://{r}/api/packages/{o}/debian/repository.key -o /etc/apt/keyrings/gitea-{o}.asc","","# Add repository",f"echo \"deb [signed-by=/etc/apt/keyrings/gitea-{o}.asc] https://{r}/api/packages/{o}/debian trixie main\" | sudo tee -a /etc/apt/sources.list.d/{o}.list","","# Update and install","sudo apt-get update","sudo apt-get install xxxigcc","```"];print(json.dumps({"tag_name":t,"name":f"Release {t}","body":"\n".join(b),"draft":False,"prerelease":False}))') + # 创建 Release echo "" echo "🎉 创建 Release..." @@ -210,16 +175,7 @@ jobs: -H "Authorization: token ${TOKEN}" \ -H "Content-Type: application/json" \ "https://${REGISTRY}/api/v1/repos/${{ gitea.repository }}/releases" \ - -d @- << EOF - { - "tag_name": "${TAG}", - "name": "Release ${TAG}", - "body": "${BODY}", - "draft": false, - "prerelease": false - } - EOF - ) + -d "${RELEASE_DATA}") HTTP_CODE=$(echo "$RESPONSE" | tail -n1) RESPONSE_BODY=$(echo "$RESPONSE" | head -n-1) @@ -244,7 +200,7 @@ jobs: # 上传文件作为 Release 附件 echo "" echo "📎 上传文件作为 Release 附件..." - for file in *.tar.gz; do + for file in *.tar.gz *.deb; do [ ! -f "$file" ] && continue echo " ⬆️ $file" @@ -259,4 +215,7 @@ jobs: echo "" echo "✅ Release 创建完成!" - echo "🔗 访问: https://${REGISTRY}/${{ gitea.repository }}/releases/tag/${TAG}" \ No newline at end of file + echo "🔗 访问: https://${REGISTRY}/${{ gitea.repository }}/releases/tag/${TAG}" + + # 清理临时文件 + rm -f release_body.md \ No newline at end of file diff --git a/debian/build-deb.sh b/debian/build-deb.sh new file mode 100755 index 0000000..2cc95c7 --- /dev/null +++ b/debian/build-deb.sh @@ -0,0 +1,91 @@ +#!/bin/bash +set -e + +# 参数检查 +if [ $# -ne 3 ]; then + echo "Usage: $0 " + echo "Example: $0 amd64 3.4.6-xg1 xxxigcc-amd64-ubuntu-3.4.6-xg1.tar.gz" + exit 1 +fi + +ARCH=$1 +VERSION=$2 +TARGZ_FILE=$3 +PKG_NAME="xxxigcc" +DEB_FILE="${PKG_NAME}_${VERSION}_${ARCH}.deb" + +# 转换架构名称(Docker 使用的架构名到 Debian 架构名) +case "$ARCH" in + amd64) + DEB_ARCH="amd64" + ;; + arm64) + DEB_ARCH="arm64" + ;; + *) + echo "Unsupported architecture: $ARCH" + exit 1 + ;; +esac + +echo "📦 Building Debian package: ${DEB_FILE}" +echo " Architecture: ${DEB_ARCH}" +echo " Version: ${VERSION}" +echo " Source: ${TARGZ_FILE}" + +# 创建临时目录 +BUILD_DIR=$(mktemp -d) +trap "rm -rf $BUILD_DIR" EXIT + +# 创建包目录结构 +PKG_DIR="${BUILD_DIR}/${PKG_NAME}_${VERSION}_${DEB_ARCH}" +mkdir -p "${PKG_DIR}/DEBIAN" +mkdir -p "${PKG_DIR}/opt/xxxigcc" +mkdir -p "${PKG_DIR}/lib/systemd/system" + +# 解压二进制文件 +echo "📂 Extracting binaries..." +tar -xzf "${TARGZ_FILE}" -C "${PKG_DIR}/opt/xxxigcc" + +# 生成 control 文件 +echo "📝 Generating control file..." +sed -e "s/{{VERSION}}/${VERSION}/" \ + -e "s/{{ARCH}}/${DEB_ARCH}/" \ + debian/control.template > "${PKG_DIR}/DEBIAN/control" + +# 复制维护脚本 +echo "📋 Copying maintainer scripts..." +cp debian/postinst "${PKG_DIR}/DEBIAN/postinst" +cp debian/prerm "${PKG_DIR}/DEBIAN/prerm" +cp debian/postrm "${PKG_DIR}/DEBIAN/postrm" +chmod 755 "${PKG_DIR}/DEBIAN/postinst" +chmod 755 "${PKG_DIR}/DEBIAN/prerm" +chmod 755 "${PKG_DIR}/DEBIAN/postrm" + +# 复制 systemd service 文件 +echo "🔧 Installing systemd services..." +cp debian/xxxigcc-server.service "${PKG_DIR}/lib/systemd/system/" +cp debian/xxxigcc-daemon.service "${PKG_DIR}/lib/systemd/system/" + +# 设置权限 +chmod 755 "${PKG_DIR}/opt/xxxigcc/xxxigServer" +chmod 755 "${PKG_DIR}/opt/xxxigcc/xxxigDaemon" +chmod 755 "${PKG_DIR}/opt/xxxigcc/xxxigMiner" +chmod 644 "${PKG_DIR}/opt/xxxigcc/config.json" +chmod 644 "${PKG_DIR}/opt/xxxigcc/config_cc.json" +chmod 644 "${PKG_DIR}/opt/xxxigcc/index.html" +chmod 644 "${PKG_DIR}/lib/systemd/system/xxxigcc-server.service" +chmod 644 "${PKG_DIR}/lib/systemd/system/xxxigcc-daemon.service" + +# 构建 deb 包 +echo "🔨 Building package..." +dpkg-deb --build --root-owner-group "${PKG_DIR}" "${DEB_FILE}" + +# 检查包 +echo "✅ Package built successfully!" +echo "📦 Package: $(pwd)/${DEB_FILE}" +echo "📊 Package info:" +dpkg-deb --info "${DEB_FILE}" + +echo "" +echo "🎉 Done!" diff --git a/debian/control.template b/debian/control.template new file mode 100644 index 0000000..632ef8e --- /dev/null +++ b/debian/control.template @@ -0,0 +1,18 @@ +Package: xxxigcc +Version: {{VERSION}} +Section: net +Priority: optional +Architecture: {{ARCH}} +Depends: libc6, libuv1, libssl3 | libssl1.1, libhwloc15 | libhwloc5 +Maintainer: XXXigCC Team +Homepage: https://github.com/Bendr0id/xmrigCC +Description: Cryptocurrency mining software suite + XXXigCC is a customized build of XMRigCC, + a cryptocurrency mining software with centralized management. + . + This package includes: + - xxxigServer: Central control server with web UI + - xxxigDaemon: Client daemon that connects to the server + - xxxigMiner: Mining executable controlled by the daemon + - Systemd service configurations + - Default configuration files diff --git a/debian/postinst b/debian/postinst new file mode 100755 index 0000000..1423a0e --- /dev/null +++ b/debian/postinst @@ -0,0 +1,82 @@ +#!/bin/sh +set -e + +# Create user and group if they don't exist +if ! getent group xxxigcc >/dev/null; then + addgroup --system xxxigcc +fi + +if ! getent passwd xxxigcc >/dev/null; then + adduser --system --ingroup xxxigcc --no-create-home \ + --home /opt/xxxigcc --shell /usr/sbin/nologin \ + --gecos "XXXigCC Service" xxxigcc +fi + +# Create log directory +mkdir -p /var/log/xxxigcc +chown xxxigcc:xxxigcc /var/log/xxxigcc +chmod 750 /var/log/xxxigcc + +# Create config directory +mkdir -p /etc/xxxigcc + +# Copy default configs if they don't exist +if [ ! -f /etc/xxxigcc/config.json ]; then + cp /opt/xxxigcc/config.json /etc/xxxigcc/config.json + chown xxxigcc:xxxigcc /etc/xxxigcc/config.json + chmod 640 /etc/xxxigcc/config.json +fi + +if [ ! -f /etc/xxxigcc/config_cc.json ]; then + cp /opt/xxxigcc/config_cc.json /etc/xxxigcc/config_cc.json + chown xxxigcc:xxxigcc /etc/xxxigcc/config_cc.json + chmod 640 /etc/xxxigcc/config_cc.json +fi + +# Set permissions +chown -R xxxigcc:xxxigcc /opt/xxxigcc +chmod 755 /opt/xxxigcc +chmod 755 /opt/xxxigcc/xxxigServer +chmod 755 /opt/xxxigcc/xxxigDaemon +chmod 755 /opt/xxxigcc/xxxigMiner + +# Reload systemd +if [ -d /run/systemd/system ]; then + systemctl daemon-reload + + # Note: Services are NOT auto-enabled or auto-started + # Users should manually enable the services they need: + # systemctl enable xxxigcc-server.service + # systemctl start xxxigcc-server.service + # or + # systemctl enable xxxigcc-daemon.service + # systemctl start xxxigcc-daemon.service +fi + +echo "" +echo "✅ XXXigCC installed successfully!" +echo "" +echo "📋 Service Information:" +echo "" +echo " xxxigcc-server - Control server with web UI (uses config_cc.json)" +echo " xxxigcc-daemon - Mining client daemon (uses config.json, auto-calls xxxigMiner)" +echo "" +echo "To start the server (central control):" +echo " sudo systemctl enable xxxigcc-server.service" +echo " sudo systemctl start xxxigcc-server.service" +echo "" +echo "To start the daemon (mining client):" +echo " sudo systemctl enable xxxigcc-daemon.service" +echo " sudo systemctl start xxxigcc-daemon.service" +echo "" +echo "Configuration files:" +echo " /etc/xxxigcc/config.json - Daemon/Miner configuration" +echo " /etc/xxxigcc/config_cc.json - Server configuration" +echo "" +echo "Binaries location:" +echo " /opt/xxxigcc/xxxigServer - Control server" +echo " /opt/xxxigcc/xxxigDaemon - Client daemon (auto-calls xxxigMiner)" +echo " /opt/xxxigcc/xxxigMiner - Miner executable" +echo "" + +exit 0 diff --git a/debian/postrm b/debian/postrm new file mode 100755 index 0000000..c2979d6 --- /dev/null +++ b/debian/postrm @@ -0,0 +1,30 @@ +#!/bin/sh +set -e + +case "$1" in + purge) + # Remove log directory + rm -rf /var/log/xxxigcc + + # Remove config directory + rm -rf /etc/xxxigcc + + # Remove user and group + if getent passwd xxxigcc >/dev/null; then + deluser --system xxxigcc 2>/dev/null || true + fi + + if getent group xxxigcc >/dev/null; then + delgroup --system xxxigcc 2>/dev/null || true + fi + ;; + + remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + # Reload systemd + if [ -d /run/systemd/system ]; then + systemctl daemon-reload + fi + ;; +esac + +exit 0 diff --git a/debian/prerm b/debian/prerm new file mode 100755 index 0000000..8253998 --- /dev/null +++ b/debian/prerm @@ -0,0 +1,17 @@ +#!/bin/sh +set -e + +# Stop services before removal +if [ -d /run/systemd/system ]; then + for service in xxxigcc-server.service xxxigcc-daemon.service; do + if systemctl is-active "$service" >/dev/null 2>&1; then + systemctl stop "$service" + fi + + if systemctl is-enabled "$service" >/dev/null 2>&1; then + systemctl disable "$service" + fi + done +fi + +exit 0 diff --git a/debian/xxxigcc-daemon.service b/debian/xxxigcc-daemon.service new file mode 100644 index 0000000..a00d3a8 --- /dev/null +++ b/debian/xxxigcc-daemon.service @@ -0,0 +1,38 @@ +[Unit] +Description=XXXigCC Daemon (Miner Client) +After=network.target + +[Service] +Type=simple + +# 工作目录 +WorkingDirectory=/opt/xxxigcc + +# 执行命令 +ExecStart=/opt/xxxigcc/xxxigDaemon --config /etc/xxxigcc/config.json --log-file=/var/log/xxxigcc/daemon.log + +# 重启策略 +Restart=always +RestartSec=10 + +# 用户和组 +User=xxxigcc +Group=xxxigcc + +# 安全设置 +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=strict +ProtectHome=true +ReadWritePaths=/var/log/xxxigcc + +# 日志设置 +StandardOutput=journal +StandardError=journal +SyslogIdentifier=xxxigcc-daemon + +# 资源限制 +LimitNOFILE=65535 + +[Install] +WantedBy=multi-user.target diff --git a/debian/xxxigcc-server.service b/debian/xxxigcc-server.service new file mode 100644 index 0000000..32584b6 --- /dev/null +++ b/debian/xxxigcc-server.service @@ -0,0 +1,38 @@ +[Unit] +Description=XXXigCC Server (Control Center) +After=network.target + +[Service] +Type=simple + +# 工作目录 +WorkingDirectory=/opt/xxxigcc + +# 执行命令 +ExecStart=/opt/xxxigcc/xxxigServer --config /etc/xxxigcc/config_cc.json --log-file=/var/log/xxxigcc/server.log + +# 重启策略 +Restart=always +RestartSec=10 + +# 用户和组 +User=xxxigcc +Group=xxxigcc + +# 安全设置 +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=strict +ProtectHome=true +ReadWritePaths=/var/log/xxxigcc + +# 日志设置 +StandardOutput=journal +StandardError=journal +SyslogIdentifier=xxxigcc-server + +# 资源限制 +LimitNOFILE=65535 + +[Install] +WantedBy=multi-user.target diff --git a/docker/Dockerfile.Daemon b/docker/Dockerfile.Daemon deleted file mode 100644 index beeaf83..0000000 --- a/docker/Dockerfile.Daemon +++ /dev/null @@ -1,33 +0,0 @@ -FROM alpine:3.21 - -ARG TARGETARCH -ARG TARGZ_FILE_AMD64 -ARG TARGZ_FILE_ARM64 - -RUN apk update && apk add --no-cache wget - -COPY ./app /app - -RUN if [ "$TARGETARCH" = "amd64" ]; then \ - ARCH_FILE="$TARGZ_FILE_AMD64"; \ - elif [ "$TARGETARCH" = "arm64" ]; then \ - ARCH_FILE="$TARGZ_FILE_ARM64"; \ - else \ - echo "不支持的架构: $TARGETARCH" && exit 1; \ - fi && \ - echo "TARGETARCH: $TARGETARCH" && \ - echo "使用文件: $ARCH_FILE" && \ - ls -la /app/ && \ - tar -xzf "/app/${ARCH_FILE}" -C /app --strip-components=1 && \ - ls -la /app/ && \ - rm -rf /app/*.tar.gz /app/config.json /app/config_cc.json /app/index.html /app/xxxigServer && \ - addgroup -S xxxig && \ - adduser -S -G xxxig xxxig && \ - mkdir -p /app/data && \ - chown -R xxxig:xxxig /app && \ - chmod +x /app/xxxigDaemon /app/xxxigMiner - -USER xxxig -WORKDIR /app - -ENTRYPOINT ["/app/xxxigDaemon"] diff --git a/docker/Dockerfile.Server b/docker/Dockerfile.Server deleted file mode 100644 index 5701066..0000000 --- a/docker/Dockerfile.Server +++ /dev/null @@ -1,78 +0,0 @@ -FROM alpine:3.21 - -ARG TARGETARCH -ARG TARGZ_FILE_AMD64 -ARG TARGZ_FILE_ARM64 - -RUN apk update && apk add --no-cache wget gettext - -COPY ./app /app - -RUN if [ "$TARGETARCH" = "amd64" ]; then \ - ARCH_FILE="$TARGZ_FILE_AMD64"; \ - elif [ "$TARGETARCH" = "arm64" ]; then \ - ARCH_FILE="$TARGZ_FILE_ARM64"; \ - else \ - echo "不支持的架构: $TARGETARCH" && exit 1; \ - fi && \ - echo "TARGETARCH: $TARGETARCH" && \ - echo "使用文件: $ARCH_FILE" && \ - ls -la /app/ && \ - tar -xzf "/app/${ARCH_FILE}" -C /app --strip-components=1 && \ - ls -la /app/ && \ - rm -rf /app/*.tar.gz /app/config.json /app/config_cc.json /app/xxxigDaemon /app/xxxigMiner && \ - addgroup -S xxxig && \ - adduser -S -G xxxig xxxig && \ - mkdir -p /app/data && \ - chown -R xxxig:xxxig /app && \ - chmod +x /app/xxxigServer - -ENV LOG_FILE=/app/data/xxxigServer.log \ - BIND_IP=0.0.0.0 \ - PORT=80 \ - USER= \ - PASS= \ - ACCESS_TOKEN= \ - TLS=false \ - CERT_FILE= \ - KEY_FILE= \ - TG_BOT_TOKEN= \ - TG_CHAT_ID= - -COPY < /app/data/config.json -fi -exec "\$@" -EOF - -RUN chmod +x /app/entrypoint.sh - -EXPOSE 80 443 -VOLUME /app/data \ - /app/certs - -USER xxxig -WORKDIR /app - -ENTRYPOINT ["/app/entrypoint.sh"] -CMD ["/app/xxxigServer", "-c", "/app/data/config.json"]