首页
/ NocoDB项目使用Docker Compose与Nginx反向代理部署指南

NocoDB项目使用Docker Compose与Nginx反向代理部署指南

2025-07-05 01:35:42作者:秋阔奎Evelyn

概述

NocoDB是一个开源项目,可以将任何数据库转换为智能电子表格界面。本文将详细介绍如何使用Docker Compose结合Nginx反向代理来部署NocoDB服务,实现安全、高效的Web访问。

架构设计

该部署方案采用微服务架构,包含以下核心组件:

  1. NocoDB应用服务:提供主要的电子表格界面功能
  2. MariaDB数据库:存储NocoDB的元数据和用户数据
  3. Nginx反向代理:处理HTTP/HTTPS请求并转发到后端服务
  4. Certbot:用于自动获取和更新SSL证书

详细配置解析

网络配置

networks:
  backend:
    external: false
  frontend:
    external: false
  • 创建了两个隔离的Docker网络:backendfrontend
  • backend网络用于数据库和应用服务之间的通信
  • frontend网络用于应用服务和反向代理之间的通信
  • 这种分离提高了安全性,防止数据库直接暴露在外部网络

NocoDB应用服务

nocodb_app:
  environment:
    NC_AUTH_JWT_SECRET: "${NC_AUTH_JWT_SECRET}"
    NC_DB: "mysql2://nocodb_database:3306?u=root&p=${MYSQL_ROOT_PASSWORD}&d=${MYSQL_DATABASE}"
    NC_PUBLIC_URL: "${NC_PUBLIC_URL}"

关键配置说明:

  • NC_AUTH_JWT_SECRET:用于身份验证令牌签名的密钥
  • NC_DB:数据库连接字符串,指向MariaDB容器
  • NC_PUBLIC_URL:NocoDB的公共访问URL
  • 使用nocodb/nocodb:latest镜像获取最新版本
  • 数据持久化通过挂载./nocodb/data卷实现

MariaDB数据库服务

nocodb_database:
  image: "ghcr.io/linuxserver/mariadb:alpine"
  environment:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_DATABASE
    - MYSQL_USER
    - MYSQL_PASSWORD

特点:

  • 使用基于Alpine的MariaDB镜像,体积小巧
  • 通过环境变量配置数据库参数
  • 数据持久化通过挂载./mariadb/data卷实现
  • 配置文件存储在./mariadb/config目录中

Nginx反向代理

reverse_proxy:
  image: "nginx:alpine"
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - "./certbot:/etc/letsencrypt:ro"
    - "./nginx:/etc/nginx"

功能说明:

  • 使用轻量级的Nginx Alpine镜像
  • 暴露80(HTTP)和443(HTTPS)端口
  • SSL证书从./certbot目录读取
  • Nginx配置存储在./nginx目录中

Certbot证书管理

certbot:
  command: "certonly --webroot --webroot-path=/var/www/html --email user@example.domain --agree-tos --no-eff-email -d example.domain,www.example.domain,nocodb.example.domain"

证书获取配置:

  • 使用Webroot验证方式获取证书
  • 需要替换user@example.domain为实际邮箱
  • 域名列表需要替换为实际使用的域名
  • 证书存储在./certbot目录中

部署步骤

  1. 准备环境变量文件: 创建.env文件,设置以下变量:

    NC_AUTH_JWT_SECRET=your_jwt_secret
    MYSQL_ROOT_PASSWORD=your_root_password
    MYSQL_DATABASE=nocodb
    MYSQL_USER=nocodb_user
    MYSQL_PASSWORD=nocodb_password
    NC_PUBLIC_URL=https://nocodb.example.domain
    
  2. 启动服务

    docker-compose up -d
    
  3. 获取SSL证书

    docker-compose run --rm certbot
    
  4. 配置Nginx: 在./nginx目录中创建适当的Nginx配置文件,包含SSL设置和反向代理规则

  5. 重启Nginx

    docker-compose restart reverse_proxy
    

安全建议

  1. 避免在生产环境使用root数据库用户,应创建专用用户并限制权限
  2. 定期更新JWT密钥和数据库密码
  3. 配置Nginx的安全头,如CSP、HSTS等
  4. 设置证书自动续期,可以通过cron任务定期运行Certbot

常见问题解决

  1. 证书获取失败

    • 确保域名已正确解析到服务器IP
    • 检查Nginx是否已正确配置Webroot路径
    • 验证防火墙是否开放了80和443端口
  2. 数据库连接问题

    • 确认数据库容器已完全启动
    • 检查环境变量是否正确设置
    • 验证网络配置,确保应用服务可以访问数据库网络
  3. 性能优化

    • 对于高负载环境,考虑增加Nginx和NocoDB的资源限制
    • 配置数据库缓存参数
    • 启用Nginx的gzip压缩和缓存

通过本文介绍的Docker Compose部署方案,您可以快速搭建一个安全、可靠的NocoDB服务环境,为团队提供强大的数据库电子表格界面功能。