NocoDB项目使用Docker Compose与Nginx反向代理部署指南
2025-07-05 01:35:42作者:秋阔奎Evelyn
概述
NocoDB是一个开源项目,可以将任何数据库转换为智能电子表格界面。本文将详细介绍如何使用Docker Compose结合Nginx反向代理来部署NocoDB服务,实现安全、高效的Web访问。
架构设计
该部署方案采用微服务架构,包含以下核心组件:
- NocoDB应用服务:提供主要的电子表格界面功能
- MariaDB数据库:存储NocoDB的元数据和用户数据
- Nginx反向代理:处理HTTP/HTTPS请求并转发到后端服务
- Certbot:用于自动获取和更新SSL证书
详细配置解析
网络配置
networks:
backend:
external: false
frontend:
external: false
- 创建了两个隔离的Docker网络:
backend
和frontend
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
目录中
部署步骤
-
准备环境变量文件: 创建
.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
-
启动服务:
docker-compose up -d
-
获取SSL证书:
docker-compose run --rm certbot
-
配置Nginx: 在
./nginx
目录中创建适当的Nginx配置文件,包含SSL设置和反向代理规则 -
重启Nginx:
docker-compose restart reverse_proxy
安全建议
- 避免在生产环境使用root数据库用户,应创建专用用户并限制权限
- 定期更新JWT密钥和数据库密码
- 配置Nginx的安全头,如CSP、HSTS等
- 设置证书自动续期,可以通过cron任务定期运行Certbot
常见问题解决
-
证书获取失败:
- 确保域名已正确解析到服务器IP
- 检查Nginx是否已正确配置Webroot路径
- 验证防火墙是否开放了80和443端口
-
数据库连接问题:
- 确认数据库容器已完全启动
- 检查环境变量是否正确设置
- 验证网络配置,确保应用服务可以访问数据库网络
-
性能优化:
- 对于高负载环境,考虑增加Nginx和NocoDB的资源限制
- 配置数据库缓存参数
- 启用Nginx的gzip压缩和缓存
通过本文介绍的Docker Compose部署方案,您可以快速搭建一个安全、可靠的NocoDB服务环境,为团队提供强大的数据库电子表格界面功能。