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 ...
随机推荐
- UIScrollview的 约束 contentsize contentoffset contentinset layoutsubviews needlayout等影响布局的属性
很久没有写视图布局,最近发现写布局很不顺手,总结一下在处理UIScrollview的时候种种注意事项: 1. self.automaticallyAdjustsScrollViewInsets = N ...
- php随手记
引用(&)是变量的别名,而不是指针,可用unset(变量名)把此变量的别名注销掉,等于没有声明此变量. @为错误抑制符,可以用在任何表达式前面. ``为命令操作符,可以执行系统命令. inst ...
- SQL-31 获取select * from employees对应的执行计划
题目描述 获取select * from employees对应的执行计划 explain select * from employees explain 用于获得表的所有细节
- 使用DLL在进程间共享数据
0x01 DLL在进程间共享数据理论 1.可以在Dll中使用#pragma data_seg建立共享类型的数据段将需要共享的数据分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享,从而实现不 ...
- turtle
画一组同切圆 输入 import turtle turtle.color('red') turtle.circle(30) turtle.circle(60) turtle.circle(90) tu ...
- RocketMq源码学习(一) nameService
public class NamesrvStartup { public static Properties properties = null; public static CommandLine ...
- 了解下webpack的几个命令
[ webpack3.0.0刚刚出来 所以文章是跟着低版本 教程 操作熟悉 结果好多对不上喔] 六:了解下webpack的几个命令 webpack // 最基本的启动webpack ...
- 【python】pandas display选项
import pandas as pd 1.pd.set_option('expand_frame_repr', False) True就是可以换行显示.设置成False的时候不允许换行 2.pd.s ...
- REST easy with kbmMW #17 – Database 6 – Existing databases
kbmMW已经包含了非常精细的功能来确定和解释数据库中表的元数据. 在下一版本中,这个功能将得到进一步加强,可以导入现有数据库中的表,自动创建与表相匹配的ORM实体类. 这意味着你能够使用kbmMW的 ...
- 利用Hackrf One进行GPS定位欺骗制作超级跑马机
0×00 驾校的困惑 现行规定要求每个学员都必须在驾校练习够规定的学时,才能参加考试,在每台教练车上都安装有计时计程终端,学员刷卡刷指纹后开始累计里程.但是目前中国的很多驾校,存在车少人多的情况,假设 ...