【1Panel】部署go后端应用,设置Mysql和Redis桥接网络

将Gin框架开发的后端接口框架,通过编排部署到1Panel的Docker容器中,需要设置网络桥接,才能进行正确的内网数据通信。

首先在应用商店安装Mysql和Redis应用。

file

查看容器中,Mysql和Redis的网络名,都是1panel-network

file

编排模版docker-compose.yml内容如下:

services:
  # Go 后端服务(服务名称:api,用于容器内网络解析或编排内部依赖)
  api:
    # 构建配置:基于当前目录的 Dockerfile 构建 Go 应用镜像
    build:
      context: .  # 构建上下文目录,指定 Dockerfile 所在的根目录(当前目录)
    # 容器名称:自定义固定容器名,便于后续排查日志、进入容器、网络连接等操作
    container_name: go-api
    # 端口映射:宿主机端口 8081 ↔ 容器内部端口 8081(格式:宿主机端口:容器内部端口)
    # 作用:外部(宿主机、公网)可通过 宿主机IP:8081 访问 Go 应用服务
    ports:
      - "8081:8081"
    # 环境变量配置:为容器内应用提供运行时配置参数
    environment:
      - TZ=Asia/Shanghai  # 配置容器时区为亚洲上海,避免应用日志、时间相关逻辑出现时区偏差
      - AUTO_INIT_DB=true  # 自定义环境变量:启用应用首次部署时的数据库自动初始化功能
    # 数据卷挂载:实现宿主机与容器之间的文件共享,同时持久化应用数据(容器删除后数据不丢失)
    volumes:
      - ./configs:/app/configs  # 宿主机当前目录下的 configs 目录 ↔ 容器内 /app/configs 目录(挂载应用配置文件,便于外部修改配置无需重启镜像)
      - ./logs:/app/logs  # 宿主机当前目录下的 logs 目录 ↔ 容器内 /app/logs 目录(挂载应用日志目录,便于外部查看、收集日志)
      - ./storage:/app/storage  # 宿主机当前目录下的 storage 目录 ↔ 容器内 /app/storage 目录(挂载应用存储目录,持久化上传文件、缓存等数据)
    # 网络配置:指定容器加入的 Docker 网络,用于容器间内网通信
    networks:
      - 1panel-network   # 加入 1panel 对应的桥接网络,实现与 Redis/Mysql 容器的内网互通(核心配置)
    # 重启策略:容器退出时的重启规则,保障应用高可用
    restart: unless-stopped  # 除非手动执行 docker stop 停止容器,否则其他任何情况(容器崩溃、Docker 重启)都会自动重启容器
    # 资源限制,避免 Go 应用占用过多宿主机资源
    deploy:
      resources:
        limits:
          cpus: '2.0'  # 限制最多使用几个 CPU 核心
          memory: 1024M  # 限制最多使用多少内存
    # 健康检查,监控 Go 应用是否正常运行,异常时自动重启
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8081/health"]  # 检测应用健康检查接口(需你的 Go 应用提供 /health 接口)
      interval: 30s  # 每 30 秒检查一次
      timeout: 5s  # 检查超时时间 5 秒
      retries: 3  # 连续 3 次检查失败,判定为应用不健康
      start_period: 60s  # 容器启动后 60 秒再开始首次健康检查(给应用初始化时间)

# 网络声明:定义 Compose 编排中使用的网络
networks:
  1panel-network:
    driver: bridge  # 指定网络驱动为 bridge(Docker 默认桥接网络,适用于容器间内网通信)
    external: true   # 标记该网络为「外部已存在网络」(1panel 已创建的网络),Compose 不会重新创建该网络,仅会复用现有网络

其中的核心配置,就是两处networks的网络名,必须和Mysql和Redis容器所在的网络名保持一致。Mysql和Redis都是在应用商店安装的。

若不添加external配置,Compose 启动时会重新创建一个名为「1panel-network」的全新桥接网络,而非复用 1panel 已存在的同名网络。导致 Go 应用容器会加入 “新创建的 1panel-network”,而 Redis 容器在 “1panel 自带的 1panel-network”,两者仍不在同一网络,无法内网通信。

将 Go 应用容器与 Redis 容器加入「同一个 Docker 网络」(桥接网络,Docker 默认支持)
这是 Docker 容器间内网通信的标准方案。要想在go应用访问其他Docker的数据,就必须将他们加入到同一个网络。否则就会在go应用里出现数据库连接失败的问题。

接下来,需要在Gin项目的配置文件config.yaml里,设置Mysql和Redis的连接地址。

# 应用基础配置
server:
  name: go-admin
  host: 0.0.0.0
  port: 8081
  mode: release        # gin 模式: debug/release/test
  enable_swagger: true   # 是否启用接口文档

# MySQL 配置
database:
  host: 1Panel-mysql-wiip  # Docker 同一网络内会提供「容器名称→容器 IP」的 DNS 解析服务,直接用 MySQL 容器名称作为连接地址
  port: 3306
  name: xfxAdmin
  user: xfxAdmin
  password: "****"
  max_idle: 10
  max_open: 50
  log_level: warn

# Redis 配置
redis:
  host: 1Panel-redis-LrTW  # Docker 同一网络内会提供「容器名称→容器 IP」的 DNS 解析服务,直接用 Redis 容器名称作为连接地址
  port: 6379
  password: "****"
  db: 0

其中,host支持两种配置方式。一种是直接配置容器名称,另一种是配置内网Ipv4地址(需确认容器 IP 不会变动)。配置完成后,重启 Go 应用,即可实现内网直接连接 Mysql/Redis,无需依赖公网 IP。这样的配置,能实现更安全、高效内网通信。

1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【1Panel】部署go后端应用,设置Mysql和Redis桥接网络

企业级大数据智能营销管理系统

源码转让