Docker + OpenResty - 灵活配置。如何?
Docker + OpenResty - flexible configuration. How to?
我有使用 docker 部署的 openresty 应用程序。
我的 docker 文件:
FROM openresty/openresty:alpine-fat
ARG APPLICATION_PATH="/srv/www/my-app"
COPY nginx.conf /usr/local/openresty/nginx/conf
RUN mkdir ${APPLICATION_PATH}
我 运行 docker 使用此命令:
docker run -v $(CURRENT_DIRECTORY):/srv/www/my-app -v $(CURRENT_DIRECTORY)/conf:/etc/nginx/conf.d --name="$(APP_NAME)" -p $(PORT):80 -d $(CONTAINER_NAME)
此命令存储在 Makefile
中,变量值如下:
CONTAINER_NAME = my-app
APP_NAME = my-app
override PORT = 8080
ifeq ($(OS),Windows_NT)
CURRENT_DIRECTORY=%cd%
else
CURRENT_DIRECTORY=${PWD}
endif
所以我也有 my-app.conf
存储在 conf
目录中。这是 nginx 配置文件,我有这一行:
content_by_lua_file '/srv/www/my-app/main.lua';
而且我还有 nginx.conf
,我有这一行:
lua_package_path ";;/srv/www/my-app/?.lua;/srv/www/my-app/application/?.lua";
我不想在 3 个文件中重复 /srv/www/my-app
。我该如何避免这种情况?
IMO,你的方法不一致。
您复制 nginx.conf 文件,但为 my-app.conf 安装一个卷(它包含在 nginx.conf 中吗?)
奇怪的是 $(CURRENT_DIRECTORY)/conf
被安装了两次 - 作为 /srv/www/my-app/conf
和 /etc/nginx/conf.d
。
以下是我对 OpenResty 容器的处理方法:
写简单的 nginx.conf 不包含。像你一样将它复制到容器中。
使用 nginx.conf 挂载文件夹的唯一原因是能够在更改后重新加载 nginx 配置。请记住 - 如果您要挂载单个文件,则重新加载可能不起作用。 https://github.com/docker/for-win/issues/328
将 *_by_lua_file 指令中提到的所有 Lua 文件复制到 /usr/local/openresty/nginx
将上述文件中所需的所有 Lua 文件(如果有)复制到 /usr/local/openresty/lualib
不要在 *_by_lua_file 指令中使用绝对文件路径,您可以指定 /usr/local/openresty/nginx
的相对路径
不要使用 lua_package_path 指令,默认值应该有效。
这是简单的工作示例https://gist.github.com/altexy/8f8e08fd13cda25ca47418ab4061ce1b
我有使用 docker 部署的 openresty 应用程序。
我的 docker 文件:
FROM openresty/openresty:alpine-fat
ARG APPLICATION_PATH="/srv/www/my-app"
COPY nginx.conf /usr/local/openresty/nginx/conf
RUN mkdir ${APPLICATION_PATH}
我 运行 docker 使用此命令:
docker run -v $(CURRENT_DIRECTORY):/srv/www/my-app -v $(CURRENT_DIRECTORY)/conf:/etc/nginx/conf.d --name="$(APP_NAME)" -p $(PORT):80 -d $(CONTAINER_NAME)
此命令存储在 Makefile
中,变量值如下:
CONTAINER_NAME = my-app
APP_NAME = my-app
override PORT = 8080
ifeq ($(OS),Windows_NT)
CURRENT_DIRECTORY=%cd%
else
CURRENT_DIRECTORY=${PWD}
endif
所以我也有 my-app.conf
存储在 conf
目录中。这是 nginx 配置文件,我有这一行:
content_by_lua_file '/srv/www/my-app/main.lua';
而且我还有 nginx.conf
,我有这一行:
lua_package_path ";;/srv/www/my-app/?.lua;/srv/www/my-app/application/?.lua";
我不想在 3 个文件中重复 /srv/www/my-app
。我该如何避免这种情况?
IMO,你的方法不一致。
您复制 nginx.conf 文件,但为 my-app.conf 安装一个卷(它包含在 nginx.conf 中吗?)
奇怪的是 $(CURRENT_DIRECTORY)/conf
被安装了两次 - 作为 /srv/www/my-app/conf
和 /etc/nginx/conf.d
。
以下是我对 OpenResty 容器的处理方法:
写简单的 nginx.conf 不包含。像你一样将它复制到容器中。 使用 nginx.conf 挂载文件夹的唯一原因是能够在更改后重新加载 nginx 配置。请记住 - 如果您要挂载单个文件,则重新加载可能不起作用。 https://github.com/docker/for-win/issues/328
将 *_by_lua_file 指令中提到的所有 Lua 文件复制到
/usr/local/openresty/nginx
将上述文件中所需的所有 Lua 文件(如果有)复制到
/usr/local/openresty/lualib
不要在 *_by_lua_file 指令中使用绝对文件路径,您可以指定
/usr/local/openresty/nginx
的相对路径
不要使用 lua_package_path 指令,默认值应该有效。
这是简单的工作示例https://gist.github.com/altexy/8f8e08fd13cda25ca47418ab4061ce1b