环境
服务器:有公网IP的Win10主机,使用Hyper-V虚拟化Archlinux,腾讯云域名服务
网络环境:两块网卡,一块为内网网段192.168.1.0/24
;一块获取公网IP有IPv6,80、443端口被封禁;使用Zerotier组网,服务不暴露在公网下
部署方案:Docker-compose
详细流程
Win10 DDNS
使用githubrepo:NewFuture/DDNS 的win10 python脚本
下载win10的二进制文件
-
首次运行会在目录下生成
config.json
文件,按文档配置{ "$schema": "https://ddns.newfuture.cc/schema/v2.8.json", "debug": false, "dns": "dnspod", "id": "dnspod_id", "index4": 2, "index6": "regex:2001:*", "ipv4": [ "your_domain" ], "ipv6": [ "your_domain" ], "proxy": null, "token": "DnsPod Token", "ttl": null }
运行
ddns.exe
下载
create-task.bat
于相同目录,以管理员权限运行创建定时任务
RSShub
- RSShub按官方文档使用docker-compose搭建,过程无问题,访问localhost:1200正常
TTRSS
-
设置Nginx之前,ttrss主要按@Spencer Woo的博客搭建
docker-compose.yml
中的域名:只看最终访问服务的URL的域名。有问题访问的时候会提示,问题不大。-
完成之后
docker ps
输出如下:image-20201203095119928 -
此时访问http://domain:181,能正常进入ttrss页面,测试少数派RSS提示
无法从指定的网址下载:; 28 Connection timed out after 15000 milliseconds
问题原因:容器内部的DNS配置无法解析域名,使用
docker exec -it ttrss sh
进入容器的shell可以ping到IP-
解决方法:在
/etc/docker/daemon.json
中加入{ "dns":[ "114.114.114.114", "8.8.8.8" ] }
之后重启docker服务
-
测试订阅自建的RSShub,在Arch虚拟机的http://localhost:1200,订阅微博用户尝试了几个URL如
http://localhost:1200/weibo/user/6047238248/readable=1
宿主机
docker0
网卡IP:http://172.17.0.1:1200/weibo/user/6047238248/readable=1
均提示
无法从指定的网址下载:Requested URL failed extended validation.
- 问题:
- 容器内的
localhost
并不是宿主机因此访问不到 - ttrss订阅默认访问服务器的80端口忽略了后面1200,而主机的80端口由于按教程设置为了重定向,导致ttrss不能获得feed,具体解决方案在后文Nginx部分解决
- 容器内的
- 问题:
Nginx 反代配置
一定要配置rsshub对路径使用80端口对ttrss提供服务,不然会报错。
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
types_hash_max_size 4096;
server_names_hash_bucket_size 128;
upstream ttrssdev {
server 127.0.0.1:181;
keepalive 64;
}
upstream rsshubdev {
server 127.0.0.1:1200;
}
server {
listen 80; # 80端口对内,并未转发至Win10
server_name domain;
location /rsshub/ { # 一定要加,ttrss只访问80端口,不知为何
rewrite /rsshub/(.*) /$1 break;
proxy_pass http://rsshubdev;
};
location /ttrss/ {
rewrite /ttrss/(.*) /$1 break;
proxy_pass http://ttrssdev;
}
location / {
root html;
index index.html index.htm;
}
}
server {
listen 39754 ssl; # 443 端口封禁,使用其他端口
server_name domain;
ssl_certificate 1_xxx_bundle.crt; # 从腾讯云下载证书放到/etc/nginx
ssl_certificate_key 2_xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location /ttrss/ { # 使用路径访问
rewrite /ttrss/(.*) /$1 break;
proxy_redirect https://$http_host https://$http_host/ttrss;
proxy_pass http://ttrssdev;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location / {
root html;
index index.html index.htm;
}
}
}
Win10 防火墙与端口转发配置
端口转发
使用Win10对NAT功能将Hyper-V虚拟机中的端口映射到主机。
netsh interface portproxy add v4tov4 listenport=39754 connectport=39754 connectaddress=172.28.184.105
防火墙开放端口
-
控制面板:arrow_right: Windows Defender 防火墙:arrow_right: 高级设置:arrow_right: 入站规则:arrow_right: 新建规则:arrow_right: 端口:arrow_right:下一步,之后下一步到底即可。
image-20201203171253527 至此就可以用手机开流量访问一下,应该就一切正常了
TTRSS设置中的几个点
-
Mercury 的地址
由于默认的docker-compose没有做mercury的端口映射,使用
docker exec -it mercury sh
进入容器的shell,ifconfig
获取mercury容器的ip,使用ip访问http://172.18.0.2:3000
-
fever的地址
由于之前nginx设置的路由,因此要在后面加上路由