运维工单系统搭建:零基础部署与排错指南
运维工单系统搭建的核心目标是让内部或客户的故障申报、变更申请有统一入口,并且每一步操作都能被记录和追踪。
如果你手头只有一台云服务器,希望用最短路径跑起一套能用的工单系统,下面的步骤可以直接照做。
准备环境与软件选型
开始之前,请确认服务器满足以下条件:
- 操作系统:Ubuntu 22.04 或 CentOS 7.9 以上,本文命令以 Ubuntu 为例。
- 配置建议:至少 2 核 4G 内存,系统盘 40G 以上。
- 网络:已放行 80、443 端口,如果使用云服务器安全组,需要同时在安全组和系统防火墙中放行。
- 软件依赖:Docker 24 以上、Docker Compose v2、MySQL 8.0(可用容器方式运行)、Nginx(用于反向代理)。
本文选用开源工单系统 osTicket 作为示例,因为它部署简单、依赖少,适合零基础用户快速验证流程。
如果你后续需要更复杂的流程引擎,可以再评估其他方案。
登录服务器后,先更新系统并安装基础工具:
apt update && apt upgrade -y
apt install -y curl wget git vim unzip
安装Docker与Docker Compose
使用官方脚本安装 Docker,避免手动配置源带来的版本问题:
curl -fsSL https://get.docker.com | bash
systemctl enable docker
systemctl start docker
docker --version
如果输出类似 Docker version 24.x.x,说明安装成功。
接着安装 Compose 插件:
apt install -y docker-compose-plugin
docker compose version
看到 Docker Compose version v2.x.x 即可继续。
用Docker Compose启动工单系统
创建一个独立目录,避免文件散落在根目录:
mkdir -p /opt/osticket && cd /opt/osticket
新建 docker-compose.yml 文件,内容如下:
version: '3.8'
services:
db:
image: mysql:8.0
container_name: osticket-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: ChangeThisRootPass
MYSQL_DATABASE: osticket
MYSQL_USER: osticket
MYSQL_PASSWORD: ChangeThisUserPass
volumes:
- ./db_data:/var/lib/mysql
osticket:
image: osticket/osticket:latest
container_name: osticket-app
restart: always
depends_on:
- db
ports:
- "8080:80"
environment:
MYSQL_HOST: db
MYSQL_DATABASE: osticket
MYSQL_USER: osticket
MYSQL_PASSWORD: ChangeThisUserPass
volumes:
- ./ost_data:/var/www/html
注意:请把 ChangeThisRootPass 和 ChangeThisUserPass 替换成你自己的强密码。
保存后启动服务:
docker compose up -d
查看容器状态:
docker compose ps
预期结果是 osticket-db 和 osticket-app 都显示 Up 或 running。
如果 osticket-app 反复重启,用 docker compose logs osticket 查看日志,通常是数据库连接参数写错。
配置Nginx反向代理并验证访问
直接用 IP 加 8080 端口访问不方便,也不安全。
用 Nginx 做反向代理,把 80 端口映射到工单系统。
安装 Nginx:
apt install -y nginx
systemctl enable nginx
新建配置文件 /etc/nginx/sites-available/osticket:
server {
listen 80;
server_name your_domain_or_ip;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
把 your_domain_or_ip 换成你的域名或服务器公网 IP。
启用配置并重载 Nginx:
ln -s /etc/nginx/sites-available/osticket /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
nginx -t 返回 syntax is ok 和 test is successful 才算配置正确。
浏览器访问 http://你的域名或IP,应该能看到 osTicket 的安装向导页面。
按照提示填写数据库地址、库名、用户名和密码,数据库地址填 db(即 Compose 中的服务名),而不是 localhost。
高频报错与避坑要点
502 Bad Gateway
最常见原因是后端容器没起来。
先执行 docker compose ps 确认 osticket-app 状态,再执行 docker compose logs osticket 看具体报错。
如果日志提示连接数据库失败,检查 docker-compose.yml 中的数据库密码是否一致,修改后执行 docker compose down && docker compose up -d 重建。
数据库连接超时
MySQL 8.0 默认认证插件是 caching_sha2_password,部分旧版工单系统镜像可能不兼容。
如果日志明确提示认证插件问题,可以在 MySQL 容器中执行:
ALTER USER 'osticket'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;
但更推荐的做法是选择明确支持 MySQL 8.0 的工单系统版本,避免手动改认证方式带来后续升级隐患。
端口冲突
如果服务器上已有其他 Web 服务占用了 80 端口,Nginx 会启动失败。
用 ss -tlnp | grep :80 查看占用进程,要么停掉冲突服务,要么把工单系统的 Nginx 监听端口改成 8081 等空闲端口。
数据持久化
Compose 文件中已经通过 volumes 把数据库和工单附件挂载到宿主机。
删除容器不会丢数据,但删除 /opt/osticket 目录会导致数据丢失。
建议定期备份 db_data 和 ost_data 两个目录到远程存储。
验证搭建结果
完成以上步骤后,按以下清单逐项确认:
docker compose ps两个容器均为Up状态。- 浏览器访问域名或 IP,能打开工单系统登录页或安装向导。
- 提交一条测试工单,能在后台看到记录,且附件能正常上传。
nginx -t返回成功,且systemctl status nginx为active (running)。- 重启服务器后,执行
docker compose ps确认容器自动启动,无需手动干预。
如果以上全部通过,说明运维工单系统搭建已经完成基础可用状态。
后续可以根据团队需要配置邮件通知、工单分类和 SLA 规则。