• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2026-02-18 01:16 Aet 隐藏边栏 |   抢沙发  1 
文章评分 1 次,平均分 5.0

云服务器相关

规划

Nginx容器

概述

  1. 用于反向代理

目录结构

主配置

默认站点配置

API 的代理配置

Docker Compose 文件

拉取镜像并启动

验证

域名相关

DNS 解析配置

  1. 域名管理后台(在哪买的域名就去哪配),添加以下 A 记录:
主机记录 记录类型 记录值
@ A 服务器公网 IP
www A 服务器公网 IP
api A 服务器公网 IP
  1. 这样就有了三个可用的域名,全部指向你的服务器
    1. qqtest.com → 主站
    2. www.qqtest.com → 主站
    3. api.qqtest.comAPI 服务
  2. 以后要加新服务,再加一条 A 记录就行
    1. 如果服务器在国内,域名需要完成 ICP 备案才能正常访问

把域名配置到 Nginx

  1. 把域名用到nginx
  2. 修改默认配置

  1. 配置主站

  1. 配置 API 子域名

  1. 检查并重载nginx

Mysql容器

目录结构

  1. data/MySQL 数据持久化(容器删了数据还在)
  2. conf/ — 自定义配置
  3. logs/ — 日志

自定义配置

Docker Compose 文件

  1. 上面的 MYSQL_ROOT_PASSWORDMYSQL_USERMYSQL_PASSWORD 改成自己的密码

拉取镜像并启动

查看启动状态

  1. 看到类似 ready for connections. Version: '8.0.xx' socket: '/var/run/mysqld/mysqld.sock' port: 3306 就说明启动成功了
  2. Ctrl+C 退出日志

验证 MySQL 能正常使用

  1. 输入设置的 MYSQL_ROOT_PASSWORD,进入后测试:

限制远程 root 登录

防火墙限制 3306 端口

  1. 如果你不需要从外部直接连 MySQL(推荐,只让容器内部和宿主机访问)

重新启动

新增服务的流程

  1. 流程

  1. 示例
    1. 比如以后部署了一个后台管理系统跑在 3000 端口
    2. 同时去 DNS 后台加一条 adminA 记录指向服务器 IP 就行
    3. 每个服务一个子域名,互不干扰

日常操作速查

问题

服务器拉 Docker Hub 镜像超时

  1. 配置镜像加速
    1. 第一个是腾讯云内网加速
    2. 后面两个是备用公共加速源

  1. 重启 Docker 使配置生效

  1. 验证加速是否生效
    1. 能看到你配置的镜像地址就说明生效了

  1. 重新拉取 Nginx 并启动

服务器pull代码失败

  1. 服务器上生成 SSH 密钥

  1. 查看并复制公钥

  1. 添加到github
    1. SettingsSSH and GPG KeysNew SSH Key → 粘贴 → Add
  2. 测试连接

阿里云镜像源访问不了

  1. 先测试哪个源能用:

  1. 如果能拉下来,说明之前配的镜像加速源已经生效了,直接把 Dockerfile 里的阿里云前缀去掉就行:

api容器连不上 mysql 容器

  1. 先排查 MySQL 是否正常运行:
    1. 发现在运行

  1. 如果 MySQL 在运行,问题出在网络连接方式上
    1. 如果显示 127.0.0.1:3306,说明 MySQL 只绑定了本机回环地址
    2. 容器内的 host-gateway 走的不是 127.0.0.1,所以连不上

  1. 解决
    1. 让两个容器共用 Docker 网络
    2. 详见两个容器共用 Docker 网络

两个容器共用 Docker 网络

  1. 创建一个共享网络

  1. 修改 MySQLdocker-compose.yml
    1. 添加了networks
    2. 重启mysql

  1. 修改 Go APIdocker-compose.yml
    1. 修改DB_HOST
    2. 添加了networks
    3. 重新构建启动

请求显示502 Bad Gateway

  1. 502 说明 Nginx 收到了请求,但转发到后端失败了
    1. 在服务器可以访问

  1. 2 步返回正常,说明问题在 Nginx 转发到 Go API 这一段
    1. 之前配置里用的是 proxy_pass http://host-gateway:8080
    2. Nginx 容器可能没加入 app-network,也解析不了 host-gateway
  2. 修改 Nginxdocker-compose.yml
    1. 添加了networks

  1. 修改 api.conf,用容器名代替 host-gateway
    1. proxy_pass

  1. 同时修改 Go API 的端口绑定
    1. 既然走 Docker 网络了,Go API 就不需要绑定宿主机端口了

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享