Update for support freshrss

This commit is contained in:
Stille 2022-01-06 13:53:07 +08:00
parent dee298ee87
commit 9788c328c3
18 changed files with 1636 additions and 163 deletions

5
.env
View File

@ -29,3 +29,8 @@ RSSHUB_DOMAIN_KEY=yourdomain.com.key
NGINX_VERSION=stable NGINX_VERSION=stable
TTRSS_IMAGE=wangqiru/ttrss TTRSS_IMAGE=wangqiru/ttrss
TTRSS_VERSION=latest-2021-05-19 TTRSS_VERSION=latest-2021-05-19
# ------------------------------------- FreshRSS ------------------------------------- #
POSTGRES_DB=freshrss
POSTGRES_USER=freshrss
EXPOSED_PORT=30001

View File

@ -0,0 +1,63 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
freshrss-db:
image: postgres:12-alpine
# container_name: freshrss-db
hostname: freshrss-db
restart: unless-stopped
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER:-freshrss}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-freshrss}
POSTGRES_DB: ${POSTGRES_DB:-freshrss}
service.rss:
image: freshrss/freshrss:latest-arm
# container_name: freshrss-app
hostname: freshrss-app
restart: unless-stopped
depends_on:
- freshrss-db
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
environment:
CRON_MIN: '*/20'
TZ: Asia/Shanghai

View File

@ -0,0 +1,74 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
freshrss-db:
image: postgres:12-alpine
# container_name: freshrss-db
hostname: freshrss-db
restart: unless-stopped
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER:-freshrss}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-freshrss}
POSTGRES_DB: ${POSTGRES_DB:-freshrss}
service.rss:
image: freshrss/freshrss:latest-arm
# container_name: freshrss-app
hostname: freshrss-app
restart: unless-stopped
depends_on:
- freshrss-db
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
environment:
CRON_MIN: '*/20'
TZ: Asia/Shanghai
# ---------------------------------------- acme.sh ---------------------------------------- #
acme:
image: neilpang/acme.sh
# container_name: acme
volumes:
- ./acme:/conf
- ./nginx/ssl:/ssl
restart: always
network_mode: host
command: ["sh", "-c", "/conf/start.sh"]

View File

@ -0,0 +1,107 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
- rsshub
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
freshrss-db:
image: postgres:12-alpine
# container_name: freshrss-db
hostname: freshrss-db
restart: unless-stopped
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER:-freshrss}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-freshrss}
POSTGRES_DB: ${POSTGRES_DB:-freshrss}
service.rss:
image: freshrss/freshrss:latest-arm
# container_name: freshrss-app
hostname: freshrss-app
restart: unless-stopped
depends_on:
- freshrss-db
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
environment:
CRON_MIN: '*/20'
TZ: Asia/Shanghai
# ---------------------------------------- rsshub ---------------------------------------- #
rsshub:
image: diygod/rsshub
restart: always
ports:
- 1200:1200
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
depends_on:
- redis
networks:
- rssforever
redis:
image: redis:alpine
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./rsshub/redis-data:/data
networks:
- rssforever
# ---------------------------------------- watchtower ---------------------------------------- #
# 每天早上 10 点定时更新 RSSHub , 如无需可注释或删除本段.
watchtower:
image: containrrr/watchtower:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 10 * * *
restart: always
command: rssforever-watchtower-1 rssforever_rsshub-1 rssforever_redis-1 rssforever_browserless-1 rssforever_acme-1
networks:
- rssforever

View File

@ -0,0 +1,119 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
- rsshub
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
freshrss-db:
image: postgres:12-alpine
# container_name: freshrss-db
hostname: freshrss-db
restart: unless-stopped
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER:-freshrss}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-freshrss}
POSTGRES_DB: ${POSTGRES_DB:-freshrss}
service.rss:
image: freshrss/freshrss:latest-arm
# container_name: freshrss-app
hostname: freshrss-app
restart: unless-stopped
depends_on:
- freshrss-db
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
environment:
CRON_MIN: '*/20'
TZ: Asia/Shanghai
# ---------------------------------------- rsshub ---------------------------------------- #
rsshub:
image: diygod/rsshub
restart: always
ports:
- 1200:1200
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
depends_on:
- redis
networks:
- rssforever
redis:
image: redis:alpine
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./rsshub/redis-data:/data
networks:
- rssforever
# ---------------------------------------- watchtower ---------------------------------------- #
# 每天早上 10 点定时更新 RSSHub , 如无需可注释或删除本段.
watchtower:
image: containrrr/watchtower:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 10 * * *
restart: always
command: rssforever-watchtower-1 rssforever_rsshub-1 rssforever_redis-1 rssforever_browserless-1 rssforever_acme-1
networks:
- rssforever
# ---------------------------------------- acme.sh ---------------------------------------- #
acme:
image: neilpang/acme.sh
# container_name: acme
volumes:
- ./acme:/conf
- ./nginx/ssl:/ssl
restart: always
network_mode: host
command: ["sh", "-c", "/conf/start.sh"]

View File

@ -0,0 +1,62 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
service.rss:
image: ${TTRSS_IMAGE}:${TTRSS_VERSION}
environment:
- SELF_URL_PATH=${PROTOCOL}://${RSS_DOMAIN}
- DB_PASS=${POSTGRES_PASSWORD}
- PUID=1000
- PGID=1000
- ENABLE_PLUGINS=auth_internal,remove_iframe_sandbox
networks:
- rssforever
stdin_open: true
tty: true
restart: always
database.postgres:
image: postgres:13-alpine
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./rss/postgres/data/:/var/lib/postgresql/data
networks:
- rssforever
restart: always

View File

@ -0,0 +1,73 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
service.rss:
image: ${TTRSS_IMAGE}:${TTRSS_VERSION}
environment:
- SELF_URL_PATH=${PROTOCOL}://${RSS_DOMAIN}
- DB_PASS=${POSTGRES_PASSWORD}
- PUID=1000
- PGID=1000
- ENABLE_PLUGINS=auth_internal,remove_iframe_sandbox
networks:
- rssforever
stdin_open: true
tty: true
restart: always
database.postgres:
image: postgres:13-alpine
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./rss/postgres/data/:/var/lib/postgresql/data
networks:
- rssforever
restart: always
# ---------------------------------------- acme.sh ---------------------------------------- #
acme:
image: neilpang/acme.sh
# container_name: acme
volumes:
- ./acme:/conf
- ./nginx/ssl:/ssl
restart: always
network_mode: host
command: ["sh", "-c", "/conf/start.sh"]

View File

@ -0,0 +1,106 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
- rsshub
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
service.rss:
image: ${TTRSS_IMAGE}:${TTRSS_VERSION}
environment:
- SELF_URL_PATH=${PROTOCOL}://${RSS_DOMAIN}
- DB_PASS=${POSTGRES_PASSWORD}
- PUID=1000
- PGID=1000
- ENABLE_PLUGINS=auth_internal,remove_iframe_sandbox
networks:
- rssforever
stdin_open: true
tty: true
restart: always
database.postgres:
image: postgres:13-alpine
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./rss/postgres/data/:/var/lib/postgresql/data
networks:
- rssforever
restart: always
# ---------------------------------------- rsshub ---------------------------------------- #
rsshub:
image: diygod/rsshub
restart: always
ports:
- 1200:1200
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
depends_on:
- redis
networks:
- rssforever
redis:
image: redis:alpine
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./rsshub/redis-data:/data
networks:
- rssforever
# ---------------------------------------- watchtower ---------------------------------------- #
# 每天早上 10 点定时更新 RSSHub , 如无需可注释或删除本段.
watchtower:
image: containrrr/watchtower:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 10 * * *
restart: always
command: rssforever-watchtower-1 rssforever_rsshub-1 rssforever_redis-1 rssforever_browserless-1 rssforever_acme-1
networks:
- rssforever

View File

@ -0,0 +1,118 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
- rsshub
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
service.rss:
image: ${TTRSS_IMAGE}:${TTRSS_VERSION}
environment:
- SELF_URL_PATH=${PROTOCOL}://${RSS_DOMAIN}
- DB_PASS=${POSTGRES_PASSWORD}
- PUID=1000
- PGID=1000
- ENABLE_PLUGINS=auth_internal,remove_iframe_sandbox
networks:
- rssforever
stdin_open: true
tty: true
restart: always
database.postgres:
image: postgres:13-alpine
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./rss/postgres/data/:/var/lib/postgresql/data
networks:
- rssforever
restart: always
# ---------------------------------------- rsshub ---------------------------------------- #
rsshub:
image: diygod/rsshub
restart: always
ports:
- 1200:1200
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
depends_on:
- redis
networks:
- rssforever
redis:
image: redis:alpine
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./rsshub/redis-data:/data
networks:
- rssforever
# ---------------------------------------- watchtower ---------------------------------------- #
# 每天早上 10 点定时更新 RSSHub , 如无需可注释或删除本段.
watchtower:
image: containrrr/watchtower:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 10 * * *
restart: always
command: rssforever-watchtower-1 rssforever_rsshub-1 rssforever_redis-1 rssforever_browserless-1 rssforever_acme-1
networks:
- rssforever
# ---------------------------------------- acme.sh ---------------------------------------- #
acme:
image: neilpang/acme.sh
# container_name: acme
volumes:
- ./acme:/conf
- ./nginx/ssl:/ssl
restart: always
network_mode: host
command: ["sh", "-c", "/conf/start.sh"]

View File

@ -0,0 +1,63 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
freshrss-db:
image: postgres:12-alpine
# container_name: freshrss-db
hostname: freshrss-db
restart: unless-stopped
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER:-freshrss}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-freshrss}
POSTGRES_DB: ${POSTGRES_DB:-freshrss}
service.rss:
image: freshrss/freshrss:latest
# container_name: freshrss-app
hostname: freshrss-app
restart: unless-stopped
depends_on:
- freshrss-db
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
environment:
CRON_MIN: '*/20'
TZ: Asia/Shanghai

View File

@ -0,0 +1,74 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
freshrss-db:
image: postgres:12-alpine
# container_name: freshrss-db
hostname: freshrss-db
restart: unless-stopped
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER:-freshrss}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-freshrss}
POSTGRES_DB: ${POSTGRES_DB:-freshrss}
service.rss:
image: freshrss/freshrss:latest
# container_name: freshrss-app
hostname: freshrss-app
restart: unless-stopped
depends_on:
- freshrss-db
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
environment:
CRON_MIN: '*/20'
TZ: Asia/Shanghai
# ---------------------------------------- acme.sh ---------------------------------------- #
acme:
image: neilpang/acme.sh
# container_name: acme
volumes:
- ./acme:/conf
- ./nginx/ssl:/ssl
restart: always
network_mode: host
command: ["sh", "-c", "/conf/start.sh"]

View File

@ -0,0 +1,116 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
- rsshub
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
freshrss-db:
image: postgres:12-alpine
# container_name: freshrss-db
hostname: freshrss-db
restart: unless-stopped
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER:-freshrss}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-freshrss}
POSTGRES_DB: ${POSTGRES_DB:-freshrss}
service.rss:
image: freshrss/freshrss:latest
# container_name: freshrss-app
hostname: freshrss-app
restart: unless-stopped
depends_on:
- freshrss-db
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
environment:
CRON_MIN: '*/20'
TZ: Asia/Shanghai
# ---------------------------------------- rsshub ---------------------------------------- #
rsshub:
image: diygod/rsshub
restart: always
ports:
- 1200:1200
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
depends_on:
- redis
- browserless
networks:
- rssforever
browserless:
image: browserless/chrome
restart: always
networks:
- rssforever
redis:
image: redis:alpine
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./rsshub/redis-data:/data
networks:
- rssforever
# ---------------------------------------- watchtower ---------------------------------------- #
# 每天早上 10 点定时更新 RSSHub , 如无需可注释或删除本段.
watchtower:
image: containrrr/watchtower:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 10 * * *
restart: always
command: rssforever-watchtower-1 rssforever_rsshub-1 rssforever_redis-1 rssforever_browserless-1 rssforever_acme-1
networks:
- rssforever

View File

@ -0,0 +1,128 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
- rsshub
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
freshrss-db:
image: postgres:12-alpine
# container_name: freshrss-db
hostname: freshrss-db
restart: unless-stopped
volumes:
- ./db:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER:-freshrss}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-freshrss}
POSTGRES_DB: ${POSTGRES_DB:-freshrss}
service.rss:
image: freshrss/freshrss:latest
# container_name: freshrss-app
hostname: freshrss-app
restart: unless-stopped
depends_on:
- freshrss-db
volumes:
- ./data:/var/www/FreshRSS/data
- ./extensions:/var/www/FreshRSS/extensions
environment:
CRON_MIN: '*/20'
TZ: Asia/Shanghai
# ---------------------------------------- rsshub ---------------------------------------- #
rsshub:
image: diygod/rsshub
restart: always
ports:
- 1200:1200
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
depends_on:
- redis
- browserless
networks:
- rssforever
browserless:
image: browserless/chrome
restart: always
networks:
- rssforever
redis:
image: redis:alpine
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./rsshub/redis-data:/data
networks:
- rssforever
# ---------------------------------------- watchtower ---------------------------------------- #
# 每天早上 10 点定时更新 RSSHub , 如无需可注释或删除本段.
watchtower:
image: containrrr/watchtower:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 10 * * *
restart: always
command: rssforever-watchtower-1 rssforever_rsshub-1 rssforever_redis-1 rssforever_browserless-1 rssforever_acme-1
networks:
- rssforever
# ---------------------------------------- acme.sh ---------------------------------------- #
acme:
image: neilpang/acme.sh
# container_name: acme
volumes:
- ./acme:/conf
- ./nginx/ssl:/ssl
restart: always
network_mode: host
command: ["sh", "-c", "/conf/start.sh"]

View File

@ -0,0 +1,78 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
service.rss:
image: ${TTRSS_IMAGE}:${TTRSS_VERSION}
environment:
- SELF_URL_PATH=${PROTOCOL}://${RSS_DOMAIN}
- DB_PASS=${POSTGRES_PASSWORD}
- PUID=1000
- PGID=1000
- ENABLE_PLUGINS=auth_internal,remove_iframe_sandbox
networks:
- rssforever
stdin_open: true
tty: true
restart: always
service.mercury:
image: wangqiru/mercury-parser-api:latest
networks:
- rssforever
restart: always
service.opencc:
image: wangqiru/opencc-api-server:latest
environment:
- NODE_ENV=production
networks:
- rssforever
restart: always
database.postgres:
image: postgres:13-alpine
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./rss/postgres/data/:/var/lib/postgresql/data
networks:
- rssforever
restart: always

View File

@ -0,0 +1,90 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
service.rss:
image: ${TTRSS_IMAGE}:${TTRSS_VERSION}
environment:
- SELF_URL_PATH=${PROTOCOL}://${RSS_DOMAIN}
- DB_PASS=${POSTGRES_PASSWORD}
- PUID=1000
- PGID=1000
- ENABLE_PLUGINS=auth_internal,remove_iframe_sandbox
networks:
- rssforever
stdin_open: true
tty: true
restart: always
service.mercury:
image: wangqiru/mercury-parser-api:latest
networks:
- rssforever
restart: always
service.opencc:
image: wangqiru/opencc-api-server:latest
environment:
- NODE_ENV=production
networks:
- rssforever
restart: always
database.postgres:
image: postgres:13-alpine
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./rss/postgres/data/:/var/lib/postgresql/data
networks:
- rssforever
restart: always
# ---------------------------------------- acme.sh ---------------------------------------- #
acme:
image: neilpang/acme.sh
# container_name: acme
volumes:
- ./acme:/conf
- ./nginx/ssl:/ssl
restart: always
network_mode: host
command: ["sh", "-c", "/conf/start.sh"]

View File

@ -0,0 +1,130 @@
version: "3"
networks:
rssforever:
# ---------------------------------------- nginx ---------------------------------------- #
services:
nginx:
image: nginx:${NGINX_VERSION}
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/nginx.sh:/nginx.sh
- ./nginx/vhost:/etc/nginx/conf.d/vhost
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/html:/usr/share/nginx/html
environment:
- PROTOCOL=${PROTOCOL}
- RSS_DOMAIN=${RSS_DOMAIN}
- RSS_DOAMIN_CERT=${RSS_DOAMIN_CERT}
- RSS_DOMAIN_KEY=${RSS_DOMAIN_KEY}
- RSSHUB_DOMAIN=${RSSHUB_DOMAIN}
- RSSHUB_DOAMIN_CERT=${RSSHUB_DOAMIN_CERT}
- RSSHUB_DOMAIN_KEY=${RSSHUB_DOMAIN_KEY}
networks:
- rssforever
depends_on:
- service.rss
- rsshub
command: ["sh", "-c", "/nginx.sh"]
# ---------------------------------------- ttrss ---------------------------------------- #
service.rss:
image: ${TTRSS_IMAGE}:${TTRSS_VERSION}
environment:
- SELF_URL_PATH=${PROTOCOL}://${RSS_DOMAIN}
- DB_PASS=${POSTGRES_PASSWORD}
- PUID=1000
- PGID=1000
- ENABLE_PLUGINS=auth_internal,remove_iframe_sandbox
networks:
- rssforever
stdin_open: true
tty: true
restart: always
service.mercury:
image: wangqiru/mercury-parser-api:latest
networks:
- rssforever
restart: always
service.opencc:
image: wangqiru/opencc-api-server:latest
environment:
- NODE_ENV=production
networks:
- rssforever
restart: always
database.postgres:
image: postgres:13-alpine
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./rss/postgres/data/:/var/lib/postgresql/data
networks:
- rssforever
restart: always
# ---------------------------------------- rsshub ---------------------------------------- #
rsshub:
image: diygod/rsshub
restart: always
ports:
- 1200:1200
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
depends_on:
- redis
- browserless
networks:
- rssforever
browserless:
image: browserless/chrome
restart: always
networks:
- rssforever
redis:
image: redis:alpine
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./rsshub/redis-data:/data
networks:
- rssforever
# ---------------------------------------- watchtower ---------------------------------------- #
# 每天早上 10 点定时更新 RSSHub , 如无需可注释或删除本段.
watchtower:
image: containrrr/watchtower:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 10 * * *
restart: always
command: rssforever-watchtower-1 rssforever_rsshub-1 rssforever_redis-1 rssforever_browserless-1 rssforever_acme-1
networks:
- rssforever

View File

@ -125,7 +125,7 @@ services:
- WATCHTOWER_CLEANUP=true - WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 10 * * * - WATCHTOWER_SCHEDULE=0 0 10 * * *
restart: always restart: always
command: rssforever_watchtower_1 rssforever_rsshub_1 rssforever_redis_1 rssforever_browserless_1 rssforever_acme_1 command: rssforever-watchtower-1 rssforever_rsshub-1 rssforever_redis-1 rssforever_browserless-1 rssforever_acme-1
networks: networks:
- rssforever - rssforever

View File

@ -13,26 +13,22 @@ Font="\033[0m"
WORK_PATH=$(dirname $(readlink -f $0)) WORK_PATH=$(dirname $(readlink -f $0))
UNAME=$(uname -m) UNAME=$(uname -m)
welcome (){
menu (){
clear clear
echo -e "${Green}=========================================================================================${Font}" echo -e "${Green}=========================================================================================${Font}"
echo -e "${Green}欢迎使用 nginx + ttrss + rsshub + watchtower 一键安装脚本${Font}" echo -e "${Green}欢迎使用 TTRSS / FreshRSS / RSSHub 一键安装脚本${Font}"
echo -e "${Red}注意:本脚本需要服务器有 docker 和 docker compose 环境${Font}" echo -e "${Red}注意:本脚本需要服务器有 docker 和 docker compose 环境${Font}"
echo -e "${Green}2021-07-01 更新同时支持 X86 和 ARM 架构${Font}" echo -e "${Green}更新支持 FreshRSS 服务${Font}"
echo -e "${Green}更新同时支持 X86 和 ARM 架构${Font}"
echo -e "${Green}=========================================================================================${Font}" echo -e "${Green}=========================================================================================${Font}"
echo "1) nginx + ttrss + rsshub + watchtower" echo "1) 开始执行环境检查,确保本服务器满足安装条件."
echo "2) nginx + ttrss" echo "2) 退出脚本"
echo "3) 退出脚本"
read -p "请输入:" CHOICE_INPUT read -p "请输入:" CHOICE_INPUT
case "$CHOICE_INPUT" in case "$CHOICE_INPUT" in
1) 1)
choice1 check_env
;; ;;
2) 2)
choice2
;;
3)
echo -e "${Red}已退出脚本.${Font}" echo -e "${Red}已退出脚本.${Font}"
exit 0 exit 0
;; ;;
@ -42,108 +38,141 @@ menu (){
esac esac
} }
check_env (){
choice1 (){
echo -e "${Green}当前选择 nginx + ttrss + rsshub + watchtower${Font}"
echo "1) 全自动申请和续签泛域名证书"
echo "2) 无需 SSL 证书"
echo "3) 退出脚本"
echo -e "${Green}=========================================================================================${Font}" echo -e "${Green}=========================================================================================${Font}"
read -p "请输入:" CHOICE1_INPUT echo -e "${Green}开始检查服务器环境${Font}"
case "$CHOICE1_INPUT" in # if ! type docker >/dev/null 2>&1 ; then
1) # echo -e "${Red}当前系统 docker 未安装,已退出脚本.${Font}"
confirm_domain # exit 0
conf_ssl $* # fi
git_clone # if ! type docker-compose >/dev/null 2>&1 ; then
conf_env # echo -e "${Red}当前系统 docker-compose 未安装,已退出脚本.${Font}"
arm_x86_all # exit 0
conf_auto_acme # fi
up # if ! type git >/dev/null 2>&1 ; then
;; # echo -e "${Red}当前系统 git 未安装,已退出脚本.${Font}"
2) # exit 0
confirm_domain # fi
git_clone if [ -d "${WORK_PATH}/rssforever" ] ; then
conf_env echo -e "${Red}当前目录存在 rssforever 项目.请更换目录,或删除后再次执行脚本.${Font}"
remove_acme
arm_x86_all
up
;;
3)
echo -e "${Red}已退出脚本.${Font}"
exit 0 exit 0
;;
*)
echo -e "${Red}输入有误,请重新运行脚本.${Font}"
exit 0
esac
}
choice2 (){
echo -e "${Green}当前选择 nginx + ttrss${Font}"
echo "1) 全自动申请和续签泛域名证书"
echo "2) 无需 SSL 证书"
echo "3) 退出脚本"
echo -e "${Green}=========================================================================================${Font}"
read -p "请输入:" CHOICE2_INPUT
case "$CHOICE2_INPUT" in
1)
confirm_domain
conf_ssl $*
git_clone
conf_env
remove_rsshub
arm_x86_ttrss_only
conf_auto_acme
up
;;
2)
confirm_domain
git_clone
conf_env
remove_acme
remove_rsshub
arm_x86_ttrss_only
up
;;
3)
echo -e "${Red}已退出脚本.${Font}"
exit 0
;;
*)
echo -e "${Red}输入有误,请重新运行脚本.${Font}"
exit 0
esac
}
confirm_domain (){
clear
if [ "${CHOICE1_INPUT}" == "1" ] || [ "${CHOICE2_INPUT}" == "1" ]; then
echo -e "${Green}请输入需要申请泛域名证书的根域名(例如:ioiox.com):${Font}"
read -p "请输入:" DOMAIN_INPUT
if [ ! -n "${DOMAIN_INPUT}" ]; then
echo -e "${Red}输入错误,请重新运行脚本.${Font}"
exit 0
fi
fi fi
DOMAIN=$DOMAIN_INPUT
echo -e "${Green}请输入 ttrss 使用的域名(例如:rss.ioiox.com):${Font}" echo -e "${Green}服务器完成检查,开始执行脚本.${Font}"
echo -e "${Green}=========================================================================================${Font}"
get_info
}
get_info () {
# 选择 RSS 服务
echo -e "${Green}选择 RSS 服务${Font}"
echo "1) TTRSS"
echo "2) FreshRSS"
echo "3) 退出脚本"
read -p "请输入:" CHOICE_RSS_INPUT
case "$CHOICE_RSS_INPUT" in
1)
RSS="TTRSS"
;;
2)
RSS="FreshRSS"
;;
3)
echo -e "${Red}已退出脚本.${Font}"
exit 0
;;
*)
echo -e "${Red}输入有误,请重新运行脚本.${Font}"
exit 0
esac
# 选择 RSSHub 服务
echo -e "${Green}选择 RSSHub 服务${Font}"
echo "1) 添加 RSSHub 服务"
echo "2) 无需添加 RSSHub 服务"
echo "3) 退出脚本"
read -p "请输入:" CHOICE_RSSHUB_INPUT
case "$CHOICE_RSSHUB_INPUT" in
1)
RSSHUB="yes"
RSSHUB_SHOW_INFO="已添加"
;;
2)
RSSHUB="no"
RSSHUB_SHOW_INFO="未添加"
;;
3)
echo -e "${Red}已退出脚本.${Font}"
exit 0
;;
*)
echo -e "${Red}输入有误,请重新运行脚本.${Font}"
exit 0
esac
# 选择 HTTP 协议
echo -e "${Green}选择是否开启 HTTPS 支持${Font}"
echo "1) HTTPS 协议"
echo "2) HTTP 协议"
echo "3) 退出脚本"
read -p "请输入:" CHOICE_PROTOCOL_INPUT
case "$CHOICE_PROTOCOL_INPUT" in
1)
PROTOCOL="https"
;;
2)
PROTOCOL="http"
;;
3)
echo -e "${Red}已退出脚本.${Font}"
exit 0
;;
*)
echo -e "${Red}输入有误,请重新运行脚本.${Font}"
exit 0
esac
if [ "${RSSHUB}" == "yes" ] && [ "${PROTOCOL}" == "https" ]; then
echo -e "${Green}注意:本脚本自带申请域名证书功能. RSS 和 RSSHub 必须为同一域名的子域名.${Font}"
fi
# 输入 RSS 域名信息
echo -e "${Green}请输入 RSS 使用的域名(例如:rss.ioiox.com):${Font}"
read -p "请输入:" RSS_DOMAIN_INPUT read -p "请输入:" RSS_DOMAIN_INPUT
if [ ! -n "${RSS_DOMAIN_INPUT}" ]; then if [ ! -n "${RSS_DOMAIN_INPUT}" ]; then
echo -e "${Red}输入错误,请重新运行脚本.${Font}" echo -e "${Red}输入错误,请重新运行脚本.${Font}"
exit 0 exit 0
fi fi
if [ "${CHOICE_INPUT}" == "1" ] ; then RSS_DOMAIN=$RSS_DOMAIN_INPUT
echo -e "${Green}请输入 rsshub 使用的域名(例如:rsshub.ioiox.com):${Font}"
# 输入 RSSHub 域名信息
if [ "${RSSHUB}" == "yes" ] ; then
echo -e "${Green}请输入 RSSHub 使用的域名(例如:rsshub.ioiox.com):${Font}"
read -p "请输入:" RSSHUB_DOMAIN_INPUT read -p "请输入:" RSSHUB_DOMAIN_INPUT
if [ ! -n "${RSSHUB_DOMAIN_INPUT}" ]; then if [ ! -n "${RSSHUB_DOMAIN_INPUT}" ]; then
echo -e "${Red}输入错误,请重新运行脚本.${Font}" echo -e "${Red}输入错误,请重新运行脚本.${Font}"
exit 0 exit 0
fi fi
RSSHUB_DOMAIN=$RSSHUB_DOMAIN_INPUT
fi
if [ "${PROTOCOL}" == "https" ] ; then
get_acme_info
else
show_info
fi fi
} }
conf_ssl (){ get_acme_info () {
echo -e "${Green}输入主域名用于部署和申请证书${Font}"
echo -e "${Green}请输入需要申请泛域名证书的根域名(例如:ioiox.com):${Font}"
read -p "请输入:" DOMAIN_INPUT
if [ ! -n "${DOMAIN_INPUT}" ]; then
echo -e "${Red}输入错误,请重新运行脚本.${Font}"
exit 0
fi
DOMAIN=$DOMAIN_INPUT
# 输入域名服务商信息
echo -e "${Green}请选择域名服务商:${Font}" echo -e "${Green}请选择域名服务商:${Font}"
echo -e "1) 腾讯云 dnspod.cn" echo -e "1) 腾讯云 dnspod.cn"
echo -e "2) 阿里云 aliyun" echo -e "2) 阿里云 aliyun"
@ -151,13 +180,13 @@ conf_ssl (){
read -p "请选择:" DNSAPI_INPUT read -p "请选择:" DNSAPI_INPUT
case "$DNSAPI_INPUT" in case "$DNSAPI_INPUT" in
1) 1)
PLATFORM_NAME='dnspod.cn' PLATFORM_NAME='腾讯云'
DNSAPI='dns_dp' DNSAPI='dns_dp'
API_ID_HEADER='DP_Id' API_ID_HEADER='DP_Id'
API_KEY_HEADER='DP_Key' API_KEY_HEADER='DP_Key'
;; ;;
2) 2)
PLATFORM_NAME='aliyun' PLATFORM_NAME='阿里云'
DNSAPI='dns_ali' DNSAPI='dns_ali'
API_ID_HEADER='Ali_Key' API_ID_HEADER='Ali_Key'
API_KEY_HEADER='Ali_Secret' API_KEY_HEADER='Ali_Secret'
@ -173,6 +202,7 @@ conf_ssl (){
echo -e "${Green}=========================================================================================${Font}" echo -e "${Green}=========================================================================================${Font}"
echo -e "${Red}注意: Cloudflare API 有三种:${Font}" echo -e "${Red}注意: Cloudflare API 有三种:${Font}"
echo -e "${Red}请参考 https://github.com/acmesh-official/acme.sh/wiki/dnsapi#1-cloudflare-option 选择.${Font}" echo -e "${Red}请参考 https://github.com/acmesh-official/acme.sh/wiki/dnsapi#1-cloudflare-option 选择.${Font}"
echo -e "${Red}推荐使用第二种: 可参考 https://ssl.ioiox.com/dnsapi.html 获取:${Font}"
echo "1) Using the global API key" echo "1) Using the global API key"
echo "2) Using the new cloudflare api token" echo "2) Using the new cloudflare api token"
echo "3) Using the new cloudflare api token for Single Zone" echo "3) Using the new cloudflare api token for Single Zone"
@ -210,15 +240,29 @@ conf_ssl (){
read -p "请输入 $API_ZONE_HEADER :" API_ZONE_HEADER_INPUT read -p "请输入 $API_ZONE_HEADER :" API_ZONE_HEADER_INPUT
fi fi
show_info
}
show_info (){
echo -e "${Green}=========================================================================================${Font}" echo -e "${Green}=========================================================================================${Font}"
echo -e "${Red}请确认以下信息正确无误!${Font}" echo -e "${Red}请确认以下信息正确无误!${Font}"
echo -e "${Green}域名: ${Font}${Red}${DOMAIN}${Font}" echo -e "${Green}当前服务器架构为${Font} ${Red}$UNAME${Font}"
echo -e "${Green}域名服务商: ${Font}${Red}${PLATFORM_NAME}${Font}" echo -e "${Green}RSS 服务为${Font} ${Red}${RSS}${Font}"
echo -e "${Green}${API_ID_HEADER}:${Font} ${Red}${API_ID_INPUT}${Font}" echo -e "${Green}RSSHub 服务${Font} ${Red}${RSSHUB_SHOW_INFO}${Font}"
echo -e "${Green}${API_KEY_HEADER}:${Font} ${Red}${API_KEY_INPUT}${Font}" echo -e "${Green}RSS 域名为${Font} ${Red} ${RSS_DOMAIN}${Font}"
if [ "$CHOICE_CLOUDFLARE_INPUT" == "3" ]; then if [ "${RSSHUB}" == "yes" ] ; then
echo -e "${Green}${API_ZONE_HEADER}:${Font} ${Red}${API_ZONE_HEADER_INPUT}${Font}" echo -e "${Green}RSSHub 域名为${Font} ${Red}${RSSHUB_DOMAIN}${Font}"
fi
if [ "${PROTOCOL}" == "https" ] ; then
echo -e "${Green}申请泛域名证书${Font} ${Red}$DOMAIN${Font}"
echo -e "${Green}域名服务商: ${Font}${Red}${PLATFORM_NAME}${Font}"
echo -e "${Green}${API_ID_HEADER}:${Font} ${Red}${API_ID_INPUT}${Font}"
echo -e "${Green}${API_KEY_HEADER}:${Font} ${Red}${API_KEY_INPUT}${Font}"
if [ "$CHOICE_CLOUDFLARE_INPUT" == "3" ]; then
echo -e "${Green}${API_ZONE_HEADER}:${Font} ${Red}${API_ZONE_HEADER_INPUT}${Font}"
fi
fi fi
echo -e "${Red}请再次确认以上信息正确无误!${Font}" echo -e "${Red}请再次确认以上信息正确无误!${Font}"
echo -e "${Green}=========================================================================================${Font}" echo -e "${Green}=========================================================================================${Font}"
@ -228,7 +272,7 @@ conf_ssl (){
case "$START_INPUT" in case "$START_INPUT" in
1) 1)
echo -e "${Green}开始部署中......${Font}" echo -e "${Green}开始部署中......${Font}"
acme $* start
;; ;;
2) 2)
exit 0 exit 0
@ -239,7 +283,16 @@ conf_ssl (){
esac esac
} }
acme (){ start () {
if [ "${PROTOCOL}" == "https" ]; then
acme
else
git_clone
fi
}
acme () {
TEMP=${RANDOM} TEMP=${RANDOM}
mkdir -p ${WORK_PATH}/${TEMP} mkdir -p ${WORK_PATH}/${TEMP}
cat >${WORK_PATH}/${TEMP}/account.conf<<EOF cat >${WORK_PATH}/${TEMP}/account.conf<<EOF
@ -272,24 +325,31 @@ EOF
if [ ! -f "${WORK_PATH}/${TEMP}/${DOMAIN}/fullchain.cer" ] ; then if [ ! -f "${WORK_PATH}/${TEMP}/${DOMAIN}/fullchain.cer" ] ; then
echo -e "${Green}证书申请失败,请重新尝试,已退出脚本.${Font}" echo -e "${Green}证书申请失败,请重新尝试,已退出脚本.${Font}"
exit 0 exit 0
else
echo -e "${Green}证书申请成功,开始部署.${Font}"
git_clone
fi fi
} }
git_clone (){ git_clone (){
git clone https://github.com/stilleshan/rssforever.git git clone https://github.com/stilleshan/rssforever.git
conf_domain
} }
conf_env (){
conf_domain (){
sed -i \ sed -i \
-e "/rss.yourdomain.com/s/rss.yourdomain.com/${RSS_DOMAIN_INPUT}/g" \ -e "/rss.yourdomain.com/s/rss.yourdomain.com/${RSS_DOMAIN}/g" \
-e "/rssforever.com/s/rssforever.com/rssforever.com-${TEMP}/g" \ -e "/rssforever.com/s/rssforever.com/rssforever.com-${TEMP}/g" \
${WORK_PATH}/rssforever/.env ${WORK_PATH}/rssforever/.env
if [ "${CHOICE_INPUT}" == "1" ] ; then if [ "${RSSHUB}" == "yes" ] ; then
sed -i "/rsshub.yourdomain.com/s/rsshub.yourdomain.com/${RSSHUB_DOMAIN_INPUT}/g" ${WORK_PATH}/rssforever/.env sed -i "/rsshub.yourdomain.com/s/rsshub.yourdomain.com/${RSSHUB_DOMAIN}/g" ${WORK_PATH}/rssforever/.env
else
mv ${WORK_PATH}/rssforever/nginx/vhost/rsshub.conf ${WORK_PATH}/rssforever/nginx/vhost/rsshub.conf.bak
fi fi
if [ "${CHOICE1_INPUT}" == "1" ] || [ "${CHOICE2_INPUT}" == "1" ]; then if [ "${PROTOCOL}" == "https" ] ; then
cp ${WORK_PATH}/${TEMP}/${DOMAIN}/fullchain.cer ${WORK_PATH}/rssforever/nginx/ssl/${DOMAIN}.cer cp ${WORK_PATH}/${TEMP}/${DOMAIN}/fullchain.cer ${WORK_PATH}/rssforever/nginx/ssl/${DOMAIN}.cer
cp ${WORK_PATH}/${TEMP}/${DOMAIN}/${DOMAIN}.key ${WORK_PATH}/rssforever/nginx/ssl cp ${WORK_PATH}/${TEMP}/${DOMAIN}/${DOMAIN}.key ${WORK_PATH}/rssforever/nginx/ssl
sed -i \ sed -i \
@ -298,13 +358,9 @@ conf_env (){
-e "/yourdomain.com.key/s/yourdomain.com.key/${DOMAIN}.key/g" \ -e "/yourdomain.com.key/s/yourdomain.com.key/${DOMAIN}.key/g" \
${WORK_PATH}/rssforever/.env ${WORK_PATH}/rssforever/.env
rm -rf ${WORK_PATH}/${TEMP} rm -rf ${WORK_PATH}/${TEMP}
conf_auto_acme
fi fi
} set_deploy
remove_rsshub (){
sed -i '80,131d' ${WORK_PATH}/rssforever/docker-compose.yml
sed -i '34d' ${WORK_PATH}/rssforever/docker-compose.yml
mv ${WORK_PATH}/rssforever/nginx/vhost/rsshub.conf ${WORK_PATH}/rssforever/nginx/vhost/rsshub.conf.bak
} }
conf_auto_acme (){ conf_auto_acme (){
@ -319,57 +375,68 @@ EOF
fi fi
} }
remove_acme (){ set_deploy () {
sed -i '133,143d' ${WORK_PATH}/rssforever/docker-compose.yml if [ "${RSS}" == "TTRSS" ]; then
} if [ "${RSSHUB}" == "yes" ]; then
if [ "${PROTOCOL}" == "https" ]; then
arm_x86_all (){ COMPOSE_FILE="ttrss-rsshub-https.yml"
echo "Check X86 or ARM" SUCCESS_MSG="TTRSS / RSSHub / HTTPS"
if [ ! $UNAME == "x86_64" ] ; then fi
sed -i '98,104d' ${WORK_PATH}/rssforever/docker-compose.yml if [ "${PROTOCOL}" == "http" ]; then
sed -i '53,68d' ${WORK_PATH}/rssforever/docker-compose.yml COMPOSE_FILE="ttrss-rsshub-http.yml"
sed -i '/PUPPETEER_WS_ENDPOINT/d' ${WORK_PATH}/rssforever/docker-compose.yml SUCCESS_MSG="TTRSS / RSSHub / HTTP"
sed -i '/- browserless/d' ${WORK_PATH}/rssforever/docker-compose.yml fi
fi
if [ "${RSSHUB}" == "no" ]; then
if [ "${PROTOCOL}" == "https" ]; then
COMPOSE_FILE="ttrss-https.yml"
SUCCESS_MSG="TTRSS / HTTPS"
fi
if [ "${PROTOCOL}" == "http" ]; then
COMPOSE_FILE="ttrss-http.yml"
SUCCESS_MSG="TTRSS / HTTP"
fi
fi
fi fi
}
arm_x86_ttrss_only (){ if [ "${RSS}" == "FreshRSS" ]; then
echo "Check X86 or ARM" if [ "${RSSHUB}" == "yes" ]; then
if [ ! $UNAME == "x86_64" ] ; then if [ "${PROTOCOL}" == "https" ]; then
sed -i '53,68d' ${WORK_PATH}/rssforever/docker-compose.yml COMPOSE_FILE="freshrss-rsshub-https.yml"
SUCCESS_MSG="FreshRSS / RSSHub / HTTPS"
fi
if [ "${PROTOCOL}" == "http" ]; then
COMPOSE_FILE="freshrss-rsshub-http.yml"
SUCCESS_MSG="FreshRSS / RSSHub / HTTP"
fi
fi
if [ "${RSSHUB}" == "no" ]; then
if [ "${PROTOCOL}" == "https" ]; then
COMPOSE_FILE="freshrss-https.yml"
SUCCESS_MSG="FreshRSS / HTTPS"
fi
if [ "${PROTOCOL}" == "http" ]; then
COMPOSE_FILE="freshrss-http.yml"
SUCCESS_MSG="FreshRSS / HTTP"
fi
fi
fi fi
up
} }
up (){ up () {
cd ${WORK_PATH}/rssforever cd ${WORK_PATH}/rssforever
docker-compose up -d if [ "${UNAME}" == "x86_64" ]; then
if [ "$CHOICE1_INPUT" == "1" ]; then ARCH=x86
echo -e "${Green}nginx + ttrss + rsshub + watchtower + acme 部署完毕${Font}" ARCH_UPCASE=X86
elif [ "$CHOICE1_INPUT" == "2" ]; then else
echo -e "${Green}nginx + ttrss + rsshub + watchtower 部署完毕${Font}" ARCH=arm
elif [ "$CHOICE2_INPUT" == "1" ]; then ARCH_UPCASE=ARM
echo -e "${Green}nginx + ttrss + acme 部署完毕${Font}"
elif [ "$CHOICE2_INPUT" == "2" ]; then
echo -e "${Green}nginx + ttrss 部署完毕${Font}"
fi fi
cp ${WORK_PATH}/compose_files/${ARCH}/${COMPOSE_FILE} ./docker-compose.yml
docker-compose up -d
cd ${WORK_PATH}/ cd ${WORK_PATH}/
echo -e "${Green}${SUCCESS_MSG} / ${ARCH_UPCASE} 部署成功${Font}"
} }
welcome
if ! type docker-compose >/dev/null 2>&1 ; then
echo -e "${Red}本机未安装 docker compose 已退出脚本.${Font}";
exit 0
fi
if ! type git >/dev/null 2>&1 ; then
echo -e "${Red}本机未安装 git 已退出脚本.${Font}"
exit
fi
if [ -d "${WORK_PATH}/rssforever" ] ; then
echo -e "${Green}当前目录存在 rssforever 项目.请更换目录,或删除后再次执行脚本.${Font}"
exit 0
fi
menu $*
rm $0