CentOS環境下Swagger容器化部署方案
在CentOS系統上部署Swagger容器前,需先安裝Docker(容器化運行環境)。執行以下命令完成安裝:
# 更新系統軟件包
sudo yum update -y
# 安裝Docker
sudo yum install -y docker
# 啟動Docker服務并設置開機自啟
sudo systemctl start docker
sudo systemctl enable docker
通過docker --version
命令驗證Docker是否安裝成功。
Docker Hub提供了官方維護的Swagger UI鏡像(如swaggerapi/swagger-ui-express
),可直接拉取使用:
docker pull swaggerapi/swagger-ui-express
通過docker run
命令啟動容器,將容器的8080端口映射到主機的8080端口(可根據需求調整):
docker run -d --name swagger-ui -p 8080:8080 swaggerapi/swagger-ui-express
-d
:后臺運行容器;--name swagger-ui
:指定容器名稱為swagger-ui
;-p 8080:8080
:主機端口8080映射到容器端口8080。在瀏覽器中輸入http://<CentOS服務器IP>:8080
,即可看到Swagger UI界面。默認情況下,Swagger UI會嘗試加載遠程API文檔(如petstore.swagger.io
),后續可替換為自定義文檔。
若需要修改Swagger UI配置(如更換文檔路徑、添加認證、調整UI主題),可通過自定義Dockerfile構建鏡像。
創建一個工作目錄(如swagger-ui-custom
),并下載Swagger UI靜態文件(可從GitHub倉庫獲?。?/p>
mkdir swagger-ui-custom
cd swagger-ui-custom
# 下載Swagger UI靜態文件(以v3.50.0為例)
wget https://github.com/swagger-api/swagger-ui/archive/refs/tags/v3.50.0.tar.gz
tar -xvf v3.50.0.tar.gz
mv swagger-ui-3.50.0/dist swagger-ui-dist
將自定義的swagger.json
(或swagger.yaml
)文件放入swagger-ui-dist
目錄(用于定義API規范)。
在工作目錄下創建Dockerfile
,內容如下:
# 使用Node.js 14基礎鏡像(兼容Swagger UI 3.x及以上版本)
FROM node:14
# 設置工作目錄
WORKDIR /usr/src/app
# 復制Swagger UI靜態文件到容器
COPY ./swagger-ui-dist /usr/src/app/swagger-ui-dist
# 復制自定義Swagger配置文件(若有)
COPY ./swagger.json /usr/src/app/swagger.json
# 安裝Express和Swagger UI Express(用于托管靜態文件)
RUN npm install express swagger-ui-express
# 暴露端口
EXPOSE 8080
# 啟動Swagger UI服務
CMD ["node", "-e", "const express = require('express'); const swaggerUi = require('swagger-ui-express'); const app = express(); app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(require('./swagger.json'))); app.listen(8080, () => console.log('Swagger UI running on port 8080'));"]
COPY ./swagger.json /usr/src/app/swagger.json
:將自定義的Swagger配置文件復制到容器;CMD
:通過Node.js腳本啟動Swagger UI,并指定API文檔路徑為/api-docs
。# 構建鏡像(標簽為swagger-ui-custom)
docker build -t swagger-ui-custom .
# 運行容器(映射端口8080,掛載自定義配置目錄)
docker run -d --name swagger-ui-custom -p 8080:8080 -v /path/to/custom/swagger:/usr/src/app/swagger-ui-dist swagger-ui-custom
-v /path/to/custom/swagger:/usr/src/app/swagger-ui-dist
:將主機上的自定義Swagger目錄掛載到容器,方便動態更新文檔。若需讓Swagger UI加載特定的API文檔(如swagger.json
),可通過環境變量或掛載卷實現:
docker run -d --name swagger-ui -p 8080:8080 -e SWAGGER_JSON=/foo/swagger.json -v /bar:/foo swaggerapi/swagger-ui-express
其中,-e SWAGGER_JSON=/foo/swagger.json
指定文檔路徑,-v /bar:/foo
將主機上的/bar
目錄掛載到容器的/foo
目錄。CMD
或ENTRYPOINT
指定文檔路徑(如上述自定義Dockerfile中的require('./swagger.json')
)。nvm
升級Node.js)。docker pull swaggerapi/swagger-ui-express
),停止并刪除舊容器(docker stop swagger-ui && docker rm swagger-ui
),重新運行新容器。--ssl
參數配置);SecurityConfig
中為Swagger靜態資源(如/swagger-ui/**
、/v3/api-docs/**
)放行,避免404錯誤。