You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GitHub Action中安全配置CockroachDB容器以支持SSL测试

在GitHub Actions中配置带SSL的CockroachDB服务用于全模式测试

CockroachDB官方容器确实没提供太多环境变量,但可以通过自定义启动命令和初始化脚本来配置用户、证书,满足不同SSL模式的测试需求。以下是完整的实现方案:

1. 完整的GitHub Actions配置示例

test-backend:
  runs-on: ubuntu-latest
  steps:
    - name: 拉取代码
      uses: actions/checkout@v4

    # 生成自定义SSL证书(如果用CRDB自动生成的可跳过此步骤)
    - name: 生成SSL证书
      run: |
        mkdir -p ./certs ./ca-key
        # 下载CRDB二进制用于生成证书
        curl -O https://binaries.cockroachdb.com/cockroach-v23.1.10.linux-amd64.tgz
        tar xfz cockroach-v23.1.10.linux-amd64.tgz
        cp cockroach-v23.1.10.linux-amd64/cockroach ./cockroach
        chmod +x ./cockroach

        # 生成CA、节点、客户端证书
        ./cockroach cert create-ca --certs-dir=./certs --ca-key=./ca-key/ca.key
        ./cockroach cert create-node localhost 127.0.0.1 cockroachdb --certs-dir=./certs --ca-key=./ca-key/ca.key
        ./cockroach cert create-client root --certs-dir=./certs --ca-key=./ca-key/ca.key
        ./cockroach cert create-client testuser --certs-dir=./certs --ca-key=./ca-key/ca.key

    # 创建初始化脚本(用于添加用户和数据库)
    - name: 编写初始化SQL
      run: |
        cat > init.sql <<EOF
        CREATE USER testuser WITH PASSWORD 'testpass123';
        CREATE DATABASE testdb;
        GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
        EOF

    # 执行自动化测试(示例)
    - name: 运行测试
      run: |
        # 示例:用不同SSL模式连接测试
        # 1. 验证完整SSL模式(最安全)
        ./cockroach sql --certs-dir=./certs --host=localhost:26257 --user=testuser --database=testdb --sslmode=verify-full -e "SELECT 'SSL verify-full works'"
        # 2. 仅验证CA模式
        ./cockroach sql --certs-dir=./certs --host=localhost:26257 --user=testuser --database=testdb --sslmode=verify-ca -e "SELECT 'SSL verify-ca works'"
        # 3. 强制SSL但不验证证书
        ./cockroach sql --certs-dir=./certs --host=localhost:26257 --user=testuser --database=testdb --sslmode=require -e "SELECT 'SSL require works'"
        # 4. 禁用SSL(仅用于对比测试)
        ./cockroach sql --host=localhost:26257 --user=testuser --database=testdb --sslmode=disable --insecure -e "SELECT 'SSL disable works'"

  services:
    cockroachdb:
      image: cockroachdb/cockroach:v23.1.10
      ports:
        - 26257:26257
      # 带SSL启动单节点,指定证书目录
      command: start-single-node --certs-dir=/certs --listen-addr=0.0.0.0:26257 --init
      # 挂载证书和初始化脚本
      volumes:
        - ./certs:/certs
        - ./init.sql:/docker-entrypoint-initdb.d/init.sql
      # 健康检查:确保服务就绪后再执行测试
      options: >-
        --health-cmd "cockroach sql --certs-dir=/certs --host=cockroachdb -e 'SELECT 1'"
        --health-interval 10s
        --health-timeout 5s
        --health-retries 5

2. 关键配置说明

  • 启动命令:通过command字段传入start-single-node --certs-dir=/certs --init,--init会让CRDB首次启动时自动执行/docker-entrypoint-initdb.d/下的SQL脚本,完成用户和数据库创建。
  • 证书处理:既可以自己生成证书(如上示例),也可以直接使用CRDB自动生成的证书(挂载/cockroach/cockroach-data/certs目录即可)。
  • 健康检查:必须使用带证书的连接命令,避免因服务未就绪导致测试失败。
  • SSL模式覆盖:测试时通过sslmode参数指定不同模式,覆盖所有场景。

3. 简化方案(用CRDB自动生成的证书)

如果不需要自定义证书,可直接用CRDB自动生成的证书,省去证书生成步骤:

services:
  cockroachdb:
    image: cockroachdb/cockroach:v23.1.10
    ports:
      - 26257:26257
    command: start-single-node --listen-addr=0.0.0.0:26257 --init
    volumes:
      - crdb-certs:/cockroach/cockroach-data/certs
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    options: >-
      --health-cmd "cockroach sql --certs-dir=/cockroach/cockroach-data/certs --host=cockroachdb -e 'SELECT 1'"
      --health-interval 10s
      --health-timeout 5s
      --health-retries 5
volumes:
  crdb-certs:

测试时连接命令改为--certs-dir=/path/to/mounted/certs(在Actions步骤中需要先复制容器内的证书到本地)。

内容的提问来源于stack exchange,提问作者Moe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:55:21