【注】文末有本文所需文件下载。

一、准备微服务的Java运行环境

准备jar包,这里我们以 jre-8u271-linux-x64.tar.gz 为例。刚这个文件上传到目标 Linux 服务器上,Winscp 用 root 用户上传,直接将  jre-8u271-linux-x64.tar.gz 上传到 /root 目录下。


用 SSH远程登录软件 (这里以 MobaXterm 为例,也可以用其它程序)登录。敲入 ls 命令,应能看见该文件。

这是个压缩包文件,敲入 tar zvxf jre-8u271-linux-x64.tar.gz 进行解压。


结束后,再 ls ,会看见多出一个文件夹。

执行以下命令将该目录移动动 /usr/java下。

	mv jre1.8.0_271 /usr/java/

可以通过 Winscp 查看是否移到指定位置。

二、开放本机对应的端口

利用 Winscp 找到 /etc/firewalld/zones 文件夹。里面应该有个 public.xml 文件。

右键该文件,点编辑。

加入所需开放的端口号。本集群开放的端口号是一个连续的区间,所以可以如下图所示进行编写。

保存,需刷新一下,看看是否已经成功写入。

利用上面所提的 SSH 终端软件登录后,执行以下一行命令使之生效。


	firewall-cmd --reload


三、准备微服务的目录和相关文件


如上图:

1. bin 中存放的是执行脚本文件。

2. logs 是服务程序产生的日志输出的位置。

3. pid 服务启动时会根据 bin 目录中的脚本文件的内容,生成一个pid文件。该文件是文本文件,里面仅仅存放了该服务启动时的系统进程ID(Process ID)。

4. cloud-cms-article-0.0.1-SNAPSHOT.jar 服务运行的主程序的类库,相当于Windows下的 dll 文件。

5. application.yml 和 bootstrap.yml 是配置文件。根据 bin 中启动脚本的需要,一般至少要有 application.yml 。

用 EditPlus 打开 application.yml ,内容如下图。


这里面注意格式。缩进方式为子节点为向后两个空格。且冒号后必须有一个英文空格。要特别注意下面两个参数,如果要修改,一般就是改这两个了。

port: 18822   //这个是端口号即当前服务运行使用的端口号,端口号不能与其它服务冲突,必须是唯一。

name: cloud-cms-article  //这是当前微服务的名称。一旦修改,在引用该微服务时,必须使用这个名称。

6. cloud-cms-article.service 这个文件是准备在系统服务中使用的文件,放在当前目录下只是便于归类。后面将会讲到。


四、用SCP客户端(Winscp)上传这面这个目录到指定位置

在个人习惯中我喜欢将这些微服务布署在 /home 下。因此,我在 /home 下建了一个目录 springcloud ,用于存放这些微服务。将上面的文件夹上传后效果如下图所示。


五、查看 bin 下执行文件的内容与当前位置是否一致

双击进入 bin 目录,选中 startup.sh 。该文件是启动文件,用于启动上面所说的 cloud-cms-article-0.0.1-SNAPSHOT.jar 。

#!/bin/sh

HOME_PATH=/home/springcloud/cloud-cms-article
APP_NAME=cloud-cms-article
MAIN_JAR=cloud-cms-article-0.0.1-SNAPSHOT.jar
SKYWALKING_JAR=/usr/local/skywalking/agent/skywalking-agent.jar
SKYWALKING_SRV=172.17.18.40:11800

cd $HOME_PATH

nohup /usr/java/jre1.8.0_271/bin/java -Dspring.config.location=$HOME_PATH/application.yml,$HOME_PATH/bootstrap.yml -Dlogging.file=$HOME_PATH/logs/run.log  -javaagent:$SKYWALKING_JAR   -DSW_AGENT_NAME=$APP_NAME  -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=$SKYWALKING_SRV -jar $HOME_PATH/$MAIN_JAR > $HOME_PATH/logs/run.out 2>&1 &
#nohup /usr/java/jre1.8.0_271/bin/java -Dspring.config.location=$HOME_PATH/application.yml,$HOME_PATH/bootstrap.yml -Dlogging.file=$HOME_PATH/logs/run.log   -jar $HOME_PATH/$MAIN_JAR > $HOME_PATH/logs/run.out 2>&1 &

echo $! > $HOME_PATH/pid/runing.pid

选中注意上面的 HOME_PATH 和 APP_NAME 以及 MAIN_JAR 的值是否正确。

说明:SKYWALKING 是一个链路追踪和性能监控程序,本项目中装了,不是必须的。下面有两行 nohup 。。。 一行被注释的就是没有使用 SKYWALKING  的。具体使用哪个,根据个人需要。

注意:如果你的虚拟机中没有采用 SKYWALKING ,即没有这个操作步骤,请采用第二个 nohup。#代表注释,即此行无效!否则在运行时,run.out会报错。


选中 shutdown.sh ,这个是停止服务的执行文件。

#!/bin/sh
HOME_PATH=/home/springcloud/cloud-cms-article

PID=$(cat $HOME_PATH/pid/runing.pid)
kill -9 $PID
find $HOME_PATH/pid/ -name "*.pid" -exec rm -rf {} \;
find $HOME_PATH/logs/ -name "*.out" -exec rm -rf {} \;


和上面一样,需要注意目录的路径是否正确。

最后我们要给该文件夹设置权限,以便于可以启动。可以利用 Winscp ,右键 cloud-cms-article 目录,在属性一页中,如上图设置。可以利用下面的八进制进行设置,这里我设置的整个目录的权限是 755 (输入后上面的权限子项会自动调整)。注意要选中下面的“递归设置所有者、分组与权限”(即将目录下的子目录的也进行同样的设置)。

如果用命令行,则是在 Putty 终端里输入。

chmod 755 -Rf /home/springcloud/cloud-cms-article


六、将此服务布署为服务

在服务器中运行该微服务,可以利用上面的 start.sh 进行。停止可以利用 shutdown.sh 。这是一种手动方式。

一般我们需要将其布署成后台自动启动的系统服务。这一步的关键是上面说的 cloud-cms-article.service 这个文件。用 EditPlus 打开该件,内容如下:

[Unit]
Description=cloud-cms-article
After=network.target

[Service]
Type=forking
User=root
ExecStart=/home/springcloud/cloud-cms-article/bin/startup.sh
ExecStop=/home/springcloud/cloud-cms-article/bin/shutdown.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

和上面一样,需要检查里面的 ExecStart(启动)和 ExecStop (停止)路径是否有效。其它需要了解的是:

Description=cloud-cms-article 服务的系统标识,即服务的名称为 cloud-cms-article  

After=network.target 该选项的意思是在自启动时,等待网络启动正常后才会启动该服务

User=root 该服务使用的启动用户。

如检查无误,我们需要将这个文件上传到目标服务器的 /usr/lib/systemd/system 下。

最后使用下面命令将此服务通知系统进行添加并进行自启动。

systemctl enable cloud-cms-article.service


七、最后启动服务

在启动服务前,需注意,有些微服务是有配置文件的,本例中就有一个:  lerx.setting ,该文件位于 /root/config 下。因配置文件中有安全方面的配置,不宜公开,可以从其它主机中获得,也可以通过询问获得,并将其上传到服务器的 /root/config 下

最后执行下面一行启动服务。

systemctl start cloud-cms-article.service

我们此时双击logs文件夹,如果正常,将会出现 run.out 运行状态日志输出文件。

右键进行刷新,可以看到文件大小会不断变化。一般在40秒后会启动结束。可以右键编辑此文件(编辑页也可刷新查看实时),一般出现以下信息即为启动成功。

....
2024-03-06 01:11:01.329  INFO 29908 --- [-executor-16843] com.alibaba.nacos.common.remote.client   : [587eb791-c617-45cf-a7ae-688126019121] Receive server push request, request = NotifySubscriberRequest, requestId = 40192
2024-03-06 01:11:01.331  INFO 29908 --- [-executor-16843] com.alibaba.nacos.common.remote.client   : [587eb791-c617-45cf-a7ae-688126019121] Ack server push request, request = NotifySubscriberRequest, requestId = 40192

主要看 Ack server push request 。即 Ack 这三个字符出现,即表明完成。


八、到 Nacos 中核验

在浏览器中打开 Nacos ,点击“服务管理”下的“服务列表”。不出意外,应该会看见 cloud-cms-article 。点击该服务右边的“详情”,可以看见该微服务的所有运行主机的 IP 。

如在服务详情的集群中看见服务器的 IP ,则说明布署成功。


【说明】本文中前面的一些环境配置只需操作一次,在布署另外的微服务时,不需要再进行。


点此下载本文所需的文件包