📜  knex 在 docker compose 中迁移 (1)

📅  最后修改于: 2023-12-03 14:43:40.275000             🧑  作者: Mango

使用 Knex 在 Docker Compose 中迁移

在 Docker Compose 中使用 Knex 迁移允许我们在容器化的开发环境中方便地管理数据库的迁移和回滚。Knex 是一个流行的 Node.js SQL 查询构建器,可以与多种数据库引擎集成。

安装 Knex

首先,确保你已经安装了 Node.js 和 Docker Compose。然后,你可以使用 npm 或者 yarn 来安装 Knex:

$ npm install knex --save
# 或者
$ yarn add knex
创建 Knex 配置文件

在你的项目根目录下创建一个名为 knexfile.js 的文件,并按照你的需要进行配置。例如,如果你要连接到一个 PostgreSQL 数据库,配置文件可能如下所示:

module.exports = {
  development: {
    client: 'pg',
    connection: {
      host: 'localhost',
      port: 5432,
      user: 'postgres',
      password: 'password',
      database: 'myapp'
    },
    migrations: {
      directory: './migrations'
    }
  }
};

确保替换上述配置中的数据库连接信息以适应你的环境。

编写数据库迁移文件

在项目根目录下创建一个名为 migrations 的文件夹,用来存放数据库迁移文件。每个迁移文件都应该包含对数据库进行更改的操作。

以下是一个简单的示例迁移文件 20220101000000_create_users_table.js,用于创建一个名为 users 的表:

exports.up = function(knex) {
  return knex.schema.createTable('users', function(table) {
    table.increments('id');
    table.string('name').notNullable();
    table.string('email').notNullable().unique();
    table.timestamps(false, true);
  });
};

exports.down = function(knex) {
  return knex.schema.dropTable('users');
};
编写 Docker Compose 文件

接下来,创建一个名为 docker-compose.yml 的文件来定义运行容器的配置。下面是一个简单的示例,使用 Postgres 数据库作为后端和 Knex 数据库迁移:

version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - db
    volumes:
      - .:/app
    command: npm start

  db:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: myapp
    ports:
      - "5432:5432"
    volumes:
      - ./data:/var/lib/postgresql/data

请注意,上述示例中的 Dockerfile 是用于构建你的 Node.js 应用程序的,可以根据你的项目进行适当的调整。

运行数据库迁移

为了运行数据库迁移,你需要执行以下命令:

$ docker-compose run app knex migrate:latest

这将在 app 服务容器中运行数据库迁移,并将根据 knexfile.js 中的配置连接到数据库。

数据库回滚

如果需要回滚上一次迁移,请使用以下命令:

$ docker-compose run app knex migrate:rollback

这将在 app 服务容器中回滚最近的数据库迁移。

结论

使用 Knex 和 Docker Compose 可以让我们在容器化的开发环境中轻松管理数据库迁移。通过配置 Knex 和 Docker Compose 文件,我们可以方便地进行迁移和回滚操作,同时保持开发环境的一致性和可重现性。

希望这篇文章对你有帮助!