编译打包rabbitmq然后一键部署的简单方法
摘要
之前总结过一版,但是感觉不太全面
想着本次能够将使用中遇到的问题总结一下.
所以本次是第二版
介质下载
rabbitmq 不区分介质的打包文件
rabbitmq-server-generic-unix-3.11.6.tar.xz
注意需要上官网.公司的网络无法下载.建议自行查找
erlang的下载地址
https://codeload.github.com/erlang/otp/tar.gz/refs/tags/OTP-25.1.1
介质说明
rabbitmq-server-generic-unix
介质不区分架构所有Linux都可以使用,节省了很多工作量
但是erlang 比较复杂
不同架构(x86_64以及aarch64)
不同libc(CentOS7 GLIBC 2.17 CentOS8 GLIBC 2.28 OpenEuler2203 2.34)
编译出来的介质不通用,需要单独处理.
linux打包前处理
yum install openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz -y
注意尽量都要安装.
如果gcc 后者是gcc-c++安装有冲突可以忽略掉.
不带devel的是 环境可以直接使用的包
带devel 的是 带了c语言源码的 编译时可以including进来的文件.
编译是必须要这种类型的包的
erlang编译
解压缩后进入具体目录:
第一步执行 configure的处理. 注意需要设置prefix
保证安装目录的准确性
./configure --prefix /opt/rabbitmq/erlang --without-javac
注意这一步一般耗时 20秒左右.
只要看到这一步基本上就可以了.
config.status: creating config.mk
config.status: creating c_src/Makefile
第二步进行 make
这里可以简单说明一下make和make install的区别.
make 是一句config的信息进行编译连接等动作, 是用来形成 特定二进制的过程
make install 会按照prefix的路径 将二进制文件转移过去.
注意 erlang 比较复杂编译时间可能在15-25分钟, 需要慢慢等待.
查看文件信息
make install 之后会看到 在/opt/rabbitmq 下面有了erlang的目录
然后可以进入
cd /opt/rabbitmq/erlang/bin
./erl
能够看到具体的版本比如:
Erlang/OTP 25 [erts-13.1.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit:ns]
Eshell V13.1.1
基本上就可以了
再将rabbitmq的rabbitmq-server-generic-unix-3.11.6.tar.xz 文件放到/opt/rabbitmq 目录下
效果为:
[root@KylinV10SP1 rabbitmq]# ll |grep d |sort
drwxrwxrwx 2 root root 170 1月 11 11:05 escript
drwxrwxrwx 2 root root 297 1月 11 11:05 sbin
drwxrwxrwx 3 root root 17 1月 11 11:05 share
drwxrwxrwx 3 root root 22 1月 11 11:05 etc
drwxrwxrwx 4 root root 28 1月 11 11:05 erlang
drwxrwxrwx 73 root root 4096 1月 11 11:05 plugins
drwxr-xr-x 4 root root 28 1月 11 11:07 var
-rwxrwxrwx 1 root root 1274 1月 11 11:02 LICENSE-erlcloud
修改文件
因为咱们事项简单处理,摆脱环境变量的影响.
所以可以在/opt/rabbitmq/sbin 里面的启动脚本增加一些信息
比如 所有的配置文件都可以增加
export HOME=/opt/rabbitmq
export PATH=$PATH:/opt/rabbitmq/erlang/bin
这样就可以在当前文件下执行命令 而不需要 修改系统的变量
注意机器上面一定不要自主安全其他版本的erlang. 不然会有冲突
设置日志logrotate
rabbitmq的日志可能会很大, 为了防止系统宕机可以设置日志转储
cat >/opt/rabbitmq/etc/rabbitmq/rabbitmq.conf <<EOF
log.file.level = info
log.connection.level = info
log.channel.level = info
log.default.level = info
log.file.rotation.date = $D0
log.file.rotation.count = 8
log.file.rotation.size = 10240000
EOF
设置上对应的日志就可以了.
编写初始化脚本
注意 可以在sbin 目录下创建一个init 脚本进行初始化处理
注意 这个脚本尽可以执行一次. 不然会导致数据丢失.
echo "Warnning 此脚本会清理掉已有的单节点数据!!!!"
echo "请输入 YES 进行下一步(大小写敏感)"
read answer
if [ $answer != YES ]; then
echo "退出初始化!"
exit
fi
echo "获取当前rabbitmq的HOME路径"
dir=$(dirname $PWD)
echo "关闭Rabbitmq"
lsof -i:5672 |grep -v PID |awk '{print $2}' |xargs kill -9
lsof -i:4369 |grep -v PID |awk '{print $2}' |xargs kill -9
echo "清理之前的数据"
echo "请自行执行如下两个命令, 注意务必要不多增加空格, 不要删除错误的数据"
echo "注意 如果确定执行命令无问题,可以修改为 rm -rf 进行递归删除"
echo "rm -r $dir/var/* "
echo "rm $dir/.erlang.cookie"
echo "启动Rabbitmq"
nohup ./rabbitmq-server 2>&1 > /dev/null &
sleep 5
echo "请输入准备设置的密码信息:"
read password
while true ;
do
count=`lsof -i:5672 |wc -l`
if [ $count != 0 ]; then
echo "服务启动成功"
echo "开始设置联网访问"
./rabbitmq-plugins enable rabbitmq_management
echo "设置密码以及用户信息"
./rabbitmqctl change_password guest $password
./rabbitmqctl add_user admin $password
./rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
./rabbitmqctl set_user_tags admin administrator
break 2
elif [ $count == 0 ]; then
echo "Waiting Rabbitmq Started"
fi
sleep 20
done
编写启动和关闭脚本
同样在 sbin 目录下可以添加start和stop脚本
分别为
start :
nohup ./rabbitmq-server 2>&1 > /dev/null &
stop:
./rabbitmqctl stop
然后就可以一键启动初始化后的rabbitmq了.
简单问题解决
1. 如果出现启动是报错:
{"init terminating in do_boot",{error,{crypto,{"no such file or directory","crypto.app"}}}}
init terminating in do_boot ({error,{crypto,{no such file or directory,crypto.app}}})
注意需要安装
yum install -y openssl openssl-devel
2. 如果启动失败 有可能是 /opt/rabbitmq/.erlang.cookie 权限必须设置为400 才可以.
如果其他由于有权限也是无法启动的.
3. 注意erlang需要进行与glibc的版本保持匹配.
如果版本不匹配是无法使用的.
rpmbuild打包处理
需要有一个机器有rpmbuild的工具
个人认为不需要所有的架构的机器都进行一次打包
可以使用noarch的方式打包其他架构的二进制文件. 自己能够理清楚应该就足够.
这里简单说一下SPECS的文件以及其他.
SPECS的文件
- 主要进行x86_64 上面进行aarch64的SPECS的文件
#DEFINES
%define _binaries_in_noarch_packages_terminate_build 0
%global __os_install_post %{nil}
Name: rabbitmq
Version: 3.11.6
Release: 1%{?dist}
Summary: Rpm package for Rabbitmq ...
Group: zhaobsh-rabbitmq
License: Copyright zhaobsh
URL: https://www.jinanxiaolaohu.com/
Source0: rabbitmq/
Source1: rabbitmq.service
BuildArch: noarch
Autoreq: no
%description
Rpm package for Rabbitmq
%install
app_dir=%{buildroot}/opt
%{__install} -p -D %{SOURCE1} $RPM_BUILD_ROOT/etc/systemd/system/rabbitmq.service
mkdir -p $app_dir
echo pwd
echo %{SOURCE0}/rabbitmq/
cp -r %{SOURCE0}/rabbitmq/ $app_dir/
cp -r %{SOURCE1} /etc/systemd/system/rabbitmq.service
%files
%defattr(777,root,root)
/opt/rabbitmq
/etc/systemd/system/rabbitmq.service
%dir
/opt/rabbitmq
文件设置
需要在 /root/rpmbuild/SOURCES/
下面有一个 rabbtimq的文件
以及有一个 rabbitmq.service 的systemd的启动配置文件
但是不知道为什么我这边systemd的服务总是失败.
所以可能需要使用 start/stop 脚本进行处理.
进行打包
cd /root/rpmbuild/SPECS
然后执行 rpmbuild -bb rabbtitmq_aarch64.spec 即可.
安装
rpm -ivh xxx.rpm 就可以.
然后可以进入
cd /opt/rabbtitmq/sbin
执行 ./init
输入密码就可以进行rabbitmq的搭建
会启动web端的管理控制端.
会自动切动rabbtimq的服务
如果机器重启了. 可以使用 ./start 进行启动
如果想关闭 可以执行 ./stop 进行关闭
编译打包rabbitmq然后一键部署的简单方法的更多相关文章
- [转] maven打包可运行的fat-jar的简单方法
[From] https://blog.csdn.net/tearsky253/article/details/75948721 问题 在使用“mvn package”命令编译application之 ...
- 一键部署open***服务
一键部署超级简单易用的openvpn服务器,支持多证书+多账号[密码]认证 一. 服务器端部署 项目地址:https://github.com/guoew/openvpn-install 1.1. 下 ...
- 源码编译安装Apache-附一键部署脚本
1.进入apache官网https://www.apache.org/,点击Download 2.如图选择 3.选择httpd 4.下载两个包,2.2为CentOS6使用,2.4为CentOS7使用 ...
- Shell脚本一键部署——源码编译安装MySQL及自动补全工具
Shell脚本一键部署--源码编译安装MySQL及自动补全工具 编译安装MySQL 1.软件包 Mysql安装包 将安装包拖至/opt目录下,编辑一个脚本文件,将以下内容复制进去,然后source或者 ...
- kibana7.6.2内网windows系统下编译打包部署
1.在kibana根目录下执行命令: yarn build --skip-os-packages 2.报错无法下载node:将node相关文件下载放到kibana/.node_binaries/10 ...
- windows一键部署java项目
windows一键部署java项目 因为公司需求,要在windows的环境上做一键部署启动java项目,同时还要支持从安装界面动态修改配置文件的IP地址.就像安装软件一样将jdk,tomcat,mys ...
- spingboot一键部署到阿里云(Cloud Toolkit工具)
一般做法 一键部署工具 前些天在完成一个项目时候需要将springboot项目部署到服务器上, 以下是两种做法 前面介绍的是一般做法: 后面将介绍省去这些步骤的一键部署工具Cloud Toolki ...
- docker-compose一键部署java开源项目
这一年干的很多事都是为了降低我的开源项目消息推送平台austin使用门槛. 如果想学Java项目的,强烈推荐我的开源项目消息推送平台Austin(8K stars) ,可以用作毕业设计,可以用作校招, ...
- 自动化集成部署udeployer 批量统一安装一键部署
通过jenkins构建项目:version版本控制:udployer自动化集成:ucop业务巡检做到高效高可用的自动化体系. 1.0版本: 逻辑与业务分离,完美实现逻辑与业务分离,业务实现统一sh ...
- 8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署
这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说 ...
随机推荐
- 从零开始学python | 使用Python映射,过滤和缩减函数:所有您需要知道的
摘要:在本文中,您将学习Python中的三个令人印象深刻的函数,即map(),filter和reduce(). Python提供了许多预定义的内置函数,最终用户可以通过调用它们来使用它们.这些功能不仅 ...
- 再谈BOM和DOM(4):DOM0/DOM2事件处理分析
JavaScript能够让网站对用户的各种操作及时做出"反馈",响应用户交互行为,而这些就是:DOM,事件以及事件处理 DOM就是操作的元素,这个看<再谈BOM和DOM(1) ...
- 挖掘优质短视频超百万条,火山引擎DataLeap助力电商平台生态治理
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在人们的日常生活中,网购已经成为人们生活中不可或缺的购物形式. 根据<中国社交电商行业发展白皮书( ...
- Zookeeper面试题总结
1.请简述Zookeeper的选举机制 假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的. 假设这些服务器 ...
- 用Python学线性代数:概率密度函数拟合
问题 如果有一组数据,如何确定他们来自哪个统计分布? 从数据分析的角度,我们并不想要通过严格的统计方法去找到这个分布,Python中有一个可以自动拟合数据分析的库 -- distfit .这是一个py ...
- forms组件渲染标签 form表单展示信息 forms组件校验方式 form组件源码 modelform组件 django自定义中间件
目录 forms组件渲染标签 方式一:全自动渲染表单 as_p as_ul as_table 表单类的label标签 方式二:手动渲染 方式三:for循环表单对象(推荐) 查看源码 渲染标签的注意事项 ...
- AcWing 每日一题 - 暑假
本篇解题记录题源来自 AcWing 的每日一题 · 暑假 补题链接:Here Week 1 星期四 AcWing 3761. 唯一最小数 利用 map 存出现过数的下标和次数即可 vector< ...
- 揭秘 vivo 如何打造千万级 DAU 活动中台 - 启航篇
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/Ka1pjJKuFwuVL8B-t7CwuA作者:悟空中台研发团队 vivo大厦(南京) 一 ...
- C++跨DLL内存所有权问题探幽(一)DLL提供的全局单例模式
最近在开发的时候,特别是遇到关于跨DLL申请对象.指针.内存等问题的时候遇到了这么一个问题. 问题 跨DLL能不能调用到DLL中提供的单例? 问题比较简单,就是我现在有一个进程A,有DLL B DLL ...
- 《IT项目管理知识》出书了,特点:全是干货
大纲目录,及内容如下.本书属于付费内容