我正在尝试将 docker 用于 nginx 反向代理和 Radicale caldav 服务器,设置在现有的 openmediavault 服务器之上。经过数小时的研究,我已经设法让它工作(我认为)我使用 docker compose 来创建我的容器。
我希望有经验的用户关注我的设置,以建议我可以改进/更好地保护我的设置。
我在一个只有激进容器的网络中运行反向 nginx 代理容器,这样我就可以运行其他容器(如 jellyfin)而不会暴露它们。
我主要担心的是,在将激进服务器暴露给开放端口之前,我是否已经覆盖了所有基础?我正在使用 certbot --standalone 选项来接收 let 加密证书并使用挂钩来停止容器,检查续订,然后重新启动容器。我主要使用本指南来启动和运行我的设置。
Radicale 服务器使用基本身份验证,但也有自己的用户身份验证来登录,所以我不完全确定客户端如何登录两次以同步日历。
以下是我到目前为止的代码
Docker-compose.yml
version: '3.7'
services:
nginx:
depends_on:
- radicale
image: nginx:latest
container_name: nginx_reverse_proxy
volumes:
- /home/tim/nginx.conf:/etc/nginx/nginx.conf
- /home/tim/radicale/users:/etc/nginx/users
- /home/tim/nginx/error.log:/etc/nginx/error_log.log
- /etc/letsencrypt/:/etc/letsencrypt/
ports:
- 80:80
- 443:443
restart: unless-stopped
networks:
- radicale
radicale:
image: tomsquest/docker-radicale
container_name: radicale
expose:
- "5232"
init: true
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- SETUID
- SETGID
- CHOWN
- KILL
healthcheck:
test: curl -f http://127.0.0.1:5232 || exit 1
interval: 30s
retries: 3
restart: unless-stopped
volumes:
- /home/tim/radicale/data:/data
- /home/tim/radicale/config:/config:ro
networks:
- radicale
networks:
radicale:
nginx.conf
events {
}
http {
error_log /etc/nginx/error_log.log warn;
server {
listen 80 default_server;
server_name myserver.duckdns.org;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name myserver.duckdns.org;
location /radicale/ {
proxy_pass http://radicale:5232/;
proxy_set_header X-Script-Name /radicale;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-User $remote_user;
auth_basic "Radicale - Password Required";
auth_basic_user_file /etc/nginx/users;
}
ssl_certificate /etc/letsencrypt/live/myserver.duckdns.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myserver.duckdns.org/privkey.pem;
}
}
和我激进的配置
[server]
hosts = 0.0.0.0:5232
[storage]
filesystem_folder = /data/collections
[auth]
type = http_x_remote_user
htpasswd_filename = /etc/nginx/users
htpasswd_encryption = md5
我使用 md5 作为密码加密,虽然 bcrypt 更好,因为 bcrypt 不适用于基于 debian 的 nginx 映像,所以将来我可能会使用 apline 映像,这样我就可以使用更安全的 bcrypt。
在 Docker-compose up 之后,一旦我打开端口,我就可以看到反向代理工作,我可以登录到 Radicale 服务器两次,并且所有 http 流量都被转移回 https,但正如预期的那样,我立即对恶意软件产生了兴趣IP,所以为了确定我想确保在我让暴露的服务器松动之前,我尽可能地点缀了所有的 i 并越过了所有的 t。
有什么可以改进的吗?我的设置正确吗?
提前致谢 。