1

我正在尝试将 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。

有什么可以改进的吗?我的设置正确吗?

提前致谢 。

4

0 回答 0