温馨提示×

在Debian上部署Swagger需要哪些步骤

小樊
36
2025-11-27 00:42:43
栏目: 智能运维

在 Debian 上部署 Swagger 的可行路径

  • 使用 Node.js + Express + swagger-ui-express 托管文档
  • 使用 Docker 运行 swaggerapi/swagger-ui 镜像
  • Java/Spring Boot 项目中集成 Swagger UI(springfox 或 springdoc-openapi)
  • 使用 Python/Flask 集成 Flasgger 提供文档页面

方案一 Node.js Express 托管 Swagger UI

  • 安装依赖
    • 更新系统并安装 Node.js/npm:sudo apt update && sudo apt install -y nodejs npm
  • 准备文档
    • 新建目录并初始化:mkdir swagger-demo && cd swagger-demo && npm init -y
    • 安装中间件:npm install express swagger-ui-express yamljs
    • 创建规范文件 swagger.yaml(示例): swagger: ‘2.0’ info: title: Sample API description: A sample API version: ‘1.0.0’ host: localhost:3000 basePath: / schemes:
      • http paths: /hello: get: summary: Say hello responses: ‘200’: description: OK
  • 启动服务 app.js
    • const express = require(‘express’); const swaggerUi = require(‘swagger-ui-express’); const YAML = require(‘yamljs’); const app = express(); const swaggerDocument = YAML.load(‘./swagger.yaml’); app.use(‘/api-docs’, swaggerUi.serve, swaggerUi.setup(swaggerDocument)); const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(Server on ${PORT}));
    • 运行:node app.js
  • 访问文档:打开浏览器访问 http://服务器IP:3000/api-docs
  • 生产建议
    • PM2 守护进程:sudo npm i -g pm2 && pm2 start app.js --name swagger-ui
    • Nginx 反向代理(示例):
      • 安装:sudo apt install -y nginx
      • 站点配置 /etc/nginx/sites-available/swagger: server { listen 80; server_name your_domain_or_ip; location /api-docs/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; 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; } }
      • 启用站点并重启:sudo ln -s /etc/nginx/sites-available/swagger /etc/nginx/sites-enabled && sudo nginx -t && sudo systemctl restart nginx

方案二 Docker 快速部署 Swagger UI

  • 安装 Docker:sudo apt update && sudo apt install -y docker.io
  • 运行容器(将本地 8080 映射到容器 8080):
    • docker run -d -p 8080:8080 swaggerapi/swagger-ui
  • 访问文档:打开浏览器访问 http://服务器IP:8080
  • 说明
    • 容器内置 Swagger UI,适合快速演示与隔离部署;如需自定义配置,可通过环境变量或挂载自定义页面资源

方案三 Java Spring Boot 集成 Swagger UI

  • 准备环境:sudo apt update && sudo apt install -y openjdk-11-jdk maven
  • 添加依赖(Maven,示例使用 springfox-boot-starter 3.x)
    • io.springfox springfox-boot-starter 3.0.0
  • 启动应用:./mvnw spring-boot:run 或打包后 java -jar target/app.jar
  • 访问文档:打开浏览器访问 http://服务器IP:8080/swagger-ui.html
  • 提示
    • Springfox 3.x 默认路径为 /swagger-ui.html;如使用 springdoc-openapi(替代方案),常见路径为 /swagger-ui.html/swagger-ui/,以所用版本为准

方案四 Python Flask 集成 Flasgger

  • 安装依赖:sudo apt update && sudo apt install -y python3 python3-pip && pip3 install flask flasgger
  • 最小示例 app.py
    • from flask import Flask from flasgger import Swagger app = Flask(name) swagger_config = { “headers”: [], “specs”: [{ “endpoint”: ‘apispec_1’, “route”: ‘/apispec_1.json’, “rule_filter”: lambda rule: True, “model_filter”: lambda tag: True }], “static_url_path”: “/flasgger_static”, “swagger_ui”: True, “specs_route”: “/swagger/” } Swagger(app, config=swagger_config) @app.route(‘/hello’) def hello(): return {“message”: “Hello, Swagger”} if name == ‘main’: app.run(host=‘0.0.0.0’, port=5000)
  • 访问文档:打开浏览器访问 http://服务器IP:5000/swagger/
  • 说明
    • Flasgger 支持从代码注释或 YAML 生成规范,适合在现有 Flask 项目中快速接入

通用优化与安全建议

  • 启用 HTTPS(Nginx + Let’s Encrypt),对外仅暴露 443,关闭 80 或做重定向
  • 配置 防火墙(如 UFW):sudo ufw allow 80,443/tcp && sudo ufw enable
  • 生产访问控制:为文档路径(如 /api-docs/swagger)增加 Basic Auth/Token 或仅内网开放
  • 规范维护:将 swagger.yaml/openapi.yaml 纳入版本控制,与代码同步更新
  • 静态资源缓存:对 UI 静态资源设置合适的 Cache-Control,避免频繁变更不生效

0