Ver Fonte

ttrss:22.01-b59bde7b4

John há 3 anos atrás
pai
commit
98dc537c7f

+ 8 - 13
.github/workflows/tt-rss-plugins-Tags-buildx.yml

@@ -7,7 +7,7 @@ on:
   workflow_dispatch:
 
 env:
-  TTRSS_VER: 21.12-97baf3e8b
+  TTRSS_VER: 22.01-b59bde7b4
 
 jobs:
   buildx:
@@ -26,14 +26,9 @@ jobs:
         run: |
           sudo apt-get update
           sudo apt-get install  git
-          #git clone https://github.com/docker-library/postgres.git
-          wget https://github.com/docker-library/postgres/archive/edce9867844e2747021fd77bf3b0e3da560b23c7.zip
-          unzip edce9867844e2747021fd77bf3b0e3da560b23c7.zip
-          mv postgres-edce9867844e2747021fd77bf3b0e3da560b23c7 postgres
-          #removed  CallSite.h
-          sed -i '/rm postgresql.tar.bz2/i\\ \ \ \ sed -i "59d" /usr/src/postgresql/src/backend/jit/llvm/llvmjit_inline.cpp; \\' postgres/12/alpine/Dockerfile
-          sed -i 's/^ENV.*PG_VERSION.*/ENV PG_VERSION 12.0/g' postgres/12/alpine/Dockerfile
-          sed -i 's/^ENV.*PG_SHA256.*/ENV PG_SHA256 cda2397215f758b793f741c86be05468257b0e6bcb1a6113882ab5d0df0855c6/g' postgres/12/alpine/Dockerfile
+          git clone https://github.com/docker-library/postgres.git
+          sed -i 's/^ENV.*PG_VERSION.*/ENV PG_VERSION 14.1/g' postgres/14/alpine/Dockerfile
+          sed -i 's/^ENV.*PG_SHA256.*/ENV PG_SHA256 4d3c101ea7ae38982f06bdc73758b53727fb6402ecd9382006fa5ecc7c2ca41f/g' postgres/14/alpine/Dockerfile
 
       - name: Set up QEMU
         uses: docker/setup-qemu-action@v1
@@ -46,15 +41,15 @@ jobs:
       - name: Build and push to local-registry
         uses: docker/build-push-action@v2
         with:
-          context: ./postgres/12/alpine
-          file: ./postgres/12/alpine/Dockerfile
+          context: ./postgres/14/alpine
+          file: ./postgres/14/alpine/Dockerfile
           platforms: linux/amd64,linux/arm/v7,linux/arm64
           push: true
-          tags: localhost:5000/postgres:12.0-alpine
+          tags: localhost:5000/postgres:14.1-alpine
 
       - name: change Dockerfile
         run: |
-          sed -i 's/postgres:12\.0-alpine/localhost:5000\/postgres:12\.0-alpine/g' tt-rss-plugins/Dockerfile
+          sed -i 's/postgres:14\.1-alpine/localhost:5000\/postgres:14\.1-alpine/g' tt-rss-plugins/Dockerfile
 
       - name: Login to DockerHub
         uses: docker/login-action@v1

+ 7 - 12
.github/workflows/tt-rss-plugins-buildx.yml

@@ -24,14 +24,9 @@ jobs:
         run: |
           sudo apt-get update
           sudo apt-get install  git
-          #git clone https://github.com/docker-library/postgres.git
-          wget https://github.com/docker-library/postgres/archive/edce9867844e2747021fd77bf3b0e3da560b23c7.zip
-          unzip edce9867844e2747021fd77bf3b0e3da560b23c7.zip
-          mv postgres-edce9867844e2747021fd77bf3b0e3da560b23c7 postgres
-          #removed  CallSite.h
-          sed -i '/rm postgresql.tar.bz2/i\\ \ \ \ sed -i "59d" /usr/src/postgresql/src/backend/jit/llvm/llvmjit_inline.cpp; \\' postgres/12/alpine/Dockerfile
-          sed -i 's/^ENV.*PG_VERSION.*/ENV PG_VERSION 12.0/g' postgres/12/alpine/Dockerfile
-          sed -i 's/^ENV.*PG_SHA256.*/ENV PG_SHA256 cda2397215f758b793f741c86be05468257b0e6bcb1a6113882ab5d0df0855c6/g' postgres/12/alpine/Dockerfile
+          git clone https://github.com/docker-library/postgres.git
+          sed -i 's/^ENV.*PG_VERSION.*/ENV PG_VERSION 14.1/g' postgres/14/alpine/Dockerfile
+          sed -i 's/^ENV.*PG_SHA256.*/ENV PG_SHA256 4d3c101ea7ae38982f06bdc73758b53727fb6402ecd9382006fa5ecc7c2ca41f/g' postgres/14/alpine/Dockerfile
 
       - name: Set up QEMU
         uses: docker/setup-qemu-action@v1
@@ -44,15 +39,15 @@ jobs:
       - name: Build and push to local-registry
         uses: docker/build-push-action@v2
         with:
-          context: ./postgres/12/alpine
-          file: ./postgres/12/alpine/Dockerfile
+          context: ./postgres/14/alpine
+          file: ./postgres/14/alpine/Dockerfile
           platforms: linux/amd64,linux/arm/v7,linux/arm64
           push: true
-          tags: localhost:5000/postgres:12.0-alpine
+          tags: localhost:5000/postgres:14.1-alpine
 
       - name: change Dockerfile
         run: |
-          sed -i 's/postgres:12\.0-alpine/localhost:5000\/postgres:12\.0-alpine/g' tt-rss-plugins/Dockerfile
+          sed -i 's/postgres:14\.1-alpine/localhost:5000\/postgres:14\.1-alpine/g' tt-rss-plugins/Dockerfile
 
       - name: Login to DockerHub
         uses: docker/login-action@v1

+ 68 - 55
tt-rss-plugins/Dockerfile

@@ -1,77 +1,90 @@
-FROM cthulhoo/ttrss-fpm-pgsql-static:21.12-97baf3e8b  as ttrss-src
-FROM postgres:12.0-alpine
+FROM cthulhoo/ttrss-fpm-pgsql-static:22.01-b59bde7b4 as ttrss-src
+FROM postgres:14.1-alpine
 
-ARG  S6_VER=2.2.0.3
+ARG S6_VER=2.2.0.3
 
-ENV  UID=1000
-ENV  GID=1000
-ENV  POSTGRES_DB=ttrss
-ENV  POSTGRES_USER=ttrss
-ENV  POSTGRES_PASSWORD=ttrss
-ENV  TTRSS_DB_NAME=ttrss
-ENV  TTRSS_DB_USER=ttrss
-ENV  TTRSS_DB_PASS=ttrss
-ENV  TTRSS_DB_TYPE=pgsql
-ENV  TTRSS_DB_PORT=5432
-ENV  TTRSS_DB_HOST=0.0.0.0
-ENV  TTRSS_SELF_URL_PATH=http://localhost:80/
-ENV  TTRSS_PHP_EXECUTABLE=/usr/bin/php8
-ENV  TTRSS_PLUGINS=auth_internal,fever,mercury_fulltext
+ENV UID=1000
+ENV GID=1000
+ENV POSTGRES_DB=ttrss
+ENV POSTGRES_USER=ttrss
+ENV POSTGRES_PASSWORD=ttrss
+ENV TTRSS_DB_NAME=ttrss
+ENV TTRSS_DB_USER=ttrss
+ENV TTRSS_DB_PASS=ttrss
+ENV TTRSS_DB_TYPE=pgsql
+ENV TTRSS_DB_PORT=5432
+ENV TTRSS_DB_HOST=0.0.0.0
+ENV TTRSS_SELF_URL_PATH=http://localhost:80/
+ENV TTRSS_PHP_EXECUTABLE=/usr/bin/php8
+ENV TTRSS_PLUGINS=auth_internal,fever,mercury_fulltext
+ENV SCRIPT_ROOT=/usr/local/tt-rss/app
+ENV TZ=Asia/Shanghai
+ENV TTRSS_ALLOW_PORTS=80,443
+ENV TTRSS_UPDATE_AUTO=true
+ENV POSTGRES_DB_DUMP=false
+ENV POSTGRES_DB_RESTORE=false
 
-COPY  root  /
-COPY --from=ttrss-src  /src/tt-rss  /usr/local/tt-rss
+COPY root /
+COPY --from=ttrss-src /src/tt-rss /usr/local/tt-rss/app
 
 # install php tt-rss caddy git [npm nodejs]-mercury-parser-api
-RUN apk add --no-cache bash shadow git npm nodejs ca-certificates caddy clang llvm11 build-base dumb-init postgresql-client \
+RUN apk add --no-cache bash shadow tzdata git npm nodejs ca-certificates caddy clang llvm12 build-base dumb-init postgresql-client \
 	          php8 php8-fpm php8-pdo php8-gd php8-pgsql php8-pdo_pgsql php8-mbstring php8-intl php8-xml php8-curl php8-session \
-	          php8-dom php8-fileinfo php8-json php8-iconv php8-pcntl php8-posix php8-zip php8-openssl php8-pecl-xdebug \
+						php8-tokenizer php8-dom php8-fileinfo php8-json php8-iconv php8-pcntl php8-posix php8-zip php8-exif php8-openssl php8-pecl-xdebug \
+#gd-png: libpng warning
+&& apk add --no-cache php8-gd=8.0.13-r0 --repository https://dl-cdn.alpinelinux.org/alpine/v3.14/community \
 # install s6-overlay
-&&  if [ "$(uname -m)" = "x86_64" ];then s6_arch=amd64;elif [ "$(uname -m)" = "aarch64" ];then s6_arch=aarch64;elif [ "$(uname -m)" = "armv7l" ];then s6_arch=arm; fi  \
-&&  wget --no-check-certificate https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-${s6_arch}.tar.gz  \
-&&  tar -xvzf s6-overlay-${s6_arch}.tar.gz  \
+&& if [ "$(uname -m)" = "x86_64" ];then s6_arch=amd64;elif [ "$(uname -m)" = "aarch64" ];then s6_arch=aarch64;elif [ "$(uname -m)" = "armv7l" ];then s6_arch=arm; fi \
+&& wget --no-check-certificate https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-${s6_arch}.tar.gz \
+&& tar -xvzf s6-overlay-${s6_arch}.tar.gz \
 # install mercury-parser-api
 && npm install --prefix /usr/local/mercury-parser-api git+https://github.com/HenryQW/mercury-parser-api.git \
 # install zhparser
-&&  wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2   \
-&&  tar -xf scws-1.2.3.tar.bz2   \
-&&  cd scws-1.2.3   \
-&&  ./configure   \
-&&  make install   \
-&&  git clone https://github.com/amutu/zhparser.git   \
-&&  cd zhparser   \
-&&  make install   \
+&& wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2 \
+&& tar -xf scws-1.2.3.tar.bz2 \
+&& cd scws-1.2.3 \
+&& ./configure \
+&& make install \
+&& git clone --depth 1 https://github.com/amutu/zhparser.git \
+&& cd zhparser \
+&& make install \
 #create ttrss user
-&&  useradd -u 1000 -U -d /config -s /bin/false ttrss   \
-&&  usermod -G users ttrss   \
+&& useradd -u 1000 -U -d /config -s /bin/false ttrss \
+&& usermod -G users ttrss \
 # php
-&&  sed -i.bak 's/\(memory_limit =\) 128M/\1 256M/' /etc/php8/php.ini   \
-&&  sed -i.bak 's/;clear_env = .*/clear_env = no/i' /etc/php8/php-fpm.d/www.conf   \
+&& sed -i 's/\(memory_limit =\) 128M/\1 256M/' /etc/php8/php.ini \
+&& sed -i -e 's/;\(clear_env\) = .*/\1 = no/i' /etc/php8/php-fpm.d/www.conf \
+&& sed -i -e 's/^\(user\|group\) = .*/\1 = postgres/i' /etc/php8/php-fpm.d/www.conf \
+&& sed -i -e 's/;\(php_admin_value\[error_log\]\) = .*/\1 = \/var\/log\/php8\/error.log/' /etc/php8/php-fpm.d/www.conf \
+&& sed -i -e 's/;\(php_admin_flag\[log_errors\]\) = .*/\1 = on/' /etc/php8/php-fpm.d/www.conf \
 # install  plugins
-&&  mkdir -p  /usr/local/tt-rss/defaults \
-&&  mv /usr/local/tt-rss/cache /usr/local/tt-rss/defaults/cache \
-&&  mv /usr/local/tt-rss/feed-icons /usr/local/tt-rss/defaults/feed-icons \
-&&  mv /usr/local/tt-rss/lock /usr/local/tt-rss/defaults/lock \
-&&  mv /usr/local/tt-rss/plugins.local /usr/local/tt-rss/defaults/plugins.local \
-&&  mv /usr/local/tt-rss/templates.local /usr/local/tt-rss/defaults/templates.local \
-&&  mv /usr/local/tt-rss/themes.local /usr/local/tt-rss/defaults/themes.local \
+&& mkdir -p /usr/local/tt-rss/defaults \
+&& mv /usr/local/tt-rss/app/cache /usr/local/tt-rss/defaults/cache \
+&& mv /usr/local/tt-rss/app/feed-icons /usr/local/tt-rss/defaults/feed-icons \
+&& mv /usr/local/tt-rss/app/lock /usr/local/tt-rss/defaults/lock \
+&& mv /usr/local/tt-rss/app/plugins.local /usr/local/tt-rss/defaults/plugins.local \
+&& mv /usr/local/tt-rss/app/templates.local /usr/local/tt-rss/defaults/templates.local \
+&& mv /usr/local/tt-rss/app/themes.local /usr/local/tt-rss/defaults/themes.local \
+# del nginx_xaccel
+&& if [ -d "/usr/local/tt-rss/defaults/plugins.local/nginx_xaccel" ];then rm -rf /usr/local/tt-rss/defaults/plugins.local/nginx_xaccel; fi \
 # install mercury_fulltext
-&&  git clone https://github.com/HenryQW/mercury_fulltext.git /usr/local/tt-rss/defaults/plugins.local/mercury_fulltext     \
+&& git clone --depth 1 https://github.com/HenryQW/mercury_fulltext.git /usr/local/tt-rss/defaults/plugins.local/mercury_fulltext \
 # install feediron
-&&  git clone https://github.com/feediron/ttrss_plugin-feediron.git  /usr/local/tt-rss/defaults/plugins.local/feediron      \
+&& git clone --depth 1 https://github.com/feediron/ttrss_plugin-feediron.git  /usr/local/tt-rss/defaults/plugins.local/feediron \
 # install fever
-&&  git clone https://github.com/DigitalDJ/tinytinyrss-fever-plugin /usr/local/tt-rss/defaults/plugins.local/fever     \
+&& git clone --depth 1 https://github.com/DigitalDJ/tinytinyrss-fever-plugin /usr/local/tt-rss/defaults/plugins.local/fever \
 # install themes
 # install tt-rss-feedly-theme
-&&  git clone  https://github.com/levito/tt-rss-feedly-theme.git /usr/local/tt-rss/defaults/themes.local/tt-rss-feedly-theme     \
-&&  cp -r /usr/local/tt-rss/defaults/themes.local/tt-rss-feedly-theme/feedly* /usr/local/tt-rss/defaults/themes.local     \
+&& git clone --depth 1 https://github.com/levito/tt-rss-feedly-theme.git /usr/local/tt-rss/defaults/themes.local/tt-rss-feedly-theme \
 #clean
-&&  apk del clang llvm11 build-base  \
-&&  rm -rf /var/cache/apk/*   \
-&&  rm /s6-overlay-${s6_arch}.tar.gz   \
-&&  rm -rf /scws*   \
-&&  rm -rf /usr/local/tt-rss/defaults/themes.local/tt-rss-feedly-theme  \
-&&  chmod a+x /usr/local/bin/initialize.sh
+&& apk del clang llvm12 build-base \
+&& rm -rf /var/cache/apk/* \
+&& rm /s6-overlay-${s6_arch}.tar.gz \
+&& rm -rf /scws* \
+&& chmod a+x /usr/local/bin/initialize.sh \
+&& chmod a+x /usr/local/tt-rss/defaults/updatett-rss.sh \
+&& chmod a+x /usr/local/tt-rss/defaults/postgres-dump-restore.sh
 
-VOLUME  /config
+VOLUME /config
 EXPOSE 80 3000 5432
 ENTRYPOINT [ "/init" ]

+ 28 - 58
tt-rss-plugins/README.md

@@ -14,15 +14,14 @@
 
 |名称|版本|说明|
 |:-|:-|:-|
-|ttrss|plugins-21.12-97baf3e8b|amd64;arm64v8;arm32v7,集成postgres数据库(PostgreSQL-12.0),mercury-parser-api及一些常用插件|
-|ttrss|plugins-19.8|amd64,集成postgres数据库(PostgreSQL-12beta4),mercury-parser-api及一些常用插件|
-|ttrss|19.8|amd64,需自建数据库|
+|ttrss|plugins-22.01-b59bde7b4|amd64;arm64v8;arm32v7,集成postgres数据库(PostgreSQL-14.1),mercury-parser-api及一些常用插件|
 
 #### 版本升级注意:
 
+* 22.01升级postgres数据库到14.1,并添加自动更新tt-rss及postgres数据库导入导出脚本。
 * 从21.02开始ttrss不再支持以前配置文件,需用环境变量重新设置,更新前请备份数据并清空tt-rss配置文件夹。
-* 从20.09开始ttrss不再支持非80及443端口订阅
-* plugins-19.8升级到plugins-20.12需重新导入导出数据库(旧数据库不兼容),移除配置文件夹themes.local(feedly旧主题不兼容)
+* 从20.09开始ttrss不再支持非80及443端口订阅
+* plugins-19.8升级新版需重新导入导出数据库(旧数据库不兼容),移除配置文件夹themes.local(feedly旧主题不兼容)
 
 ### Postgres数据库导入导出
 
@@ -30,11 +29,11 @@
 
 #### 群晖步骤:
 
-1. 旧版ttrss容器-终端机新增-bash-执行导出命令[完成后postgre里会出现db.sql]
-
-2. 新建新版容器[新版容器配置与旧版一样,将postgre文件夹重命名为其它(例如:postgre.bak),再新建一个postgre空文件夹。]-启动容器-将导出的db.sql文件复制到新建的postgre文件夹[需新版PostgreSQL初始化完成后才能复制(空文件夹postgre重新有内容)]-终端机新增-bash-执行导入命令
-
-3. 重启容器登录ttrss按提示更新数据库
+1. 旧版ttrss容器-终端机新增-bash-执行导出命令[完成后config里会出现db.sql]
+2. 清空postgre文件夹,预防意外可重命名(例如:postgre.bak),再新建一个
+3. 新建新版容器[配置与旧版一样(需暂时更改环境变量端口[TTRSS_DB_PORT=5432]防止tt-rss对postgre初始化)
+4. 启动容器-终端机新增-bash-执行导入命令[需PostgreSQL初始化完成(空文件夹postgre重新有内容)]
+5. 更改回环境变量端口[TTRSS_DB_PORT=5432],重启容器登录ttrss按提示更新数据库
 
 #### 注意:
 
@@ -42,31 +41,17 @@
 
 |标题|命令|举例|
 |:-|:-|:-|
-|导出|pg_dump -U PostgreSQL用户名 -f /var/lib/postgresql/data/db.sql -d PostgreSQL数据库名称| pg_dump -U ttrss -f /var/lib/postgresql/data/db.sql -d ttrss|
-|导入|psql -d PostgreSQL数据库名称 -f /var/lib/postgresql/data/db.sql -U PostgreSQL用户名|psql -d ttrss -f /var/lib/postgresql/data/db.sql -U ttrss|
+|导出|pg_dump -U PostgreSQL用户名 -f /config/db.sql -d PostgreSQL数据库名称| pg_dump -U ttrss -f /config/db.sql -d ttrss|
+|导入|psql -d PostgreSQL数据库名称 -f /config/db.sql -U PostgreSQL用户名|psql -d ttrss -f /config/db.sql -U ttrss|
 
 ### docker命令行设置:
 
 1. 下载镜像
 
-|版本|命令|
-|:-|:-|
-|普通版|docker pull johngong/tt-rss:19.8|
-|插件版|docker pull johngong/tt-rss:latest|
+       docker pull johngong/tt-rss:latest
 
 2. 创建ttrss容器
 
-* 普通版,需自行搭建数据库,详见后文
-
-        docker create  \
-           --name=ttrss  \
-           -p 80:80 \
-           -v /配置文件位置:/config  \
-           --restart unless-stopped  \
-           johngong/tt-rss:19.8
-
-* 插件版
-
         docker create  \
            --name=ttrss  \
            -p 80:80 \
@@ -110,10 +95,12 @@
 | `-p 80:80` |tt-rss服务器web端口 [IP:80](IP:80); 默认用户名:admin,默认密码:password|
 | `-p 5432:5432` |PostgreSQL服务器端口|
 | `-p 3000:3000` |mercury-parser-api 服务端口|
-| ` -v /配置文件位置:/config` |tt-rss配置文件位置,初次配置时config.php会生成在容器内部,重启一次会自动移到本地映射的文件夹|
+| ` -v /配置文件位置:/config` |tt-rss配置文件位置|
 | `-v /PostgreSQL存储数据的位置:/var/lib/postgresql/data` |PostgreSQL存储数据的位置|
 | `-e UID=1000` |uid设置,默认为1000,不支持设定为0|
 | `-e GID=1000` |gid设置,默认为1000,不支持设定为0|
+| `-e POSTGRES_UID` |PostgreSQL的uid设置,默认和UID一样,可单独设定|
+| `-e POSTGRES_GID` |PostgreSQL的gid设置,默认和GID一样,可单独设定|
 | `-e POSTGRES_DB=ttrss` |PostgreSQL数据库名称 例如:ttrss|
 | `-e POSTGRES_USER=ttrss` |PostgreSQL用户名 例如:ttrss|
 | `-e POSTGRES_PASSWORD=ttrss` |PostgreSQL密码 例如:ttrss|
@@ -125,6 +112,11 @@
 | `-e TTRSS_DB_HOST=0.0.0.0` |tt-rss使用的数据库IP,默认设置为容器内部IP,无需更改|
 | `-e TTRSS_SELF_URL_PATH=http://localhost:80/` |tt-rss访问地址,需更改为IP或域名加tt-rss服务器web端口|
 | `-e TTRSS_PLUGINS=auth_internal,fever,mercury_fulltext` |tt-rss默认开启插件|
+| `-e TZ=Asia/Shanghai` |系统时区设置,默认为Asia/Shanghai|
+| `-e TTRSS_ALLOW_PORTS=80,443` |ttrss可订阅的端口,如需1200,可替换80,443为1200|
+| `-e TTRSS_UPDATE_AUTO=true` |自动更新tt-rss(true\|false),默认开启此功能|
+| `-e POSTGRES_DB_DUMP=false` |PostgreSQL备份(true\|false),不能与还原同时使用,仅启动时执行|
+| `-e POSTGRES_DB_RESTORE=false` |PostgreSQL还原(true\|false),不能与备份同时使用,仅启动时执行|
 
 ### 群晖docker设置:
 
@@ -132,7 +124,7 @@
 
 |参数|说明|
 |:-|:-|
-| `本地文件夹1:/config` |tt-rss配置文件位置,初次配置时config.php会生成在容器内部,重启一次会自动移到本地映射的文件夹|
+| `本地文件夹1:/config` |tt-rss配置文件位置|
 | `本地文件夹2:/var/lib/postgresql/data` |PostgreSQL存储数据的位置|
 
 2. 端口
@@ -149,6 +141,8 @@
 |:-|:-|
 | `UID=1000` |uid设置,默认为1000,不支持设定为0|
 | `GID=1000` |gid设置,默认为1000,不支持设定为0|
+| `POSTGRES_UID` |PostgreSQL的uid设置,默认用UID值,可单独设定|
+| `POSTGRES_GID` |PostgreSQL的gid设置,默认用GID值,可单独设定|
 | `POSTGRES_DB` |PostgreSQL数据库名称 例如:ttrss|
 | `POSTGRES_USER` |PostgreSQL用户名 例如:ttrss|
 | `POSTGRES_PASSWORD` |PostgreSQL密码 例如:ttrss|
@@ -160,6 +154,11 @@
 | `TTRSS_DB_HOST=0.0.0.0` |tt-rss使用的数据库IP,默认设置为容器内部IP,无需更改|
 | `TTRSS_SELF_URL_PATH=http://localhost:80/` |tt-rss访问地址,需更改为IP或域名加tt-rss服务器web端口|
 | `TTRSS_PLUGINS=auth_internal,fever,mercury_fulltext` |tt-rss默认开启插件|
+| `TZ=Asia/Shanghai` |系统时区设置,默认为Asia/Shanghai|
+| `TTRSS_ALLOW_PORTS=80,443` |ttrss可订阅的端口,如需1200,可替换80,443为1200|
+| `TTRSS_UPDATE_AUTO=true` |自动更新tt-rss(true\|false),默认开启此功能|
+| `POSTGRES_DB_DUMP=false` |PostgreSQL备份(true\|false),不能与还原同时使用,仅启动时执行|
+| `POSTGRES_DB_RESTORE=false` |PostgreSQL还原(true\|false),不能与备份同时使用,仅启动时执行|
 
 ### 插件设置:
 
@@ -192,35 +191,6 @@
 |mac os x|Reeder 4,fluent-reader(免费)|
 |windows|fluent-reader(免费)|
 
-###  无插件版数据库搭建:
-
-* tt-rss官方建议使用PostgreSQL
-
-   1. 支持 PostgreSQL 9.1及以上 [https://hub.docker.com/_/postgres/ ](https://hub.docker.com/_/postgres/ )
-   2. 支持 mysql 5.6 [https://hub.docker.com/_/mysql/ ](https://hub.docker.com/_/mysql/ )
-
-* 以PostgreSQL配置为例,群晖docker设置:
-
-1. 卷
-
-|参数|说明|
-|:-|:-|
-| `本地文件夹1:/var/lib/postgresql/data` |PostgreSQL存储数据的位置|
-
-2. 端口
-
-|参数|说明|
-|:-|:-|
-| `本地端口1:5432` |postgres数据库服务端口|
-
-3. 环境变量:
-
-|参数|说明|
-|:-|:-|
-| `POSTGRES_DB` |PostgreSQL数据库名称 例如:ttrss|
-| `POSTGRES_USER` |PostgreSQL用户名 例如:ttrss|
-| `POSTGRES_PASSWORD` |PostgreSQL密码 例如:ttrss|
-
 ### 其它:
 
   * 详见:[https://tt-rss.org/](https://tt-rss.org/)

+ 1 - 1
tt-rss-plugins/root/etc/caddy/caddy.conf

@@ -6,7 +6,7 @@
    auto_https off
 }
 :80 {
-  root *  /usr/local/tt-rss
+  root *  /usr/local/tt-rss/app
   encode gzip
   php_fastcgi 127.0.0.1:9000
   file_server

+ 112 - 59
tt-rss-plugins/root/etc/cont-init.d/tt-rss.sh

@@ -1,108 +1,149 @@
 #! /usr/bin/with-contenv bash
 
 #检查自定义config位置文件
-if [ ! -e "/config/config.php" ] ;  then
-  cp  /usr/local/tt-rss/config.php-dist  /config/config.php
-  if [ -e "/usr/local/tt-rss/config.php" ] ;  then
-    rm  /usr/local/tt-rss/config.php
-  fi
-  ln -s /config/config.php /usr/local/tt-rss/
+if [ ! -e "/config/config.php" ]; then
+  cp /usr/local/tt-rss/app/config.php-dist /config/config.php
 fi
-if  [  -e "/config/config.php" ] ;  then
-  if [ -e "/usr/local/tt-rss/config.php" ] ;  then
-    rm  /usr/local/tt-rss/config.php
+if [ ! -L "/usr/local/tt-rss/app/config.php" ]; then
+  if [ -e "/usr/local/tt-rss/app/config.php" ]; then
+    rm /usr/local/tt-rss/app/config.php
   fi
-  ln -s /config/config.php /usr/local/tt-rss/
+  ln -s /config/config.php /usr/local/tt-rss/app/
 fi
 
 #检查cache文件夹位置
-if [  ! -d "/config/cache" ] ;  then
-  cp -rf /usr/local/tt-rss/defaults/cache  /config/
-  ln -s /config/cache  /usr/local/tt-rss/
+if [ ! -d "/config/cache" ]; then
+  cp -rf /usr/local/tt-rss/defaults/cache /config/
 fi
-if [  ! -L "/usr/local/tt-rss/cache" ] ;  then
-  ln -s /config/cache  /usr/local/tt-rss/
+if [ ! -L "/usr/local/tt-rss/app/cache" ]; then
+  if [ -e "/usr/local/tt-rss/app/cache" ]; then
+    rm -rf /usr/local/tt-rss/app/cache
+  fi
+  ln -s /config/cache /usr/local/tt-rss/app/
 fi
 
 #检查feed-icons文件夹位置
-if [  ! -d "/config/feed-icons" ] ;  then
-  cp -rf /usr/local/tt-rss/defaults/feed-icons  /config/
-  ln -s /config/feed-icons  /usr/local/tt-rss/
+if [ ! -d "/config/feed-icons" ]; then
+  cp -rf /usr/local/tt-rss/defaults/feed-icons /config/
 fi
-if [  ! -L "/usr/local/tt-rss/feed-icons" ] ;  then
-  ln -s /config/feed-icons  /usr/local/tt-rss/
+if [ ! -L "/usr/local/tt-rss/app/feed-icons" ]; then
+  if [ -e "/usr/local/tt-rss/app/feed-icons" ]; then
+    rm -rf /usr/local/tt-rss/app/feed-icons
+  fi
+  ln -s /config/feed-icons /usr/local/tt-rss/app/
 fi
 
 #检查lock文件夹位置
-if [  ! -d "/config/lock" ] ;  then
-  cp -rf /usr/local/tt-rss/defaults/lock  /config/
-  ln -s /config/lock  /usr/local/tt-rss/
+if [ ! -d "/config/lock" ]; then
+  cp -rf /usr/local/tt-rss/defaults/lock /config/
 fi
-if [  ! -L "/usr/local/tt-rss/lock" ] ;  then
-  ln -s /config/lock  /usr/local/tt-rss/
+if [ ! -L "/usr/local/tt-rss/app/lock" ]; then
+  if [ -e "/usr/local/tt-rss/app/lock" ]; then
+    rm -rf /usr/local/tt-rss/app/lock
+  fi
+  ln -s /config/lock /usr/local/tt-rss/app/
 fi
+
 #检查update_daemon.stamp文件
-if [  ! -e "/config/lock/update_daemon.stamp" ] ;  then
-  mkdir -p /config/lock/
+if [ ! -e "/config/lock/update_daemon.stamp" ]; then
   touch /config/lock/update_daemon.stamp
 fi
 
 #检查plugins.local文件夹位置
-if [  ! -d "/config/plugins.local" ] ;  then
-  cp -rf /usr/local/tt-rss/defaults/plugins.local  /config/
-  ln -s /config/plugins.local  /usr/local/tt-rss/
+if [ ! -d "/config/plugins.local" ]; then
+  cp -rf /usr/local/tt-rss/defaults/plugins.local /config/
 fi
-if [  ! -L "/usr/local/tt-rss/plugins.local" ] ;  then
-  ln -s /config/plugins.local  /usr/local/tt-rss/
+if [ ! -L "/usr/local/tt-rss/app/plugins.local" ]; then
+  if [ -e "/usr/local/tt-rss/app/plugins.local" ]; then
+    rm -rf /usr/local/tt-rss/app/plugins.local
+  fi
+  ln -s /config/plugins.local /usr/local/tt-rss/app/
 fi
 #检查feediron plugins
-if [  ! -d "/config/plugins.local/feediron" ] ;  then
-  cp -rf /usr/local/tt-rss/defaults/plugins.local/feediron  /config/plugins.local/
+if [ ! -d "/config/plugins.local/feediron" ]; then
+  cp -rf /usr/local/tt-rss/defaults/plugins.local/feediron /config/plugins.local/
 fi
 #检查fever plugins
-if [  ! -d "/config/plugins.local/fever" ] ;  then
-  cp -rf /usr/local/tt-rss/defaults/plugins.local/fever  /config/plugins.local/
+if [ ! -d "/config/plugins.local/fever" ]; then
+  cp -rf /usr/local/tt-rss/defaults/plugins.local/fever /config/plugins.local/
 fi
 #检查mercury_fulltext plugins
-if [  ! -d "/config/plugins.local/mercury_fulltext" ] ;  then
-  cp -rf /usr/local/tt-rss/defaults/plugins.local/mercury_fulltext  /config/plugins.local/
+if [ ! -d "/config/plugins.local/mercury_fulltext" ]; then
+  cp -rf /usr/local/tt-rss/defaults/plugins.local/mercury_fulltext /config/plugins.local/
 fi
 
 #检查templates.local文件夹位置
-if [  ! -d "/config/templates.local" ] ;  then
-  cp -rf /usr/local/tt-rss/defaults/templates.local  /config/
-  ln -s /config/templates.local  /usr/local/tt-rss/
+if [ ! -d "/config/templates.local" ]; then
+  cp -rf /usr/local/tt-rss/defaults/templates.local /config/
 fi
-if [  ! -L "/usr/local/tt-rss/templates.local" ] ;  then
-  ln -s /config/templates.local  /usr/local/tt-rss/
+if [ ! -L "/usr/local/tt-rss/app/templates.local" ]; then
+  if [ -e "/usr/local/tt-rss/app/templates.local" ]; then
+    rm -rf /usr/local/tt-rss/app/templates.local
+  fi
+  ln -s /config/templates.local /usr/local/tt-rss/app/
 fi
 
 #检查themes.local文件夹位置
-if [  ! -d "/config/themes.local" ] ;  then
-  cp -rf /usr/local/tt-rss/defaults/themes.local  /config/
-  ln -s /config/themes.local  /usr/local/tt-rss/
+if [ ! -d "/config/themes.local" ]; then
+  mkdir -p /config/themes.local
 fi
-if [  ! -L "/usr/local/tt-rss/themes.local" ] ;  then
-  ln -s /config/themes.local  /usr/local/tt-rss/
+if [ ! -L "/usr/local/tt-rss/app/themes.local" ]; then
+  if [ -e "/usr/local/tt-rss/app/themes.local" ]; then
+    rm -rf /usr/local/tt-rss/app/themes.local
+  fi
+  ln -s /config/themes.local /usr/local/tt-rss/app/
 fi
 #检查feedly themes
-if [  ! -d "/config/themes.local/feedly" ] ;  then
-  cp -rf /usr/local/tt-rss/defaults/themes.local/feedly*  /config/themes.local/
+if [ ! -d "/config/themes.local/feedly" ]; then
+  cp -rf /usr/local/tt-rss/defaults/themes.local/tt-rss-feedly-theme/feedly* /config/themes.local/
 fi
 
-
 #检查php log文件位置
-if [  ! -e "/config/php/log/error.log" ] ;  then
+if [ ! -d "/config/php/log/" ]; then
   mkdir -p /config/php/log/
+fi
+if [ ! -e "/config/php/log/error.log" ]; then
   touch /config/php/log/error.log
 fi
-if [  -e "/var/log/php8/error.log" ] ;  then
-  rm /var/log/php8/error.log
+if [ ! -L "/var/log/php8/error.log" ]; then
+  if [ -e "/var/log/php8/error.log" ]; then
+    rm /var/log/php8/error.log
+  fi
+  ln -s /config/php/log/error.log /var/log/php8/error.log
+fi
+
+#检查/var/run/postgresql目录
+if [ ! -d /var/run/postgresql/ ]; then
+  mkdir -p /var/run/postgresql/
+fi
+
+#设定tt-rss更新任务
+if [ `grep -c updatett-rss.sh /var/spool/cron/crontabs/root` -eq 0 ]; then
+  echo "0       0       *       *       *       /usr/local/tt-rss/defaults/updatett-rss.sh" >> /var/spool/cron/crontabs/root
+  echo tt-rss更新任务已设定。
+else
+  echo tt-rss更新任务已存在。
+fi
+
+#添加其它订阅端口。
+cd /usr/local/tt-rss/app
+git checkout -- /usr/local/tt-rss/app/classes/urlhelper.php
+if [ "$TTRSS_UPDATE_AUTO" != "true" ] && [ -n "$TTRSS_ALLOW_PORTS" ] && [ "$TTRSS_ALLOW_PORTS" != "80,443" ]; then
+    sed -i "s/\[80, 443, ''\]/\[80, 443, $TTRSS_ALLOW_PORTS, ''\]/" /usr/local/tt-rss/app/classes/urlhelper.php
+    sed -i "/if (isset(\$parts\['path'\]))/i\ \t \tif (isset(\$parts['port'])) \$tmp .= ':' . \$parts['port'];" /usr/local/tt-rss/app/classes/urlhelper.php
+fi
+
+#启动更新ttrss。
+if [ "$TTRSS_UPDATE_AUTO" == "true" ]; then
+  /usr/local/tt-rss/defaults/updatett-rss.sh
 fi
-ln -s /config/php/log/error.log  /var/log/php8/error.log
+
+#设置时区
+ln -sf /usr/share/zoneinfo/$TZ   /etc/localtime
+echo $TZ > /etc/timezone
 
 #修改用户UID GID
-if [ $GID -ne 0 ] && [ $UID -ne 0 ] ;  then
+if [ $GID -ne 0 ] && [ $UID -ne 0 ]; then
   groupmod -o -g "$GID" ttrss
   usermod -o -u "$UID" ttrss
   groupmod -o -g "$GID" postgres
@@ -110,16 +151,28 @@ if [ $GID -ne 0 ] && [ $UID -ne 0 ] ;  then
 else
   echo 请设定UID与GID为非0数值...
 fi
+if [ -n "$POSTGRES_GID" ] && [ -n "$POSTGRES_UID" ]; then
+  if [ $POSTGRES_GID -ne 0 ] && [ $POSTGRES_UID -ne 0 ]; then
+    groupmod -o -g "$POSTGRES_GID" postgres
+    usermod -o -u "$POSTGRES_UID" postgres
+    usermod -g ttrss ttrss
+    sed -i -e 's/^\(user\|group\) = .*/\1 = ttrss/i' /etc/php8/php-fpm.d/www.conf
+  else
+    echo 请设定POSTGRES_UID与POSTGRES_GID为非0数值...
+  fi
+fi
 
 #更改文件夹权限
 chown -R ttrss:ttrss /config/
 chown -R ttrss:ttrss /usr/local/tt-rss/
 chown -R ttrss:ttrss /var/log/php8/
 chown -R postgres:postgres /var/lib/postgresql/data
-if [ ! -d /var/run/postgresql/ ] ;  then
-  mkdir -p /var/run/postgresql/
-fi
 chown -R postgres:postgres /var/run/postgresql/
 
 #初始化ttrss_schema_pgsql.sql
 /usr/local/bin/initialize.sh &
+
+#备份还原postgres数据库
+if [ "$POSTGRES_DB_DUMP" == "true" ] || [ "$POSTGRES_DB_RESTORE" == "true" ]; then
+  /usr/local/tt-rss/defaults/postgres-dump-restore.sh &
+fi

+ 1 - 1
tt-rss-plugins/root/etc/services.d/caddy/run

@@ -1,4 +1,4 @@
 #! /usr/bin/with-contenv bash
 
 #启动 caddy
-exec caddy run --config /etc/caddy/caddy.conf  --adapter caddyfile
+exec caddy run --config /etc/caddy/caddy.conf --adapter caddyfile

+ 4 - 0
tt-rss-plugins/root/etc/services.d/cron/run

@@ -0,0 +1,4 @@
+#! /usr/bin/with-contenv bash
+
+#启动tt-rss更新任务
+exec crond -f -L /dev/null

+ 1 - 1
tt-rss-plugins/root/etc/services.d/mercury/run

@@ -1,4 +1,4 @@
 #! /usr/bin/with-contenv bash
 
 #启动 mercury api
-exec s6-setuidgid ttrss node   /usr/local/mercury-parser-api/node_modules/mercury-parser-api/index.js
+exec s6-setuidgid ttrss node /usr/local/mercury-parser-api/node_modules/mercury-parser-api/index.js

+ 1 - 1
tt-rss-plugins/root/etc/services.d/update_daemon/run

@@ -1,3 +1,3 @@
 #!/usr/bin/with-contenv bash
 
-exec s6-setuidgid ttrss php8 /usr/local/tt-rss/update_daemon2.php > /dev/null 2>&1
+exec s6-setuidgid ttrss php8 /usr/local/tt-rss/app/update_daemon2.php > /dev/null 2>&1

+ 5 - 2
tt-rss-plugins/root/usr/local/bin/initialize.sh

@@ -1,11 +1,14 @@
 #!/bin/sh
-if [  -n "$TTRSS_DB_HOST" ] && [ -n "$TTRSS_DB_USER" ] && [ -n "$TTRSS_DB_NAME" ] && [ -n "$TTRSS_DB_PASS" ] ;  then
+if [ -n "$TTRSS_DB_HOST" ] && [ -n "$TTRSS_DB_USER" ] && [ -n "$TTRSS_DB_NAME" ] && [ -n "$TTRSS_DB_PASS" ]; then
     while ! pg_isready -h $TTRSS_DB_HOST -U $TTRSS_DB_USER; do
 	    sleep 3
     done
     PSQL="psql -q -h $TTRSS_DB_HOST -U $TTRSS_DB_USER $TTRSS_DB_NAME"
     $PSQL -c "create extension if not exists pg_trgm"
-    su - ttrss -s /bin/sh -m -c "php8 /usr/local/tt-rss/update.php --update-schema=force-yes"
+    if [ "$($PSQL -c "\dx" |grep "zhparser" |wc -l)" -eq 0 ]; then
+       psql -U $TTRSS_DB_USER -d $TTRSS_DB_NAME -a -f /docker-entrypoint-initdb.d/install_extension.sql
+    fi
+    su - ttrss -s /bin/sh -m -c "php8 /usr/local/tt-rss/app/update.php --update-schema=force-yes"
 else
     echo 环境变量TTRSS_DB_[HOST、USER、NAME、PASS]未填写完全...
 fi

+ 47 - 0
tt-rss-plugins/root/usr/local/tt-rss/defaults/postgres-dump-restore.sh

@@ -0,0 +1,47 @@
+#!/bin/sh
+
+if [ -n "$POSTGRES_DB" ] && [ -n "$POSTGRES_USER" ] && [ -n "$POSTGRES_PASSWORD" ]; then
+    count=`ps -ef |grep /usr/local/bin/initialize.sh |grep -v "grep" |wc -l`
+    while [ 0 -ne $count ]; do
+    sleep 3
+    count=`ps -ef |grep /usr/local/bin/initialize.sh |grep -v "grep" |wc -l`
+    done
+    if [ "$POSTGRES_DB_DUMP" == "true" ] && [ "$POSTGRES_DB_RESTORE" != "true" ]; then
+      if [ ! -e "/config/db.sql" ]; then
+         while ! pg_isready -h localhost -U $POSTGRES_USER; do
+	         sleep 3
+         done
+         pg_dump -U $POSTGRES_USER -f /config/db.sql -d $POSTGRES_DB
+         echo 已备份到/config/db.sql...
+      else
+         echo 存在旧的备份文件,需删除...
+      fi
+    elif [ "$POSTGRES_DB_RESTORE" == "true" ] && [ "$POSTGRES_DB_DUMP" != "true" ]; then
+      if [ -e "/config/db.sql" ]; then
+        while ! pg_isready -h localhost -U $POSTGRES_USER; do
+          sleep 3
+        done
+        if [ -e "/var/lib/postgresql/data" ]; then
+          rm -rf /var/lib/postgresql/data/*
+        fi
+        ps -ef |grep postgres: |grep -v grep|awk '{print $1}'|xargs kill -9
+        while ! pg_isready -h localhost -U $POSTGRES_USER; do
+          sleep 3
+        done
+        psql -d $POSTGRES_DB -f /config/db.sql -U $POSTGRES_USER
+        chown -R postgres:postgres /var/lib/postgresql/data
+        chown -R postgres:postgres /var/run/postgresql/
+        /usr/local/bin/initialize.sh &
+        mv /config/db.sql /config/db.sql.$(date +%Y-%m-%d).restore
+        echo 已还原/config/db.sql并重命名为.restore文件...
+      else
+        echo 无备份文件...
+      fi
+    elif [ "$POSTGRES_DB_DUMP" == "true" ] && [ "$POSTGRES_DB_RESTORE" == "true" ]; then
+        echo 请勿同时使用数据库备份和还原...
+    else
+        echo 未设置数据库备份或者还原...
+    fi
+else
+       echo 环境变量POSTGRES_[DB、USER、PASSWORD]未填写完全...
+fi

+ 36 - 0
tt-rss-plugins/root/usr/local/tt-rss/defaults/updatett-rss.sh

@@ -0,0 +1,36 @@
+#! /bin/sh
+
+if [ "$TTRSS_UPDATE_AUTO" == "true" ]; then
+  # tt-rss
+  cd /usr/local/tt-rss/app
+  git checkout -- /usr/local/tt-rss/app/classes/urlhelper.php
+  git pull --shallow-since=$(echo "`git show --pretty=format:"%ct" | head -1`-86400" | date -d @`bc` "+%Y-%m-%d")
+  if [ -n "$TTRSS_ALLOW_PORTS" ] && [ "$TTRSS_ALLOW_PORTS" != "80,443" ]; then
+    sed -i "s/\[80, 443, ''\]/\[80, 443, $TTRSS_ALLOW_PORTS, ''\]/" /usr/local/tt-rss/app/classes/urlhelper.php
+    sed -i "/if (isset(\$parts\['path'\]))/i\ \t \tif (isset(\$parts['port'])) \$tmp .= ':' . \$parts['port'];" /usr/local/tt-rss/app/classes/urlhelper.php
+  fi
+  # update plugin mercury_fulltext
+  cd /usr/local/tt-rss/app/plugins.local/mercury_fulltext
+  git pull --shallow-since=$(echo "`git show --pretty=format:"%ct" | head -1`-86400" | date -d @`bc` "+%Y-%m-%d")
+  # update plugin feediron
+  cd /usr/local/tt-rss/app/plugins.local/feediron
+  git pull --shallow-since=$(echo "`git show --pretty=format:"%ct" | head -1`-86400" | date -d @`bc` "+%Y-%m-%d")
+  # update plugin fever
+  cd /usr/local/tt-rss/app/plugins.local/fever
+  git pull --shallow-since=$(echo "`git show --pretty=format:"%ct" | head -1`-86400" | date -d @`bc` "+%Y-%m-%d")
+  # update plugin feedly-theme
+  cd /usr/local/tt-rss/defaults/themes.local/tt-rss-feedly-theme
+  Oldversion="`git rev-parse HEAD`"
+  git pull --shallow-since=$(echo "`git show --pretty=format:"%ct" | head -1`-86400" | date -d @`bc` "+%Y-%m-%d")
+  Newversion="`git rev-parse HEAD`"
+  if [ $Oldversion != $Newversion ]; then
+    cp -rf /usr/local/tt-rss/defaults/themes.local/tt-rss-feedly-theme/feedly* /usr/local/tt-rss/app/themes.local/
+  fi
+  if [ "$(md5sum /config/themes.local/feedly.css|cut -d ' ' -f1)" != "$(md5sum /usr/local/tt-rss/defaults/themes.local/tt-rss-feedly-theme/feedly.css|cut -d ' ' -f1)" ]; then
+    if [ "$(stat -c %Y /config/themes.local/feedly.css)" -lt "$(stat -c %Y /usr/local/tt-rss/defaults/themes.local/tt-rss-feedly-theme/feedly.css)" ]; then
+      cp -rf /usr/local/tt-rss/defaults/themes.local/tt-rss-feedly-theme/feedly* /usr/local/tt-rss/app/themes.local/
+    fi
+  fi
+  chown -R ttrss:ttrss /config/
+  chown -R ttrss:ttrss /usr/local/tt-rss/
+fi