一键启动支持postgresql的nacos
缘起
提到微服务范式、云原生范式,有个绕不过去的服务基础设施,就是动态服务发现和配置管理,而nacos是这类软件的开源中的佼佼者。
不过即使是现在的最新版本:3.1.1,也只支持mysql和derby,不支持postgresql
这里不想讨论mysql和postgresql的比较,只想说需求:
我的应用使用postgresql作为数据存储,而我只想使用nacos作为配置管理,如此轻量的需求,单独再搭建一个mysql数据库,有点不值(资源、运维)。
所以,从1.0时代,就盼着能支持postgreql。
最近看到官方源码中已经有了完整的postgresql的代码,就想着来试试。
一键启动
已经测试通过了,先看看一键启动的结果:
在一个docker环境中,执行docker compose up -d 完成一键启动!
编排文件:compose.yml
services:
nacos:
image: docker.cnb.cool/yiqiu/docker/nacos:pg3.2
container_name: nacos
depends_on:
postgresql:
condition: service_healthy
environment:
MODE: standalone
SPRING_DATASOURCE_PLATFORM: postgresql
POSTGRESQL_SERVICE_HOST: postgresql
POSTGRESQL_SERVICE_DB_NAME: nacos
POSTGRESQL_SERVICE_PORT: 5432
POSTGRESQL_SERVICE_USER: nacos
POSTGRESQL_SERVICE_PASSWORD: nacos
NACOS_AUTH_IDENTITY_KEY: 2222
NACOS_AUTH_IDENTITY_VALUE: 2xxx
NACOS_AUTH_TOKEN: VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
volumes:
- ./logs:/home/nacos/logs
ports:
- "9080:8080"
- "8848:8848"
- "9848:9848"
restart: always
postgresql:
image: postgres:alpine
restart: always
shm_size: 128mb
container_name: postgresql
environment:
POSTGRES_DB: nacos
POSTGRES_USER: nacos
POSTGRES_PASSWORD: nacos
volumes:
- ./pg-schema.sql:/docker-entrypoint-initdb.d/init.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U nacos"]
interval: 5s
timeout: 5s
retries: 5
start_period: 10s
ports:
- 5432:5432
注意:
pg-schema.sql是postgreql模型的初始化文件,这个文件来源于nacos源码,下载地址:
测试
登录,然后新建一个配置文件:
然后来到数据库看看:
docker exec -it postgresql bash
psql -U nacos -h localhost
select * from config_info;
TL;DR
下面简单记录一下这个docker镜像的打包过程和修改的内容:
-
编译nacos源码,拿到最新代码的编译结果
-
修改nacos-docker项目的部分配置文件,打包镜像
编译nacos
分步脚本:
# 下载源码
git clone --depth 1 https://github.com/alibaba/nacos
# 编译
cd nacos
mvn -Prelease-nacos -DskipTests clean install
编译成功:
使用nacos-docker打包
看一下打包的jar
nacos-docker是社区提供的docker打包nacos的项目,在此项目上修改:
分步脚本
# 下载代码:
git clone https://github.com/tungtepao/nacos-docker
# 打包
docker build -t docker.cnb.cool/yiqiu/docker/nacos:pg3.2 .
这部分修改的详细内容见github: github.com/tungtepao/n…
简单说一下修改的点:
1. dockerfile
修改下载软件版本为本地编译的版本:(部分dockerfile)
COPY nacos-server-${NACOS_VERSION}.tar.gz ./
RUN set -x \
&& tar -xzvf nacos-server-${NACOS_VERSION}.tar.gz -C /home \
&& rm -rf nacos-server-${NACOS_VERSION}.tar.gz /home/nacos/bin/* /home/nacos/conf/*.properties /home/nacos/conf/*.example \
&& ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone
2. 修改启动脚本
这部分主要是由于jdk切换为17要求的增加配置:
docker-startup.sh
JAVA_OPT="${JAVA_OPT} --add-opens=java.base/java.lang=ALL-UNNAMED"
JAVA_OPT="${JAVA_OPT} --add-opens=java.base/java.lang.reflect=ALL-UNNAMED"
JAVA_OPT="${JAVA_OPT} --add-opens=java.base/java.util=ALL-UNNAMED"
3. 配置文件
主要是postgresql相关配置(部分application.properties):
db.url.0=jdbc:postgresql://${POSTGRESQL_SERVICE_HOST}:${POSTGRESQL_SERVICE_PORT:5432}/${POSTGRESQL_SERVICE_DB_NAME}?currentSchema=public&useUnicode=true&tcpKeepAlive=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&reWriteBatchedInserts=true&ApplicationName=nacos_java
db.user.0=${POSTGRESQL_SERVICE_USER}
db.password.0=${POSTGRESQL_SERVICE_PASSWORD}
db.pool.config.driverClassName=org.postgresql.Driver
特别说明,还增加了一个配置:
server.tomcat.max-http-form-post-size=20971520
这个配置要是最新代码为了解决一个bug添加的,感兴趣可以看源码的issue:
小结
终于看到官方开始集成对postgresql的支持了,再也不用以第三方插件的形式来支持了。
所以忍不住来提前试用一下,记录一下,希望对你有所帮助!
欢迎关注: