使用 Docker Compose 部署 NocoBase:从概念到实践

一、NocoBase 简介

NocoBase 是一个低代码开发平台,旨在帮助开发者和企业快速构建、部署和管理应用程序。它通过可视化的界面和强大的插件系统,让开发者无需编写大量代码即可完成复杂的应用开发。NocoBase 支持多种数据库(如 PostgreSQL、MySQL、MariaDB 等),并提供了丰富的数据建模和管理功能。

二、Docker Compose 部署 NocoBase

(一)准备工作

  1. 安装 Docker 和 Docker Compose
    确保你的系统已经安装了 Docker 和 Docker Compose。如果尚未安装,可以访问 Docker 官网 下载并安装。

  2. 创建项目目录
    在本地创建一个目录,用于存放 NocoBase 的配置文件和数据:

    bash复制

    mkdir my-nocobase && cd my-nocobase

(二)编写 docker-compose.yml 文件

在项目目录中创建一个 docker-compose.yml 文件,并根据以下内容进行配置:

yaml复制

version: '3'

networks:
  nocobase:
    driver: bridge

services:
  app:
    image: registry.cn-shanghai.aliyuncs.com/nocobase/nocobase:latest
    restart: always
    networks:
      - nocobase
    depends_on:
      - mysql
    environment:
      # 应用的密钥,用于生成用户 token 等
      # 如果 APP_KEY 修改了,旧的 token 也会随之失效
      # 可以是任意随机字符串,并确保不对外泄露
      - APP_KEY=your-secret-key
      # 数据库类型,支持 postgres, mysql, mariadb, sqlite
      - DB_DIALECT=mysql
      # 数据库主机,可以替换为已有的数据库服务器 IP
      - DB_HOST=mysql
      # 数据库名
      - DB_DATABASE=nocobase
      # 数据库用户
      - DB_USER=root
      # 数据库密码
      - DB_PASSWORD=nocobase
      # 数据库表名、字段名是否转为 snake case 风格
      - DB_UNDERSCORED=true
      # 时区
      - TZ=Asia/Shanghai
      # 商业插件,使用 service platform 的账号信息
      - NOCOBASE_PKG_USERNAME=
      - NOCOBASE_PKG_PASSWORD=
    volumes:
      - ./storage:/app/nocobase/storage
    ports:
      - '13000:80'
    # init: true

  # 如果使用已有数据库服务,可以不启动 mysql
  mysql:
    image: registry.cn-shanghai.aliyuncs.com/nocobase/mysql:8
    environment:
      MYSQL_DATABASE: nocobase
      MYSQL_USER: nocobase
      MYSQL_PASSWORD: nocobase
      MYSQL_ROOT_PASSWORD: nocobase
    restart: always
    volumes:
      - ./storage/db/mysql:/var/lib/mysql
    networks:
      - nocobase

(三)启动 NocoBase

在项目目录下运行以下命令,启动 NocoBase 服务:

bash复制

# 拉取最新镜像
$ docker-compose pull
# 在后台运行
$ docker-compose up -d
# 查看 app 进程的情况
$ docker-compose logs app
time="2025-02-26T21:39:46+08:00" level=warning msg="D:\\nocobase\\my-project\\docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion"
app-1  | cat: /app/commit_hash.txt: No such file or directory
app-1  | COMMIT_HASH:
app-1  | copying...
app-1  | yarn run v1.22.22
app-1  | $ nocobase create-nginx-conf
app-1  | Done in 0.34s.
app-1  | nginx started
app-1  | yarn run v1.22.22
app-1  | $ nocobase start --quickstart
app-1  | 2025-02-26T21:39:44: PM2 log: Launching in no daemon mode
app-1  | 2025-02-26T21:39:44: PM2 log: App [index:0] starting in -fork mode-
app-1  | 2025-02-26T21:39:44: PM2 log: App [index:0] online
app-1  | Gateway IPC Server running at /root/.nocobase/gateway.sock
app-1  | Gateway HTTP Server running at http://0.0.0.0:13000/
app-1  | {"level":"info","message":"add app main into supervisor","meta":{},"module":"application","submodule":"supervisor","method":"addApp","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"attempt 1/9: Unable to connect to the database: connect ECONNREFUSED 172.25.0.2:3306","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"will retry in 50ms...","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"attempt 2/9: Unable to connect to the database: connect ECONNREFUSED 172.25.0.2:3306","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"will retry in 100ms...","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"attempt 3/9: Unable to connect to the database: connect ECONNREFUSED 172.25.0.2:3306","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"will retry in 200ms...","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"attempt 4/9: Unable to connect to the database: connect ECONNREFUSED 172.25.0.2:3306","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"will retry in 400ms...","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"attempt 5/9: Unable to connect to the database: connect ECONNREFUSED 172.25.0.2:3306","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"will retry in 800ms...","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:47"}
app-1  | {"level":"warn","message":"attempt 6/9: Unable to connect to the database: connect ECONNREFUSED 172.25.0.2:3306","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:48"}
app-1  | {"level":"warn","message":"will retry in 1600ms...","meta":{},"module":"database","submodule":"","method":"auth","app":"main","reqId":"95c80d0f-c234-4f84-a5af-64f77d2c97da","dataSourceKey":"main","timestamp":"2025-02-26 21:39:48"}

启动完成后,打开浏览器,访问 http://localhost:13000,即可看到 NocoBase 的登录界面。

(四)初始化账号

首次访问时,使用默认的管理员账号 admin@nocobase.com 和密码 admin123 登录。

三、应用场景

NocoBase 的应用场景非常广泛,以下是一些典型的使用场景:

  1. 快速搭建企业级应用
    通过可视化的界面,开发者可以快速搭建任务管理系统、客户关系管理系统(CRM)、项目管理系统等。

  2. 数据建模与管理
    使用 NocoBase 的 Data Source Manager 插件,可以轻松创建集合(表格)并定义字段,满足复杂的数据管理需求。

  3. API 管理
    NocoBase 支持自动生成 RESTful API,方便开发者快速构建和管理后端服务。

四、注意事项

  1. 安全性

    • APP_KEY 是用于生成用户 token 的密钥,必须确保其安全性。如果修改了 APP_KEY,旧的 token 将失效。

    • 数据库密码和用户名应避免使用默认值,建议使用复杂的密码。

  2. 版本选择

    • 推荐使用 latest 版本,该版本功能稳定,仅做缺陷修复。

    • 如果需要测试新功能,可以选择 betaalpha 版本,但请注意这些版本可能存在不稳定因素。

  3. 数据持久化
    docker-compose.yml 中,通过挂载本地目录到容器的 /app/nocobase/storage,确保数据持久化。

五、总结

通过 Docker Compose 部署 NocoBase 是一种高效、便捷的方式。它不仅简化了安装过程,还提供了强大的功能支持,适用于各种开发场景。希望本文能帮助你快速上手 NocoBase,开启低代码开发之旅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CarlowZJ

我的文章对你有用的话,可以支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值