Next.js全栈Todo应用开发

Next.js全栈Todo应用开发

课程概览

Next.js全栈Todo应用开发

使用 Docker 快速部署 PostgreSQL

在本节中,我们将学习如何使用 Docker 容器化技术快速部署 PostgreSQL 数据库,这种方法简化了开发环境的搭建,并确保开发与生产环境的一致性。

Docker 基础知识

Docker 是一个开源的容器化平台,允许开发者将应用及其依赖打包到一个可移植的容器中。

Docker 的主要概念:

  • 镜像(Image): 包含程序及其依赖的模板
  • 容器(Container): 镜像的运行实例
  • Dockerfile: 构建镜像的脚本
  • Docker Compose: 定义和运行多容器应用的工具

创建 PostgreSQL Docker 容器

使用以下命令创建和运行 PostgreSQL 容器:

docker run --name postgres-todo -e POSTGRES_PASSWORD=password -e POSTGRES_DB=todo_app -p 5432:5432 -d postgres

参数说明:

  • --name postgres-todo: 容器名称
  • -e POSTGRES_PASSWORD=password: 设置密码
  • -e POSTGRES_DB=todo_app: 创建数据库
  • -p 5432:5432: 端口映射(主机:容器)
  • -d postgres: 使用官方 PostgreSQL 镜像后台运行

验证容器是否正在运行:

docker ps

连接到 PostgreSQL 容器:

docker exec -it postgres-todo psql -U postgres -d todo_app

使用 docker-compose 管理服务

对于多容器应用,使用 Docker Compose 更方便。创建docker-compose.yml文件:

# docker-compose.yml version: "3.8" services: postgres: image: postgres:14 container_name: postgres-todo environment: POSTGRES_PASSWORD: password POSTGRES_USER: todo_user POSTGRES_DB: todo_app ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata:

使用 Docker Compose 启动服务:

docker-compose up -d

停止服务:

docker-compose down

数据持久化与备份策略

Docker 容器是临时的,容器重启或删除后,数据可能会丢失。为了持久化数据,我们使用卷(volumes):

volumes: - pgdata:/var/lib/postgresql/data

备份策略:

  1. 定期数据库备份:

    docker exec postgres-todo pg_dump -U todo_user -d todo_app > backup_$(date +%Y%m%d).sql
  2. 自动化备份脚本:

    #!/bin/bash BACKUP_DIR="/path/to/backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/backup_$TIMESTAMP.sql" docker exec postgres-todo pg_dump -U todo_user -d todo_app > $BACKUP_FILE gzip $BACKUP_FILE # 删除30天前的备份 find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +30 -delete
  3. 恢复备份:

    cat backup_file.sql | docker exec -i postgres-todo psql -U todo_user -d todo_app

将这个脚本设置为 cron 作业,可以实现自动备份:

# 每天凌晨2点运行备份 0 2 * * * /path/to/backup_script.sh

将 Docker 环境集成到 Next.js 开发流程

要将 Docker PostgreSQL 与 Next.js 项目集成,我们可以:

  1. 在项目根目录创建 Docker 配置文件
  2. 更新.env.local文件中的数据库连接信息:
    DATABASE_URL="postgresql://todo_user:password@localhost:5432/todo_app"
    
  3. 添加 npm 脚本以简化 Docker 操作:
    // package.json "scripts": { "db:start": "docker-compose up -d", "db:stop": "docker-compose down", "db:reset": "docker-compose down -v && docker-compose up -d" }

通过使用 Docker,我们可以确保开发环境一致性,简化团队协作,并为未来的部署提供良好的基础。