背景
Nacos是阿里開源的服務注冊組件,能夠簡單的實現微服務的注冊與發現機制.
但是官方並沒有提供 sytemd的服務腳本, 也沒有提供rpm包的方式.
公司里面使用 nacos的場景越來越多, 部署起來服務開機啟動與保活的要求越來越高
為了簡單起見,加之最近一直在研究rpmbuild 索性直接使用rpmbuild打包進行處理
場景為:
可以一鍵安裝, 設置服務開啟自動啟動. 但是需要頁面自行修改密碼.
編寫systemd的腳本
編寫systemd的腳本還是比較簡單的 主要如下
注意 我這邊不進行 cat > EOF的機制, 可以學習一下systemd腳本的路徑以及文件信息
vim /etc/systemd/system/nacos.service
[Unit]
Description=nacos server
Wants=network-online.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/data/nacos/bin/
ExecStart=/data/nacos/bin/startup.sh -m standalone
Restart=always
[Install]
WantedBy=multi-user.target
編寫systemd的腳本
1. 需要先期將nacos文件放置好位置 需要手工或者是 rpm install的方式安裝與/data/nacos目錄下.
2. 需要指定工作目錄.
3. 需要修改startup.sh 內的啟動腳本, 建議可以講OpenJDK添加到 /data/nacos目錄下.通過絕對路徑指向
4. 注意需要設置嚴格的啟動執行權限, 避免啟動失敗.
文件准備與啟動腳本修改
/data/nacos
[root@k8s nacos]# tree -L 1
.
├── bin
├── conf
├── data
├── jdk1.8.0_302
├── LICENSE
├── logs
├── NOTICE
└── target
文件准備與啟動腳本修改
注意需要修改 /data/nacos/bin 目錄下面的 startup.sh 腳本添加 JAVA_HOME的路徑才可以.
因為我這邊是絕對路徑, 修改起來比較簡單.
添加一句話即可.
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/data/nacos/jdk1.8.0_302
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME
export JAVA_HOME=/data/nacos/jdk1.8.0_302
可以修改最上面一樣, 也可以修改添加export的一行.
注意最后面一定不要添加 / 不然服務會啟動失敗
文件准備與啟動腳本修改
修改完成之后:
第一步
cd /data/nacos/bin
./startup.sh -m standalone 的方式驗證服務可以啟動.
第二步
將nacos.service 復制到 /etc/systemd/system/ 目錄下(或者是直接編輯)
使用 systemctl restart nacos
驗證服務可以啟動.
注意nacos的啟動時間 應該在 10s-30s 之間, 耐心等待, 如果有問題需要查看 out.log
如果沒問題, 可以進行下一步的操作.
編寫nacos.spec文件
與之前rabbitmq 一致 (那個文檔少在rabbitmqctl等腳本里面少添加了HOME環境變量)
自行編輯一個 nacos.spec文件 內容如下 不在過多描述了
#DEFINES
%define _binaries_in_noarch_packages_terminate_build 0
%global __os_install_post %{nil}
Name: nacos
Version: data_2.0.3
Release: 1%{?dist}
Summary: Rpm package for nacos ...
Group: nacos
License: Copyright © zhaobsh
URL: https://www.zhaobsh.com/
Source0: nacos/
Source1: nacos.service
BuildArch: x86_64
Autoreq: no
%description
Rpm package for nacos
%install
app_dir=%{buildroot}/data
%{__install} -p -D %{SOURCE1} $RPM_BUILD_ROOT/etc/systemd/system/nacos.service
mkdir -p $app_dir
echo pwd
echo %{SOURCE0}/nacos/
cp -r %{SOURCE0}/nacos/ $app_dir/
cp -r %{SOURCE1} /etc/systemd/system/nacos.service
%files
%defattr(777,root,root)
/data/nacos
/etc/systemd/system/nacos.service
%dir
/data/nacos
打包nacos的rpm文件
注意與 spec 里面描述必須完全一致 需要在 /root/rpmbuild/SOURCES 里面添加內容一下,僅需要注意nacos相關的
注意 nacos下面需要有最新的nacos以及最新的jdk等內容.
[root@k8s SOURCES]# pwd
/root/rpmbuild/SOURCES
[root@k8s SOURCES]# ll
總用量 24
drwxr-xr-x 8 root root 116 10月 31 00:51 nacos
-rw-r--r-- 1 root root 242 10月 31 00:55 nacos.service
drwxr-xr-x 9 root root 4096 10月 30 23:43 nginx
-rw-r--r-- 1 root root 176 10月 31 00:12 nginx.service
drwxr-xr-x 8 root root 4096 10月 30 23:16 rabbitmq
-rw-r--r-- 1 root root 609 10月 30 23:17 rabbitmq.service
drwxr-xr-x 2 root root 61 10月 28 20:36 redis
-rw------- 1 root root 166 10月 31 00:15 redis.service
然后進入 /root/rpmbuild/SPECS
執行命令為:
time rpmbuild -bb nacos.spec
即可獲取nacos的rpm包.
安裝與使用
rpm -ivh nacos-data_2.0.3-1.el7.x86_64.rpm
systemctl enable nacos && systemctl restart nacos
使用 http://ip:8848/nacos 用戶nacos 密碼 nacos 登錄
注意 第一次務必修改密碼,已策安全