From 6ef9270a2bdf287753799269a36d6d4b5d599348 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Tue, 9 Jan 2024 18:00:38 +0800 Subject: [PATCH] =?UTF-8?q?nginx-docker=EF=BC=9A=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/nginx/Dockerfile | 22 +++++--- docker/nginx/README.md | 18 +++++- .../docs/conf.d/{default.conf => http.conf} | 10 ---- docker/nginx/docs/conf.d/nginx.conf | 33 +++++++++++ .../nginx/docs/conf.d/servers.conf.template | 10 ++++ docker/nginx/docs/docker-entrypoint.sh | 56 +++++++++++++++++++ 6 files changed, 130 insertions(+), 19 deletions(-) rename docker/nginx/docs/conf.d/{default.conf => http.conf} (90%) create mode 100644 docker/nginx/docs/conf.d/nginx.conf create mode 100644 docker/nginx/docs/conf.d/servers.conf.template create mode 100644 docker/nginx/docs/docker-entrypoint.sh diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile index feeaae0c..3a844bce 100644 --- a/docker/nginx/Dockerfile +++ b/docker/nginx/Dockerfile @@ -1,17 +1,25 @@ # 设置基础镜像 -# 在137服务器中使用的是 rasa_dev:1.0.0镜像 FROM nginx:1.25 -ENV APP_HOME=/data/vp +# 覆盖原镜像的启动脚本 +COPY ./docs/docker-entrypoint.sh /docker-entrypoint.sh -# 设置工作目录 -WORKDIR $APP_HOME -# 复制java jar 到容器中 -COPY ./docs/conf.d /etc/nginx/conf.d -# 复制rasa配置文件到 rasa目录下 +# 删除默认的配置文件 +RUN rm /etc/nginx/conf.d/default.conf + +# 复制配置文件信息 +COPY ./docs/conf.d/nginx.conf /etc/nginx/nginx.conf +COPY ./docs/conf.d/http.conf /etc/nginx/conf.d +COPY ./docs/conf.d/https.conf /etc/nginx/conf.d +COPY ./docs/conf.d/servers.conf.template /data/vp/nginx/conf/servers.conf.template + +# 复制ssl证书信息 COPY ./docs/ssl /data/vp/nginx/ssl +# 复制静态文件信息 +COPY ./html /usr/share/nginx/html + # 暴漏服务端口 EXPOSE 80 443 diff --git a/docker/nginx/README.md b/docker/nginx/README.md index da5642f5..e6913524 100644 --- a/docker/nginx/README.md +++ b/docker/nginx/README.md @@ -1,3 +1,17 @@ # 构建步骤 -- 修改配置文件 docs/conf.d/default.conf中的服务器地址 -- 运行Dockerfile文件构建镜像 docker build -t my/nginx:1.25 . \ No newline at end of file +- 把前端文件放html目录下 +- 运行Dockerfile文件构建镜像 docker build -t vp/nginx:1.25 . + +# 启动说明 +- docker run -itd --name nginx-test3 -p8819:80 -p443:443 \ + - e UPSTREAM_WEB_SERVERS=192.168.10.138:8899 \ + -e UPSTREAM_MANAGE_SERVERS=192.168.10.138:8891 vp/nginx:1.25 + - itd : -itd : 无交互模式启动 + - -p8819:80 -p443:443 : 端口映射 + - UPSTREAM_WEB_SERVERS : 后端服务器地址,只允许有单个 + - UPSTREAM_MANAGE_SERVERS : 管理服务器地址,只允许有单个 + - vp/nginx:1.25 构建的镜像名称 + +# 注意事项 +- 前端文件放到html目录下 +- 后端服务器地址和管理服务器地址,需要和docker run命令中的参数保持一致 \ No newline at end of file diff --git a/docker/nginx/docs/conf.d/default.conf b/docker/nginx/docs/conf.d/http.conf similarity index 90% rename from docker/nginx/docs/conf.d/default.conf rename to docker/nginx/docs/conf.d/http.conf index a82fdb98..89ebb516 100644 --- a/docker/nginx/docs/conf.d/default.conf +++ b/docker/nginx/docs/conf.d/http.conf @@ -1,13 +1,3 @@ -# 前台服务后端地址,多个地址可用与负载均衡 -upstream web_servers { - server 192.168.10.138:8899; -} - -#后管服务后端地址 -upstream manage_servers { - server 192.168.10.138:8891; -} - server { listen 80; listen [::]:80; diff --git a/docker/nginx/docs/conf.d/nginx.conf b/docker/nginx/docs/conf.d/nginx.conf new file mode 100644 index 00000000..012057b5 --- /dev/null +++ b/docker/nginx/docs/conf.d/nginx.conf @@ -0,0 +1,33 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + keepalive_timeout 65; + + #gzip on; + + include /data/vp/nginx/conf/*.conf; + include /etc/nginx/conf.d/*.conf; + +} \ No newline at end of file diff --git a/docker/nginx/docs/conf.d/servers.conf.template b/docker/nginx/docs/conf.d/servers.conf.template new file mode 100644 index 00000000..81c04bba --- /dev/null +++ b/docker/nginx/docs/conf.d/servers.conf.template @@ -0,0 +1,10 @@ +# 前台服务后端地址,多个地址可用与负载均衡 +# 解析以逗号分隔的多个 upstream 值 + +upstream web_servers { + server $UPSTREAM_WEB_SERVERS; + } + +upstream manage_servers { + server $UPSTREAM_MANAGE_SERVERS; + } diff --git a/docker/nginx/docs/docker-entrypoint.sh b/docker/nginx/docs/docker-entrypoint.sh new file mode 100644 index 00000000..f749f300 --- /dev/null +++ b/docker/nginx/docs/docker-entrypoint.sh @@ -0,0 +1,56 @@ +#!/bin/sh +# vim:sw=4:ts=4:et + +set -e +# /etc/nginx/conf.d/servers.conf 文件不存在,且 UPSTREAM_SERVERS 为 true,执行替换 +if [ ! -f "/data/vp/nginx/conf/servers.conf" ]; then + # 执行你的命令 + echo "begin replace servers.conf ...." + + envsubst '$UPSTREAM_WEB_SERVERS' < /data/vp/nginx/conf/servers.conf.template> /data/vp/nginx/conf/servers.tmp + envsubst '$UPSTREAM_MANAGE_SERVERS' < /data/vp/nginx/conf/servers.tmp > /data/vp/nginx/conf/servers.conf +fi + + +entrypoint_log() { + if [ -z "${NGINX_ENTRYPOINT_QUIET_LOGS:-}" ]; then + echo "$@" + fi +} + +if [ "$1" = "nginx" ] || [ "$1" = "nginx-debug" ]; then + if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -maxdepth 1 -type f -print -quit 2>/dev/null | read v; then + entrypoint_log "$0: /docker-entrypoint.d/ is not empty, will attempt to perform configuration" + + entrypoint_log "$0: Looking for shell scripts in /docker-entrypoint.d/" + find "/docker-entrypoint.d/" -follow -type f -print | sort -V | while read -r f; do + case "$f" in + *.envsh) + if [ -x "$f" ]; then + entrypoint_log "$0: Sourcing $f"; + . "$f" + else + # warn on shell scripts without exec bit + entrypoint_log "$0: Ignoring $f, not executable"; + fi + ;; + *.sh) + if [ -x "$f" ]; then + entrypoint_log "$0: Launching $f"; + "$f" + else + # warn on shell scripts without exec bit + entrypoint_log "$0: Ignoring $f, not executable"; + fi + ;; + *) entrypoint_log "$0: Ignoring $f";; + esac + done + + entrypoint_log "$0: Configuration complete; ready for start up" + else + entrypoint_log "$0: No files found in /docker-entrypoint.d/, skipping configuration" + fi +fi + +exec "$@" \ No newline at end of file