Browse Source

koreader-sync-server:2.0

John 9 months ago
parent
commit
7639fc90d1

+ 67 - 0
.github/workflows/koreader-sync-server.yml

@@ -0,0 +1,67 @@
+name: koreader-sync-server
+
+on:
+  push:
+    paths:
+    - 'koreader-sync-server/Dockerfile'
+    - 'koreader-sync-server/root/**'
+  workflow_dispatch:
+
+jobs:
+  job1:
+    name: buildx tag
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v4
+
+      - name: 'Set env'
+        run: |
+          echo "KOREADER_SYNC_SERVER_VER=$(echo `grep -n "KOREADER_SYNC_SERVER_VER=" koreader-sync-server/Dockerfile`|awk -F= '{print $2}')" >> $GITHUB_ENV
+
+      - name: Set up QEMU
+        id: qemu
+        uses: docker/setup-qemu-action@v3
+        with:
+          platforms: all
+
+      - name: Set up Docker Buildx
+        id: buildx
+        uses: docker/setup-buildx-action@v3
+        with:
+          version: latest
+
+      - name: Login to DockerHub
+        uses: docker/login-action@v3
+        with:
+          username: ${{ secrets.DOCKER_USERNAME }}
+          password: ${{ secrets.DOCKER_PASSWORD }}
+
+      - name: Login to GHCR
+        uses: docker/login-action@v3
+        with:
+          registry: ghcr.io
+          username: ${{ github.actor }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Build and push
+        uses: docker/build-push-action@v6
+        with:
+          context: ./koreader-sync-server
+          file: ./koreader-sync-server/Dockerfile
+          platforms: linux/amd64,linux/arm64,linux/arm/v7
+          push: true
+          tags: |
+            johngong/koreader-sync-server:latest
+            johngong/koreader-sync-server:${{ env.KOREADER_SYNC_SERVER_VER }}
+            ghcr.io/gshang2017/koreader-sync-server:latest
+            ghcr.io/gshang2017/koreader-sync-server:${{ env.KOREADER_SYNC_SERVER_VER }}
+
+      - name: Docker Hub Description
+        uses: peter-evans/dockerhub-description@v3
+        with:
+          username: ${{ secrets.DOCKER_USERNAME }}
+          password: ${{ secrets.DOCKER_PASSWORD }}
+          repository: johngong/koreader-sync-server
+          short-description: koreader-sync-server:${{ env.KOREADER_SYNC_SERVER_VER }},koreader进度同步服务器。
+          readme-filepath: ./koreader-sync-server/README.md

+ 63 - 0
koreader-sync-server/Dockerfile

@@ -0,0 +1,63 @@
+FROM alpine:3.21
+
+ARG S6_VER=3.2.0.2
+ARG KOREADER_SYNC_SERVER_VER=2.0
+
+ENV PATH=/opt/openresty/nginx/sbin:$PATH
+# run gin in production mode
+ENV GIN_ENV production
+ENV UID=1000
+ENV GID=1000
+ENV S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0
+
+WORKDIR /app
+
+COPY --chmod=755 root /
+
+RUN apk update \
+# install lua openresty
+&& apk add --no-cache shadow ca-certificates tzdata openssl openresty readline lua5.1 redis luarocks bash \
+&& apk add --no-cache --virtual koreader-sync-server-dep git wget build-base openssl-dev readline-dev lua5.1-dev \
+&& ln -s /usr/bin/luarocks-5.1 /usr/bin/luarocks \
+# install s6-overlay
+&& if [ "$(uname -m)" = "x86_64" ];then s6_arch=x86_64;elif [ "$(uname -m)" = "aarch64" ];then s6_arch=aarch64;elif [ "$(uname -m)" = "armv7l" ];then s6_arch=arm; fi \
+&& wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-noarch.tar.xz \
+&& tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz \
+&& wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-${s6_arch}.tar.xz \
+&& tar -C / -Jxpf /tmp/s6-overlay-${s6_arch}.tar.xz \
+&& wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-symlinks-noarch.tar.xz \
+&& tar -C / -Jxpf /tmp/s6-overlay-symlinks-noarch.tar.xz \
+&& wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-symlinks-arch.tar.xz \
+&& tar -C / -Jxpf /tmp/s6-overlay-symlinks-arch.tar.xz \
+# koreader-sync-server
+&& wget -O /tmp/koreader-sync-server.tar.gz https://github.com/koreader/koreader-sync-server/archive/refs/tags/v${KOREADER_SYNC_SERVER_VER}.tar.gz \
+&& mkdir -p /app/koreader-sync-server \
+&& tar -xvf /tmp/koreader-sync-server.tar.gz -C /app/koreader-sync-server --strip-components 1 \
+&& mv /app/koreader-sync-server/config /app/koreader-sync-server/config.default \
+# nginx crt
+&& mkdir -p /etc/nginx/ssl \
+&& openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt -subj "/" \
+# luarocks install
+&& luarocks install --verbose luasocket \
+&& luarocks install luasec  \
+&& luarocks install redis-lua \
+&& luarocks install busted \
+# patch gin for https support
+# https://github.com/gster/gin.git
+&& git clone --depth 1 https://github.com/ostinelli/gin.git \
+# luaposix 36.2.1
+&& sed -i s/33.3.1/36.2.1/g gin/gin-0.2.0-1.rockspec \
+&& cd gin \
+&& luarocks make \
+#run gin in foreground
+&& echo "daemon off;" >> /app/koreader-sync-server/config.default/nginx.conf \
+#create koreader user
+&& useradd -u 1000 -U -d /app -s /bin/false koreader \
+&& usermod -G users koreader \
+#
+&& apk del koreader-sync-server-dep \
+&& rm -rf gin /var/cache/apk/* /tmp/*
+
+VOLUME /var/log/redis /var/lib/redis /config
+EXPOSE 7200
+ENTRYPOINT [ "/init" ]

+ 99 - 0
koreader-sync-server/README.md

@@ -0,0 +1,99 @@
+## 群晖nas自用
+
+### GitHub:
+
+[https://github.com/gshang2017/docker](https://github.com/gshang2017/docker)
+
+### 感谢以下项目:
+
+[https://github.com/koreader/koreader-sync-server](https://github.com/koreader/koreader-sync-server)                 
+
+### 版本:
+
+|名称|版本|说明|
+|:-|:-|:-|
+|koreader-sync-server|2.0|amd64;arm64v8;arm32v7|
+
+### docker命令行设置:
+
+1. 下载镜像
+
+    |镜像源|命令|
+    |:-|:-|
+    |DockerHub|docker pull johngong/koreader-sync-server:latest|
+    |GitHub|docker pull ghcr.io/gshang2017/koreader-sync-server:latest|
+
+2. 创建anki容器
+
+        docker create \
+           --name=koreader-sync-server \
+           -p 7200:7200 \
+           -v ./config:/config \
+           -v ./logs/app:/app/koreader-sync-server/logs \
+           -v ./logs/redis:/var/log/redis \
+           -v ./data/redis:/var/lib/redis \
+           -e UID=1000 \
+           -e GID=1000 \     
+           --restart unless-stopped \
+           johngong/koreader-sync-server:latest
+
+3. 运行
+
+       docker start koreader-sync-server
+
+4. 停止
+
+       docker stop koreader-sync-server
+
+5. 删除容器
+
+       docker rm koreader-sync-server
+
+6. 删除镜像
+
+       docker image rm johngong/koreader-sync-server:latest
+
+### 变量:
+
+|参数|说明|
+|:-|:-|
+| `--name=koreader-sync-server` |容器名|
+| `-p 7200:7200` |koreader-sync-server监听端口|
+| `-v ./config:/config` |koreader-sync-server配置文件位置|
+| `-v ./logs/app:/app/koreader-sync-server/logs` |koreader-sync-server日志文件位置|
+| `-v ./logs/redis:/var/log/redis` |redis日志文件位置|
+| `-v ./data/redis:/var/lib/redis` |redis数据库位置|
+| `-e UID=1000` |uid设置,默认为1000|
+| `-e GID=1000` |gid设置,默认为1000|
+| `-e TZ=Asia/Shanghai` |系统时区设置,默认为Asia/Shanghai|
+
+### 群晖docker设置:
+
+1. 卷
+
+|参数|说明|
+|:-|:-|
+| `./config:/config` |koreader-sync-server配置文件位置|
+| `./logs/app:/app/koreader-sync-server/logs` |koreader-sync-server日志文件位置|
+| `./logs/redis:/var/log/redis` |redis日志文件位置|
+| `./data/redis:/var/lib/redis` |redis数据库位置|
+
+2. 端口
+
+|参数|说明|
+|:-|:-|
+| `本地端口1:7200` |koreader-sync-server监听端口|
+
+3. 环境变量
+
+|参数|说明|
+|:-|:-|
+| `UID=1000` |uid设置,默认为1000|
+| `GID=1000` |gid设置,默认为1000|
+| `TZ=Asia/Shanghai` |系统时区设置,默认为Asia/Shanghai|
+
+### 客户端设置:
+
+* koreader
+
+1. 打开书籍-进度同步-自定义同步服务器[http://ip:本地端口1](http://ip:本地端口1)

+ 17 - 0
koreader-sync-server/docker-compose.yml

@@ -0,0 +1,17 @@
+services:
+  koreader-sync-server:
+    # github镜像:ghcr.io/johngong/koreader-sync-server:latest
+    image: johngong/koreader-sync-server:latest
+    container_name: koreader-sync-server
+    ports:
+      - 7200:7200
+    volumes:
+      - ./config:/config
+      - ./logs/app:/app/koreader-sync-server/logs
+      - ./logs/redis:/var/log/redis
+      - ./data/redis:/var/lib/redis
+    environment:
+      UID: 1000
+      GID: 1000
+      #TZ: Asia/Shanghai
+    restart: unless-stopped

+ 29 - 0
koreader-sync-server/root/etc/cont-init.d/koreader-sync-server.sh

@@ -0,0 +1,29 @@
+#! /usr/bin/with-contenv bash
+
+#修改用户UID GID
+groupmod -o -g "$GID" koreader
+usermod -o -u "$UID" koreader
+
+#设置时区
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
+echo $TZ > /etc/timezone
+
+#检查自定义config位置文件
+if [ ! -d "/config" ]; then
+  mkdir -p /config
+fi
+if [ ! -d "/app/koreader-sync-server/config" ]; then
+  mkdir -p /app/koreader-sync-server/config
+fi
+for file in `ls /app/koreader-sync-server/config.default`
+do
+  if [ ! -e /config/$file ]; then
+    cp /app/koreader-sync-server/config.default/$file /config/$file
+  fi
+  if [ ! -L /app/koreader-sync-server/config/$file ]; then
+    ln -s /config/$file /app/koreader-sync-server/config/$file
+  fi
+done
+
+#更改文件夹权限
+chown -R koreader:koreader /app /config /var /etc/nginx/ssl/

+ 5 - 0
koreader-sync-server/root/etc/services.d/koreader-sync-server/run

@@ -0,0 +1,5 @@
+#! /usr/bin/with-contenv bash
+
+# 启动koreader-sync-server
+cd /app/koreader-sync-server
+exec s6-setuidgid koreader gin start

+ 4 - 0
koreader-sync-server/root/etc/services.d/redis-server/run

@@ -0,0 +1,4 @@
+#! /usr/bin/with-contenv bash
+
+# 启动redis-server
+exec s6-setuidgid koreader redis-server /app/koreader-sync-server/config/redis.conf