refactor(docker): use templating to handle env variables (#8878)
Refs #8877
This commit is contained in:
18
Dockerfile
18
Dockerfile
@@ -8,19 +8,21 @@ RUN apk update && apk add --no-cache "nodejs>=18.14.1-r0 "
|
||||
|
||||
LABEL maintainer="fehguy"
|
||||
|
||||
ENV API_KEY "**None**"
|
||||
ENV SWAGGER_JSON "/app/swagger.json"
|
||||
ENV PORT 8080
|
||||
ENV BASE_URL ""
|
||||
ENV SWAGGER_JSON_URL ""
|
||||
ENV API_KEY="**None**" \
|
||||
SWAGGER_JSON="/app/swagger.json" \
|
||||
PORT="8080" \
|
||||
PORT_IPV6="" \
|
||||
BASE_URL="/" \
|
||||
SWAGGER_JSON_URL=""
|
||||
|
||||
COPY --chown=nginx:nginx --chmod=0666 ./docker/nginx.conf ./docker/cors.conf /etc/nginx/
|
||||
COPY --chown=nginx:nginx --chmod=0666 ./docker/default.conf.template ./docker/cors.conf /etc/nginx/templates/
|
||||
|
||||
# copy swagger files to the `/js` folder
|
||||
COPY --chmod=0666 ./dist/* /usr/share/nginx/html/
|
||||
COPY --chmod=0555 ./docker/docker-entrypoint.d/ /docker-entrypoint.d/
|
||||
COPY --chmod=0666 ./docker/configurator /usr/share/nginx/configurator
|
||||
|
||||
RUN chmod 777 /usr/share/nginx/html/ /etc/nginx/ /var/cache/nginx/ /var/run/
|
||||
# Simulates running NGINX as a non root; in future we want to use nginxinc/nginx-unprivileged.
|
||||
# In future we will have separate unpriviledged images tagged as v5.1.2-unprivileged.
|
||||
RUN chmod 777 /usr/share/nginx/html/ /etc/nginx/conf.d/ /etc/nginx/conf.d/default.conf /var/cache/nginx/ /var/run/
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
@@ -1,21 +1,8 @@
|
||||
worker_processes 1;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
include mime.types;
|
||||
default_type application/octet-stream;
|
||||
types {
|
||||
text/plain yaml;
|
||||
text/plain yml;
|
||||
}
|
||||
|
||||
sendfile on;
|
||||
|
||||
keepalive_timeout 65;
|
||||
|
||||
gzip on;
|
||||
gzip_static on;
|
||||
gzip_disable "msie6";
|
||||
@@ -29,28 +16,27 @@ http {
|
||||
server_tokens off; # Hide Nginx version
|
||||
|
||||
server {
|
||||
listen 8080;
|
||||
listen $PORT;
|
||||
server_name localhost;
|
||||
index index.html index.htm;
|
||||
|
||||
location / {
|
||||
location $BASE_URL {
|
||||
absolute_redirect off;
|
||||
alias /usr/share/nginx/html/;
|
||||
expires 1d;
|
||||
|
||||
location ~ swagger-initializer.js {
|
||||
expires -1;
|
||||
include cors.conf;
|
||||
include templates/cors.conf;
|
||||
}
|
||||
|
||||
location ~* \.(?:json|yml|yaml)$ {
|
||||
#SWAGGER_ROOT
|
||||
expires -1;
|
||||
|
||||
include cors.conf;
|
||||
include templates/cors.conf;
|
||||
}
|
||||
|
||||
include cors.conf;
|
||||
}
|
||||
include templates/cors.conf;
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,13 @@
|
||||
#! /bin/sh
|
||||
|
||||
set -e
|
||||
BASE_URL=${BASE_URL:-/}
|
||||
NGINX_ROOT=/usr/share/nginx/html
|
||||
INITIALIZER_SCRIPT=$NGINX_ROOT/swagger-initializer.js
|
||||
NGINX_CONF=/etc/nginx/nginx.conf
|
||||
NGINX_CONF=/etc/nginx/conf.d/default.conf
|
||||
|
||||
node /usr/share/nginx/configurator $INITIALIZER_SCRIPT
|
||||
|
||||
|
||||
if [[ "${BASE_URL}" != "/" ]]; then
|
||||
sed -i "s|location / {|location $BASE_URL {|g" $NGINX_CONF
|
||||
fi
|
||||
|
||||
if [ "$SWAGGER_JSON_URL" ]; then
|
||||
sed -i "s|https://petstore.swagger.io/v2/swagger.json|$SWAGGER_JSON_URL|g" $INITIALIZER_SCRIPT
|
||||
sed -i "s|http://example.com/api|$SWAGGER_JSON_URL|g" $INITIALIZER_SCRIPT
|
||||
@@ -41,12 +36,7 @@ fi
|
||||
|
||||
# enable/disable the address and port for IPv6 addresses that nginx listens on
|
||||
if [[ -n "${PORT_IPV6}" ]]; then
|
||||
sed -i "s|8080;|8080;\n listen [::]:${PORT_IPV6};|g" $NGINX_CONF
|
||||
fi
|
||||
|
||||
# replace the PORT that nginx listens on if PORT is supplied
|
||||
if [[ -n "${PORT}" ]]; then
|
||||
sed -i "s|8080|${PORT}|g" $NGINX_CONF
|
||||
sed -i "s|${PORT};|${PORT};\n listen [::]:${PORT_IPV6};|g" $NGINX_CONF
|
||||
fi
|
||||
|
||||
find $NGINX_ROOT -type f -regex ".*\.\(html\|js\|css\)" -exec sh -c "gzip < {} > {}.gz" \;
|
||||
|
||||
@@ -64,7 +64,7 @@ const ui = SwaggerUIBundle({
|
||||
|
||||
You can pull a pre-built docker image of the swagger-ui directly from Docker Hub:
|
||||
|
||||
```
|
||||
```sh
|
||||
docker pull swaggerapi/swagger-ui
|
||||
docker run -p 80:8080 swaggerapi/swagger-ui
|
||||
```
|
||||
@@ -73,24 +73,36 @@ Will start nginx with Swagger UI on port 80.
|
||||
|
||||
Or you can provide your own swagger.json on your host
|
||||
|
||||
```
|
||||
```sh
|
||||
docker run -p 80:8080 -e SWAGGER_JSON=/foo/swagger.json -v /bar:/foo swaggerapi/swagger-ui
|
||||
```
|
||||
|
||||
You can also provide a URL to a swagger.json on an external host:
|
||||
|
||||
```
|
||||
```sh
|
||||
docker run -p 80:8080 -e SWAGGER_JSON_URL=https://petstore3.swagger.io/api/v3/openapi.json swaggerapi/swagger-ui
|
||||
```
|
||||
|
||||
The base URL of the web application can be changed by specifying the `BASE_URL` environment variable:
|
||||
|
||||
```
|
||||
```sh
|
||||
docker run -p 80:8080 -e BASE_URL=/swagger -e SWAGGER_JSON=/foo/swagger.json -v /bar:/foo swaggerapi/swagger-ui
|
||||
```
|
||||
|
||||
This will serve Swagger UI at `/swagger` instead of `/`.
|
||||
|
||||
You can specify a different port via `PORT` variable for accessing the application, default is `8080`.
|
||||
|
||||
```sh
|
||||
docker run -p 80:80 -e PORT=80 swaggerapi/swagger-ui
|
||||
```
|
||||
|
||||
You can specify an IPv6 port via `PORT_IPV6` variable. By default, IPv6 port is not set.
|
||||
|
||||
```sh
|
||||
docker run -p 80:80 -e PORT_IPV6=8080 swaggerapi/swagger-ui
|
||||
```
|
||||
|
||||
For more information on controlling Swagger UI through the Docker image, see the Docker section of the [Configuration documentation](configuration.md#docker).
|
||||
|
||||
### unpkg
|
||||
|
||||
Reference in New Issue
Block a user