使用 OpenResty Docker 镜像快速搭建 Web 服务器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 OpenResty Docker 镜像快速搭建 Web 服务器相关的知识,希望对你有一定的参考价值。
参考技术A在日常工作中经常需要搭建 Web 服务器和反向代理服务器,用于测试和生产的情况都有。虽然用于测试的场景有很多便捷的方法,但是在向生产环境迁移时会导致有些工作不能复用。综合看起来,还是用 nginx 最为方便。本文尝试提供一些配置模板。
需要提前了解的内容:
选择 OpenResty 的原因:
OpenResty 默认安装位置:
安装目录中 Nginx 相关文件:
默认服务指向 Web 文件夹 :
映射关系:
默认 配置文件 位置(后续的配置会覆盖这里的内容):
在绝大多数情况,覆盖上面的配置文件就可以了。
但是,这些配置文件的内容,只能是包含在 http 段内的配置,并不能作为完整的配置文件使用。
比如:
可以包含: upstream 、 server
不能包含: tcp
完整配置文件位置:
配置文件相关信息:
https://github.com/openresty/docker-openresty/blob/master/README.md#nginx-config-files
镜像默认配置为到 /etc/nginx/conf.d/ 读取配置,所以要把配置文件放到这里。其余的挂载或端口映射根据需要进行。
假设需要建立如下服务:
(1)通过 http://localhost:20000/shared1/ 访问 /tmp/webroot/shared1
(2)通过 http://localhost:20000/shared2/ 访问 /tmp/webroot/myshare
(3)通过 http://localhost:20000/baidu/ 访问 http://www.baidu.com
配置文件:
启动命令行:
详情参考: docker-openresty - Docker tooling for OpenResty - Nginx Config Files
模拟为应用提供多级反向代理,查看访问链路。简单分为三部分:
使用 Docker Compose 来配置并串联各容器,文件较多,访问 GitHub 查看。
(完)
使用lua graphql 模块让openresty 支持graphql api
graphql 是一个很不错的api 查询标准语言,已经有一个lua 的版本支持graphql
项目使用docker&&docker-compose 运行
环境准备
- 模块安装
luarocks install graphql
- docker镜像准备
模块使用luarocks 安装,默认alpine 镜像是没有安装这个包,我们使用alpine-fat的
FROM openresty/openresty:alpine-fat
RUN /usr/local/openresty/luajit/bin/luarocks install graphql
项目代码
- 项目结构
├── Dockerfile
├── README.md
├── app
├── docker-compose.yaml
└── nginx.conf
- nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
lua_code_cache off;
gzip on;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
lua_package_path \'/opt/app/?.lua;;\';
server {
listen 80;
server_name localhost;
charset utf-8;
root html;
default_type text/html;
location / {
content_by_lua_block {
require("html/app")()
}
}
# graphql 支持
location /g {
more_set_headers \'Content-Type application/json\';
content_by_lua_block {
require("g/init")()
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
- graphql 代码
app/g/init.lua
local parse = require \'graphql.parse\'
local schema = require \'graphql.schema\'
local types = require \'graphql.types\'
local validate = require \'graphql.validate\'
local execute = require \'graphql.execute\'
local json = require "cjson"
-- Parse a query
local ast = parse [[
query getUser($id: ID) {
person(id: $id) {
firstName
lastName
}
}
]]
-- Create a type
local Person = types.object {
name = \'Person\',
fields = {
id = types.id.nonNull,
firstName = types.string.nonNull,
middleName = types.string,
lastName = types.string.nonNull,
age = types.int.nonNull
}
}
-- Create a schema
local schema = schema.create {
query = types.object {
name = \'Query\',
fields = {
person = {
kind = Person,
arguments = {
id = types.id
},
resolve = function(rootValue, arguments)
if arguments.id ~= 1 then return nil end
return {
id = 1,
firstName = \'Bob\',
lastName = \'Ross\',
age = 52
}
end
}
}
}
}
-- Validate a parsed query against a schema
validate(schema, ast)
-- Execution
local rootValue = {}
local variables = { id = 1 }
local operationName = \'getUser\'
local function g()
local result=execute(schema, ast, rootValue, variables, operationName)
ngx.say(json.encode(result))
end
return g
运行
- build 镜像
docker-compose build
- 运行
docker-compose up -d
- 效果
参考资料
https://luarocks.org/modules/hisham/graphql
https://github.com/bjornbytes/graphql-lua
https://github.com/rongfengliang/openresty-lua-demo
以上是关于使用 OpenResty Docker 镜像快速搭建 Web 服务器的主要内容,如果未能解决你的问题,请参考以下文章