OpenIsle
OpenIsle
话题发帖我的消息关于🔥 活动
类别
好玩 & 轻松交流 x 271
技术 & 开发调优 x 138
软件 & 资源 x 67
资讯 & 快讯 x 44
运营反馈 x 37
水深火热 x 13
Crypto x 10
标签
纯水 x 234
软件开发 x 107
人工智能 x 66
抽奖 x 64
开源共建 x 45
快问快答 x 33
夸克网盘 x 31
搬运 x 24
百度网盘 x 14
ChatGPT x 13
查看更多
仿QQ即时通讯HuLa服务端docker搭建教程(下)
技术 & 开发调优
纯水
软件开发
avatar
清风 开山鼻祖
1.23 23:13

接上文(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,也就是支持中文,否则接下来编译时终端会因为编码问题报错

按照下面的顺序编译启动项目:

  1. luohuo-gateway-server
  2. luohuo-oauth-server
  3. luohuo-base-server
  4. luohuo-system-server
  5. luohuo-im-server
  6. luohuo-ws-server
  7. 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"

到这里也是搭建完了,总结一下,这部分主要的部分就是要修改nacos命名空间里的配置,其次是编译项目,注意编码问题(曾经在这里踩了很多坑)

emoji
1
1
Sort by:
返回
暂无评论