使用rpmbuild打包erlang和rabbitmq进行部署服务的方法
使用rpmbuild打包erlang和rabbitmq进行部署服务的方法
背景说明
1. rabbitmq 是基于 erlang 开发的消息列队, 本身rabbitmq 自己不区分架构.
2. 但是erlang是区分架构的, 需要针对不同架构进行编译
3. rabbitmq 的命令 需要获取erlang的二进制的路径.
4. 有两种方式来处理, 第一种是将erlang的二进制添加进/usr/bin等.
5. 另外一种方式 可以修改rabbitmq的命令的 环境变量. 可以进行处理.
获取安装包
登录rabbitmq的官网, 从官网下载 erlang的二进制
可以从github上面下载rabbitmq的可执行文件便于使用.
otp_src_24.0.tar.gz
rabbitmq-server-generic-unix-3.9.8.tar.xz
分别在arm和x86里面编译erlang
注意 最好是找台能上网的机器, 编译起来比较费劲不然.
需要安装的rpm包主要如下:
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
注意某些环境下可能需要 --without-javac 的方式来编译
本次以银河麒麟ARM版本为例进行.
解压缩 erlang的源码, cd 到otp的目录中去
./configure --prefix /opt/rabbitmq/erlang --without-javac
注意,这样处理能够节约时间也可以讲源码和编译后的代码进行区分.
编译完成之后 进入
/opt/rabbitmq/erlang/bin
执行
./erl
验证版本.
Erlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]
Eshell V12.0 (abort with ^G)
1>
正常情况下如此就可以了.
- 这里说一下比较异常的情况.
国产linux 内都带有 openssl1.1左右的版本了 erlang 24的版本可以正常使用
很多centos7 的系统会报缺少 libcrypto.so.1.1
最简单的解决办法 是从一个有的环境, 职级复制一个这个同架构的二进制文件到
/usr/lib 目录下就可以避免这个问题.
- rabbitmq 比较简单 直接解压缩到 /opt/rabbitmq 内部即可.
rabbitmq的处理
注意 rabbitmq 如果按照上面的目录 所有的可执行文件都在
/opt/rabbitmq/sbin 目录下面
[root@Kylin-arm-vm sbin]# ll
总用量 44
-rwxrwxrwx 1 root root 897 10月 28 19:19 rabbitmqctl
-rwxrwxrwx 1 root root 651 10月 28 19:19 rabbitmq-defaults
-rwxrwxrwx 1 root root 906 10月 28 19:19 rabbitmq-diagnostics
-rwxrwxrwx 1 root root 6929 10月 28 19:19 rabbitmq-env
-rwxrwxrwx 1 root root 902 10月 28 19:19 rabbitmq-plugins
-rwxrwxrwx 1 root root 859 10月 28 19:19 rabbitmq-queues
-rwxrwxrwx 1 root root 6044 10月 28 19:19 rabbitmq-server
-rwxrwxrwx 1 root root 899 10月 28 19:19 rabbitmq-streams
-rwxrwxrwx 1 root root 902 10月 28 19:19 rabbitmq-upgrade
- 注意这里面需要进行编辑和修改. 需要保证 当前系统没有安装 erlang 23 以下的版本 不然会有异常
vim 编辑所有的 可执行文件
在每个文件的头部 增加如下内容
export PATH=$PATH:/opt/rabbitmq/erlang/bin
这样的话, 命令就可以直接执行了, 不需要环境变量里面安装 erlang了.
执行效果为
[root@Kylin-arm-vm sbin]# ./rabbitmqctl version
3.9.8
- 如果没有别的追求, 直接使用 rabbitmq-server 运行服务也是可以的.
高一点的追求
尝试作为服务运行, 这样的话可以实现开机自动启动,
以及rabbitmq异常时能够自动保活处理.
方法也比较简单, 编辑一个 rabbitmq.service 即可
注意 这个名字故意与 rabbitmq-server.service的官方文档进行区分.
为了在没有网络的情况下快速安装rabbitmq 以及符合安全可靠机器的安装目录要求.
编辑一个 rabbitmq.service 的内容主要如下:
- 注意: 这个rabbitmq.service 与 前面的环境变量 其实也不冲突, 主要是systemd管理服务时环境变量的处理不是非常优雅.
[Unit]
Description=RabbitMQ broker
After=syslog.target network.target
[Service]
Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/rabbitmq/erlang/bin"
Environment="HOME=/opt/rabbitmq/"
Environment="LIB=/opt/rabbitmq/erlang/lib:/usr/lib"
Type=notify
LimitNOFILE=65536
LimitNPROC=65535
WorkingDirectory=/opt/rabbitmq
ExecStart=/opt/rabbitmq/sbin/rabbitmq-server
ExecStop=/opt/rabbitmq/sbin/rabbitmqctl stop
ExecStop=/bin/sh -c "while ps -p $MAINPID >/dev/null 2>&1; do sleep 1; done"
Restart=always
NotifyAccess=all
TimeoutStartSec=3600
[Install]
WantedBy=multi-user.target
- 注意 里面模仿了一些别的官方文档的设置. 不过我好像没搞定 15672的 web端口访问.
- 注意 环境变量需要给足, 避免程序出现异常.
- 注意 Restart 的设置, 其实跟 docker run 时添加的 --restart=always 道理是一样的
systemctl enable rabbitmq && systemctl restart rabbitmq
即可实现服务开机启动和简单的保活
再高一点的追求
- 很多环境要求必须 使用 rpm包进行安装, 而且为了解决文件比较多和乱 手工处理容易出错的问题.
- 建议还是将如上的所有的文件打包成 rpm包来进行分发和使用 比较简单.
- 前提条件是 yum install rpm-build 搭建好 rpmbuild的环境
yum install rpm-build -y
mkdir -p /root/rpmbuild/{SPECS,SOURCES,RPMS}
注意先将资源文件放置到熬如下目录
/root/rpmbuild/SOURCES
内容为:
[root@Kylin-arm-vm SOURCES]# ll
总用量 12
drwx------ 9 root root 4096 10月 28 17:33 rabbitmq
-rw------- 1 root root 603 10月 28 19:18 rabbitmq.service
drwx------ 2 root root 61 10月 28 20:30 redis
-rw------- 1 root root 163 10月 28 20:19 redis.service
[root@Kylin-arm-vm SOURCES]# pwd
/root/rpmbuild/SOURCES
注意 我这里面 打包了 redis和rabbitmq 我感觉redis 比较简单. rabbitmq 可以讲的东西多一点.
所以就不说怎么打包redis了.
- 打包好文件和位置之后, 就是需要创建spec文件了, 这里依旧是模仿官方的spec文件进行处理
位置为 /root/rpmbuild/SPECS/
添加一个简单的内容 vim rabbitmq.service
#DEFINES
%define _binaries_in_noarch_packages_terminate_build 0
%global __os_install_post %{nil}
Name: rabbitmq
Version: 3.9.8
Release: 1%{?dist}
Summary: Rpm package for Rabbitmq ...
Group: gscloud-rabbitmq
License: Copyright Inspur 浪潮通用软件有限公司
URL: https://www.inspur.com/
Source0: rabbitmq/
Source1: rabbitmq.service
BuildArch: noarch
Autoreq: no
%changelog
* Sun Apr 18 17:26:47 CST 2021 gscloud-author:zhaobsh
Initial Version ...
%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
- 注意 核心 是 install 和 files 处的脚本,一定要保证正常可用.
- 使用 rpmbuild -bb rabbitmq.spec 就可以进行编译了.
- 注意我这里是自己先编译 后rpm打包, 很多教程可以实现rpm打包过程时编译(比如之前升级openssh)
- 感觉没有优劣, 自己打包的好处是有问题可以直接看了修改, rpm的话 等待比较长一些.
- 打包好的文件在 /root/rpmbuild/RPMS 下面 根据架构存放
- 其他机器执行 rpm -ivh xxxx.rpm 即可.
使用rpmbuild打包erlang和rabbitmq进行部署服务的方法的更多相关文章
- 高可用rabbitmq集群服务部署步骤
消息队列是非常基础的关键服务,为保证公司队列服务的高可用及负载均衡,现通过如下方式实现: RabbitMQ Cluster + Queue HA + Haproxy + Keepalived 3台ra ...
- Wix打包系列(五) 部署数据库
原文:Wix打包系列(五) 部署数据库 很多人在使用vs进行打包的时候,经常会为数据库部署的问题犯愁,即便是重写Installer类的方法,也不是很可靠方便,下面我们来看看在wix中如何部署数据库. ...
- 使用rpmbuild打包时不对文件进行strip操作
使用rpmbuild打包时不对文件进行strip操作 摘自: https://www.ichenfu.com/2017/11/20/rpmbuild-not-strip/ By Chen Fu 发表于 ...
- rabbitmq一键部署脚本
1.新建一个名字叫 auto_install_rabbitmq.sh 的文件 2.将下面脚本拷贝到文件中,具体操作步骤在注释里面 #环境 linux #一键安装rabitmq,在linux环境中使用 ...
- IDEA中将工程打包成war包及部署到Tomcat流程
工程打包成war包及部署到Tomcat流程 再IDEA开发工具中,将工程打包成war包流程: 父pom里需要移除内置的tomcat <dependency> <groupId> ...
- (转) Tomcat部署Web应用方法总结
原文:http://blog.csdn.net/yangxueyong/article/details/6130065 Tomcat部署Web应用方法总结 分类: Java web2011-01-11 ...
- Tomcat部署Web应用方法总结
转载:http://m.blog.csdn.net/blog/u012516903/15741727 Tomcat部署Web应用方法总结 在Tomcat中部署Java Web应用程序有两种方式:静态部 ...
- 使用 git post-receive 钩子部署服务端代码
在 git 中提交服务器源码的时候,如果能够直接更新到测试服务器,并且重启服务使其生效,会节省懒惰的程序员们大量的时间. git 的 Server-side hook (服务端钩子/挂钩)可以用来做件 ...
- Tomcat学习(一)------部署Web应用方法总结
Tomcat部署Web应用方法总结 在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署. 在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署 静态部署 ...
- (四)RabbitMQ消息队列-服务详细配置与日常监控管理
原文:(四)RabbitMQ消息队列-服务详细配置与日常监控管理 RabbitMQ服务管理 启动服务:rabbitmq-server -detached[ /usr/local/rabbitmq/sb ...
随机推荐
- MindSpore实践:对篮球运动员目标的检测
摘要:本文讲述的是MindSpore对篮球运动员目标的检测应用,通过AI技术辅助对篮球赛场进行分析. 本文分享自华为云社区<MindSpore大V博文系列:AI对篮球运动员目标的检测>,原 ...
- 案例解读华为隐私计算产品TICS如何实现城市跨部门数据隐私计算
摘要:本文介绍华为可信智能计算服务TICs是如何助力城市跨部门数据实现隐私计算的. 本文分享自华为云社区<基于华为隐私计算产品TICS实现城市跨部门数据隐私计算,助力实现普惠金融>,作者: ...
- Java程序员都要懂得知识点:原始数据类型
摘要:Java原始数据类型有short.byte.int.long.boolean.char.float.double.原始数据是未处理的或简化的数据,它构成了物理存在的数据,原始数据具有多种存在形式 ...
- 你会几种读取/加载 properties配置文件方法
摘要:在java项目中经常会使用到配置文件,这里就介绍几种加载配置文件的方法. 本文分享自华为云社区<[Java]读取/加载 properties配置文件的几种方法>,作者:Copy工程师 ...
- 火山引擎数智平台旗下DataWind升级半年报 6大功能助力企业数据消费
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 "以数据消费促数据生产"--是火山引擎提出的数据飞轮的核心理念,在这一理念的指导下,智能数 ...
- 火山引擎 DataTester :让字节“跳动”起来的 A/B 实验平台
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流 火山引擎 DataTester 不仅对外提供服务,同时也是当前字节跳动内部所应用的 AB 实验平台. DataTes ...
- 注册中心/配置管理 —— SpringCloud Consul
Consul 概述 Consul 是一个可以提供服务发现,健康检查,多数据中心,key/Value 存储的分布式服务框架,用于实现分布式系统的发现与配置.Cousul 使用 Go 语言实现,因此天然具 ...
- 在低代码开发平台 ILLA Cloud 中使用 Hugging Face 上的模型
ILLA Cloud 是一个面向开发者的开源低代码开发平台,平台专注于帮助开发者快速建立企业内部应用,为开发者节约数据调用与页面设计的时间.平台具有面向开发者.数据整合.协同开发.灵活部署等功能与特点 ...
- C# .NET Socket SocketHelper 高性能 5000客户端 异步接收数据
网上有很多Socket框架,但是我想,C#既然有Socket类,难道不是给人用的吗? 写了一个SocketServerHelper和SocketClientHelper,分别只有5.6百行代码,比不上 ...
- Codeforces Round #731 (Div. 3) A~G 解题记录
比赛链接:Here 1547A. Shortest Path with Obstacle 3个点 \(A,B,F\) ,前提 \(F\) 点为不可经过点,问 \(A\to B\) 最短路径长度 A题没 ...