一键启动支持postgresql的nacos

0 阅读3分钟

一键启动支持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源码,下载地址:

pg-schema.sql

测试

登录,然后新建一个配置文件:

2.png

然后来到数据库看看:

 docker exec -it postgresql bash
 psql -U nacos -h localhost
 select * from config_info;

TL;DR

下面简单记录一下这个docker镜像的打包过程和修改的内容:

  1. 编译nacos源码,拿到最新代码的编译结果

  2. 修改nacos-docker项目的部分配置文件,打包镜像

编译nacos

分步脚本:

# 下载源码
git clone --depth 1 https://github.com/alibaba/nacos

# 编译
cd nacos
mvn -Prelease-nacos -DskipTests clean install

编译成功: 5.png

使用nacos-docker打包

看一下打包的jar

6.png

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:

github.com/alibaba/nac…

小结

终于看到官方开始集成对postgresql的支持了,再也不用以第三方插件的形式来支持了。

所以忍不住来提前试用一下,记录一下,希望对你有所帮助!

欢迎关注:

一键启动支持postgresql的nacos

4.png