├── currentVersion ├── gradle-wrapper.properties ├── .github └── workflows │ ├── Delete_Old_Workflow.yaml │ ├── UPDATE_DOCKER_README.yaml │ ├── release.yaml │ ├── Build_Test.yaml │ └── Build.yaml ├── achieve ├── Dockerfile.Alpine └── Dockerfile.Debian ├── Dockerfile ├── Dockerfile.test ├── Dockerfile.Update ├── docker-compose.yaml ├── entrypoint.sh ├── README.md └── entrypoint.auto.sh /currentVersion: -------------------------------------------------------------------------------- 1 | 2.7.0.5 2 | -------------------------------------------------------------------------------- /gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists -------------------------------------------------------------------------------- /.github/workflows/Delete_Old_Workflow.yaml: -------------------------------------------------------------------------------- 1 | name: Delete Workflow Runs 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | schedule: 7 | - cron: "0 16 * * *" 8 | 9 | jobs: 10 | del_runs: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Delete workflow runs 14 | uses: Mattraks/delete-workflow-runs@v2 15 | with: 16 | token: ${{ secrets.TOKEN_GITHUB }} 17 | repository: ${{ github.repository }} 18 | retain_days: 1 19 | keep_minimum_runs: 1 20 | -------------------------------------------------------------------------------- /achieve/Dockerfile.Alpine: -------------------------------------------------------------------------------- 1 | FROM openjdk:8u212-jre-alpine3.9 2 | 3 | WORKDIR /danmuji 4 | 5 | # 设置时区并安装必要的软件包 6 | RUN apk add --no-cache tzdata su-exec && \ 7 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 8 | echo 'Asia/Shanghai' > /etc/timezone && \ 9 | apk del tzdata && \ 10 | rm -rf /var/cache/apk/* /root/.cache /tmp/* 11 | 12 | # 复制应用程序和入口脚本 13 | COPY Bilibili_Danmuji/danmuji.jar /danmuji/danmuji.jar 14 | COPY entrypoint.sh /usr/local/bin/entrypoint.sh 15 | 16 | # 确保入口脚本可执行 17 | RUN chmod +x /usr/local/bin/entrypoint.sh 18 | 19 | # 暴露应用程序端口 20 | EXPOSE 23333 21 | 22 | # 设置环境变量 23 | ENV JAVA_OPTS="" 24 | ENV JAVA_OPTS2="" 25 | 26 | # 设置入口点 27 | ENTRYPOINT ["sh", "/usr/local/bin/entrypoint.sh"] 28 | -------------------------------------------------------------------------------- /achieve/Dockerfile.Debian: -------------------------------------------------------------------------------- 1 | FROM openjdk:8-jre-slim-bullseye 2 | 3 | WORKDIR /danmuji 4 | 5 | # 设置时区并安装必要的软件包 6 | RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ 7 | && echo "Asia/Shanghai" > /etc/timezone \ 8 | && apt-get update \ 9 | && apt-get install -y --no-install-recommends su-exec \ 10 | && dpkg-reconfigure --frontend noninteractive tzdata \ 11 | && rm -rf /var/lib/apt/lists/* /tmp/* 12 | 13 | # 复制应用程序和入口脚本 14 | COPY Bilibili_Danmuji/danmuji.jar /danmuji/danmuji.jar 15 | COPY entrypoint.sh /usr/local/bin/entrypoint.sh 16 | 17 | # 确保入口脚本可执行 18 | RUN chmod +x /usr/local/bin/entrypoint.sh 19 | 20 | # 暴露应用程序端口 21 | EXPOSE 23333 22 | 23 | # 设置环境变量 24 | ENV JAVA_OPTS="" 25 | ENV JAVA_OPTS2="" 26 | 27 | # 设置入口点 28 | ENTRYPOINT ["sh", "/usr/local/bin/entrypoint.sh"] 29 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM eclipse-temurin:8u472-b08-jre 2 | 3 | WORKDIR /danmuji 4 | 5 | # 设置时区并安装必要的软件包 6 | RUN apt-get update && \ 7 | apt-get install -y --no-install-recommends wget \ 8 | curl \ 9 | tzdata \ 10 | locales \ 11 | gosu \ 12 | sudo \ 13 | procps \ 14 | net-tools \ 15 | iputils-ping \ 16 | vim-tiny && \ 17 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 18 | echo "Asia/Shanghai" > /etc/timezone && \ 19 | rm -rf /var/lib/apt/lists/* && \ 20 | apt-get clean 21 | 22 | # 复制应用程序和入口脚本 23 | COPY --chmod=755 Bilibili_Danmuji/danmuji.jar /danmuji/danmuji.jar 24 | COPY --chmod=755 entrypoint.sh /entrypoint.sh 25 | 26 | # 暴露应用程序端口 27 | EXPOSE 23333 28 | 29 | # 设置环境变量 30 | ENV JAVA_OPTS="" 31 | ENV JAVA_OPTS2="" 32 | 33 | # 设置入口点 34 | ENTRYPOINT ["/entrypoint.sh"] 35 | -------------------------------------------------------------------------------- /Dockerfile.test: -------------------------------------------------------------------------------- 1 | FROM eclipse-temurin:8u472-b08-jre 2 | 3 | WORKDIR /danmuji 4 | 5 | # 设置时区并安装必要的软件包 6 | RUN apt-get update && \ 7 | apt-get install -y --no-install-recommends wget \ 8 | curl \ 9 | tzdata \ 10 | locales \ 11 | gosu \ 12 | sudo \ 13 | procps \ 14 | net-tools \ 15 | iputils-ping \ 16 | vim-tiny && \ 17 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 18 | echo "Asia/Shanghai" > /etc/timezone && \ 19 | rm -rf /var/lib/apt/lists/* && \ 20 | apt-get clean 21 | 22 | # 复制应用程序和入口脚本 23 | COPY --chmod=755 Bilibili_Danmuji/danmuji.jar /danmuji/danmuji.jar 24 | COPY --chmod=755 entrypoint.sh /entrypoint.sh 25 | 26 | # 暴露应用程序端口 27 | EXPOSE 23333 28 | 29 | # 设置环境变量 30 | ENV JAVA_OPTS="" 31 | ENV JAVA_OPTS2="" 32 | 33 | # 设置入口点 34 | ENTRYPOINT ["/entrypoint.sh"] 35 | -------------------------------------------------------------------------------- /Dockerfile.Update: -------------------------------------------------------------------------------- 1 | FROM eclipse-temurin:8u472-b08-jre 2 | 3 | WORKDIR /danmuji 4 | 5 | # 设置时区并安装必要的软件包 6 | RUN apt-get update && \ 7 | apt-get install -y --no-install-recommends wget \ 8 | curl \ 9 | tzdata \ 10 | locales \ 11 | gosu \ 12 | sudo \ 13 | procps \ 14 | net-tools \ 15 | iputils-ping \ 16 | vim-tiny && \ 17 | cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ 18 | echo "Asia/Shanghai" > /etc/timezone && \ 19 | rm -rf /var/lib/apt/lists/* && \ 20 | apt-get clean && \ 21 | wget https://raw.githubusercontent.com/zzcabc/Docker_Buildx_Danmuji/main/entrypoint.auto.sh && \ 22 | mv entrypoint.auto.sh entrypoint.sh && \ 23 | chmod 0777 entrypoint.sh 24 | 25 | EXPOSE 23333 26 | 27 | ENV GITHUB_PROXY="https://ghproxy.com/" 28 | ENV JAVA_OPTS="" 29 | ENV JAVA_OPTS2="" 30 | 31 | ENTRYPOINT ["./entrypoint.sh"] 32 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3" # 根据你的docker-compose进行修改 2 | services: 3 | danmuji: 4 | # 阿里镜像地址 5 | # image: registry.cn-hangzhou.aliyuncs.com/zzcabc/danmuji:latest 6 | # dockerhub镜像地址 7 | image: zzcabc/danmuji 8 | # 容器名称 9 | container_name: danmuji 10 | # 启动方式 always 在容器退出时总是重启容器 11 | # unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器 12 | restart: always 13 | # 环境变量 TZ 设置时区为东八区 14 | # JAVA_OPTS 设置Java程序启动所需内存大小(可能无效果) 15 | environment: 16 | TZ: Asia/Shanghai 17 | JAVA_OPTS: "-Xms64m -Xmx128m" 18 | # 如果你了解Java的运行逻辑 java ${JAVA_OPTS} -jar danmuji.jar ${JAVA_OPTS2} 19 | JAVA_OPTS2: "" 20 | # “:”前面是本机地址可自由更改,“:”后面为容器内固定路径 21 | # web服务端口 22 | ports: 23 | - 23333:23333 24 | # 映射文件夹(非必须) 25 | volumes: 26 | - /danmuji/Danmuji_log:/danmuji/Danmuji_log 27 | - /danmuji/guardFile:/danmuji/guardFile 28 | - /danmuji/log:/danmuji/log 29 | # 日志 日志大小1m 日志数量2个 30 | logging: 31 | driver: json-file 32 | options: 33 | max-size: "1m" 34 | max-file: "2" 35 | -------------------------------------------------------------------------------- /.github/workflows/UPDATE_DOCKER_README.yaml: -------------------------------------------------------------------------------- 1 | name: 更新DockerHub简介 2 | on: 3 | push: 4 | branches: 5 | - main 6 | paths: 7 | - README.md 8 | - .github/workflows/UPDATE_DOCKER_README.yaml 9 | 10 | jobs: 11 | update: 12 | runs-on: ubuntu-latest 13 | name: UPDATE_DOCKER_README 14 | env: 15 | IMAGE_NAME: danmuji 16 | steps: 17 | - 18 | name: Checkout 19 | uses: actions/checkout@main 20 | 21 | - 22 | name: Login DockerHub 23 | uses: docker/login-action@v2 24 | with: 25 | username: ${{ secrets.DOCKERHUB_USERNAME }} 26 | password: ${{ secrets.DOCKERHUB_TOKEN }} 27 | 28 | - 29 | name: Update DockerHub Description 30 | uses: christian-korneck/update-container-description-action@v1 31 | env: 32 | DOCKER_USER: ${{ secrets.DOCKERHUB_USERNAME }} 33 | DOCKER_PASS: ${{ secrets.DOCKERHUB_PASSWORD }} 34 | with: 35 | destination_container_repo: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }} 36 | provider: dockerhub 37 | readme_file: ./README.md -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | WORKDIR=/danmuji 5 | DANMUJI_LOG=/danmuji/Danmuji_log 6 | GUARDFILE=/danmuji/guardFile 7 | LOG=/danmuji/log 8 | 9 | UMASK=${UMASK:-022} 10 | PUID=${PUID:-0} 11 | PGID=${PGID:-0} 12 | 13 | echo "Starting Danmuji on Ubuntu with PUID:PGID ${PUID}:${PGID} and UMASK ${UMASK}" 14 | 15 | # 检查必要命令 16 | check_command() { 17 | if ! command -v $1 &> /dev/null; then 18 | echo "错误: $1 命令未找到,请确保已安装" >&2 19 | exit 1 20 | fi 21 | } 22 | 23 | check_command java 24 | check_command gosu 25 | 26 | # 检查JAR文件 27 | if [ ! -f "danmuji.jar" ]; then 28 | echo "错误: danmuji.jar文件未找到" >&2 29 | exit 1 30 | fi 31 | 32 | # 设置umask 33 | umask ${UMASK} 34 | 35 | # Ubuntu用户管理 36 | if [ -n "$PUID" ] && [ "$PUID" -ne 0 ]; then 37 | echo "配置用户权限: UID=${PUID}, GID=${PGID}" 38 | 39 | # 检查是否已存在相同UID的用户 40 | if ! getent passwd ${PUID} >/dev/null 2>&1; then 41 | # 检查是否已存在相同GID的组 42 | if ! getent group ${PGID} >/dev/null 2>&1; then 43 | echo "创建组: GID=${PGID}" 44 | groupadd -g ${PGID} danmuji 45 | fi 46 | 47 | echo "创建用户: UID=${PUID}, GID=${PGID}" 48 | # Ubuntu中使用--no-create-home避免创建家目录 49 | useradd -u ${PUID} -g ${PGID} --no-create-home -s /bin/bash danmuji 50 | else 51 | echo "用户UID=${PUID}已存在,跳过创建" 52 | fi 53 | fi 54 | 55 | # 创建目录 56 | echo "创建目录结构..." 57 | mkdir -p ${DANMUJI_LOG} ${GUARDFILE} ${LOG} 58 | 59 | # Ubuntu权限设置(更严格) 60 | echo "设置目录权限..." 61 | chown -R ${PUID}:${PGID} ${WORKDIR} 62 | 63 | # 确保JAR文件可执行 64 | chmod +x danmuji.jar 65 | 66 | # 日志目录特殊权限 67 | chmod 777 ${DANMUJI_LOG} ${LOG} ${GUARDFILE} 68 | 69 | # 环境变量验证 70 | echo "环境变量检查:" 71 | echo " JAVA_OPTS: ${JAVA_OPTS:-未设置}" 72 | echo " JAVA_OPTS2: ${JAVA_OPTS2:-未设置}" 73 | echo " CONFIG_FILE: ${CONFIG_FILE}" 74 | 75 | # 设置locale(Ubuntu需要) 76 | export LANG=${LANG:-C.UTF-8} 77 | export LC_ALL=${LC_ALL:-C.UTF-8} 78 | 79 | # 时区设置(可选) 80 | if [ -n "$TZ" ]; then 81 | echo "设置时区: $TZ" 82 | ln -sf /usr/share/zoneinfo/$TZ /etc/localtime 83 | echo $TZ > /etc/timezone 84 | fi 85 | 86 | # 构建Java命令 87 | JAVA_CMD="java" 88 | if [ -n "${JAVA_OPTS}" ]; then 89 | JAVA_CMD="${JAVA_CMD} ${JAVA_OPTS}" 90 | fi 91 | JAVA_CMD="${JAVA_CMD} -jar danmuji.jar" 92 | if [ -n "${JAVA_OPTS2}" ]; then 93 | JAVA_CMD="${JAVA_CMD} ${JAVA_OPTS2}" 94 | fi 95 | 96 | echo "启动命令: ${JAVA_CMD}" 97 | echo "工作目录: $(pwd)" 98 | echo "Java版本: $(java -version 2>&1 | head -1)" 99 | 100 | # 使用gosu切换用户执行(Ubuntu推荐使用gosu) 101 | exec gosu ${PUID}:${PGID} bash -c "cd ${WORKDIR} && ${JAVA_CMD}" -------------------------------------------------------------------------------- /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | # 利用GitHub Action自动构建多框架的docker镜像 2 | name: Release 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | releaseTag: 8 | description: 'Release Tag' 9 | required: true 10 | default: 'v' 11 | # main分支的push操作会触发当前脚本的执行 12 | # push: 13 | # branches: [ main ] 14 | # main分支的pr操作会触发当前脚本的执行 15 | # pull_request: 16 | # branches: [ main ] 17 | # 定时任务,分时日月年,为国际标准时间16点,对应中国时间0点 18 | # schedule: 19 | # - cron: '0 16 * * *' 20 | # # 点击star时开始任务 21 | # watch: 22 | # types: started 23 | 24 | 25 | jobs: 26 | release: 27 | # 运行在Ubuntu系统上 28 | runs-on: ubuntu-latest 29 | # if: "contains(github.event.head_commit.message, '-v')" 30 | # 步骤 31 | steps: 32 | - name: Prepare 33 | id: prepare 34 | run: | 35 | wget https://github.com/BanqiJane/Bilibili_Danmuji/raw/master/build.gradle 36 | sed -n 7p build.gradle > version 37 | awk '{printf("%s",$0)}' version | sed 's/\ //g' $1 > new 38 | sed -i "s/'//g" new 39 | sed -i "s/version=//g" new 40 | mv new version 41 | FILE_NAME=$(cat version) 42 | sed -i "s/beta//g" version 43 | TAG_VERSION=$(cat version) 44 | echo "file_name=${FILE_NAME}" >> $GITHUB_OUTPUT 45 | echo "tag_version=${TAG_VERSION}" >> $GITHUB_OUTPUT 46 | 47 | echo "TAG=弹幕姬发行版${TAG_VERSION}(含绿色版本)" >> $GITHUB_OUTPUT 48 | 49 | echo ${FILE_NAME} 50 | echo ${TAG} 51 | 52 | # 切换到主分支 53 | - name: Checkout 54 | uses: actions/checkout@main 55 | 56 | # 初始化 JDK8 环境 57 | - name: Set up JDK 8 58 | uses: actions/setup-java@v3 59 | with: 60 | java-version: '8' 61 | distribution: 'adopt' 62 | 63 | # 使用Gradle编译构建 64 | - name: Build with Gradle 65 | run: | 66 | sudo apt-get install -y git rar zip unzip 67 | git clone https://github.com/BanqiJane/Bilibili_Danmuji.git 68 | cd Bilibili_Danmuji 69 | sudo chmod +x ./gradlew 70 | sudo chmod +x lib/javastruct-0.1.jar 71 | sudo ./gradlew build -x test 72 | sudo mv $(find build -type f -size +10M) ./ 73 | 74 | - name: Download OpenJDK8 Archive 75 | run: | 76 | wget https://github.com/zzcabc/Docker_Buildx_Danmuji/releases/download/openjdk-8-jre/openjdk-8-jre.zip 77 | unzip openjdk-8-jre.zip -d openjdk-8-jre 78 | 79 | - name: Create File Folders Edit Files 80 | run: | 81 | mkdir danmuji 82 | mkdir danmuji-green 83 | 84 | mv openjdk-8-jre danmuji-green/openjdk-8-jre 85 | 86 | echo "仅在本机有jdk8或jre8版本以上的环境下" > danmuji/readme.txt 87 | echo "window下:直接run.bat运行" >> danmuji/readme.txt 88 | echo "其它系统或方法:在本软件目录下cmd命令行执行 java -jar -Xms64m -Xmx128m BiliBili_Danmuji-${{ steps.prepare.outputs.file_name }}.jar --server.port=23333 即可运行" >> danmuji/readme.txt 89 | echo "--server.port=23333为端口 想修改端口可以修改run.bat里面的这个参数" >> danmuji/readme.txt 90 | echo "如何设置?打开浏览器地址栏输入http://127.0.0.1:23333进行设置;" >> danmuji/readme.txt 91 | echo "如何退出?直接关闭命令行窗口即可退出" >> danmuji/readme.txt 92 | echo "如何获取更新?建议持续关注github项目官页" >> danmuji/readme.txt 93 | echo "不会使用?有问题反馈? GitHub上开个issue提问 或者 主页 点击联系我 邮件发送" >> danmuji/readme.txt 94 | 95 | echo "@echo off" > danmuji/run.bat 96 | echo "title BiliBili_Danmuji-${{ steps.prepare.outputs.file_name }}-%date%-%time%-%cd%" >> danmuji/run.bat 97 | echo "java -jar -Xms64m -Xmx128m BiliBili_Danmuji-${{ steps.prepare.outputs.file_name }}.jar --server.port=23333" >> danmuji/run.bat 98 | 99 | 100 | echo "该版本为window绿色版本," > danmuji-green/readme.txt 101 | echo "运行方法:" >> danmuji-green/readme.txt 102 | echo "直接运行run.bat(window下)记得允许网络" >> danmuji-green/readme.txt 103 | echo "其他系统或方法:解压完成 直接在本目录打开控制台 或者 控制台cd本目录命令执行openjdk-8-jre\bin\java -jar -Xms64m -Xmx128m BiliBili_Danmuji-${{ steps.prepare.outputs.file_name }}.jar --server.port=23333 即可运行" >> danmuji-green/readme.txt 104 | echo "--server.port=23333为端口 想修改端口可以修改run.bat里面的这个参数" >> danmuji-green/readme.txt 105 | echo "如何设置?打开浏览器地址栏输入 http://127.0.0.1:23333进行设置;" >> danmuji-green/readme.txt 106 | echo "如何退出?直接关闭命令行窗口即可退出" >> danmuji-green/readme.txt 107 | echo "如何获取更新?建议持续关注github项目官页" >> danmuji-green/readme.txt 108 | echo "不会使用?有问题反馈? GitHub上开个issue提问 或者 主页 点击联系我 邮件发送" >> danmuji-green/readme.txt 109 | 110 | echo "@echo off" > danmuji-green/run.bat 111 | echo "title BiliBili_Danmuji-${{ steps.prepare.outputs.file_name }}-%date%-%time%-%cd%" >> danmuji-green/run.bat 112 | echo "openjdk-8-jre\bin\java -jar -Xms64m -Xmx128m BiliBili_Danmuji-${{ steps.prepare.outputs.file_name }}.jar --server.port=23333" >> danmuji-green/run.bat 113 | 114 | # 压缩文件 115 | - name: Compressed Files 116 | run: | 117 | export BUILD_DATE=$(date +"%Y-%m-%d") 118 | echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV 119 | cp Bilibili_Danmuji/*.jar danmuji/ 120 | cp Bilibili_Danmuji/*.jar danmuji-green/ 121 | zip -r danmuji-green.zip danmuji-green/ 122 | zip -r danmuji.zip danmuji/ 123 | rar a -r danmuji-green.rar danmuji-green/ 124 | rar a danmuji.rar danmuji/ 125 | tar cvf danmuji.tar danmuji/ 126 | 127 | # - name: Upload Files To Release 128 | # uses: ncipollo/release-action@main 129 | # with: 130 | # tag: ${{ steps.prepare.outputs.TAG }} 131 | # allowUpdates: true 132 | # replacesArtifacts: true 133 | # body: ${{ env.BUILD_DATE }} 134 | # token: ${{ secrets.GITHUB_TOKEN }} 135 | # artifacts: danmuji.tar,danmuji-green.rar,danmuji-green.zip,danmuji.rar,danmuji.zip 136 | - name: Release 137 | uses: softprops/action-gh-release@v1 138 | with: 139 | name: ${{ steps.prepare.outputs.TAG }} 140 | tag_name: ${{ steps.prepare.outputs.tag_version }} 141 | token: ${{ secrets.GITHUB_TOKEN }} 142 | files: danmuji.tar,danmuji-green.rar,danmuji-green.zip,danmuji.rar,danmuji.zip -------------------------------------------------------------------------------- /.github/workflows/Build_Test.yaml: -------------------------------------------------------------------------------- 1 | # 利用GitHub Action自动构建多框架的docker镜像 2 | name: Build_Test 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | releaseTag: 8 | description: 'Forced' 9 | required: true 10 | default: 'true' 11 | # main分支的push操作会触发当前脚本的执行 12 | push: 13 | branches: [ main ] 14 | # main分支的pr操作会触发当前脚本的执行 15 | # pull_request: 16 | # branches: [ main ] 17 | # 定时任务,分时日月年,为国际标准时间16点,对应中国时间0点 18 | # schedule: 19 | # - cron: '0 16 * * *' 20 | # # 点击star时开始任务 21 | # watch: 22 | # types: started 23 | 24 | 25 | jobs: 26 | Build_Test: 27 | # 运行在Ubuntu系统上 28 | runs-on: ubuntu-latest 29 | # 步骤 30 | steps: 31 | # 切换到主分支 32 | - name: Checkout 33 | uses: actions/checkout@main 34 | 35 | - name: Prepare 36 | id: prepare 37 | # IMAGE_NAME : 镜像名称 38 | # ALI_ADD :阿里镜像地址 39 | # GITHUB_VERSION : 源码版本 40 | # DOCKERHUB_VERSION : DockerHub 镜像版本 41 | # TAG_VERSION : 标签版本 zzcabc/danmuji:2.4.9 42 | # TAG_LATEST : 最新版本 zzcabc/pixivbiu-test:latest 43 | # ALI_VERSION : registry.cn-hangzhou.aliyuncs.com/zzcabc/danmuji:2.4.9 44 | # ALI_LATEST : registry.cn-hangzhou.aliyuncs.com/zzcabc/danmuji:latest 45 | # AUTO_UPDATE_TAG : zzcabc/danmuji:autoupdate 46 | # AUTO_UPDATE_ALI : registry.cn-hangzhou.aliyuncs.com/zzcabc/danmuji:autoupdate 47 | run: | 48 | IMAGE_NAME=danmuji-test 49 | ALI_ADD=registry.cn-hangzhou.aliyuncs.com 50 | 51 | GITHUB_VERSION=$(curl -sX GET "https://api.github.com/repos/BanqiJane/Bilibili_Danmuji/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') 52 | DOCKERHUB_VERSION=$(cat currentVersion) 53 | 54 | TAG_VERSION="${{ secrets.DOCKERHUB_USERNAME }}/${IMAGE_NAME}:${GITHUB_VERSION}" 55 | TAG_LATEST="${{ secrets.DOCKERHUB_USERNAME }}/${IMAGE_NAME}:latest" 56 | 57 | ALI_VERSION="${ALI_ADD}/${{ secrets.ALIYUN_NAMESPACES }}/${IMAGE_NAME}:${GITHUB_VERSION}" 58 | ALI_LATEST="${ALI_ADD}/${{ secrets.ALIYUN_NAMESPACES }}/${IMAGE_NAME}:latest" 59 | 60 | AUTO_UPDATE_TAG="${{ secrets.DOCKERHUB_USERNAME }}/${IMAGE_NAME}:autoupdate" 61 | AUTO_UPDATE_ALI="${ALI_ADD}/${{ secrets.ALIYUN_NAMESPACES }}/${IMAGE_NAME}:autoupdate" 62 | 63 | echo "github_version=${GITHUB_VERSION}" >> $GITHUB_OUTPUT 64 | echo "dockerhub_version=${DOCKERHUB_VERSION}" >> $GITHUB_OUTPUT 65 | 66 | echo "tag_version=${TAG_VERSION}" >> $GITHUB_OUTPUT 67 | echo "tag_latest=${TAG_LATEST}" >> $GITHUB_OUTPUT 68 | 69 | echo "ali_version=${ALI_VERSION}" >> $GITHUB_OUTPUT 70 | echo "ali_latest=${ALI_LATEST}" >> $GITHUB_OUTPUT 71 | 72 | echo "auto_update_tag=${AUTO_UPDATE_TAG}" >> $GITHUB_OUTPUT 73 | echo "auto_update_ali=${AUTO_UPDATE_ALI}" >> $GITHUB_OUTPUT 74 | 75 | echo $GITHUB_VERSION 76 | echo $DOCKERHUB_VERSION 77 | 78 | - name: Set up QEMU 79 | uses: docker/setup-qemu-action@v2 80 | 81 | # 初始化Docker Buildx 82 | - name: Set up Docker Buildx 83 | uses: docker/setup-buildx-action@v2 84 | 85 | # 登录到DockerHub 86 | - name: Login to DockerHub 87 | uses: docker/login-action@v2 88 | with: 89 | username: ${{ secrets.DOCKERHUB_USERNAME }} 90 | password: ${{ secrets.DOCKERHUB_TOKEN }} 91 | 92 | # 登录到阿里镜像仓库 93 | # - name: Login To Alibaba Cloud Container Registry 94 | # run: | 95 | # docker login -u ${{ secrets.ALIYUN_USERNAME }} -p ${{ secrets.ALIYUN_PWD }} registry.cn-hangzhou.aliyuncs.com 96 | 97 | # 初始化 JDK8 环境 98 | - name: Set up JDK 8 99 | uses: actions/setup-java@v3 100 | with: 101 | java-version: '8' 102 | distribution: 'adopt' 103 | 104 | # 使用Gradle编译构建同时命名danmuji.jar 105 | - name: Build with Gradle 106 | run: | 107 | sudo apt-get install -y git 108 | git clone https://github.com/BanqiJane/Bilibili_Danmuji.git 109 | cd Bilibili_Danmuji 110 | sudo chmod +x ./gradlew 111 | sudo ./gradlew build -x test 112 | sudo mv $(find build -type f -size +10M) ./danmuji.jar 113 | 114 | # 构建Arm32的镜像 115 | # - name: Build and Push Arm32 116 | # uses: docker/build-push-action@v3 117 | # with: 118 | # platforms: linux/arm/v7 119 | # file: ./Dockerfile.Alpine 120 | # context: . 121 | # push: true 122 | # tags: | 123 | # ${{ steps.prepare.outputs.tag_latest }}-arm32 124 | # ${{ steps.prepare.outputs.tag_version }}-arm32 125 | 126 | # 自动更新的推送 127 | # - name: Build and Push Auto Update 128 | # uses: docker/build-push-action@v3 129 | # with: 130 | # platforms: linux/amd64,linux/arm64/v8 131 | # file: ./Dockerfile.Update 132 | # context: . 133 | # push: true 134 | # tags: | 135 | # ${{ steps.prepare.outputs.auto_update_tag }} 136 | # ${{ steps.prepare.outputs.auto_update_ali }} 137 | 138 | # 构建Amd64和Arm64的镜像 139 | - name: Build and Push Amd64 and Arm64 140 | uses: docker/build-push-action@v3 141 | with: 142 | platforms: linux/amd64,linux/arm64/v8,linux/arm/v7 143 | file: ./Dockerfile.test 144 | context: . 145 | push: true 146 | tags: | 147 | ${{ steps.prepare.outputs.tag_version }} 148 | ${{ steps.prepare.outputs.tag_latest }} 149 | 150 | # 初始化版本号与git 151 | # - name: commit 152 | # run: | 153 | # echo "${{ steps.prepare.outputs.github_version }}" > currentVersion 154 | # git config --global user.name zhaocheng 155 | # git config --global user.email zhaocheng990105@gmail.com 156 | # git add currentVersion 157 | # git commit -m "当前版本是:${{ steps.prepare.outputs.github_version }}" -a 158 | 159 | # 推送版本号到GitHub 160 | # - name: Push changes 161 | # uses: ad-m/github-push-action@master 162 | # with: 163 | # github_token: ${{ secrets.TOKEN_GITHUB }} 164 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker_Buildx_Danmuji 2 | 3 | [Dockerhub](https://hub.docker.com/r/zzcabc/danmuji) | [Github](https://github.com/zzcabc/Docker_Buildx_Danmuji) 4 | 5 | [![GitHub release (latest by date)](https://img.shields.io/github/v/release/BanqiJane/Bilibili_Danmuji?label=danmuji&style=flat-square)](https://github.com/BanqiJane/Bilibili_Danmuji/releases/latest) [![Docker Image Version (latest by date)](https://img.shields.io/docker/v/zzcabc/danmuji?label=DockerHub&style=flat-square)](https://hub.docker.com/r/zzcabc/danmuji/tags?page=1&ordering=last_updated) [![Docker Pulls](https://img.shields.io/docker/pulls/zzcabc/danmuji?style=flat-square)](https://hub.docker.com/r/zzcabc/danmuji) 6 | 7 | ### 如果你发现上面图标版本不一致,请前往Github点击一下star,这样会触发自动构建镜像,即使你之后取消star 8 | 9 | 本项目使用Docker Buildx构建全平台镜像,支持`linux/amd64`、`linux/armv7`、`linux/armv8`、不在支持`linux/386`、`linux/armv6`、`linux/ppc64le`、`linux/s390x`框架 10 | 11 | ### 统一使用eclipse-temurin版本 12 | |dockerfile|架构|底包采用|Amd64镜像大小| 13 | |:--:|:--:|:--:|:--:| 14 | |Ubuntu|amd64,arm64,arm32|8u412-b08-jre|256M| 15 | |Update|amd64,arm64,arm32|8u412-b08-jre|221M| 16 | 17 | 使用GitHub Action中国时间 **0:00** 自动拉取[BanqiJane/Bilibili_Danmuji](https://github.com/BanqiJane/Bilibili_Danmuji)的源码进行构建Docker镜像,**但当源码版本和Docker镜像版本一致将不会构建镜像**,由源码构建时间大概6分钟 18 | 19 | ~~[B站用户西凉君君提供的Docker镜像地址](https://registry.hub.docker.com/r/xilianghe/danmuji)~~ 20 | 21 | # 使用方式 22 | 23 | ``` 24 | 当前已经取消linux/386、linux/armv6、linux/ppc64le、linux/s390x的镜像构建 25 | 26 | 在2.7.0.5版本之后 amd64,arm64,arm32将合并 27 | 28 | 使用 zzcabc/danmuji:2.7.0.5 可以拉取指定版本的镜像 29 | 30 | ``` 31 | # 在2.7.0.5版本之后 amd64,arm64,arm32将合并 32 | 33 | 34 | ## 注意:阿里镜像仓库登录有问题,最近懒得搞提交了,请使用dockerhub的镜像 35 | 36 | ## DockerHub镜像(无自动更新) 37 | 38 | ```sh 39 | docker run -d \ 40 | --name danmuji \ 41 | --dns=223.5.5.5 \ 42 | -p 本机端口:23333 \ 43 | -e JAVA_OPTS="-Xms64m -Xmx128m" \ 44 | -e JAVA_OPTS2="" (已经启用,具体看映射配置说明的表格) \ 45 | -v 本机路径:/danmuji/Danmuji_log \ 46 | -v 本机路径:/danmuji/guardFile \ 47 | -v 本机路径:/danmuji/log \ 48 | zzcabc/danmuji 49 | ``` 50 | 51 | 或者,你也可以使用 52 | 53 | ```sh 54 | docker run -d \ 55 | --name danmuji \ 56 | -p 本机端口:23333 \ 57 | zzcabc/danmuji 58 | ``` 59 | 60 | **默认拉取最新版的镜像,如果你想指定版本可以将`zzcabc/danmuji`改为`zzcabc/danmuji:2.7.0.5`** 61 | 62 | ## DockerHub镜像(有自动更新 仅支持amd64和arm64) 63 | 64 | 容器采用获取官方的releases的danmuji.zip 解压并使用 65 | 66 | releases下载使用国内的免费服务,可能说不定就挂了 67 | 68 | 但是可能无法正常更新版本,毕竟Github的网络条件你懂 69 | 70 | 当版本更新的时候,你只需要使用 `docker restart danmuji` 即可完成更新操作 71 | 72 | **已经启用,你可以指定代理服务商了** 73 | **不指定默认为`https://ghproxy.com/`,记得后面有斜杠** 74 | 75 | **注意:只要免费服务不炸,就可以更新** 76 | 77 | ```sh 78 | docker run -d \ 79 | --name danmuji \ 80 | --dns=223.5.5.5 \ 81 | -p 本机端口:23333 \ 82 | -e GITHUB_PROXY="https://ghproxy.com/" (已经启用启用,自定义GitHub代理域名,默认为https://ghproxy.com/) \ 83 | -e JAVA_OPTS="-Xms64m -Xmx128m" \ 84 | -e JAVA_OPTS2="" (已经启用,具体看映射配置说明的表格) \ 85 | -v 本机路径:/danmuji/Danmuji_log \ 86 | -v 本机路径:/danmuji/guardFile \ 87 | -v 本机路径:/danmuji/log \ 88 | zzcabc/danmuji:autoupdate 89 | ``` 90 | 91 | 或者,你也可以使用 92 | 93 | ```sh 94 | docker run -d \ 95 | --name danmuji \ 96 | -p 本机端口:23333 \ 97 | zzcabc/danmuji:autoupdate 98 | ``` 99 | 100 | ## docker-compose方式 101 | 102 | **确保你安装了docker-compose,并且可以使用** 103 | 104 | 使用下面命令获取本项目的docker-compose 105 | 106 | 可能因为CDN的原因无法获取 107 | 108 | `wget https://cdn.jsdelivr.net/gh/zzcabc/Docker_Buildx_Danmuji@main/docker-compose.yaml` 109 | 110 | `wget https://cdn.jsdelivr.net/gh/zzcabc/Docker_Buildx_Danmuji@main/docker-compose-v2.yaml` 111 | 112 | 之后通过nano或者vim命令修改docker-compose.yaml 113 | 114 | docker compose 目前有两个版本 具体自己搜索 115 | 116 | V1 是 Python 写的 117 | 118 | V2 是 Go 写的 119 | 120 | 把`docker-compose up -d` 改成 `docker compose up -d` 即可 121 | 122 | |docker compose|V1|V2| 123 | |:--:|:--:|:--:| 124 | |docker-compose.yaml|`docker-compose up -d`|-| 125 | |docker-compose-v2.yaml|-|`docker compose up -d`| 126 | 127 | 你可以使用docker-compose启动多个容器 128 | 129 | 添加多个service 130 | ```yaml 131 | danmuji: # 变更命名 132 | image: zzcabc/danmuji 133 | container_name: danmuji # 变更容器名 134 | restart: always 135 | privileged: true 136 | environment: 137 | TZ: Asia/Shanghai 138 | JAVA_OPTS: "-Xms64m -Xmx128m" 139 | # java ${JAVA_OPTS} -jar danmuji.jar ${JAVA_OPTS2} 140 | JAVA_OPTS2: "" 141 | ports: 142 | - "23333:23333" # 变更端口 143 | volumes: 144 | - /danmuji/Danmuji_log:/danmuji/Danmuji_log 145 | - /danmuji/guardFile:/danmuji/guardFile 146 | - /danmuji/log:/danmuji/log 147 | logging: 148 | driver: json-file 149 | options: 150 | max-size: "1m" 151 | max-file: "2" 152 | ``` 153 | 154 | # 更新容器方式 155 | 156 | ## 容器自动更新 157 | 目前仅支持Amd64,Arm64 158 | 159 | ```sh 160 | docker run -d \ 161 | --name danmuji \ 162 | --dns=223.5.5.5 \ 163 | -p 本机端口:23333 \ 164 | -e JAVA_OPTS="-Xms64m -Xmx128m" \ 165 | -e JAVA_OPTS2="" (已经启用,具体看映射配置说明的表格) \ 166 | -v 本机路径:/danmuji/Danmuji_log \ 167 | -v 本机路径:/danmuji/guardFile \ 168 | -v 本机路径:/danmuji/log \ 169 | zzcabc/danmuji:autoupdate 170 | ``` 171 | 172 | **当版本更新的时候,你只要使用`docker restart danmuji`** 173 | 174 | ## 方案一——手动更新 175 | 176 | - 停止并删除容器 177 | - 拉取最新的镜像 178 | - 启动容器 179 | 180 | ## 方案二——自动更新 181 | 182 | - 使用 Watchtower 镜像,具体方式请百度 183 | 184 | # 映射路径说明 185 | 186 | 此说明对应Docker容器内 187 | 188 | | Docker运行参数 | 说明 | 189 | | :---: | :---: | 190 | | `run -d` | 后台的方式保持运行 | 191 | | `--name danmuji` | 设置Docker容器名称为danmuji(非必要设置) | 192 | | `--dns=223.5.5.5` | Docker容器使用阿里DNS | 193 | | `JAVA_OPTS="-Xms64m -Xmx128m -Duser.timezone=GMT+08"` | Java的基础配置,比如现在内存使用,设置Java时区等 | 194 | | `JAVA_OPTS2="Java配置的参数"` | 如果你对Java比较熟悉可以配置该参数(已经启用) | 195 | | `/danmuji/Danmuji_log` | 弹幕姬保存弹幕文件夹(非必须映射) | 196 | | `/danmuji/guardFile` | 弹幕姬上舰私信文件夹(非必须映射) | 197 | | `/danmuji/log` | 弹幕姬日志文件夹(非必须映射) | 198 | 199 | Docker容器内部运行命令 `java ${JAVA_OPTS} -jar danmuji.jar ${JAVA_OPTS2}` 200 | 201 | 即使没有写明的映射路径,你也可以使用-v去映射 202 | 203 | 比如点击保存配置的时候,程序会在其所在目录下创建set文件夹,在set文件夹下生成set.json配置文件 204 | 205 | 你同样可以使用`-v 本地路径:/danmuji/set` 来存放配置文件 206 | 207 | 本docker镜像中程序会存放在/danmuji目录下,不要没事干映射Linux专有的文件夹 208 | 209 | 对于已经启动的容器, 210 | 211 | 你也可以使用`docker cp 容器名称:容器内部路径 本地路径` 来将文件或文件夹复制到本地路径下 212 | 213 | 比如使用`docker cp danmuji:/danmuji/DanmujiProfile /usr/DanmujiProfile` 即可将DanmujiProfile 复制到宿主机的/usr目录下 214 | 215 | 使用`docker cp danmuji:/danmuji/set /usr/set` 即可将set文件夹内的所有东西 复制到宿主机的/usr/set目录下 216 | 217 | # TODO 218 | 219 | - [x] 添加判断,如果releases的版本与DockerHub的版本一致,则不重新构建镜像 220 | 221 | - [x] 每日定时构建镜像,当上有发布新版本最长也就时隔24小时更新 222 | 223 | - [x] 使用源码构建镜像,解决上述注意事项(但我不会!!!!) 上面三项同时解决 224 | 225 | - [x] 将镜像上传阿里镜像仓库 226 | -------------------------------------------------------------------------------- /entrypoint.auto.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # 设置环境变量 5 | WORKDIR=/danmuji 6 | DANMUJI_LOG=${WORKDIR}/Danmuji_log 7 | GUARDFILE=${WORKDIR}/guardFile 8 | LOG=${WORKDIR}/log 9 | 10 | UMASK=${UMASK:-022} 11 | PUID=${PUID:-1000} 12 | PGID=${PGID:-1000} 13 | GITHUB_PROXY=${GITHUB_PROXY:-} 14 | 15 | echo "Starting Danmuji on Ubuntu with PUID:${PUID} PGID:${PGID}" 16 | 17 | # 创建必要的文件夹函数 18 | create_directories() { 19 | echo "Creating required directories..." 20 | mkdir -p "${DANMUJI_LOG}" "${GUARDFILE}" "${LOG}" 21 | 22 | # 设置权限 23 | if [ "${PUID}" != "0" ]; then 24 | chown -R ${PUID}:${PGID} "${DANMUJI_LOG}" "${GUARDFILE}" "${LOG}" 25 | fi 26 | chmod 755 "${DANMUJI_LOG}" "${LOG}" 27 | chmod 777 "${GUARDFILE}" # 守护文件目录需要完全权限 28 | } 29 | 30 | # 检查命令是否存在 31 | check_command() { 32 | if ! command -v $1 &> /dev/null; then 33 | echo "错误: $1 命令未找到" >&2 34 | exit 1 35 | fi 36 | } 37 | 38 | # 检查必要命令 39 | check_command curl 40 | check_command wget 41 | check_command unzip 42 | check_command java 43 | check_command gosu 44 | 45 | # 获取最新版本 46 | echo "检查最新版本..." 47 | LATEST_VERSION=$(curl -sL ${GITHUB_PROXY}https://api.github.com/repos/BanqiJane/Bilibili_Danmuji/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') 48 | 49 | if [ -z "${LATEST_VERSION}" ]; then 50 | echo "错误: 无法获取最新版本" >&2 51 | echo "使用备用API..." 52 | LATEST_VERSION=$(curl -sL ${GITHUB_PROXY}https://api.github.com/repos/BanqiJane/Bilibili_Danmuji/releases/latest | jq -r '.tag_name' 2>/dev/null || echo "") 53 | 54 | if [ -z "${LATEST_VERSION}" ]; then 55 | echo "警告: 无法从GitHub获取版本,尝试使用本地文件" 56 | if [ -f "${WORKDIR}/danmuji.jar" ]; then 57 | echo "使用现有的danmuji.jar" 58 | else 59 | echo "错误: 没有可用的jar文件" >&2 60 | exit 1 61 | fi 62 | fi 63 | fi 64 | 65 | echo "最新版本: ${LATEST_VERSION:-未知}" 66 | 67 | # 检查旧版本文件是否存在 68 | if [ -f "${WORKDIR}/old" ]; then 69 | OLD_VERSION=$(cat "${WORKDIR}/old") 70 | echo "当前版本: ${OLD_VERSION}" 71 | 72 | # 记录新版本 73 | echo "${LATEST_VERSION}" > "${WORKDIR}/new" 74 | 75 | # 检查版本是否一致 76 | if [ "${LATEST_VERSION}" != "${OLD_VERSION}" ]; then 77 | echo "发现新版本: ${OLD_VERSION} -> ${LATEST_VERSION}" 78 | echo "开始更新..." 79 | 80 | # 下载新版本 81 | DOWNLOAD_URL="${GITHUB_PROXY}https://github.com/BanqiJane/Bilibili_Danmuji/releases/download/${LATEST_VERSION}/danmuji.zip" 82 | echo "下载: ${DOWNLOAD_URL}" 83 | 84 | if wget -q --show-progress -O /tmp/danmuji.zip "${DOWNLOAD_URL}"; then 85 | # 备份旧文件 86 | if [ -f "${WORKDIR}/danmuji.jar" ]; then 87 | cp "${WORKDIR}/danmuji.jar" "${WORKDIR}/danmuji.jar.bak" 88 | fi 89 | 90 | # 解压新版本 91 | unzip -q -o /tmp/danmuji.zip -d /tmp/ 92 | 93 | # 查找jar文件 94 | JAR_FILE=$(find /tmp -name "*.jar" -type f | head -1) 95 | 96 | if [ -n "${JAR_FILE}" ] && [ -f "${JAR_FILE}" ]; then 97 | # 复制jar文件 98 | cp "${JAR_FILE}" "${WORKDIR}/danmuji.jar" 99 | 100 | # 更新版本记录 101 | echo "${LATEST_VERSION}" > "${WORKDIR}/old" 102 | rm -f "${WORKDIR}/new" 103 | 104 | echo "更新完成!" 105 | else 106 | echo "错误: 在下载的ZIP中未找到jar文件" >&2 107 | if [ -f "${WORKDIR}/danmuji.jar.bak" ]; then 108 | echo "恢复备份..." 109 | cp "${WORKDIR}/danmuji.jar.bak" "${WORKDIR}/danmuji.jar" 110 | fi 111 | fi 112 | 113 | # 清理临时文件 114 | rm -rf /tmp/danmuji.zip /tmp/danmuji/ 115 | else 116 | echo "错误: 下载失败,使用现有版本" >&2 117 | rm -f "${WORKDIR}/new" 118 | fi 119 | else 120 | echo "已经是最新版本" 121 | rm -f "${WORKDIR}/new" 122 | fi 123 | else 124 | echo "首次运行容器" 125 | echo "下载文件..." 126 | 127 | # 创建版本文件 128 | echo "${LATEST_VERSION}" > "${WORKDIR}/old" 129 | 130 | # 下载初始版本 131 | DOWNLOAD_URL="${GITHUB_PROXY}https://github.com/BanqiJane/Bilibili_Danmuji/releases/download/${LATEST_VERSION}/danmuji.zip" 132 | echo "下载: ${DOWNLOAD_URL}" 133 | 134 | if wget -q --show-progress -O /tmp/danmuji.zip "${DOWNLOAD_URL}"; then 135 | # 解压文件 136 | unzip -q -o /tmp/danmuji.zip -d /tmp/ 137 | 138 | # 查找jar文件 139 | JAR_FILE=$(find /tmp -name "*.jar" -type f | head -1) 140 | 141 | if [ -n "${JAR_FILE}" ] && [ -f "${JAR_FILE}" ]; then 142 | # 复制jar文件到工作目录 143 | cp "${JAR_FILE}" "${WORKDIR}/danmuji.jar" 144 | echo "下载完成" 145 | else 146 | echo "错误: 在ZIP中未找到jar文件" >&2 147 | exit 1 148 | fi 149 | 150 | # 清理临时文件 151 | rm -rf /tmp/danmuji.zip /tmp/danmuji/ 152 | else 153 | echo "错误: 下载失败" >&2 154 | exit 1 155 | fi 156 | fi 157 | 158 | # 确保jar文件存在 159 | if [ ! -f "${WORKDIR}/danmuji.jar" ]; then 160 | echo "错误: danmuji.jar不存在" >&2 161 | exit 1 162 | fi 163 | 164 | # 设置jar文件权限 165 | chmod +x "${WORKDIR}/danmuji.jar" 166 | 167 | # 创建用户和组(如果需要) 168 | if [ "${PUID}" != "0" ]; then 169 | echo "设置用户权限: UID=${PUID}, GID=${PGID}" 170 | 171 | # 检查组是否存在 172 | if ! getent group ${PGID} >/dev/null 2>&1; then 173 | if getent group danmuji >/dev/null 2>&1; then 174 | echo "警告: 'danmuji'组名已存在但GID不同" 175 | else 176 | echo "创建组: GID=${PGID}" 177 | groupadd -g ${PGID} danmuji 178 | fi 179 | fi 180 | 181 | # 检查用户是否存在 182 | if ! getent passwd ${PUID} >/dev/null 2>&1; then 183 | if getent passwd danmuji >/dev/null 2>&1; then 184 | echo "警告: 'danmuji'用户名已存在但UID不同" 185 | else 186 | echo "创建用户: UID=${PUID}" 187 | useradd -u ${PUID} -g ${PGID} -d ${WORKDIR} -s /bin/bash -M danmuji 188 | fi 189 | fi 190 | 191 | # 设置工作目录所有权 192 | chown -R ${PUID}:${PGID} ${WORKDIR} 193 | fi 194 | 195 | # 创建目录 196 | create_directories 197 | 198 | # 环境变量检查 199 | echo "环境变量:" 200 | echo " JAVA_OPTS: ${JAVA_OPTS:-未设置}" 201 | echo " JAVA_OPTS2: ${JAVA_OPTS2:-未设置}" 202 | echo " GITHUB_PROXY: ${GITHUB_PROXY:-未设置}" 203 | 204 | # 构建Java命令 205 | JAVA_CMD="java" 206 | if [ -n "${JAVA_OPTS}" ]; then 207 | JAVA_CMD="${JAVA_CMD} ${JAVA_OPTS}" 208 | fi 209 | JAVA_CMD="${JAVA_CMD} -jar ${WORKDIR}/danmuji.jar" 210 | if [ -n "${JAVA_OPTS2}" ]; then 211 | JAVA_CMD="${JAVA_CMD} ${JAVA_OPTS2}" 212 | fi 213 | 214 | echo "启动命令: ${JAVA_CMD}" 215 | echo "Java版本: $(java -version 2>&1 | head -1)" 216 | 217 | # 以指定用户身份运行 218 | if [ "${PUID}" != "0" ]; then 219 | echo "以用户 danmuji (${PUID}:${PGID}) 身份运行" 220 | exec gosu ${PUID}:${PGID} bash -c "cd ${WORKDIR} && ${JAVA_CMD}" 221 | else 222 | echo "以root身份运行" 223 | exec bash -c "cd ${WORKDIR} && ${JAVA_CMD}" 224 | fi -------------------------------------------------------------------------------- /.github/workflows/Build.yaml: -------------------------------------------------------------------------------- 1 | # 利用GitHub Action自动构建多框架的docker镜像 2 | name: Build 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | releaseTag: 8 | description: 'Forced' 9 | required: true 10 | default: 'true' 11 | # main分支的push操作会触发当前脚本的执行 12 | # push: 13 | # branches: [ main ] 14 | # main分支的pr操作会触发当前脚本的执行 15 | # pull_request: 16 | # branches: [ main ] 17 | # 定时任务,分时日月年,为国际标准时间16点,对应中国时间0点 18 | schedule: 19 | - cron: '0 16 * * *' 20 | # 点击star时开始任务 21 | watch: 22 | types: started 23 | 24 | 25 | jobs: 26 | Build: 27 | # 运行在Ubuntu系统上 28 | runs-on: ubuntu-latest 29 | # 步骤 30 | steps: 31 | # 切换到主分支 32 | - name: Checkout 33 | uses: actions/checkout@main 34 | 35 | - name: Prepare 36 | id: prepare 37 | # IMAGE_NAME : 镜像名称 38 | # ALI_ADD :阿里镜像地址 39 | # GITHUB_VERSION : 源码版本 40 | # DOCKERHUB_VERSION : DockerHub 镜像版本 41 | # TAG_VERSION : 标签版本 zzcabc/danmuji:2.4.9 42 | # TAG_LATEST : 最新版本 zzcabc/pixivbiu-test:latest 43 | # ALI_VERSION : registry.cn-hangzhou.aliyuncs.com/zzcabc/danmuji:2.4.9 44 | # ALI_LATEST : registry.cn-hangzhou.aliyuncs.com/zzcabc/danmuji:latest 45 | # AUTO_UPDATE_TAG : zzcabc/danmuji:autoupdate 46 | # AUTO_UPDATE_ALI : registry.cn-hangzhou.aliyuncs.com/zzcabc/danmuji:autoupdate 47 | run: | 48 | IMAGE_NAME=danmuji 49 | ALI_ADD=registry.cn-hangzhou.aliyuncs.com 50 | 51 | GITHUB_VERSION=$(curl -sX GET "https://api.github.com/repos/BanqiJane/Bilibili_Danmuji/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]') 52 | DOCKERHUB_VERSION=$(cat currentVersion) 53 | 54 | TAG_VERSION="${{ secrets.DOCKERHUB_USERNAME }}/${IMAGE_NAME}:${GITHUB_VERSION}" 55 | TAG_LATEST="${{ secrets.DOCKERHUB_USERNAME }}/${IMAGE_NAME}:latest" 56 | 57 | ALI_VERSION="${ALI_ADD}/${{ secrets.ALIYUN_NAMESPACES }}/${IMAGE_NAME}:${GITHUB_VERSION}" 58 | ALI_LATEST="${ALI_ADD}/${{ secrets.ALIYUN_NAMESPACES }}/${IMAGE_NAME}:latest" 59 | 60 | AUTO_UPDATE_TAG="${{ secrets.DOCKERHUB_USERNAME }}/${IMAGE_NAME}:autoupdate" 61 | AUTO_UPDATE_ALI="${ALI_ADD}/${{ secrets.ALIYUN_NAMESPACES }}/${IMAGE_NAME}:autoupdate" 62 | 63 | echo "github_version=${GITHUB_VERSION}" >> $GITHUB_OUTPUT 64 | echo "dockerhub_version=${DOCKERHUB_VERSION}" >> $GITHUB_OUTPUT 65 | 66 | echo "tag_version=${TAG_VERSION}" >> $GITHUB_OUTPUT 67 | echo "tag_latest=${TAG_LATEST}" >> $GITHUB_OUTPUT 68 | 69 | echo "ali_version=${ALI_VERSION}" >> $GITHUB_OUTPUT 70 | echo "ali_latest=${ALI_LATEST}" >> $GITHUB_OUTPUT 71 | 72 | echo "auto_update_tag=${AUTO_UPDATE_TAG}" >> $GITHUB_OUTPUT 73 | echo "auto_update_ali=${AUTO_UPDATE_ALI}" >> $GITHUB_OUTPUT 74 | 75 | echo $GITHUB_VERSION 76 | echo $DOCKERHUB_VERSION 77 | 78 | - name: Set up QEMU 79 | if: ${{ github.event.inputs.Forced == 'true' || steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 80 | uses: docker/setup-qemu-action@v2 81 | 82 | # 初始化Docker Buildx 83 | - name: Set up Docker Buildx 84 | if: ${{ github.event.inputs.Forced == 'true' || steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 85 | uses: docker/setup-buildx-action@v2 86 | 87 | # 登录到DockerHub 88 | - name: Login to DockerHub 89 | if: ${{ github.event.inputs.Forced == 'true' || steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 90 | uses: docker/login-action@v2 91 | with: 92 | username: ${{ secrets.DOCKERHUB_USERNAME }} 93 | password: ${{ secrets.DOCKERHUB_TOKEN }} 94 | 95 | # 登录到阿里镜像仓库 96 | # - name: Login To Alibaba Cloud Container Registry 97 | # if: ${{ github.event.inputs.Forced == 'true'|| steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 98 | # run: | 99 | # docker login -u ${{ secrets.ALIYUN_USERNAME }} -p ${{ secrets.ALIYUN_PWD }} registry.cn-hangzhou.aliyuncs.com 100 | 101 | # 初始化 JDK8 环境 102 | - name: Set up JDK 8 103 | if: ${{ github.event.inputs.Forced == 'true' || steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 104 | uses: actions/setup-java@v3 105 | with: 106 | java-version: '8' 107 | distribution: 'adopt' 108 | 109 | # 使用Gradle编译构建同时命名danmuji.jar 110 | - name: Build with Gradle 111 | if: ${{ github.event.inputs.Forced == 'true' || steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 112 | run: | 113 | sudo apt-get install -y git 114 | git clone https://github.com/BanqiJane/Bilibili_Danmuji.git 115 | cd Bilibili_Danmuji 116 | sudo chmod +x ./gradlew 117 | sudo ./gradlew build -x test 118 | sudo mv $(find build -type f -size +10M) ./danmuji.jar 119 | 120 | # # 构建Arm32的镜像 121 | # - name: Build and Push Arm32 122 | # if: ${{ github.event.inputs.Forced == 'true' || steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 123 | # uses: docker/build-push-action@v3 124 | # with: 125 | # platforms: linux/arm/v7 126 | # file: ./Dockerfile.Alpine 127 | # context: . 128 | # push: true 129 | # tags: | 130 | # ${{ steps.prepare.outputs.tag_latest }}-arm32 131 | # ${{ steps.prepare.outputs.tag_version }}-arm32 132 | 133 | # 自动更新的推送 134 | - name: Build and Push Auto Update 135 | if: ${{ github.event.inputs.Forced == 'true' || steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 136 | uses: docker/build-push-action@v3 137 | with: 138 | platforms: linux/amd64,linux/arm64/v8 139 | file: ./Dockerfile.Update 140 | context: . 141 | push: true 142 | tags: | 143 | ${{ steps.prepare.outputs.auto_update_tag }} 144 | 145 | # 构建Amd64和Arm64的镜像 146 | - name: Build and Push Amd64 and Arm64 147 | if: ${{ github.event.inputs.Forced == 'true' || steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 148 | uses: docker/build-push-action@v3 149 | with: 150 | platforms: linux/amd64,linux/arm64/v8,linux/arm/v7 151 | file: ./Dockerfile.Ubuntu 152 | context: . 153 | push: true 154 | tags: | 155 | ${{ steps.prepare.outputs.tag_version }} 156 | ${{ steps.prepare.outputs.tag_latest }} 157 | 158 | # 初始化版本号与git 159 | - name: commit 160 | if: ${{ github.event.inputs.Forced == 'true' || steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 161 | run: | 162 | echo "${{ steps.prepare.outputs.github_version }}" > currentVersion 163 | git config --global user.name zhaocheng 164 | git config --global user.email zhaocheng990105@gmail.com 165 | git add currentVersion 166 | sed -i 's/${{ steps.prepare.outputs.dockerhub_version }}/${{ steps.prepare.outputs.github_version }}/g' README.md 167 | git commit -m "当前版本是:${{ steps.prepare.outputs.github_version }}" -a 168 | 169 | # 推送版本号到GitHub 170 | - name: Push changes 171 | if: ${{ github.event.inputs.Forced == 'true' || steps.prepare.outputs.dockerhub_version != steps.prepare.outputs.github_version }} 172 | uses: ad-m/github-push-action@master 173 | with: 174 | github_token: ${{ secrets.TOKEN_GITHUB }} 175 | --------------------------------------------------------------------------------