开发者

Linux中部署微服务项目教程

开发者 https://www.devze.com 2025-09-24 10:06 出处:网络 作者: Dong雨
目录部署项目步骤1.下载JDK172. Nginx 软件安装Nginx出错:解决方法3.项目打包上传4.前端上传5.安装中间件环境6.启动项目1. 启动后端项目2.Nginx 挂载前端项目7.错误总结1.前端页面格式错乱2.检查软件与项目的密
目录
  • 部署项目步骤
    • 1.下载JDK17
    • 2. Nginx 软件
      • 安装Nginx出错:
      • 解决方法
    • 3.项目打包上传
      • 4.前端上传
        • 5.安装中间件环境
          • 6.启动项目
            • 1. 启动后端项目
            • 2.Nginx 挂载前端项目
          • 7.错误总结
            • 1.前端页面格式错乱
            • 2.检查软件与项目的密码
            • 3.Redisson错误
            • 4.nacos错误
            • 5. 数据库连接错误
        • 总结

          部署项目步骤

          1.下载JDK17

          进入 /usr/local 目录,创建 Java 文件夹。并将 JDK17 上传到 java 目录下。

          上传成功后,通过cd命令进入Java文件夹目录,解压 JDK17 压缩包,命令

          unzip zulu17.44.53-ca-jdk17.0.8.1-linux_x64.zip。

          如果报错说 unzip 命令不存在,安装该命令:yum install -y unzip zip

          解压后的目录:

          Linux中部署微服务项目教程

          为了简单,就不配置环境变量了,直接拿实际引用执行 Java 相关命令。

          另外执行一条命令,修改文件名,让它看着没那么长:

          mv zulu17.44.53-ca-jdk17.0.8.1-linux_x64 jdk17.0.8.1

          2. Nginx 软件

          1.更新系统软件包列表。

          sudo yum update

          2.安装 Nginx 命令。

          sudo yum install nginx

          安装Nginx出错:

          Linux中部署微服务项目教程

          • 错误信息显示无法解析主机 mirrorlist.Centos.org ,这通常是因为 CentOS 7 的官方仓库已经停止维护,导致无法访问。

          解决方法

          1. 更换 Yum 源

          由于 CentOS 7 的官方仓库已经停止维护,需要更换为可用的镜像源。以下是具体步骤:

          • 备份原有配置文件
            cd /etc/yum.repos.d
            cp CentOS-Base.repo CentOS-Base.repo.backup
          
          • 编辑配置文件
            vi CentOS-Baphpse.repo
          
          • 修改内容

          将 mirrorlist 注释掉,并添加 baseurl 指向国内镜像源,例如阿里云镜像源:

            [base]
            name=CentOS-$releasever - Base
            #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
            baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
            gpgcheck=1
            gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
          
            [updates]
            name=CentOS-$releasever - Updates
            #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
            baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
            gpgcheck=1
           php gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
          
            [extras]
            name=CentOS-$releasever - Extras
            #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
            baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
            gpgcheck=1
            gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
          
          • 保存并退出编辑器
            :wq
          
          • 清理并重建 Yum 缓存
            sudo yum clean all
            sudo yum makecache
          
          2. 安装 EPEL 源

          Nginx 不在 CentOS 的默认仓库中,需要安装 EPEL(Extra Packages for Enterprise Linux)源:

          sudo yum install epel-release
          
          3.安装 Nginx

          安装 EPEL 源后,可以安装 Nginx:

          sudo yum install nginx
          4.Nginx 开机自启。
          sudo systemctl start nginx
          sudo systemctl enable nginx
          

          3.项目打包上传

          通过命令创建项目相关文件夹。

          mkdir -p /home/shortlink/logs

          Maven 执行 clean install 逻辑,将 SpringBoot 可执行 Jar 生成。shortlink-all 下执行 mvn clean install,可以通过命令行或者工具栏。

          Linux中部署微服务项目教程

           将 项目jar包上传到服务器 /home/shortlink 目录下。

          4.前端上传

          进入到前端项目目录下,执行 npm run build 命令。如果是 Windows 系统用户,记得去 CMD 命令行里执行。出现dist目录即代表成功。

          将该 dist 目录上传到云服务器 /home/shortlink 目录下。上传前记得压缩下 dist 目录,上传方便些,上传成功后再解压。

          执行解压缩命令:unzip dist.zip 完成压缩包解压。

          5.安装中间件环境

          以 docker 形式指导如何安装所依赖的中间件。

          1.安装 yum-utils

          以 yum 安装为例子进行安装,安装 yum-utils,使用 yum-config-manager 工具设置 yum 源,后面两个是 devicemapper 驱动依赖

          yum install -y yum-utils device-mapper-persistent-data lvm2
          2.使用阿里源访问
          yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

          出现以下内容则表示成功。

          Linux中部署微服务项目教程

          3.安装docker
          yum install docker-ce #(这样写默认安装最新版本)
          yum install  docker-ce-<VERSION_STRING> (指定安装版本) 
          例: yum install docker-ce-18.03.1.ce

          安装成功提示信息如下:

          Linux中部署微服务项目教程

          4.启动并加入开机启动
          systemctl start docker     启动  
          systemctl restart docker   重启
          systemctl enable docker    开机启动

          执行 docker version 查看 Docker 版本号。

          5.验证是否安装成功

          执行命令:docker run hello-world 测试是否安装成功。

          Linux中部署微服务项目教程

           若进行到这一步没有问题的话就说明 Docker 已经安装成功了 。

          5.配置可用镜像

          注意,现在 Docker 拉取镜像被限制了,我们需要额外执行以下逻辑:

          Linux中部署微服务项目教程

          (这个问题通常是由于网络连接问题导致的,特别是在国内网络环境下,访问国外的 Docker Hub 仓库可能会遇到速度慢或连接超时的情况。)

          第一种:

          # 创建目录
          sudo mkdir -p /etc/docker
          
          # 写入配置文件
          sudo tee /etc/docker/daemon.json <<-'EOF'
          {
              "registry-mirrors": [
              	"https://docker.unsee.tech",
                  "https://dockerpull.org",
                  "https://docker.1panel.live",
                  "https://dockerhub.icu"
              ]
          }
          EOF
          
          # 重启docker服务
          sudo systemctl daemon-reload && sudo systemctl restart docker

          第二种:

              "https://docker.registry.cyou",
              "https://docker-cf.registry.cyou",
              "https://dockercf.jsdelivr.fyi",
              "https://docker.jsdelivr.fyi",
              "https://dockertest.jsdelivr.fyi",
              "https://mirror.aliyuncs.com",
              "https://dockerproxy.com",
              "https://mirror.baidubce.com",
              "https://docker.m.daocloud.io",
              "https://docker.nju.edu.cn",
              "https://docker.mirrors.sjtug.sjtu.edu.cn",
              "https://docker.mirrors.ustc.edu.cn",
              "https://mirror.iscas.ac.cn",
              "https://docker.rainbond.cc"
          6. 安装 mysql
          docker run --name mysql \
          -p 3306:3306 \
          -e MYSQL_ROOT_HOST='%' \
          -e MYSQL_ROOT_PASSWORD=root \
          -d mysql:5.7.36
          • -d:以后台的方式运行。
          • --name mysql:指定容器的名称为 mysql。
          • -e MYSQL_ROOT_HOST='%':允许 root 用户在任何主机访问。
          • -p 3306:3306:将容器的 3306 端口挂载到宿主机的 3306 端口上。
          • -e MYSQL_ROOT_PASSWORD=root:指定 root 的密码为 root。

          Linux中部署微服务项目教程

          通过 MySQL 客户端工具连接并导入数据库和数据。

          7.安装 Redis
          docker run \
          -d -p 8848:8848 \
          -p 9848:9848 \
          --name nacos2 \
          -e MODE=standalone \
          -e TIME_ZONE='Asia/Shanghai' \
          nacos/nacos-server:v2.1.2
          • docker run: 创建并启动一个新的容器。
          • -p 6379:6379: 将容器的6379端口映射到宿主机的6379端口,以便外部可以访问Redis。
          • --name redis: 为容器指定一个名称,这里是“redis”。
          • -d: 后台运行容器。
          • redihttp://www.devze.coms: 使用Redis镜像。
          • redis-server --requirepass "123456": 在容器中执行redis-server命令,并设置Redis的访问密码为"123456"。

          Linux中部署微服务项目教程

          8.安装 Nacos
          docker run \
          -d -p 8848:8848 \
          -p 9848:9848 \
          --name nacos2 \
          -e MODE=standalone \
          -e TIME_ZONE='Asia/Shanghai' \
          nacos/nacos-server:v2.1.2
          • -d: 后台运行容器。
          • -p 8848:8848: 将容器的 8848 端口映射到宿主机的 8848 端口,这是 Nacos 的默认管理界面端口。
          • -p 9848:9848: 将容器的 9848 端口映射到宿主机的 9848 端口,这是 Nacos 2.X 新增的端口,用于 gRPC 通信。
          • --name nacos2: 为容器指定名称为 nacos2
          • -e MODE=standalone: 设置 Nacos 运行为单机模式。
          • -e TIME_ZONE='Asia/Shanghai': 设置容器的时区为亚洲/上海。
          • nacos/nacos-server:v2.1.2: 使用 Nacos 2.1.2 版本的 Docker 镜像。

          Linux中部署微服务项目教程

          6.启动项目

          1. 启动后端项目

          进入 /home/shortlink 文件夹下,开始启动后端项目。

          nohup /usr/local/java/jdk17.0.8.1/bin/java \
          -Xms2048m -Xmx2048m \
          -Dshort-link.domain.default=修改为服务器外网IP:8003 \
          -jar /home/shortlink/shortlink-aggregation.jar > logs/shortlink-aggregation.file 2>&1 &

          执行 tail -f logs/shortlink-aggregation.file 命令查看日志是否启动成功。

          依次启动网关项目。

          nohup /usr/local/java/jdk17.0.8.1/bin/java \
          -Xms1024m -Xmx1024m \
          -jar /home/shortlink/shortlink-gateway.jar > logs/shortlink-gateway.file 2>&1 &

           执行 tail -f logs/shortlink-aggregation.file 命令查看日志是否启动成功。

          Linux中部署微服务项目教程

          2.Nginx 挂载前端项目

          修改 Nginx 的配置,让前端可以访问。

          sudo vim /etc/nginx/nginx.conf

           将默认 Nginx http/server配置改为下述配置:

          http {
              # 只要保证 server 里的配置在 nginx 的 http 配置下就好
          		server {
                  listen       80;
                  server_name  localhost;
          
                   location / {
                      root   /home/shortlink/dist;
                      index  index.html index.htm;
                      try_files $uri $uri/ /index.html;
                  }
          
                  location /api {
                      proxy_read_timeout 10s;
                      proxy_pass http://127.0.0.1:8000/api;
                  }
              }
          }

          保存退出文件编辑状态,重载 Nginx 的配置。

          sudo systemctl reload nginx

          7.错误总结

          小伙伴们可以看看自己哪里错误了,可以借鉴一下,不一定非要一致,主要提供一个思路。

          1.前端页面格式错乱

          The stylesheet http://localhost/assets/index-1aa0ed73.css was not loaded because its MIME type, “application/octet-stream”, is not “text/css”.

          MIME类型不匹配:服务器返回的MIME类型为application/octet-stream,而浏览器期望的是text/css

          解决:

          nginx配置文件

          cd /etc/nginx
          include /etc/nginx/mime.types ;
          default_type application/octet-stream;
          types {
                     text/css css;
                 }
          sudo systemctl reload nginx

          2.检查软件与项目的密码

          先查看项目配置文件的各种密码(redis,mysql等)是否和虚拟机上安装软件时的密码一致。

          3.Redisson错误

          后端启动仅显示此错误信息:

          Caused by: org.redisson.RedissonShutdownException: Redisson is shutdown
                  at org.redisson.command.RedisExecutor.execute(RedisExecutor.java:129) ~[redisson-3.27.2.jar!/:3.27.2]
                  at org.redisson.command.CommandAsyncService.async(CommandAsyncService.java:622) ~[redisson-3.27.2.jar!/:3.27.2]
                  at org.redisson.command.CommandAsyncService.writeAsync(CommandAsyncService.java:583) ~[redisson-3.27.2.jar!/:3.27.2]
                  at org.redisson.spring.data.connection.RedissonConnection.write(RedissonConnection.java:738) ~[redisson-spring-data-32-3.27.2.jar!/:3.27.2]
                  ... 12 common frames omitted

          首先检查redis是否连接成功,查看redis容器状态,服务状态,版本号,日志。如果不一致,更改。

          # 查看Redis容器状态
          docker ps -a | grep redis
          
          # 查看Redis版本号(注意自己redis容器的名称)
          docker exec redis redis-server -v
          
          # 查看Redis日志
          docker logs redis
          
          # 检查Redis服务状态
          docker exec -it redis redis-cli PING
          
          # 实时查看日志
          docker logs -f redis

          本人情况,这些完全正确。排除redis的错误。继续排查。

          4.nacos错误

          找不到原因,所以只能慢慢排查,突然发现浏览器输入http://xxx:8848/nacos,登录失败,由于通过 docker ps 命令查看 nacos 状态一直正常就没注意。通过查看 nacos 的日志发现确实出现了问题。错误原因是什么数据库发生了错误,改了 nacos 配置中数据库的用户和密码没用,不管了,直接删除,重新下载 nacos 。恢复正常。

             at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376)
                  at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:465)
                  at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:475)
                  at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:508)
                  at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:515)
                  at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalStoragePersistServiceImpl.findConfigMaxId(ExternalStoragePersistServiceImpl.java:674)
                  at com.alibaba.nacos.config.server.service.dump.processor.DumpAllProcessor.process(DumpAllProcessor.java:51)
                  at com.alibaba.nacos.config.server.service.dump.DumpService.dumpConfigInfo(DumpService.java:282)
                  at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:195)
                  编程... 62 common frames omitted

          5. 数据库连接错误

          Caused by: java.sql.SQLException: Access denied for user 'root'@'1.7.0.1' (using password: YES)
                  at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) ~[mysql-connector-j-8.0.33.jar!/:8.0.33]
                  at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.33.jar!/:8.0.33]
                  at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) ~[mysql-connector-j-8.0.33.jar!/:8.0.33]
                  at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446) ~[mysql-connector-j-8.0.33.jar!/:8.0.33]
          • 在 Docker 中登录时,使用的是 root@% 用户,密码为 aaa。
          • 在本地连接时,使用的是 root@localhost 用户,密码为 bbb。

          统一密码:

          登录 MySQL:

          mysql -u root -pLiu.2004310

          修改 root@localhost 的密码:

          ALTER USER 'root'@'localhost' IDENTIFIED BY 'aaa';
          FLUSH PRIVILEGES;

          修改 root@% 的密码:

          ALTER USER 'root'@'%' IDENTIFIED BY 'aaa';
          FLUSH PRIVILEGES;

          总结

          当前的错误可能是其他错误引起的,首先检查错误信息有关的配置,如果实在找不到考虑其他错误引起的。

          学会查看错误日志返回的信息,而不是简单的通过状态来判断运行情况。

          如果实在是什么都找不到问题,就按照步骤一个一个去查看软件的运行情况。

          使用 AI 工具可以提高查找效率,但是有判断的选择解决方案。 

          以上为个人经验,希望能给大家一个参考python,也希望大家多多支持编程客栈(www.devze.com)。

          0

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          关注公众号