接上文(https://www.open-isle.com/posts/652) , 搭建好地基服务后,就可以继续搭建剩余部分了,
配置Nacos
之前下载的nacos的压缩包就派上用场了,一般在docs/install/nacos这个文件夹下,就是那个压缩包,先准备好,若没有的话可以先进入项目仓库手动下载,
进入Nacos网页控制台
1 、地址: http://IP:8080/nacos,账号密码默认为nacos(以实际部署时配置文件内的内容为准)
2、登录后进入命名空间,在右边的部分新建一个命名空间(命名空间名称以dev为例),创建好后,可以先复制生成的命名空间ID,留着备用。
3、然后进入配置管理=>配置列表,在右边的页面中,点击左上角顶上的dev(也就是刚刚创建的命名空间),进入后,点击右上角的导入配置,将前面下载的压缩包导入即可。
修改nacos配置文件
需要修改里面的每一个yml文件的环境变量,ip等配置,修改内容以自己服务器的实际情况为准(主要修改的是修改redis.yml、mysql.yml、rocketmq.yml、luohuo-im-server.yml的配置,具体以实际为准)。例如rocketmq.yml,内容修改为:
luohuo:
rocketmq:
# 若系统中有除了zipkin之外的地方使用了mq ,则一定不能设置成false
enabled: true
ip: rocketmq-namesrv ##服务器ip,由于我是使用docker部署,所以这里是容器名,以实际情况为准,
port: 9876
access-key: 'earthearth'
secret-key: 'mq000000'
## 其余略.....
主要就是需要修改里面的ip等配置,改成容器名(因为是使用docker部署,若是不使用docker部署而直接在终端运行的话,那么就要将里面ip等改成服务器IP)。其实修改也很简单,就是将它原有的内容(ip,密码等)改成部署时服务器的实际情况即可。(这里有个坑,同时吐槽一下,有些配置例如邮箱的发件人以及邮件服务器,单单只改luohuo-im-server.yml这里面的配置是不够的,他的有些配置是写在SQL里面的,所以导入后就已经确定了,只能在导入后手动修改,或者再导入SQL前先修改SQL代码)
将nacos的命名空间全部导入修改修复完善后,nacos部分就完成了。
修改服务器配置
回到项目内(不是docker文件夹,是hula项目),定位到luohuo-cloud/src/main/filters/config-dev.properties这个文件(此时是开发环境的配置,生产环境下请修改config-prod.properties),配置文件修改示例:
# nacos 远程ip地址,即nacos服务器地址,尽量写服务器IP
nacos.ip=127.0.0.1
# nacos服务端端口
nacos.port=8848
# 命名空间,以实际的命名空间ID为准,假设这里为dev
nacos.namespace=dev
# nacos 账号
nacos.username=nacos
nacos.password=nacos
nacos.web-port=8080
# 本地启动ip,即springboot运行所在的服务器,若nacos与springboot部分都部署在同一个服务器,那这个ip就是服务器ip
nacos.local-ip=192.168.1.37
# \u672A\u4F7F\u7528seata\uFF0C\u53EF\u4EE5
seata.namespace=5b51e46a-4aeb-4d40-8398-8a9d33e2f0ad
seata.ip=localhost #可以不管,建议改成服务器ip,下同
seata.port=8091
logging.file.path=./logs
sentinel.dashboard=127.0.0.1:8088
# \u652F\u6301mysql.yml\u3001oracle.yml\u3001sqlserver.yml
database.type=mysql.yml
确保包括nacos等关键的配置没有问题后,就可以尝试编译运行了
编译项目
官方这里的编译是使用maven,建议编译的顺序是先编译 util,再编译cloud,环境是开发环境,所以是Dev,否则为Prod,此时需要修改对应的配置文件。
#开发环境编译工具模块:
cd luohuo-util
mvn clean install -DskipTests -P dev
# 再编译业务模块
cd ../luohuo-cloud
mvn clean install -DskipTests -P dev
#注:终端要求编码为UTF-8,也就是支持中文,否则接下来编译时终端会因为编码问题报错
按照下面的顺序编译启动项目:
- luohuo-gateway-server
- luohuo-oauth-server
- luohuo-base-server
- luohuo-system-server
- luohuo-im-server
- luohuo-ws-server
- luohuo-ai-server
启动命令为:
# 每个服务在单独的终端窗口启动
# 1. 启动Gateway
cd luohuo-cloud/luohuo-gateway/luohuo-gateway-server
mvn spring-boot:run "-Dspring-boot.run.profiles=dev"
# 2. 启动OAuth(新开终端)
cd luohuo-cloud/luohuo-oauth/luohuo-oauth-server
mvn spring-boot:run "-Dspring-boot.run.profiles=dev"
# 3. 启动Base(新开终端)
cd luohuo-cloud/luohuo-base/luohuo-base-server
mvn spring-boot:run "-Dspring-boot.run.profiles=dev"
# 4. 启动System(新开终端)
cd luohuo-cloud/luohuo-system/luohuo-system-server
mvn spring-boot:run "-Dspring-boot.run.profiles=dev"
# 5. 启动IM(新开终端)
cd luohuo-cloud/luohuo-im/luohuo-im-server
mvn spring-boot:run "-Dspring-boot.run.profiles=dev"
# 6. 启动WS(新开终端)
cd luohuo-cloud/luohuo-ws/luohuo-ws-server
mvn spring-boot:run "-Dspring-boot.run.profiles=dev"
此时,每个服务启动到最后,会显示出最终的启动界面,有命名空间的id等相关信息,jar包也应该是生成出来了。
编写dockerfile
也是差不多到了最终环节,编译成功后接下来就可以打包镜像了,dockerfile参考(以luohuo-system-server为例):
FROM eclipse-temurin:21-jre-alpine
LABEL maintainer="HuLa Team"
LABEL service="luohuo-system-server"
RUN apk add --no-cache tzdata curl \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& apk del tzdata
WORKDIR /app
RUN mkdir -p /app/logs
ARG JAR_FILE=target/luohuo-system-server.jar
COPY ${JAR_FILE} app.jar
ENV JAVA_OPTS="-Xms256m -Xmx512m \
-XX:+UseG1GC \
-Djava.security.egd=file:/dev/./urandom \
-Dfile.encoding=UTF-8"
ENV APP_OPTS="--spring.profiles.active=dev"
EXPOSE 19877
HEALTHCHECK --interval=30s --timeout=10s --start-period=90s --retries=3 \
CMD curl -f http://localhost:19877/actuator/health || exit 1
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar $APP_OPTS"]
dockerfile放置的路径为luohuo-cloud/luohuo-system/luohuo-system-server/,其余的微服务dockerfile类似,只需要将target/luohuo-system-server.jar这部分修改为对应的jar包即可,最后使用docker构建镜像即可,觉得麻烦可以使用以下脚本
#!/bin/bash
# ============================================================
# HuLa-Server 微服务 Docker 镜像构建脚本
# ============================================================
set -e
VERSION="3.0.6"
PROJECT_ROOT=$(pwd)
echo "=============================================="
echo "开始构建 HuLa-Server 微服务镜像"
echo "版本: $VERSION"
echo "=============================================="
# 定义服务列表
declare -A SERVICES=(
["luohuo-gateway-server"]="luohuo-cloud/luohuo-gateway/luohuo-gateway-server"
["luohuo-oauth-server"]="luohuo-cloud/luohuo-oauth/luohuo-oauth-server"
["luohuo-base-server"]="luohuo-cloud/luohuo-base/luohuo-base-server"
["luohuo-im-server"]="luohuo-cloud/luohuo-im/luohuo-im-server"
["luohuo-ws-server"]="luohuo-cloud/luohuo-ws/luohuo-ws-server"
["luohuo-system-server"]="luohuo-cloud/luohuo-system/luohuo-system-server"
["luohuo-ai-server"]="luohuo-cloud/luohuo-ai/luohuo-ai-server"
)
# 构建每个服务
for SERVICE_NAME in "${!SERVICES[@]}"; do
SERVICE_PATH="${SERVICES[$SERVICE_NAME]}"
FULL_PATH="$PROJECT_ROOT/$SERVICE_PATH"
echo ""
echo "----------------------------------------------"
echo "构建服务: $SERVICE_NAME"
echo "路径: $FULL_PATH"
echo "----------------------------------------------"
if [ ! -d "$FULL_PATH" ]; then
echo "⚠️ 路径不存在,跳过: $FULL_PATH"
continue
fi
cd "$FULL_PATH"
if [ -f "Dockerfile" ]; then
echo "开始构建镜像..."
docker build -t "$SERVICE_NAME:$VERSION" -t "$SERVICE_NAME:latest" .
echo "✅ $SERVICE_NAME 构建成功"
else
echo "⚠️ $SERVICE_NAME 没有 Dockerfile,跳过"
fi
cd "$PROJECT_ROOT"
done
echo ""
echo "=============================================="
echo "所有镜像构建完成!"
echo "=============================================="
# 显示构建结果
echo ""
echo "已构建的镜像:"
docker images | grep -E "luohuo-.*-server"
