guide哥AI智能面试项目部署过程

记录docker部署

1、vmware创建Centos7虚拟机

2、安装 Docker

bash 复制代码
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

先查看 docker 是否安装成功

bash 复制代码
docker -v

如果能看到类似:说明 Docker 正常

bash 复制代码
Docker version 24.x.x

3、安装 Docker Compose:

bash 复制代码
yum install docker-compose-plugin

安装后直接用:

bash 复制代码
docker compose version

4、阿里云百炼 API Key: 确保您已从 阿里云百炼控制台 申请了 API Key。

5、项目克隆

bash 复制代码
git clone https://github.com/Snailclimb/interview-guide.git
cd interview-guide

说明 系统没有安装 Git 。在 CentOS7 上只需要安装 Git 即可使用 git clone

bash 复制代码
yum install -y git

安装完成后验证:

bash 复制代码
git --version

如果 GitHub 访问失败,用国内镜像克隆:

bash 复制代码
git clone https://hub.fastgit.org/Snailclimb/interview-guide.git

如果出现:

Failed to connect to 2a03:2880:f130:83:face:b00c:0:25de: Network is unreachable

这里的地址 2a03:2880:... 是 IPv6 地址

说明你的 CentOS7 正在优先使用 IPv6,但你的服务器没有 IPv6 网络,所以所有 GitHub 相关连接都失败。

解决办法很简单,直接下载压缩包:

bash 复制代码
https://codeload.github.com/Snailclimb/interview-guide/zip/refs/heads/master

服务器下载:

bash 复制代码
curl -L https://codeload.github.com/Snailclimb/interview-guide/zip/refs/heads/master -o interview-guide.zip

解压:

bash 复制代码
yum install -y unzip
unzip interview-guide.zip

6、.env 文件编辑

  • 进入 vi 编辑器后,按 i 键进入插入模式 (Insert Mode)。

  • 找到 AI_BAILIAN_API_KEY= 这一行,将 your_key_here 替换为您的阿里云百炼 API Key。

  • 修改完成后,按 Esc 键退出插入模式。

  • 输入 :wq (write and quit) 并按回车键保存并退出文件。

bash 复制代码
cp .env.example .env
vi .env

7、构建并启动所有服务

bash 复制代码
docker-compose up -d --build
或者docker compose up -d --build
如果有"-"运行不了,就把-去掉,后续的命令同样,因为我安装的是 Docker Compose V2,而不是旧版 docker-compose,从 Docker 20.10 以后官方推荐 V2

此命令执行后,Docker Compose 会自动完成以下操作:

  • 拉取基础镜像: 例如 PostgreSQL、Redis、MinIO 等。

  • 构建自定义镜像: 根据项目 app/Dockerfile 和 frontend/Dockerfile 构建后端和前端应用的 Docker 镜像。

  • 创建并启动容器: 启动所有服务(包括后端、前端、数据库、缓存和对象存储)。

如果出现:

root@localhost interview-guide-master]# docker compose up -d --build [+] Running 4/4 ✘ postgres Error context canceled 15.1s ✘ redis Error Get "https://registry-1.docker.io/v2/": net/http: request canc... 15.1s ✘ minio Error context canceled 15.1s ✘ createbuckets Error context canceled 15.1s Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

本质是 Docker 拉取镜像失败, 说明 服务器访问 Docker Hub 超时,所以这些镜像都拉不下来

那么,配置 Docker 国内镜像加速

创建配置文件:

bash 复制代码
mkdir -p /etc/docker
vi /etc/docker/daemon.json

写入下面内容:

bash 复制代码
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://hub-mirror.c.163.com",
    "https://mirror.ccs.tencentyun.com"
  ]
}

重启 Docker

bash 复制代码
systemctl daemon-reexec
systemctl restart docker

检查配置是否生效:

bash 复制代码
docker info

如果看到:

bash 复制代码
Registry Mirrors:
https://docker.m.daocloud.io/
https://hub-mirror.c.163.com/

说明成功。

重新拉取镜像,回到项目目录:

bash 复制代码
cd interview-guide-master

重新启动:

bash 复制代码
docker compose up -d --build

8、服务访问和验证

由于是在服务器上部署,您需要使用服务器的 IP 地址来访问这些服务。

我的是:http://192.168.88.128/

上传简历一直显示"处理中",文件存储失败: The specified bucket does not exist (Service: S3, Status Code: 404, Request ID: 189D44D779C47800, Extended Request ID: dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8)

  • 说明你的程序在尝试上传文件到存储桶(bucket),但是存储服务找不到这个 bucket。

  • 404 并不是网络问题,而是存储桶名字错了或者桶根本没创建

访问:

bash 复制代码
http://192.168.88.128:9001

登录:

账号: minioadmin

密码: minioadmin

创建 bucket

进入 MinIO 控制台:Create Bucket,叫interview-guide

如果你不确定,可以查:

bash 复制代码
docker exec -it interview-app env | grep BUCKET

下一步是进行简历分析:分析过程中出现错误: 简历分析失败:简历分析失败:I/O error on POST request for "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions": Failed to resolve 'dashscope.aliyuncs.com', couldn't setup transport: [id: 0x9512eb62]

应用容器里的服务无法访问外网 DNS,所以调用 DashScope API 失败。

给 Docker Compose 指定外部 DNS

docker-compose.ymlinterview-app 服务下添加:

bash 复制代码
services:
  interview-app:
    ...
    dns:
      - 8.8.8.8
      - 114.114.114.114

dns 必须在 app: 内缩进正确,然后重启:

bash 复制代码
docker compose down
docker compose up -d

java.net.UnknownHostException: Failed to resolve 'dashscope.aliyuncs.com'

Caused by: io.netty.channel.ChannelException: setsockopt() failed: Protocol not available

这其实不是普通 DNS 问题,而是 Netty 在容器里尝试使用 Linux 的 IPv6 socket 选项失败

CentOS7 + Docker + Java Netty 环境里非常常见。虽然你 curl 能访问,但 Java 的 Netty HTTP 客户端默认优先 IPv6 ,而你的系统 IPv6 没完全支持,所以:

bash 复制代码
setsockopt() failed: Protocol not available

docker-compose.yml 的 app 服务 里加 JVM 参数,让 Java 强制使用 IPv4

找到你这个位置:

bash 复制代码
app:
  build:
    context: .
    dockerfile: app/Dockerfile

然后在 environment 里加一行:

bash 复制代码
JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true

然后重启容器

bash 复制代码
docker compose down
docker compose up -d --build

9、验证服务是否正常运行:

查看 Docker 容器状态:

bash 复制代码
docker compose ps

后端服务日志:

bash 复制代码
docker compose logs -f app

检查前端服务日志 (如果需要):

bash 复制代码
docker compose logs -f frontend
相关推荐
阿里云云原生2 小时前
漫说运维:LoongCollector 性能与稳定性技术大解密
云原生
linux修理工6 小时前
EasyVoice 项目部署与使用指南(开源文字互转声音)
云原生·eureka
lpruoyu6 小时前
【云原生】Helm应用商店
云原生
专注_每天进步一点点7 小时前
serverless的slb
云原生·serverless
http阿拉丁神猫8 小时前
kubernetes知识点汇总19~24
云原生·容器·kubernetes
lpruoyu8 小时前
【云原生】kustomize_常见的部署方式
云原生
sanyii3131319 小时前
k8s工作负载-Deployment的参数与灰度发布
云原生·容器·kubernetes
fajianchen9 小时前
如何设计微服务统一认证中心
微服务·云原生·架构·iam
大鹏说大话9 小时前
云原生深水区:2026 年 Serverless 函数计算落地实战与成本极致优化
云原生·serverless