成都淮州新城建设投资有限公司网站windows7怎么做网站服务器
成都淮州新城建设投资有限公司网站,windows7怎么做网站服务器,a站,南京专业网站设计哪个品牌SmartWaterServer数据库配置全流程#xff1a;从Docker安装到RuoYi-Vue-Plus项目集成
最近在搭建一个基于RuoYi-Vue-Plus框架的智慧水务管理后台#xff0c;也就是SmartWaterServer项目。我发现很多开发者#xff0c;尤其是刚接触微服务架构和容器化部署的朋友#xff0c;在…SmartWaterServer数据库配置全流程从Docker安装到RuoYi-Vue-Plus项目集成最近在搭建一个基于RuoYi-Vue-Plus框架的智慧水务管理后台也就是SmartWaterServer项目。我发现很多开发者尤其是刚接触微服务架构和容器化部署的朋友在配置开发环境时总会遇到各种“坑”——数据库连不上、容器权限问题、配置文件对不上号折腾半天项目还是跑不起来。这篇文章我就把自己从零开始用Docker搭建Redis和PostgreSQLPG数据库并成功集成到RuoYi-Vue-Plus项目中的完整流程和踩过的“坑”梳理出来。整个过程不仅仅是命令的堆砌更会深入解释每一步背后的逻辑以及如何根据实际项目需求比如数据持久化、网络配置、安全策略进行调整。无论你是想快速搭建一个可用的开发环境还是希望深入理解Docker容器与Spring Boot项目集成的细节相信都能在这里找到答案。1. 环境准备与Docker基础在开始部署具体的数据库服务之前确保你的本地开发环境已经就绪是第一步。对于SmartWaterServer这类现代Java项目一个稳定、干净的Docker环境是高效开发的基石。我个人的开发机是macOS但下面的步骤在Windows使用WSL2和主流Linux发行版上同样适用。首先你需要安装Docker Desktop或Docker Engine。我强烈推荐使用Docker Desktop因为它集成了图形化管理界面和CLI工具对于管理镜像、容器和卷非常方便。安装完成后打开终端运行以下命令验证安装是否成功docker --version docker-compose --version你应该能看到类似Docker version 24.0.7, build afdd53b的输出。接下来为了后续操作顺畅建议将当前用户加入docker用户组避免每次执行docker命令都需要sudo。# Linux/macOS下将当前用户加入docker组 sudo usermod -aG docker $USER # 执行后需要退出当前终端并重新登录或者执行 newgrp docker 使更改生效注意在Windows上Docker Desktop默认已经配置好权限无需此步骤。一个常见的误区是直接拉取最新版本的镜像而不指定标签。虽然latest标签很方便但在生产环境或需要长期稳定的开发环境中指定具体版本号是更稳妥的做法可以避免因镜像版本自动升级带来的不兼容问题。例如我们后续会使用postgres:15而非postgres:latest。2. 部署与配置Redis服务Redis在SmartWaterServer项目中通常用作缓存和会话存储能显著提升应用响应速度。使用Docker部署Redis只需一条命令但要让其真正适用于生产级开发环境还需要考虑持久化、密码安全和网络配置。首先拉取官方Redis镜像。我选择的是稳定版本而非latest标签。docker pull redis:7.2-alpine这里我选择了alpine变体因为它基于轻量级的Alpine Linux镜像体积更小安全性也相对更高。接下来是启动容器的关键命令。很多教程只给出最简单的docker run命令但那样数据无法持久化容器重启后所有缓存数据都会丢失。下面是我优化后的启动命令docker run -d \ --name smartwater-redis \ -p 6379:6379 \ -v redis_data:/data \ -e REDIS_PASSWORDYourStrongPassword123! \ redis:7.2-alpine \ redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes让我拆解一下这个命令的每个部分-d: 让容器在后台运行。--name smartwater-redis: 为容器起一个有意义的名字便于管理。-p 6379:6379: 将宿主机的6379端口映射到容器的6379端口。这样你的本地应用如IDEA中运行的Spring Boot项目才能连接到这个Redis服务。-v redis_data:/data: 这是实现数据持久化的核心。它创建了一个名为redis_data的Docker卷Volume并挂载到容器内的/data目录。Redis的持久化文件RDB或AOF将存储在这里即使容器被删除数据依然保留在卷中。-e REDIS_PASSWORD...: 设置环境变量用于传递Redis密码。务必使用强密码不要使用简单的“123”。redis-server --requirepass ... --appendonly yes: 这是容器的启动命令。--requirepass设置访问密码--appendonly yes启用AOF持久化模式确保每条写命令都记录数据安全性更高。启动后你可以用以下命令验证Redis是否正常运行# 查看容器运行状态 docker ps | grep smartwater-redis # 进入容器内部使用redis-cli测试连接 docker exec -it smartwater-redis redis-cli -a YourStrongPassword123!在redis-cli中输入ping如果返回PONG说明服务运行正常。对于RuoYi-Vue-Plus项目你需要在项目的application.yml或application-dev.yml配置文件中更新Redis的连接信息spring: redis: host: localhost # 如果Docker运行在本地 port: 6379 password: YourStrongPassword123! database: 0 lettuce: pool: max-active: 8 max-wait: -1ms max-idle: 8 min-idle: 0配置完成后启动你的SmartWaterServer项目检查日志中是否有Redis连接成功的提示。3. 部署与深度配置PostgreSQL数据库PostgreSQL将作为SmartWaterServer的主数据库。相比RedisPG的配置要复杂一些尤其是远程连接和权限管理是新手最容易出错的地方。3.1 拉取镜像与首次启动我们选择PostgreSQL 15版本它在性能和功能上都有不错的平衡。docker pull postgres:15-alpine同样我们使用alpine版本以减小体积。启动PG容器时需要配置几个关键环境变量docker run -d \ --name smartwater-postgres \ -e POSTGRES_USERsmartwater_admin \ -e POSTGRES_PASSWORDAComplexPgPassword!456 \ -e POSTGRES_DBsmartwater_db \ -p 5432:5432 \ -v pg_data:/var/lib/postgresql/data \ postgres:15-alpine这里我特意没有使用root作为用户名而是创建了一个专属的应用数据库用户smartwater_admin这是更符合安全规范的做法。POSTGRES_DB环境变量指定了容器启动时创建的默认数据库名。3.2 解决远程连接问题深入pg_hba.conf按照上面的命令启动后你可能会发现在Docker宿主机上比如用psql命令行工具可以连接但从IDEA、DBeaver或者运行在另一个Docker容器中的应用程序却无法连接。错误信息通常是“Connection refused”或“no pg_hba.conf entry”。问题的根源在于PostgreSQL默认的客户端认证配置文件pg_hba.conf。这个文件控制了哪些主机、用什么方法、可以连接哪些数据库。默认的Docker镜像配置通常只允许本地容器内连接。要解决这个问题我们需要修改容器内的pg_hba.conf文件。有几种方法方法一启动时挂载自定义配置文件推荐这是最干净、可复现的方式。首先在宿主机上创建一个pg_hba.conf文件内容如下# TYPE DATABASE USER ADDRESS METHOD local all all trust host all all 127.0.0.1/32 md5 host all all ::1/128 md5 # 允许所有IPv4地址通过密码连接谨慎用于生产环境 host all all 0.0.0.0/0 md5 # 允许所有IPv6地址通过密码连接 host all all ::/0 md5然后在启动容器时将这个文件挂载进去并覆盖默认配置。同时需要修改PostgreSQL的主配置文件postgresql.conf监听所有地址。# 首先停止并删除之前创建的容器如果存在 docker stop smartwater-postgres docker rm smartwater-postgres # 创建宿主机目录存放配置和数据 mkdir -p ~/docker-data/postgres/{conf,data} # 将上面创建的pg_hba.conf文件放入 ~/docker-data/postgres/conf/ 目录 # 创建一个postgresql.conf文件添加一行listen_addresses * echo listen_addresses * ~/docker-data/postgres/conf/postgresql.conf # 重新启动容器挂载配置和数据目录 docker run -d \ --name smartwater-postgres \ -e POSTGRES_USERsmartwater_admin \ -e POSTGRES_PASSWORDAComplexPgPassword!456 \ -e POSTGRES_DBsmartwater_db \ -p 5432:5432 \ -v ~/docker-data/postgres/data:/var/lib/postgresql/data \ -v ~/docker-data/postgres/conf:/etc/postgresql/ \ postgres:15-alpine \ -c config_file/etc/postgresql/postgresql.conf \ -c hba_file/etc/postgresql/pg_hba.conf这个命令通过-c参数在启动时指定了配置文件的路径。方法二进入容器内部修改如果不方便挂载配置文件也可以直接进入运行中的容器进行修改。# 1. 进入容器 docker exec -it smartwater-postgres bash # 2. 安装编辑器如vimalpine镜像用apk apk update apk add vim # 3. 编辑pg_hba.conf通常路径如下 vi /var/lib/postgresql/data/pg_hba.conf # 4. 在文件末尾添加一行 host all all 0.0.0.0/0 md5 # 5. 编辑postgresql.conf修改监听地址 vi /var/lib/postgresql/data/postgresql.conf # 找到 #listen_addresses localhost 这一行取消注释并改为 listen_addresses * # 6. 退出容器重启PostgreSQL容器使配置生效 exit docker restart smartwater-postgres3.3 连接测试与RuoYi-Vue-Plus配置修改配置并重启容器后就可以从任何能访问宿主机IP的客户端进行连接测试了。使用你喜欢的数据库管理工具如DBeaver、pgAdmin或者直接用psql命令行# 在宿主机上使用容器内的psql客户端 docker exec -it smartwater-postgres psql -U smartwater_admin -d smartwater_db # 或者从宿主机网络直接连接 psql -h localhost -p 5432 -U smartwater_admin -d smartwater_db连接成功后就可以为RuoYi-Vue-Plus项目创建所需的表了。通常你需要运行项目SQL目录下的初始化脚本。接下来在项目的application.yml中配置数据源spring: datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/smartwater_db?currentSchemapublicstringtypeunspecified username: smartwater_admin password: AComplexPgPassword!456 hikari: connection-timeout: 30000 maximum-pool-size: 20注意JDBC URL中的参数currentSchemapublic可以指定默认模式stringtypeunspecified能更好地处理某些数据类型。4. 使用Docker Compose编排多服务到目前为止我们分别启动了Redis和PostgreSQL两个容器。在实际开发中更优雅的方式是使用Docker Compose来定义和运行多容器的应用。只需一个docker-compose.yml文件就能一键启动所有依赖服务并且能轻松定义网络、卷和依赖关系。创建一个名为docker-compose.yml的文件内容如下version: 3.8 services: postgres: image: postgres:15-alpine container_name: smartwater-postgres environment: POSTGRES_USER: smartwater_admin POSTGRES_PASSWORD: AComplexPgPassword!456 POSTGRES_DB: smartwater_db ports: - 5432:5432 volumes: - postgres_data:/var/lib/postgresql/data - ./postgres/conf:/etc/postgresql/ # 挂载自定义配置目录 networks: - smartwater-network command: -c config_file/etc/postgresql/postgresql.conf -c hba_file/etc/postgresql/pg_hba.conf healthcheck: test: [CMD-SHELL, pg_isready -U smartwater_admin] interval: 10s timeout: 5s retries: 5 redis: image: redis:7.2-alpine container_name: smartwater-redis command: redis-server --requirepass YourStrongPassword123! --appendonly yes ports: - 6379:6379 volumes: - redis_data:/data networks: - smartwater-network environment: REDIS_PASSWORD: YourStrongPassword123! healthcheck: test: [CMD, redis-cli, --raw, incr, ping] interval: 10s timeout: 5s retries: 5 volumes: postgres_data: redis_data: networks: smartwater-network: driver: bridge这个配置文件做了几件重要的事情服务定义清晰定义了postgres和redis两个服务。数据持久化使用命名卷postgres_data,redis_data来保存数据即使使用docker-compose down数据也不会丢失。自定义配置通过volumes将本地的./postgres/conf目录挂载到容器内覆盖默认的PG配置。自定义网络创建了一个名为smartwater-network的桥接网络。两个服务加入同一网络后可以通过服务名如postgres、redis直接相互访问这对于未来在Docker内部署应用容器非常有用。健康检查为每个服务定义了健康检查。Docker会定期执行这些命令确保服务真正可用这在多容器依赖启动顺序时很有帮助。在包含docker-compose.yml文件的目录下执行以下命令# 启动所有服务后台运行 docker-compose up -d # 查看服务运行状态和日志 docker-compose ps docker-compose logs -f postgres # 查看特定服务的日志 # 停止并移除所有容器、网络但保留数据卷 docker-compose down # 停止并移除所有容器、网络同时删除数据卷谨慎使用会丢失所有数据 docker-compose down -v使用Docker Compose后你的团队新成员只需要克隆代码库运行docker-compose up -d就能立刻获得一个完全一致的数据库开发环境极大提升了协作效率。5. 将数据库服务集成到RuoYi-Vue-Plus开发工作流环境搭建好了最终目的是为了让SmartWaterServer项目能顺畅运行。这里有几个集成时的关键点和技巧。连接配置的灵活性在application.yml中我们可以利用Spring Boot的多环境配置特性。当使用Docker Compose时数据库服务名就是主机名。# application-docker.yml spring: datasource: url: jdbc:postgresql://postgres:5432/smartwater_db # 注意主机名是服务名‘postgres’ username: smartwater_admin password: AComplexPgPassword!456 redis: host: redis # 注意主机名是服务名‘redis’ port: 6379 password: YourStrongPassword123!这样如果你的Spring Boot应用也作为Docker容器运行在同一个smartwater-network网络中它就能直接通过服务名访问数据库。初始化数据库 schemaRuoYi-Vue-Plus项目通常自带SQL初始化脚本。你有两种方式执行它手动执行用数据库工具连接PG直接运行sql文件。自动化推荐利用Spring Boot的schema.sql和data.sql机制或者使用Flyway/Liquibase这样的数据库迁移工具。将初始化SQL放在项目的src/main/resources/db/migration目录下应用启动时会自动执行。调试与问题排查集成过程中难免出现问题。掌握几个关键的排查命令能节省大量时间。# 1. 查看容器日志这是第一手信息 docker logs -f smartwater-postgres docker logs -f smartwater-redis # 2. 进入容器内部进行检查 docker exec -it smartwater-postgres bash # 在容器内可以检查进程、查看配置文件、测试连接等 ps aux | grep postgres cat /var/lib/postgresql/data/pg_hba.conf | grep host # 3. 检查网络连通性从应用容器内部 # 假设你的应用容器名为smartwater-app docker exec -it smartwater-app bash # 安装网络工具如ping, telnet apt-get update apt-get install -y iputils-ping telnet ping postgres # 测试是否能解析服务名 telnet postgres 5432 # 测试端口是否可达性能与资源考量在开发机上你可能需要限制容器资源避免它们占用过多CPU和内存影响主机性能。可以在docker-compose.yml中为每个服务添加资源限制services: postgres: # ... 其他配置 ... deploy: resources: limits: cpus: 1.0 memory: 1G reservations: memory: 512M最后记得将除密码外的所有Docker相关配置如docker-compose.yml、自定义的pg_hba.conf纳入项目的版本控制系统如Git。而密码等敏感信息务必通过环境变量或.env文件并在.gitignore中忽略来管理绝对不要硬编码在配置文件中。这样整个SmartWaterServer项目的开发环境就实现了容器化、可复现和团队共享你可以把精力更多地集中在业务逻辑的开发上了。