容器化部署 SQLynx 最佳实践:基于Docker的标准化部署方案

SQLynx(原名 SQL Studio)是一款功能强大的跨平台数据库管理工具,支持 MySQL、PostgreSQL、ClickHouse 等多种数据源。将其部署在 Docker 容器中,不仅可以快速获得开箱即用的 Web 服务,还能实现环境一致性、简化运维管理。

本教程将带您通过 Docker Compose 实现 SQLynx 的标准化部署,涵盖从环境准备到日常运维的全流程。

部署准备

在开始之前,请确保您的服务器满足以下条件:

  • 操作系统:Linux (如 Ubuntu 20.04+ / CentOS 7+)、macOS 或 Windows (WSL2)
  • Docker:版本 20.10 及以上
  • Docker Compose:版本 2.0 及以上 (建议使用 docker compose 插件)
  • 端口要求:18888 端口未被占用 (可自定义)

部署步骤

1. 创建目录结构

为了数据持久化和日志管理,首先在宿主机上创建挂载目录:

# 创建统一的应用目录
mkdir -p /data/sqlynx/{data,log}
cd /data/sqlynx

# 设置目录权限
chmod -R 777 /data/sqlynx

2. 编写 docker-compose.yml 文件

在当前目录下创建 docker-compose.yml 文件:

version: '3.8'

services:
  sqlynx:
    image: sqlynx/sql-front:latest
    container_name: sqlynx
    restart: always
    ports:
      - "18888:18888"
    environment:
      # 数据库连接配置(可选,用于存储SQLynx自身的元数据)
      # 如果不配置,默认使用内置H2数据库
      - DATASOURCE_HOST=your-mysql-host
      - DATASOURCE_PORT=3306
      - DATASOURCE_DATABASE=sqlynx_meta
      - DATASOURCE_USERNAME=root
      - DATASOURCE_PASSWORD=your-password
      
      # 时区设置
      - TZ=Asia/Shanghai
    volumes:
      # 持久化数据文件
      - /data/sqlynx/data:/opt/sqlynx/data
      # 持久化日志文件
      - /data/sqlynx/log:/opt/sqlynx/log
    networks:
      - sqlynx-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:18888/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

networks:
  sqlynx-network:
    driver: bridge

3. 使用外部数据库存储元数据(可选但推荐)

如果希望使用 MySQL 作为 SQLynx 的元数据库,可以额外部署一个 MySQL 容器:

version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: sqlynx-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root123456
      MYSQL_DATABASE: sqlynx_meta
      MYSQL_USER: sqlynx
      MYSQL_PASSWORD: sqlynx123
    volumes:
      - /data/sqlynx/mysql:/var/lib/mysql
    networks:
      - sqlynx-network
    command: 
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci

  sqlynx:
    image: sqlynx/sql-front:latest
    container_name: sqlynx
    restart: always
    ports:
      - "18888:18888"
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      - DATASOURCE_HOST=mysql
      - DATASOURCE_PORT=3306
      - DATASOURCE_DATABASE=sqlynx_meta
      - DATASOURCE_USERNAME=sqlynx
      - DATASOURCE_PASSWORD=sqlynx123
      - TZ=Asia/Shanghai
    volumes:
      - /data/sqlynx/data:/opt/sqlynx/data
      - /data/sqlynx/log:/opt/sqlynx/log
    networks:
      - sqlynx-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:18888/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

networks:
  sqlynx-network:
    driver: bridge

4. 启动服务

执行以下命令启动容器:

# 启动服务
docker compose up -d

# 查看容器运行状态
docker compose ps

# 查看日志
docker compose logs -f

5. 验证部署

启动完成后,通过浏览器访问:http://服务器IP:18888

默认登录信息:

  • 用户名:admin
  • 密码:admin

首次登录后请及时修改默认密码。

配置说明

环境变量详解

变量名说明默认值
DATASOURCE_HOST元数据库主机地址空(使用H2)
DATASOURCE_PORT元数据库端口3306
DATASOURCE_DATABASE元数据库名称sqlynx_meta
DATASOURCE_USERNAME元数据库用户名root
DATASOURCE_PASSWORD元数据库密码
TZ时区设置Asia/Shanghai

数据持久化说明

  • /data/sqlynx/data:存放用户数据、缓存文件等
  • /data/sqlynx/log:存放应用运行日志
  • /data/sqlynx/mysql:如果使用独立MySQL,存放MySQL数据文件

日常运维

1. 查看日志

# 实时查看日志
docker compose logs -f

# 查看最近100行日志
docker compose logs --tail=100

2. 备份数据

# 备份应用数据
tar -czf sqlynx-backup-$(date +%Y%m%d).tar.gz /data/sqlynx

# 如果使用独立MySQL,备份数据库
docker exec sqlynx-mysql mysqldump -u root -p sqlynx_meta > backup.sql

3. 升级版本

# 拉取最新镜像
docker compose pull

# 重新创建容器
docker compose up -d --force-recreate

4. 停止与删除

# 停止服务
docker compose down

# 停止服务并删除数据卷(谨慎操作)
docker compose down -v

安全配置建议

  1. 修改默认密码:首次登录后立即修改admin密码
  2. 使用HTTPS:建议前置Nginx反向代理,配置SSL证书
  3. 限制访问IP:在防火墙层面限制18888端口的访问来源
  4. 定期备份:设置定时任务备份数据和元数据库
  5. 最小权限原则:为元数据库创建专用账号,只授予必要权限

常见问题排查

容器无法启动

# 查看详细错误
docker compose logs sqlynx

# 检查端口占用
netstat -tlnp | grep 18888

无法连接外部数据库

  1. 确认数据库账号有远程访问权限
  2. 检查网络连通性:docker exec sqlynx ping mysql
  3. 验证防火墙设置

数据卷权限问题

如果遇到文件写入权限错误:

# 重新设置权限
chmod -R 777 /data/sqlynx

# 查看当前用户ID,确保与容器内用户一致
id

总结

通过 Docker 容器化部署 SQLynx,我们实现了:

  • 标准化的部署流程
  • 数据与配置的持久化
  • 便捷的版本升级
  • 统一的日志管理

这种部署方式特别适合需要快速搭建数据库管理平台、多环境部署一致的场景。根据实际需求,可以选择使用内置H2数据库或外部MySQL作为元数据存储,后者更适合生产环境使用。

暂无评论