云服务器CentOS前后端部署流程记录

该文记录了在云服务ECS上部署基于CentOS的Docker环境,包括安装Docker、设置MySQL容器、配置JDK、搭建Eureka服务中心以及使用SpringCloudGateway进行服务路由。同时,文章还涉及了通过Nginx实现反向代理以隐藏真实IP和端口,以及前端项目打包和域名访问的注意事项,提醒读者注意域名备案。

部署流程记录

  1. 购买云服务ecs服务器,建立CentOS系统

  2. 通过xftp+xshell访问远程服务

  3. doker部署(https://www.runoob.com/docker/centos-docker-install.html

  4. docker

    • docker部署环境(mysql)
      1. docker常用命令

        1. docker images 查看镜像
        2. docker rmi xxx 移除镜像
        3. docker ps 查看容器
        4. docker rm -f xxx 强制删除一个容器
        
      2. 使用官方安装脚本自动安装

        curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
        
      3. 启动docker

        sudo systemctl start docker
        
      4. docker安装mySql(记得在云服务器规则开通3306端口号)

        docker pull mysql:8.0.31 拉去mysql对应版本
        docker run -itd --name zMysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.31 启动mysql对应版本
        
      5. 使用navcat连接数据库。假如提示连接不上,有可能是数据库没有放开权限。

  5. 安装jdk环境

    • jdk环境配置
      1. 下载jdk-8u351-linux-x64.tar.gz,地址:https://www.oracle.com/java/technologies/downloads/

      2. 下载包移动到/usr/local中

      3. 进入目录解压

        cd /usr/local
        tar -zxvf jdk-8u171-linux-x64.tar.gz
        
      4. 添加jdk环境变量

        [root@node1 local]# vi /etc/profile
        # 添加jdk环境变量
        export JAVA_HOME=/usr/local/jdk1.8.0_171  #jdk安装目录
        export JRE_HOME=${JAVA_HOME}/jre
        export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
        export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
        export PATH=$PATH:${JAVA_PATH}
        [root@node1 local]# source /etc/profile 立即生效
        
      5. java -version查看配置情况

      6. 启动服务,命令:sh wss.sh start(记得在规则里放开对应的端口号,也可放开所有,一劳永逸)

        • 启动服务(wss.sh文件如下,带*的需要修改)
      7. 通过ip+端口号访问接口

  6. 注册域名

    • 注册域名
      1. 注册一个域名,例如:zylstudy.asia,zylstudy.com等
    • 域名解析
      1. 点击解析

      2. 快速添加解析(类型选A,主机记录www和@,另外添加一个*,则匹配泛型,或者由自己单独添加对应的),需要等待一段时间才能访问

        在这里插入图片描述

        在这里插入图片描述

      3. 通过www.xxx.xxx+端口号访问接口(如果通过域名访问出现302,需要域名备案)

    • 通过域名访问,还需要域名备案
  7. 部署eureka服务

    • eureka服务中心注册(服务端)

      1. 导入库

        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        
      2. yml文件

        server:
          port: 28761
        
        eureka:
          instance:
            hostname: oil_eureka_server
          client:
            allow-redirects: false # 不将自己注册到eureka上
            fetch-registry: false # 不从eureka获取服务信息
            service-url:
              defaultZone: http://localhost:28761/eureka/
        
      3. Application中加注解

        @EnableEurekaServer
        
    • eureka提供服务端注入(我这边注入两个服务)

      1. 导入库

        <dependency>
        	<groupId>org.springframework.cloud</groupId>
        	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        
      2. yml文件配置

        server:
          port: 第一个28081/第二个28082
        
        eureka:
          instance:
            prefer-ip-address: true # 注册服务使用IP到eureka上
          client:
            service-url:
              defaultZone: http://localhost:28761/eureka/
        
        spring:
          application:
            name: 第一个oil-base-api/第二个oil-base-service
        
    • eureka服务发现,请求eureka中服务

      1. 导入库

        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        
      2. yml文件配置

        server:
          port: 55169
        
        eureka:
          instance:
            prefer-ip-address: true # 注册服务使用IP到eureka上
          client:
            service-url:
              defaultZone: http://localhost:28761/eureka/
        
      3. Application中加注解

        // 开启发现服务功能
        @EnableDiscoveryClient
        
    • 访问eureka地址

      1. 通过ip+端口号访问eureka服务,看注册情况

        在这里插入图片描述

      2. 如何访问eureka上的服务,通过Appliation名称可以访问,但是只能在项目里面访问,postman貌似访问不了。项目内部通过RestTemplate访问

        restTemplate.getForObject("http://OIL-BASE-API/api/test", String.class)
        
  8. gateway配置

    • 导入依赖

      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
      </dependency>
      
    • yml中的配置

      server:
        port: 55169
      
      eureka:
        instance:
          prefer-ip-address: true # 注册服务使用IP到eureka上
        client:
          service-url:
            defaultZone: http://localhost:28761/eureka/
      
      spring:
        application:
          name: oil-gateway
        cloud:
          gateway:
            default-filters:
            discovery:
              locator:
                lowerCaseServiceId: true
                enabled: true
            routes:
              - id: oil-base-api # 基础后端接口api
                uri: lb://oil-base-api # eureka服务name
                predicates:
                  - Path=/back/api/**  #不可以有空格
                filters:
                  - StripPrefix=2  #转发到具体服务
      
              - id: oil-base-service # 和基站对接服务
                uri: lb://oil-base-service # eureka服务name
                predicates:
                  - Path=/back/service/**  #不可以有空格
                filters:
                  - StripPrefix=2  #转发到具体服务
      
    • 访问eureka地址

      在这里插入图片描述

    • 通过接口访问

      在gateway中,通过接口测试

      @RestController
      public class GatewayController {
      
          @Autowired
          RestTemplate restTemplate;
      
          @GetMapping("/api/test")
          public String getInfoEurekaApi() {
              return restTemplate.getForObject("http://OIL-BASE-API/api/test", String.class);
          }
      
          @GetMapping("/service/test")
          public String getInfoEurekaService() {
              return restTemplate.getForObject("http://OIL-BASE-SERVICE/test", String.class);
          }
      
      }
      
  9. 配置nginx,反向代理,隐藏真是的ip地址和端口号

    • nginx

      Nginx反向代理

      • 代理服务

        在这里插入图片描述

      • 负载均衡

        在这里插入图片描述

      • 动静分离

        在这里插入图片描述

      访问过程

      在这里插入图片描述

    • 安装nginx,https://blog.youkuaiyun.com/t8116189520/article/details/81909574

      • 需要这些(通过下面命令下载)
        1. ssl功能需要 openssl 库
        2. gzip模块需要 zlib 库
        3. rewrite模块需要 pcre 库
        4. nginx的安装配置
      1. 安装依赖

        //一键安装上面四个依赖
        yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
        
      2. 下载并解压安装包

        cd /usr/local
        //创建一个文件夹
        mkdir nginx
        cd nginx
        //下载tar包
        wget http://nginx.org/download/nginx-1.13.7.tar.gz
        tar -xvf nginx-1.13.7.tar.gz
        
      3. 安装nginx

        //进入nginx目录
        cd /usr/local/nginx
        //进入目录
        cd nginx-1.13.7
        //执行命令 考虑到后续安装ssl证书 添加两个模块
        ./configure --with-http_stub_status_module --with-http_ssl_module
        //执行make命令
        make
        //执行make install命令
        make install
        
      4. 启动服务并查看状态(要在sbin目录下)

        [root@VM-4-2-centos sbin]# ./nginx 
        [root@VM-4-2-centos sbin]# ./nginx -t
        nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
        nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
        
      5. 修改配置nginx.conf

      6. 重启nginx

        [root@VM-4-2-centos sbin]# ./nginx -s reload
        
      7. 查看nginx进程是否启动

        ps -ef | grep nginx
        
      8. ip访问

        在这里插入图片描述

    • 配置项目nginx,修改nginx.conf

      1. 找到conf

      在这里插入图片描述

      1. 修改conf目录下nginx.conf文件
        1. 可以直接在nginx.conf中修改

        2. 可以新建一个文件夹,便于多项目的单独配置

          1. 在nginx.conf中最后加一句,指向另外一个文件夹

            include /usr/local/nginx/conf/conf.d/*.conf;
            
           ![在这里插入图片描述](https://img-blog.csdnimg.cn/6d4a7fc4c95c41af90bb19d64637d19b.png#pic_center)
          
          ![在这里插入图片描述](https://img-blog.csdnimg.cn/a6c048523a6244a2938b5a96328cb2fd.png#pic_center)
          
           
           内容大概如下:
           
           ```java
           server {
             listen       80;
             server_name  oil.zylstudy.asia;
           	
           	# 配置前端一些文件
           	# gzip config
           	gzip on;
           	gzip_min_length 1k;
           	gzip_comp_level 9;
           	gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
           	gzip_vary on;
           	gzip_disable "MSIE [1-6]\.";
           	# 配置前端路径
           	root /home/oilrig/font/back/dist;	
           	
           	# 用于配合 browserHistory使用
             location / {
           		try_files $uri $uri/ /index.html;
              }
           	# index        index.html;
             error_page   500 502 503 504  /50x.html;
             location = /50x.html {
               root   html;
             }
           	location = /favicon.ico {
            	 	log_not_found off;
           	}	
             location /back/api {
               proxy_pass  http://127.0.0.1:55169;   
               proxy_set_header   X-Forwarded-Proto $scheme;
               proxy_set_header   X-Real-IP         $remote_addr;
             }        
            }
           ```
          
          1. 重启nginx(上传了新的前端的dist包,需要重启nginx)

            [root@VM-4-2-centos sbin]# ./nginx -s reload
            
    • 通过域名访问

      http://oil.zylstudy.asia/service/test(显示302,提示需要域名备案)

  10. 前端打包

    • 前端测试,proxy修改

    • 打包(package.json)

      build
      

      生成dist文件,放到跟nginx里面目录对应位置

      在这里插入图片描述

      # 配置前端路径
      root /home/oilrig/font/back/dist;	
      
<think> 首先,用户的问题是:“我想查找前后端分离项目部署到华为的方法 请问前后端分离项目在华为部署方法”。这是在问我如何部署前后端分离项目到华为云服务器上。 用户提供了几个引用: - [^1]: 来自华为耀云服务器评测,讨论了部署前后端分离项目,重点是安装Docker环境。 - [^2]: 描述了SpringBoot项目的打包和部署流程,包括修改MySQL、Redis配置,上传文件,打包前后端部署使用Nginx等。 - [^3]: 记录了华为L实例部署全过程,包括访问域名、下载JDK、Tomcat、Maven、MySQL等。 - [^4]: 提到安装JDK、Tomcat、MySQL、Nginx和系统环境配置。 这些引用覆盖了部署的关键步骤,如环境安装、配置修改、打包项目、部署前后端。 现在,我需要根据系统指令: - 所有行内数学表达式用$...$格式(但这个问题可能不涉及数学,所以可能需要避免或不使用)。 - 独立公式用$$...$$格式单独成段(同样,可能不适用)。 - LaTeX语法正确(确保在任何数学表达式中正确)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识,如[^1]。 回答结构: - 帮助用户逐步解决问题。 - 保证回答真实可靠。 - 参考用户提供的引用内容。 构建回答: 1. **概述**:简要解释部署前后端分离项目的步骤。 2. **详细步骤**:分解为安装环境、配置项目、打包、部署前后端。 3. **基于引用**:整合引用中的信息。 4. **注意事项**:包括引用中提到的常见问题,如404错误、启动失败等。 5. **生成相关问题**:在末尾添加相关问题列表。 关键步骤从引用中提取: - 安装Docker(可选,如果使用容器化部署)[^1] - 安装JDK、Tomcat、Maven、MySQL、Nginx等[^3][^4] - 修改配置文件(如MySQL、Redis)[^2] - 打包前端和后端项目[^2][^3] - 部署前端使用Nginx[^2][^4] - 部署后端使用Tomcat或直接运行jar/war文件[^2][^3] - 访问应用通过域名或IP[^3] 系统指令要求“尽可能多的参考用户上一次的问题和你的回答”,但用户没有指定上一次问题。用户消息是“上述引用仅供参考,并不是用户真正的需求”,所以我应该基于用户当前问题回答。 最终回答结构: - 引言解释前后端分离部署。 - 步骤: - 准备工作 - 安装环境 - 配置项目 - 打包项目 - 部署前端 - 部署后端 - 测试访问 - 注意事项 - 相关问题 确保语言清晰、中文。 </think> ### 前后端分离项目在华为部署方法 部署前后端分离项目(如基于SpringBoot+Vue的Web应用)到华为云服务器(如耀云服务器L实例),涉及环境配置、项目打包和部署步骤。以下是基于可靠实践的综合指南[^1][^2][^3][^4],我将分步说明,确保流程清晰。 --- ### 一、准备工作(必须在本地完成) 1. **购买并配置华为云服务器** - 登录华为控制台,购买一台耀云服务器L实例(推荐CentOS或Ubuntu系统)。 - 分配公网IP(EIP)并配置安全组规则: - 开放端口:`80`(HTTP)、`443`(HTTPS)、`8080`(后端服务)、`3306`(MySQL)等。 - 通过SSH连接服务器(例如使用PuTTY或终端)。 2. **准备项目文件** - 前端项目(如Vue/React):确保开发环境可正常运行。 - 后端项目(如SpringBoot):检查配置文件(MySQL、Redis等),确保数据库连接正确[^2]。 --- ### 二、服务器环境安装 在Linux服务器上安装必要软件(以CentOS为例): 1. **安装基础工具** ```bash sudo yum update -y sudo yum install -y wget git unzip ``` 2. **安装Java环境(JDK)** - 后端运行依赖JDK(推荐JDK 11+): ```bash sudo yum install -y java-11-openjdk-devel java -version # 验证安装 ``` - 配置环境变量(编辑`/etc/profile`): ```bash export JAVA_HOME=/usr/lib/jvm/java-11-openjdk export PATH=$PATH:$JAVA_HOME/bin source /etc/profile ``` 3. **安装MySQL数据库** - 安装并配置: ```bash sudo yum install -y mariadb-server mariadb sudo systemctl start mariadb sudo systemctl enable mariadb sudo mysql_secure_installation # 设置root密码 ``` - 创建数据库和用户: ```sql CREATE DATABASE your_db; GRANT ALL PRIVILEGES ON your_db.* TO 'user'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` 4. **安装Nginx(用于部署前端和反向代理)** ```bash sudo yum install -y nginx sudo systemctl start nginx sudo systemctl enable nginx ``` 5. **可选:安装Docker(容器化部署)** - 如需容器化(如使用Docker Compose),参考华为文档安装[^1]: ```bash sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 卸载旧版本(可选) sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker ``` --- ### 三、项目打包与配置 1. **前端项目打包** - 本地操作:进入前端目录,安装依赖并构建静态文件。 ```bash npm install # 安装依赖 npm run build # 生成dist目录 ``` - 上传文件:将`dist`目录打包为zip,并通过SCP上传到服务器(例如`/var/www/frontend`)[^2]: ```bash scp -r dist.zip root@your_server_ip:/var/www/frontend ``` 2. **后端项目打包(SpringBoot为例)** - 打包为JAR或WAR文件: - **JAR方式**(推荐):运行`mvn clean package`生成`target/your-app.jar`。 - **WAR方式**:需配置Tomcat(上传WAR文件到`/usr/share/tomcat/webapps`)[^2]。 - 上传后端文件: ```bash scp target/your-app.jar root@your_server_ip:/opt/backend ``` 3. **修改服务器配置文件** - 后端配置:编辑`application.properties`(或YAML文件): - 更新数据库连接:`spring.datasource.url=jdbc:mysql://localhost:3306/your_db`[^2]。 - 设置Redis地址(如有):`spring.redis.host=127.0.0.1`。 - 前端配置:Nginx需处理API代理(避免404问题)[^4]。 --- ### 四、部署项目 1. **部署前端(使用Nginx)** - 配置Nginx代理: - 编辑`/etc/nginx/nginx.conf`,添加以下内容: ```nginx server { listen 80; server_name your_domain.com; # 或服务器IP root /var/www/frontend/dist; index index.html; location / { try_files $uri $uri/ /index.html; # 解决非首页刷新404问题 } location /api { # 代理后端API proxy_pass http://localhost:8080; proxy_set_header Host $host; } } ``` - 重启Nginx: ```bash sudo nginx -t # 检查语法 sudo systemctl restart nginx ``` 2. **部署后端** - **JAR方式启动**: ```bash cd /opt/backend nohup java -jar your-app.jar --spring.profiles.active=prod > app.log 2>&1 & # 后台运行并记录日志 ``` - **WAR方式启动**(需安装Tomcat): ```bash sudo yum install -y tomcat # 安装Tomcat sudo cp your-app.war /usr/share/tomcat/webapps/ sudo systemctl restart tomcat ``` 3. **测试访问** - 浏览器访问`http://your_server_ip`(前端页面)。 - 检查后端API:`http://your_server_ip/api/health`(应返回200 OK)。 - 如需域名访问,在华为DNS服务中绑定域名[^3]。 --- ### 五、注意事项 - **性能优化**: - 使用Nginx负载均衡(集群部署时添加多个后端实例)[^2]。 - 启用Gzip压缩减少前端资源大小。 - **常见问题解决**: - **前端刷新404**:确保Nginx配置包含`try_files $uri $uri/ /index.html`[^4]。 - **后端启动失败**:检查JDK版本、端口冲突(e.g., `8080`是否被占用),或数据库连接超时[^3]。 - **节省空间**:定期清理日志文件(e.g., `app.log`)。 - **安全建议**: - 使用HTTPS(申请免费SSL证书如Let’s Encrypt)。 - 避免数据库密码硬编码在代码中(使用环境变量)。 通过以上步骤,你的前后端分离项目将成功部署到华为。整个过程约需1-2小时,取决于项目复杂度。如需容器化,可参考Docker Compose文件将服务容器化[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值