首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在服务器中部署TestHub开源测试平台

在服务器中部署TestHub开源测试平台

作者头像
小博测试成长之路
发布2026-03-22 12:15:13
发布2026-03-22 12:15:13
900
举报
文章被收录于专栏:软件测试学习软件测试学习

最近这段时间,一个名为TestHub的开源测试平台在测试圈子悄然崛起,之前只是在本地运行了下看了下页面效果,页面还是非常漂亮的。今天抽时间研究了一下在服务器上去部署这个项目,当然,大部分都是借助AI去帮我完成的。因为平台技术栈用到了Django + Vue3 ,数据库用的是mysql,因此,需要了解一下怎么去部署这种架构的项目,这里的话采用docker搭建是比较方便的。

主要的思路如下:

1、docker搭建mysql8版本的数据库

2、后端代码用docker镜像启动

3、前端采用node打包构建后,将部署包部署到ngnix镜像中下面是一些dockerfile,可以供参考:

Dockerfile.backend

代码语言:javascript
复制
FROM python:3.12-slim
# 设置环境变量
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# 设置工作目录
WORKDIR /app
# 安装系统依赖
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        default-libmysqlclient-dev \
        build-essential \
        pkg-config \
        gcc \
    && rm -rf /var/lib/apt/lists/*
# 复制requirements文件
COPY requirements.txt .
# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制项目代码
COPY . .
# 收集静态文件
RUN python manage.py collectstatic --noinput
# 暴露端口
EXPOSE 8000
# 启动命令
CMD ["sh", "-c", "python manage.py migrate --no-input && python manage.py runserver 0.0.0.0:8000"]

Dockerfile.frontend

代码语言:javascript
复制
# 多阶段构建 - 前端构建阶段
FROM node:18-alpine AS builder
# 设置工作目录
WORKDIR /app
# 复制前端文件
COPY frontend/ .
# 安装依赖
RUN npm install
# 构建前端应用
RUN npm run build
# 使用Nginx作为生产环境
FROM nginx:alpine
# 复制Nginx配置
COPY nginx.conf /etc/nginx/nginx.conf
# 复制构建好的前端文件
COPY --from=builder /app/dist /usr/share/nginx/html
# 暴露端口
EXPOSE 80
# 启动Nginx
CMD ["nginx", "-g", "daemon off;"]

nginx.conf

代码语言:javascript
复制
events {
    worker_connections 1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    # 日志格式
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log warn;
    # 基本设置
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # Gzip设置
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/json
        application/javascript
        application/xml+rss;
    server {
        listen 80;
        server_name localhost;
        # 前端静态文件
        location / {
            root /usr/share/nginx/html;
            try_files $uri $uri/ /index.html;
            expires 1h;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        }
        # API请求代理到后端
        location /api/ {
            proxy_pass http://testhub-backend:8000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_cache_bypass $http_upgrade;
        }
        # 媒体文件代理到后端
        location /media/ {
            proxy_pass http://testhub-backend:8000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_cache_bypass $http_upgrade;
        }
        # 静态文件代理到后端
        location /static/ {
            proxy_pass http://testhub-backend:8000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_cache_bypass $http_upgrade;
        }
    }
}

run.sh

代码语言:javascript
复制
#!/bin/bash
set -e
BASE_DIR="/testhub"
cd "$BASE_DIR"
# 创建网络
docker network create testhub-net 2>/dev/null || echo "Network already exists"
# 1. 构建后端镜像
echo "Building backend image..."
docker build -f Dockerfile.backend -t testhub-backend:latest .
# 2. 构建前端镜像
echo "Building frontend image..."
docker build -f Dockerfile.frontend -t testhub-frontend:latest .
# 3. 停止并删除旧容器
docker stop testhub-backend testhub-nginx 2>/dev/null || true
docker rm testhub-backend testhub-nginx 2>/dev/null || true
# 4. 启动后端
echo "Starting backend container..."
docker run -d --name testhub-backend \
  --restart=always \
  -p 8000:8000 \
  --network testhub-net \
  -v "$BASE_DIR/.env:/app/.env:ro" \
  -v "$BASE_DIR/media:/app/media" \
  -v "$BASE_DIR/logs:/app/logs" \
  -v "$BASE_DIR/static:/app/static" \
  testhub-backend:latest
# 5. 启动前端(nginx)
echo "Starting frontend container..."
docker run -d \
  --name testhub-nginx \
  --restart=always \
  --network testhub-net \
  -p 80:80 \
  -v /testhub/nginx.conf:/etc/nginx/conf.d/default.conf:ro \
  -v /testhub/media:/app/media:ro \
  -v /testhub/static:/app/static:ro \
  testhub-frontend:latest
echo "TestHub is running -> http://localhost"

反正上面这些脚本都是AI生成的,自己试了一下是可以用的,如果有看不懂的,大家可以自己再问ai,有问题的话还可以找ai反馈一下。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小博测试成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档