feat:添加nitter到列表#457

This commit is contained in:
okxlin 2024-05-12 19:30:50 +08:00
parent 42f1a36678
commit 1628f2c39a
8 changed files with 412 additions and 0 deletions

20
apps/nitter/README.md Normal file
View File

@ -0,0 +1,20 @@
# Nitter
[![Test Matrix](https://github.com/zedeus/nitter/workflows/Tests/badge.svg)](https://github.com/zedeus/nitter/actions/workflows/run-tests.yml)
[![Test Matrix](https://github.com/zedeus/nitter/workflows/Docker/badge.svg)](https://github.com/zedeus/nitter/actions/workflows/build-docker.yml)
[![License](https://img.shields.io/github/license/zedeus/nitter?style=flat)](#license)
A free and open source alternative Twitter front-end focused on privacy and
performance. \
Inspired by the [Invidious](https://github.com/iv-org/invidious)
project.
- No JavaScript or ads
- All requests go through the backend, client never talks to Twitter
- Prevents Twitter from tracking your IP or JavaScript fingerprint
- Uses Twitter's unofficial API (no rate limits or developer account required)
- Lightweight (for [@nim_lang](https://nitter.net/nim_lang), 60KB vs 784KB from twitter.com)
- RSS feeds
- Themes
- Mobile support (responsive design)
- AGPLv3 licensed, no proprietary instances permitted

19
apps/nitter/data.yml Normal file
View File

@ -0,0 +1,19 @@
name: Nitter
tags:
- 实用工具
title: 匿名浏览 Twitter
description: 匿名浏览 Twitter 的开源工具
additionalProperties:
key: nitter
name: Nitter
tags:
- Tool
shortDescZh: 匿名浏览 Twitter 的开源工具
shortDescEn: Alternative Twitter front-end
type: tool
crossVersionUpdate: true
limit: 0
recommend: 0
website: https://nitter.net
github: https://github.com/zedeus/nitter
document: https://github.com/zedeus/nitter

View File

@ -0,0 +1,30 @@
ADDRESS="0.0.0.0"
BASE64_MEDIA="false"
CONTAINER_NAME="nitter"
DATA_PATH="./data"
ENABLE_DEBUG="false"
ENABLE_RSS="true"
HLS_PLAYBACK="false"
HMAC_KEY="C7PPBcaNCL5B5Zkt6uHU"
HOSTNAME="nitter.net"
HTTPS="false"
HTTP_MAX_CONNECTIONS="100"
INFINITE_SCROLL="false"
LIST_MINUTES="240"
PANEL_APP_PORT_HTTP="40238"
PANEL_REDIS_ROOT_PASSWORD="E5TRJPM0U43WN8Ac7G7ks1cFzYgLyH"
PROXY=""
PROXY_AUTH=""
PROXY_VIDEOS="true"
REDIS_CONNECTIONS="20"
REDIS_HOST="redis"
REDIS_MAX_CONNECTIONS="30"
REDIS_PORT="6379"
REPLACE_REDDIT="teddit.net"
REPLACE_TWITTER="nitter.net"
REPLACE_YOUTUBE="piped.video"
RSS_MINUTES="10"
STATIC_DIR="./public"
THEME="Nitter"
TITLE="nitter"
TOKEN_COUNT="10"

238
apps/nitter/latest/data.yml Normal file
View File

@ -0,0 +1,238 @@
additionalProperties:
formFields:
- default: "nitter.net"
edit: true
envKey: HOSTNAME
labelEn: Hostname
labelZh: 主机名
required: true
type: text
- default: "nitter"
edit: true
envKey: TITLE
labelEn: Title
labelZh: 标题
required: true
type: text
- default: "0.0.0.0"
edit: true
envKey: ADDRESS
labelEn: Listening Address (in container)
labelZh: 监听地址 (容器内)
required: true
type: text
- default: "40238"
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: HTTP Port
labelZh: HTTP 端口
required: true
rule: paramPort
type: number
- default: ./data
disabled: true
envKey: DATA_PATH
labelEn: Data folder path
labelZh: 数据文件夹路径
required: true
type: text
- default: "false"
edit: true
envKey: HTTPS
labelEn: HTTPS Enabled
labelZh: 启用 HTTPS
required: true
type: select
values:
- label: "True"
value: "true"
- label: "False"
value: "false"
- default: "100"
edit: true
envKey: HTTP_MAX_CONNECTIONS
labelEn: Max HTTP Connections
labelZh: 最大 HTTP 连接数
required: true
type: number
- default: "./public"
edit: true
envKey: STATIC_DIR
labelEn: Static Directory
labelZh: 静态文件目录
required: true
type: text
- default: "240"
edit: true
envKey: LIST_MINUTES
labelEn: List Cache Minutes
labelZh: 列表缓存分钟数
required: true
type: number
- default: "10"
edit: true
envKey: RSS_MINUTES
labelEn: RSS Cache Minutes
labelZh: RSS 缓存分钟数
required: true
type: number
- default: ""
edit: true
envKey: REDIS_HOST
key: redis
labelEn: Redis Service
labelZh: Redis服务
required: true
type: service
- default: "6379"
edit: true
envKey: REDIS_PORT
labelEn: Redis Service Port
labelZh: Redis服务端口
required: true
rule: paramPort
type: number
- default: ""
edit: true
envKey: PANEL_REDIS_ROOT_PASSWORD
labelEn: Redis Password
labelZh: Redis 密码
required: true
type: password
- default: "20"
edit: true
envKey: REDIS_CONNECTIONS
labelEn: Redis Connections
labelZh: Redis 连接数
required: true
type: number
- default: "30"
edit: true
envKey: REDIS_MAX_CONNECTIONS
labelEn: Redis Max Connections
labelZh: Redis 最大连接数
required: true
type: number
- default: "C7PPBcaNCL5B5Zkt6uHU"
edit: true
envKey: HMAC_KEY
labelEn: Random key for cryptographic signing of video urls
labelZh: 用于视频网址加密签名的随机密钥
required: true
type: text
- default: "false"
edit: true
envKey: BASE64_MEDIA
labelEn: Base64 Media
labelZh: Base64 媒体
required: true
type: text
- default: "true"
edit: true
envKey: ENABLE_RSS
labelEn: Enable RSS
labelZh: 启用 RSS
required: true
type: select
values:
- label: "True"
value: "true"
- label: "False"
value: "false"
- default: "false"
edit: true
envKey: ENABLE_DEBUG
labelEn: Enable Debug
labelZh: 启用调试
required: true
type: select
values:
- label: "True"
value: "true"
- label: "False"
value: "false"
- default: ""
edit: true
envKey: PROXY
labelEn: Proxy
labelZh: 代理
required: false
type: text
- default: ""
edit: true
envKey: PROXY_AUTH
labelEn: Proxy Auth
labelZh: 代理认证
required: false
type: text
- default: "10"
edit: true
envKey: TOKEN_COUNT
labelEn: Token Count
labelZh: Token 数量
required: true
type: number
- default: "Nitter"
edit: true
envKey: THEME
labelEn: Theme
labelZh: 主题
required: true
type: text
- default: "nitter.net"
edit: true
envKey: REPLACE_TWITTER
labelEn: Replace Twitter
labelZh: 替换 Twitter
required: true
type: text
- default: "piped.video"
edit: true
envKey: REPLACE_YOUTUBE
labelEn: Replace YouTube
labelZh: 替换 YouTube
required: true
type: text
- default: "teddit.net"
edit: true
envKey: REPLACE_REDDIT
labelEn: Replace Reddit
labelZh: 替换 Reddit
required: true
type: text
- default: "true"
edit: true
envKey: PROXY_VIDEOS
labelEn: Proxy Videos
labelZh: 代理视频
required: true
type: select
values:
- label: "True"
value: "true"
- label: "False"
value: "false"
- default: "false"
edit: true
envKey: HLS_PLAYBACK
labelEn: HLS Playback
labelZh: HLS 播放
required: true
type: select
values:
- label: "True"
value: "true"
- label: "False"
value: "false"
- default: "false"
edit: true
envKey: INFINITE_SCROLL
labelEn: Infinite Scroll
labelZh: 无限滚动
required: true
type: select
values:
- label: "True"
value: "true"
- label: "False"
value: "false"

View File

@ -0,0 +1,44 @@
[Server]
hostname = "nitter.net" # for generating links, change this to your own domain/ip
title = "nitter"
address = "0.0.0.0"
port = 8080
https = false # disable to enable cookies when not using https
httpMaxConnections = 100
staticDir = "./public"
[Cache]
listMinutes = 240 # how long to cache list info (not the tweets, so keep it high)
rssMinutes = 10 # how long to cache rss queries
redisHost = "localhost" # Change to "nitter-redis" if using docker-compose
redisPort = 6379
redisPassword = ""
redisConnections = 20 # minimum open connections in pool
redisMaxConnections = 30
# new connections are opened when none are available, but if the pool size
# goes above this, they're closed when released. don't worry about this unless
# you receive tons of requests per second
[Config]
hmacKey = "secretkey" # random key for cryptographic signing of video urls
base64Media = false # use base64 encoding for proxied media urls
enableRSS = true # set this to false to disable RSS feeds
enableDebug = false # enable request logs and debug endpoints (/.tokens)
proxy = "" # http/https url, SOCKS proxies are not supported
proxyAuth = ""
tokenCount = 10
# minimum amount of usable tokens. tokens are used to authorize API requests,
# but they expire after ~1 hour, and have a limit of 500 requests per endpoint.
# the limits reset every 15 minutes, and the pool is filled up so there's
# always at least `tokenCount` usable tokens. only increase this if you receive
# major bursts all the time and don't have a rate limiting setup via e.g. nginx
# Change default preferences here, see src/prefs_impl.nim for a complete list
[Preferences]
theme = "Nitter"
replaceTwitter = "nitter.net"
replaceYouTube = "piped.video"
replaceReddit = "teddit.net"
proxyVideos = true
hlsPlayback = false
infiniteScroll = false

View File

@ -0,0 +1,29 @@
version: '3'
services:
nitter:
image: zedeus/nitter:latest
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP}"
volumes:
- ${DATA_PATH}/nitter.conf:/src/nitter.conf:Z,ro
healthcheck:
test: wget -nv --tries=1 --spider http://127.0.0.1:${PANEL_APP_PORT_HTTP}/Jack/status/20 || exit 1
interval: 30s
timeout: 5s
retries: 2
user: "998:998"
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

View File

@ -0,0 +1,32 @@
#!/bin/bash
source ./.env
sed -i "s/hostname = \".*\"/hostname = \"${HOSTNAME}\"/" ./data/nitter.conf
sed -i "s/title = \".*\"/title = \"${TITLE}\"/" ./data/nitter.conf
sed -i "s/address = \".*\"/address = \"${ADDRESS}\"/" ./data/nitter.conf
sed -i "s/port = .*/port = ${PANEL_APP_PORT_HTTP}/" ./data/nitter.conf
sed -i "s/https = .*/https = ${HTTPS}/" ./data/nitter.conf
sed -i "s/httpMaxConnections = .*/httpMaxConnections = ${HTTP_MAX_CONNECTIONS}/" ./data/nitter.conf
sed -i "s/staticDir = \".*\"/staticDir = \"${STATIC_DIR}\"/" ./data/nitter.conf
sed -i "s/listMinutes = .*/listMinutes = ${LIST_MINUTES}/" ./data/nitter.conf
sed -i "s/rssMinutes = .*/rssMinutes = ${RSS_MINUTES}/" ./data/nitter.conf
sed -i "s/redisHost = \".*\"/redisHost = \"${REDIS_HOST}\"/" ./data/nitter.conf
sed -i "s/redisPort = .*/redisPort = ${REDIS_PORT}/" ./data/nitter.conf
sed -i "s/redisPassword = \".*\"/redisPassword = \"${PANEL_REDIS_ROOT_PASSWORD}\"/" ./data/nitter.conf
sed -i "s/redisConnections = .*/redisConnections = ${REDIS_CONNECTIONS}/" ./data/nitter.conf
sed -i "s/redisMaxConnections = .*/redisMaxConnections = ${REDIS_MAX_CONNECTIONS}/" ./data/nitter.conf
sed -i "s/hmacKey = \".*\"/hmacKey = \"${HMAC_KEY}\"/" ./data/nitter.conf
sed -i "s/base64Media = .*/base64Media = ${BASE64_MEDIA}/" ./data/nitter.conf
sed -i "s/enableRSS = .*/enableRSS = ${ENABLE_RSS}/" ./data/nitter.conf
sed -i "s/enableDebug = .*/enableDebug = ${ENABLE_DEBUG}/" ./data/nitter.conf
sed -i "s/proxy = \".*\"/proxy = \"${PROXY}\"/" ./data/nitter.conf
sed -i "s/proxyAuth = \".*\"/proxyAuth = \"${PROXY_AUTH}\"/" ./data/nitter.conf
sed -i "s/tokenCount = .*/tokenCount = ${TOKEN_COUNT}/" ./data/nitter.conf
sed -i "s/theme = \".*\"/theme = \"${THEME}\"/" ./data/nitter.conf
sed -i "s/replaceTwitter = \".*\"/replaceTwitter = \"${REPLACE_TWITTER}\"/" ./data/nitter.conf
sed -i "s/replaceYouTube = \".*\"/replaceYouTube = \"${REPLACE_YOUTUBE}\"/" ./data/nitter.conf
sed -i "s/replaceReddit = \".*\"/replaceReddit = \"${REPLACE_REDDIT}\"/" ./data/nitter.conf
sed -i "s/proxyVideos = .*/proxyVideos = ${PROXY_VIDEOS}/" ./data/nitter.conf
sed -i "s/hlsPlayback = .*/hlsPlayback = ${HLS_PLAYBACK}/" ./data/nitter.conf
sed -i "s/infiniteScroll = .*/infiniteScroll = ${INFINITE_SCROLL}/" ./data/nitter.conf

BIN
apps/nitter/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB