当前位置: 首页 > news >正文

基于supervisor制作基于环境变量配置的redis

背景:

redis 的镜像很多很多,但都需要直接修改配置文件,不符合我们公司当前环境变量解决一切容易配置的思路。

材料:

1、CentOS-Base.repo

[base]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7[updates]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7[extras]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

2、 epel.repo

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/epel/7/$basearch
gpgcheck=0
gpgkey=http://mirrors.cloud.aliyuncs.com/epel/RPM-GPG-KEY-EPEL-7

3、 start_shell.sh

#!/bin/bash
echo "update supervisor.config !"
if [ ! -d "/usr/local/pys/" ];then
mkdir -p /usr/local/pys/
else
echo "文件夹/usr/local/pys已经存在"
ficd /usr/local/pys/
for file in $(ls *)
dopython $file
doneecho "没有需要执行的py脚本"cd /etc/redis/redis-6.2.6
for file in $(ls *)
domkdir -p /etc/redis/redis-6.2.6/conf.d.bak/cp -rf $file ../conf.d.bak/$file.bak
done
sed -i "s/#REDIS_DAEMONIZE/$REDIS_DAEMONIZE/g"  `grep \#REDIS_DAEMONIZE -rl /etc/redis/redis-6.2.6`
sed -i "s/#REDIS_PORT/$REDIS_PORT/g"  `grep \#REDIS_PORT -rl /etc/redis/redis-6.2.6`
sed -i "s/#REDIS_TIMEOUT/$REDIS_TIMEOUT/g"  `grep \#REDIS_TIMEOUT -rl /etc/redis/redis-6.2.6`
sed -i "s/#REDIS_LOGLEVEL/$REDIS_LOGLEVEL/g"  `grep \#REDIS_LOGLEVEL -rl /etc/redis/redis-6.2.6`
sed -i "s/#REDIS_DATABASES/$REDIS_DATABASES/g"  `grep \#REDIS_DATABASES -rl /etc/redis/redis-6.2.6`
sed -i "s/#REDIS_APPENDONLY/$REDIS_APPENDONLY/g"  `grep \#REDIS_APPENDONLY -rl /etc/redis/redis-6.2.6`
sed -i "s/#REDIS_PROTECTED_MODE/$REDIS_PROTECTED_MODE/g"  `grep \#REDIS_PROTECTED_MODE -rl /etc/redis/redis-6.2.6`
sed -i "s/#REDIS_REQUIREPASS/$REDIS_REQUIREPASS/g"  `grep \#REDIS_REQUIREPASS -rl /etc/redis/redis-6.2.6`time=$(date "+%Y-%m-%d %H:%M:%S")
filePath="/usr/project/supervisor_file.cfg"
if [ ! -f "$filePath" ];then
supervisorctl update all
sleep 10s
supervisorctl reload
touch $filePathecho $time > $filePathecho "成功创建认证文件"
elseecho "已存在认证文件"
fi

4、supervisord.conf

[supervisord]
pidfile = /run/supervisord.pid
# It seems that it's not possible to swith this log to NONE (it creates NONE logfile)
logfile = /data/logs/supervisord.log
# Set loglevel=debug, only then all logs from child services are printed out
# to container logs (and thus available via `docker logs [container]`
loglevel = debug# These two (unix_http_server, rpcinterface) are needed for supervisorctl to work
[inet_http_server]
port = :9111
username = sv
password = password[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface[supervisorctl]
serverurl = http://localhost:9111
username = sv
password = password[program:start-shell]
autostart=true
priority=111
startsecs=0
directory=/usr/project/
autorestart=unexpected
startretries=3
command = /bin/bash -c "chmod u+x start_shell.sh && ./start_shell.sh"
stdout_logfile=/var/log/startshell.log
stderr_logfile=/var/log/startshell_error.log[program:]
command = redis-server /etc/redis/redis-6.2.6/redis.conf
startsecs=0
autostart=true
autorestart=true
stdout_logfile=/var/redis/log/redis-server.log
stderr_logfile=/var/redis/log/redis-server_error.log
stopasgroup=true
killasgroup=true[include]
files = /etc/supervisor.d/*.ini

5、redis-6.2.6.tar.gz 

 下载对应版本的redis

6、redis.conf

1、解压redis-6.2.6.tar.gz 文件 获取redis.conf 配置文件
2、使用“#环境变量名”替换对应参数值(不是参数,是参数值,如#REDIS_DAEMONIZE替换文中的daemonize 后面的 yes/no).
#REDIS_DAEMONIZE daemonize
#REDIS_PORT 6379 port
#REDIS_TIMEOUT 0 timeout  当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
#REDIS_LOGLEVEL loglevel  指定日志级别记录,Redis共支持四个级别:debug、verbose、notice、warning,默认为verbose;一般生产环境配置为后两者
#REDIS_DATABASES 16 设置数据库的数量,默认数据库为0,可以使用select 命令在连接上指定数据库
#REDIS_APPENDONLY yes 指定是否在每次更新操作后进行日志记录(是否开启aof),Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电后导致一段时间内的数据丢失。因为Redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中;默认为no
#REDIS_PROTECTED_MODE no 
#REDIS_REQUIREPASS 123456

如下截图: 

# 1) The server is not binding explicitly to a set of addresses using the
#    "bind" directive.
# 2) No password is configured.
#
# The server only accepts connections from clients connecting from the
# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain
# sockets.
#
# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
protected-mode #REDIS_PROTECTED_MODE# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port #REDIS_PORT# TCP listen() backlog.
#
# In high requests-per-second environments you need a high backlog in order
# to avoid slow clients connection issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
tcp-backlog 511

7、Dockerfile

# base image
FROM docker.io/million12/centos-supervisor:latest# MAINTAINER
MAINTAINER pengfeima@powerbridge.com#初始化yum
RUN mkdir -p /etc/yum.repos.d/backup/ && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ADD CentOS-Base.repo epel.repo /etc/yum.repos.d/RUN yum clean all && yum makecache#中文编码
#RUN  yum update && yum -y install kde-l10n-Chinese telnet && yum -y install glibc-common && yum clean all  && localedef -c -f UTF-8 -i zh_CN zh_CN.utf8ENV LC_ALL en_US.utf8#解决AWT类库的问题
#RUN yum -y install fontconfig && fc-cache --force#添加依赖库
RUN yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel curl tree# make a new directory to store the redis files
RUN mkdir /etc/redis# copy the jdk  archive to the image,and it will automaticlly unzip the tar file
ADD redis-6.2.6.tar.gz /etc/redis/#WORKDIR /etc/redis# make a symbol link
RUN cd /etc/redis/redis-6.2.6 && pwd && make -f Makefile DEST_PATH=/etc/redis && make install
#add conf.d
ADD redis.conf /etc/redis/redis-6.2.6/# change config
RUN mkdir -p /var/redis/data && mkdir -p /var/redis/log && chown +777 /var/redis /var/redis/log#start redis
RUN useradd redis # set environment variables
ENV REDIS_HOME /etc/redis/
ENV PATH ${REDIS_HOME}/sbin:$PATH
ENV REDIS_DAEMONIZE no
ENV REDIS_PORT 6379
ENV REDIS_TIMEOUT 0
ENV REDIS_LOGLEVEL notice
ENV REDIS_DATABASES 16
ENV REDIS_APPENDONLY yes
ENV REDIS_PROTECTED_MODE no
ENV REDIS_REQUIREPASS 123456# set supervisor.dRUN mkdir -p /etc/supervisor.d && mkdir -p /usr/project
ADD start_shell.sh /usr/project/
ADD supervisord.conf /etc/

制作 :

材料备齐后只需要执行docker build -t 容器名:v1.0 . 即可

docker build -t redis:v1.0 .

亮点:1、针对下列截图中的参数修改只需要使用环境变量覆盖即可

REDIS_DAEMONIZE=no
REDIS_PORT=6379
REDIS_TIMEOUT=0
REDIS_LOGLEVEL=notice
REDIS_DATABASES =16
REDIS_APPENDONLY =yes
REDIS_PROTECTED_MODE=no
REDIS_REQUIREPASS =123456

如果不能满足需求,可以使用同样的语法分别修改  start_shell.sh,redis.conf、Dockerfile(别漏了)

2、该镜像很重,因为引入了完善的语言包,可以通过屏蔽Dockerfile中的中文编码库来减负(只是简体中文不需要这么复杂)

 

 

 

 

 

相关文章:

基于supervisor制作基于环境变量配置的redis

背景: redis 的镜像很多很多,但都需要直接修改配置文件,不符合我们公司当前环境变量解决一切容易配置的思路。 材料: 1、CentOS-Base.repo [base] nameCentOS-$releasever enabled1 failovermethodpriority baseurlhttp://mirr…...

动态规划part01 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 …...

CSS实现图片边框酷炫效果

一、前言 我们在浏览一些网页时,经常会看到一些好看酷炫的元素边框效果(如下图),那么这些效果是怎么实现的呢?我们知道,一般的边框,要么是实线,要么是虚线(点状&#xf…...

遇到 MySQL 死锁问题如何解决?

终于来到死锁检查线程的第三步,可以解决死锁了。 作者:操盛春,爱可生技术专家,公众号『一树一溪』作者,专注于研究 MySQL 和 OceanBase 源码。 爱可生开源社区出品,原创内容未经授权不得随意使用&#xff0…...

Pyinstaller打包OSError: could not get source code【终极解决】

pyinstaller 打包的时候,发现只要是torch.jit.script装饰的函数,会报以下错误: Traceback (most recent call last):File "torch/_sources.py", line 25, in get_source_lines_and_fileFile "inspect.py", line 1123, i…...

【计算机毕业设计】707高校宿舍管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…...

从C++看C#托管内存与非托管内存

进程的内存 一个exe文件,在没有运行时,其磁盘存储空间格式为函数代码段全局变量段。加载为内存后,其进程内存模式增加为函数代码段全局变量段函数调用栈堆区。我们重点讨论堆区。 托管堆与非托管堆 C# int a10这种代码申请的内存空间位于函…...

Linux进程间通信--IPC之无名管道

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。 IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams支持不同主机上的两个进程的IPC。...

Oracle19c数据库system密码锁定

一、在oracle 19c数据库中,cdb中system用户被锁定,locked 二、所在的pdb中的system用户状态是正常的,但不可用,连接的时候提示账号已锁定 三、解决 在cdb中将system用户解锁。 alter user system account unlock;...

java之hashCode() 方法和 equals(Object obj) 方法之间的关系

1、 hashCode() 方法和 equals(Object obj) 在Java中,hashCode() 方法和 equals(Object obj) 方法之间的关系是紧密相连的,特别是在使用基于哈希的集合(如 HashSet、HashMap、HashTable 等)时。这两个方法共同决定了对象在哈希表…...

首届「中国可观测日」圆满落幕

首届中国可观测日(Observability Day)在上海圆满落幕,为监控观测领域带来了一场技术盛宴。作为技术交流的重要平台,此次活动不仅促进了观测云与亚马逊云科技之间的深化合作,更标志着双方共同推动行业发展的重要里程碑。…...

[Docker][Docker NetWork][下]详细讲解

目录 1.网络管理命令1.docker network creatre2.docker network inspect3.docker network connect4.docker network disconnect5.docker network prune6.docker network rm7.docker network ls 2.docker bridge 详解0.基本概念1.默认 bridge2.自定义 bridge3.DNS解析4.端口暴露…...

安卓系统在未来如何更好地解决隐私保护与数据安全的问题?

安卓系统可以通过以下方式更好地解决隐私保护与数据安全的问题: 强化权限控制:安卓系统可以进一步加强对应用程序权限的管理,确保用户能够清楚地知道应用程序需要哪些权限,并给予用户更多的控制权,例如允许用户选择性地…...

MySQL innodb单表上限一般多少

参考:https://www.zhihu.com/question/351797203/answer/3137174084 1.MySQL innodb单表上限为啥都说是2k万条 2.GaussDB for MySQL 为啥可以突破单表2k万的限制 要讨论这两个问题,得先明确性下实际的DB部署环境 表是索引数据是放在磁盘上的&#xf…...

更小、更安全、更透明:Google发布的Gemma推动负责任AI的进步

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

基于Django框架的医疗耗材管理系统的设计实现-计算机毕设定制-附项目源码(可白嫖)48999

摘 要 在目前的形势下,科技力量已成为我国的主要竞争力。而在科学技术领域,计算机的使用逐渐达到成熟,无论是从国家到企业再到家庭,计算机都发挥着其不可替代的作用,可以说计算机的可用领域遍及生活、工作的各个方面。…...

物联网协议篇(1):modbus tcp和modbusRTU的区别是什么?

Modbus TCP和Modbus RTU是Modbus协议中的两种主要变体,它们在多个方面存在显著的区别。以下是它们之间的主要区别: 1. 物理层和数据传输方式 Modbus TCP (TCP/IP): 使用以太网作为物理层,通过TCP/IP协议进行通信。数据以数据包的形式在TCP连接上传输,具有较高的通信速度和…...

JVM系列 | 对象的消亡——HotSpot的设计细节

HotSpot 的细节实现 文章目录 HotSpot 的细节实现OopMap 与 根节点枚举根节点类型及说明HotSpot中的实现 OopMap 与 安全点安全点介绍如何保证程序在安全点上? 安全区域记忆集与卡表记忆集卡表 写屏障并发的可达性分析(与用户线程)并发可达性…...

vue 运行或打包过程报错 JavaScript heap out of memory(内存溢出)

安装 increase-memory-limit npm install increase-memory-limit 运行increase-memory-limit ./node_modules/.bin/increase-memory-limit 运行后会报以下错误: "node --max-old-space-size10240" 不是内部或外部命令,也不是可运行的程序…...

git分支提交方法

先下载最新代码 改动文件覆盖 cp 文件到~/file/ git add添加文件 git commit提交本地 建立分支 git diff .c git status -uno git add git commit git checkout -b issue-lyd git push origin issue-lyd...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...