openresty redis all in one docker demo
一个简单的docker demo 集成openresty+ redis,可以实现基于redis的动态修改反向代理的处理
环境准备
- docker-compose 文件
version: "3"
services:
nginx-redis:
build: ./
image: dalongrong/appdemorong
tty: true
ports:
- "6379:6379"
- "8099:80"
- dockerfile
FROM openresty/openresty:alpine
RUN apk add --update \
&& apk add redis
ADD entrypoint.sh /entrypoint.sh
COPY redis.conf /redis.conf
COPY nginx.conf usr/local/openresty/nginx/conf/
ENV PATH=$PATH:/usr/bin
EXPOSE 6379
EXPOSE 80
ENTRYPOINT ["sh", "/entrypoint.sh"]
- redis.conf 配置文件
很简单主要是使用后台任务运行,同时禁用保护模式,添加以下内容就可以了
daemonize yes
protected-mode no
- nginx.conf
基于redis 的host 查找,实现动态负载(需要手工修改redis key 信息)
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
resolver 114.114.114.114;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
set $subdomain api.yonyou.com;
access_by_lua_block {
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
local host = ngx.var.host;
local res, err = red:get(host)
ngx.var.subdomain = res
}
proxy_pass http://$subdomain/$uri;
proxy_set_header Host $subdomain;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /ip {
default_type text/html;
content_by_lua_block{
ngx.say(ngx.var.remote_addr)
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
- entrypoint.sh
很简单就是启动redis以及openresty
#!/bin/bash
redis-server /redis.conf
exec /usr/local/openresty/bin/openresty -g "daemon off;"
运行&&测试
- 构建&&启动
docker-compose build && docker-compose up -d
- 添加负载均衡配置
- 访问效果
当前是一个jenkins 界面
重新修改为一个git的界面
说明
demo 很简单,主要是为了运行一个测试环境,但是同时为了方便进行反向代理后端的调整,所以写了一个简单的demo
实际上更好的方式可能是使用supervisor,tini,或者docker 自带的init 功能
tini 参考dockerfile 如下:
FROM openresty/openresty:alpine
ENV TINI_VERSION v0.18.0
RUN apk add --update \
&& apk add redis \
&& apk add --no-cache tini
ADD entrypoint.sh /entrypoint.sh
COPY redis.conf /redis.conf
COPY nginx.conf usr/local/openresty/nginx/conf/
ENV PATH=$PATH:/usr/bin
EXPOSE 6379
EXPOSE 80
ENTRYPOINT ["/sbin/tini","-s", "--", "/entrypoint.sh"]
openresty redis all in one docker demo的更多相关文章
- <正则吃饺子> :关于redis集群的测试demo
redis集群的测试demo,来自网络,具体不详. 1.下载地址,如下:http://download.csdn.net/detail/u012543819/9729291 2.项目是java项目,结 ...
- Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息
Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息 一.通过redis_exporter监控redis 1.1 下载镜像 1.2 运行服务 ...
- Redis分布式缓存 教程以及DEMO
原文地址:http://blog.csdn.net/qiujialongjjj/article/category/1800171 redis demo源码下载:http://download.csdn ...
- Openresty+redis实现灰度发布
一.架构 环境: 192.168.189.131:tomcat服务 192.168.189.132:tomcat服务 192.168.189.130:OpenResty服务.redis服务 流程: 请 ...
- redis StackExchange 主备 实现 demo
网上关于redis高可用基本都是用redis-sentinel 哨兵 或者 redis cluster 集群来实现, 但是有没有更简单的方式,比如我现在就只有2个redis实例.我试验的结果是我们可用 ...
- redis主从配置(docker实现)
一.docker新建两个redis服务端,并分别设置端口为6379和6380 命令如下: docker run -p : -d --name redis-server docker.io/redis: ...
- .net下redis和rabbitmq简单使用demo
是参考 一下两篇博文整理了下. Redis: https://www.cnblogs.com/5ishare/p/6492380.html RabbitMq: https://www.cnbl ...
- 使用U盘安装Linux最美桌面发行版Elementary OS 及常用开发环境配置(JDK,Redis,MySQL,Docker,IDEA,STS)
前言 假期在家无聊,刚好把六年前的一台笔记本电脑利用起来,原来电脑虽然说配置说不上古董机器,但是运行win系统感觉还是不流畅,所幸给换成Linux桌面版系统,在网上查阅了很多,Linux桌面系统要么推 ...
- .Net Core使用Redis的一个入门简单Demo
本例子讲述一个在.Net core环境中对Redis数据库进行增删改查操作. 首先,要安装好Redis数据库,至于怎么安装,本文不再赘述,可以自行百度,有很详细的教程. 安装好之后,在CMD中输入 r ...
随机推荐
- 输入系统:epoll & inotify
一.epoll 作用:检测一个或多个文件的可读.可写等属性变化: 代码示例: #include <sys/epoll.h> #include <stdio.h> #includ ...
- angular自定义指令
1.在directive文件下创建指令的js文件 通常自定义指令需要声明模块(注意定义指令时, js内部指令名称需采用 aaAaBb驼峰的命名方式 html中使用的是aa-aa-bb) e.g (f ...
- codeforces546D(从一个数中拆分素数)
D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- string使用方法
转载自:https://blog.csdn.net/tengfei461807914/article/details/52203202 使用场合: string是C++标准库的一个重要的部分,主要用于 ...
- Qt 查询字符串数据
(1)函数QString::startsWith(),判断某一个字符串是否以某个字符串开头:该函数具有两个参数,第一个参数制定了一个字符串,第二个参数指定是否大小写敏感,默认大小写敏感: eg: QS ...
- [学习] SpringMVC/JavaEE/JavaSE
浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别 几个Map集合的区别 Java多线程
- getHibernateTemplate().save(t)执行不成功,数据不能插入到数据库
BaseDaoImpl类中的代码如下 public void save(T t) {System.out.println(666);getHibernateTemplate().save(t); ...
- jenkins + nodejs + git 自动化部署前端
1. 创建自定义风格任务 2.填写项目描述 3.配置源码管理 4. 系统管理->插件管理 ->安装插件 5.配置系统管理->全局工具配置-> 6.配置全局 ssh 7. 继续 ...
- 性能测试-10.数据分析Analysis
Analysis Summary 平均响应时间(Average TransactionResponse Time) 每秒响应数(Transactions per Second) 1.Vuser Ru ...
- JavaScript 是如何工作的: 事件循环和异步编程的崛起 + 5个如何更好的使用 async/await 编码的技巧 - 学习笔记
那么,谁会告诉 JS 引擎去执行你的程序?事实上,JS 引擎不是单独运行的 —— 它运行在一个宿主环境中,对于大多数开发者来说就是典型的浏览器和 Node.js.实际上,如今,JavaScript 被 ...