我正在尝试做的事情
在 AWS EC2 实例上托管Taskwarrior 服务器,并通过子域(例如 task.mydomain.dev)连接到它。
Taskwarrior 服务器在端口 53589 上运行。
涉及技术
- AWS EC2:服务器(Ubuntu)
- Caddy Server:用于为 EC2 实例上的每个应用程序创建反向代理
- Docker (docker-compose):用于启动应用程序,包括 Caddy 服务器和 Taskwarrior 服务器
- Cloudflare:DNS 托管和 SSL 证书
我是如何尝试做到这一点的
我有:
- 在实例的安全策略中允许端口 22、80、443 和 53589 的传入连接
- 给 EC2 实例一个弹性 IP
- 设置 DNS 记录(task.mydomain.dev 是 CNAME'd 到 mydomain.dev,mydomain.dev 有一个指向弹性 IP 的 A 记录)
- 使用 Caddy 服务器在端口 53589 上为 task.mydomain.dev 设置反向代理
- 按照说明设置 Taskwarrior 服务器(即创建证书;创建用户和组织;使用证书、身份验证和服务器信息更新 taskrc 文件;等)
配置文件
/opt/task/docker-compose.yml
version: '3.3'
services:
taskd:
image: connectical/taskd
restart: always
volumes:
- /opt/task:/var/taskd
ports:
- 53589:53589
networks:
default:
external:
name: caddy_net
/opt/caddy/docker-compose.yml
version: "3.4"
services:
caddy:
build:
context: .
dockerfile: Dockerfile
container_name: caddy
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./config:/config
- ./data:/data
- ./Caddyfile:/etc/caddy/Caddyfile
networks:
default:
external:
name: caddy_net
/选择/球童/球童文件:
task.mydomain.dev:53589 {
reverse_proxy taskd:53589
tls {
dns cloudflare myCloudflareAPIkey
}
}
实际发生了什么
- 我无法连接到 task.mydomain.dev 上的端口 53589
- 运行
telnet task.mydomain.dev 53589
超时
- 运行
- 我无法连接到 mydomain.dev 上的端口 53589
- 运行
telnet mydomain.dev 53589
超时
- 运行
- 我可以通过 ssh 连接到 EC2 实例中的 127.0.0.1 端口 53589
telnet 127.0.0.1 53589
从 EC2 实例运行成功连接
- 我能够连接到 task.mydomain.dev 上的端口 80,但无法与 Taskwarrior 服务器同步
- 运行
task sync init
返回:c: 1 Received record packet of unknown type 72 Syncing with task.mydomain.dev:80 Cannot perform this action while handshake is in progress. Sync failed. Could not connect to the Taskserver.
- 运行
- 我能够连接到 task.mydomain.dev 上的端口 443,但无法与 Taskwarrior 服务器同步
- 运行
task sync init
返回:Syncing with task.mydomain.dev:443 Malformed message Sync failed. Could not connect to the Taskserver.
- 运行
我试图解决的问题
- 将 Caddyfile 的第一行更改为:
task.mydomain.dev {
和task.mydomain.dev:80 {
,然后连接到端口 80- 运行
task sync init
返回:c: 1 Received record packet of unknown type 72 Syncing with task.mydomain.dev:80 Cannot perform this action while handshake is in progress. Sync failed. Could not connect to the Taskserver.
- 运行
task.mydomain.dev {
和task.mydomain.dev:443 {
,然后连接到端口 443- 运行
task sync init
返回:Syncing with task.mydomain.dev:443 Malformed message Sync failed. Could not connect to the Taskserver.
- 运行
- 将 Caddyfile 的第二行更改为
reverse_proxy 127.0.0.1:53589
,reverse_proxy 0.0.0.0:53589
和reverse_proxy localhost:53589
. 发生同样的错误。 - 删除子域的 CNAME 记录。出现同样的错误
有谁知道发生了什么或者可以指出我正确的方向?