Debian环境下Swagger容器化部署实践指南
在Debian系统中,通过Docker容器化部署Swagger(如Swagger UI、Swagger Editor),可实现API文档的快速交付、环境一致性及便捷管理。以下是具体应用场景与操作步骤:
首先在Debian系统上安装Docker,确保后续能运行容器化服务。执行以下命令:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
上述步骤完成了Docker的安装与启动。
使用Docker Hub上的官方swaggerapi/swagger-ui镜像,快速启动Swagger UI容器。将本地的Swagger规范文件(如swagger.json或swagger.yaml)挂载到容器中,实现文档的自定义:
# 拉取官方镜像
docker pull swaggerapi/swagger-ui
# 运行容器(挂载本地Swagger文件到容器内指定路径)
docker run -d -p 8080:80 -v /path/to/your/swagger.json:/usr/src/app/swagger.json swaggerapi/swagger-ui
访问http://<Debian主机IP>:8080/swagger-ui/index.html,即可看到基于本地规范的Swagger UI界面。
若需要更灵活的配置(如修改Swagger UI样式、添加认证),可通过编写Dockerfile构建专属镜像。
创建swagger.yaml(或swagger.json),定义API接口信息。例如:
swagger: '2.0'
info:
title: Sample API
description: A demo API for Swagger containerization
version: '1.0.0'
paths:
/hello:
get:
summary: Returns a greeting
responses:
'200':
description: A successful response
schema:
type: string
创建Dockerfile,基于官方Node.js镜像构建(支持Swagger UI Express):
# 基础镜像(使用Node.js 14)
FROM node:14
# 设置工作目录
WORKDIR /usr/src/app
# 复制Swagger配置文件
COPY swagger.yaml .
# 安装Swagger UI Express依赖
RUN npm install swagger-ui-express yamljs express
# 复制服务器代码(见下一步)
COPY server.js .
# 暴露端口
EXPOSE 3000
# 启动服务器
CMD ["node", "server.js"]
创建server.js,用于提供Swagger UI服务:
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const YAML = require('yamljs');
// 加载Swagger配置文件
const swaggerDocument = YAML.load('./swagger.yaml');
const app = express();
// 配置Swagger UI中间件(挂载到/api-docs路径)
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Swagger UI running on port ${PORT}`);
});
在Dockerfile所在目录执行以下命令:
# 构建镜像(标签为swagger-ui-custom)
docker build -t swagger-ui-custom .
# 运行容器(映射端口3000)
docker run -d -p 3000:3000 swagger-ui-custom
访问http://<Debian主机IP>:3000/api-docs,即可看到自定义的Swagger UI界面。
若需要部署多个Swagger UI实例(如高可用、多环境),可使用Docker Compose管理多个容器。
在Debian系统上安装Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
创建docker-compose.yml,定义多个Swagger UI服务:
version: '3'
services:
swagger-ui-1:
image: swaggerapi/swagger-ui
ports:
- "8081:80"
volumes:
- ./swagger-1.json:/usr/src/app/swagger.json
swagger-ui-2:
image: swaggerapi/swagger-ui
ports:
- "8082:80"
volumes:
- ./swagger-2.json:/usr/src/app/swagger.json
上述配置启动了两个Swagger UI实例,分别映射到主机的8081和8082端口,并挂载不同的Swagger配置文件。
执行以下命令启动所有服务:
docker-compose up -d
访问http://<Debian主机IP>:8081和http://<Debian主机IP>:8082,即可分别查看两个Swagger UI实例。
sudo或添加用户到docker组)。--network参数或Docker Compose的networks配置)。--tls参数配置)。swaggerapi/swagger-ui:v3.52.5),避免因版本差异导致功能异常。