使用 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 服务器的主要内容,如果未能解决你的问题,请参考以下文章

docker学习12-docker快速搭建禅道环境

docker创建私有仓库

使用lua graphql 模块让openresty 支持graphql api

十分钟快速搭建wordpress服务

搭建docker,docker搭建达梦数据库,详细图文

11111111111