编译打包rabbitmq然后一键部署的简单方法

编译,打包,rabbitmq,然后,一键,部署,简单,方法 · 浏览次数 : 219

小编点评

**init.sh** ```bash # Warning: This script will clear away any existing single-node data!!! read answer; if [ $answer != YES ]; then echo "Exiting initialization!" exit 1 fi # Get the current RabbitMQ home path dir=$(dirname $PWD) # Close 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 # Clean up before data echo "Please manually execute the following two commands, note that adding spaces or deleting errors may cause issues: rm -r $dir/var/* echo "rm $dir/.erlang.cookie" echo "startRabbitmq" nohup ./rabbitmq-server 2>&1 > /dev/null & sleep 5 # Get the ready-setting password information read password; while true ; do docount=$(lsof -i:5672 | wc -l) if [ $count != 0 ]; then echo "Service started successfully" ./rabbitmq-plugins enable rabbitmq_management echo "Set password and user information" ./rabbitmqctl change_password guest $password ./rabbitmqctl add_user admin $password ./rabbitmqctl set_permissions -p / admin "*.*"* ./rabbitmqctl set_user_tags admin administrator break elif [ $count == 0 ]; then echo "Waiting RabbitMQ Started" sleep 20 fi done ``` **start.sh** ```bash # Start RabbitMQ nohup ./rabbitmq-server 2>&1 > /dev/null & sleep 5 ``` **stop.sh** ```bash # Stop RabbitMQ ./rabbitmqctl stop ```

正文

摘要

之前总结过一版,但是感觉不太全面
想着本次能够将使用中遇到的问题总结一下.
所以本次是第二版

介质下载

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然后一键部署的简单方法相似的内容:

编译打包rabbitmq然后一键部署的简单方法

摘要 之前总结过一版,但是感觉不太全面 想着本次能够将使用中遇到的问题总结一下. 所以本次是第二版 介质下载 rabbitmq 不区分介质的打包文件 rabbitmq-server-generic-unix-3.11.6.tar.xz 注意需要上官网.公司的网络无法下载.建议自行查找 erlang的

Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包

Jenkins Pipeline 流水线 步骤 拉取SVN代码 -> Maven 构建 -> Docker 编译 -> 发布至阿里云仓库 -> K8S 更新 Jenkins插件安装 Localization: Chinese (Simplified) Subversion 【2.16.0】 --从S

【Android逆向】滚动的天空中插入smali日志

1. 编写一个MyLog.java 放到一个android工程下,编译打包,然后反编译拿到MyLog的smali代码 package com.example.logapplication; import android.util.Log; public class MyLog { public st

Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本

Docker Jenkins 安装配置 Windows 2016 安装 Jenkins 前置条件可参考 Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包 Jenkins Pipeline 流水线 - 添加节点 使用代理 Jenkins Pipeline 流水线

springboot~封装依赖引用包jar还是pom,哪种更规范

将多个第三方包封装成一个项目后,如果你的目的是让其他开发人员可以直接引用这些依赖,一般来说有两种常见的方式: 打成JAR包:将封装好的项目编译打包成JAR文件,其他开发人员可以将这个JAR文件添加到他们的项目中,并在项目的构建工具(比如Maven)中配置该JAR作为依赖。这样做的好处是简单直接,其他

bazel学习

bazel学习 a fast, scalable, multi-language and extensible build system bazel就是一个编译打包工具,类似于make、cmake等 安装 ⚠️:Centos7系统安装bazel4 参考:https://docs.bazel.buil

antd pro 使用心得

最近用 antd pro 开发了一些 web 小工具。 antd pro 不仅仅是升级版的 antd 组件,更重要的是提供了全套的前端解决方案,包括前端工程的编译打包,路由配置,数据管理,样式和资源的引用,和后端的交互方式。 甚至对于网站的国际化也有支持。 本篇是近期使用antd pro 时,用到的

浅析Vite本地构建原理

前言 随着Vue3的逐渐普及以及Vite的逐渐成熟,我们有必要来了解一下关于vite的本地构建原理。 对于webpack打包的核心流程是通过分析JS文件中引用关系,通过递归得到整个项目的依赖关系,并且对于非JS类型的资源,通过调用对应的loader将其打包编译生成JS 代码,最后再启动开发服务器。

Electron Mac 打包报 Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT 解决方法

Electron 项目使用vue-cli-electron-builder创建,原来我的 Mac 上编译都很正常 自从 Mac 升级到 mac OS ventura version 13.0.1 后打包报错,electron-builder 编译 dmg 安装包编译不出来 报如下错误 • build

【效率提升】maven 转 gradle 实战

gradle是一个打包工具, 是一个开源构建自动化工具,足够灵活,可以构建几乎任何类型的软件,高性能、可扩展、能洞察等。其中洞察,可以用于分析构建过程中数据,提供分析参考,方便排查问题和不断优化构建性能,以下一次编译分析报告。