【尚庭公寓|项目日记】第十天

摘要:

        本文介绍了Nginx安装配置与项目部署的全流程。首先详细说明了Nginx的yum安装方法及开机自启设置,重点解析了nginx.conf配置文件的四大核心模块(main/http/server/location)。通过hello-nginx案例演示了静态资源部署和反向代理配置。

        在项目部署部分,解决了Maven打包中的常见问题(Lombok警告、依赖冲突等),并介绍了JDK21安装和systemd服务集成方法。最后详细说明了前后端联调流程:前端资源部署、Nginx代理配置、域名映射等,实现通过域名访问完整项目。整个流程涵盖了从基础配置到实际部署的关键环节。

 

1,nginx的安装

(1)创建`/etc/yum.repos.d/nginx.repo`文件

(2)vim /etc/yum.repos.d/nginx.repo,增加内容:

   [nginx-stable]
   name=nginx stable repo
   baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
   gpgcheck=1
   enabled=1
   gpgkey=https://nginx.org/keys/nginx_signing.key
   module_hotfixes=true
   
   [nginx-mainline]
   name=nginx mainline repo
   baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
   gpgcheck=1
   enabled=0
   gpgkey=https://nginx.org/keys/nginx_signing.key
   module_hotfixes=true

(3)执行安装命令:yum -y install nginx

(4)设置开机自启动:systemctl enable nginx

2,了解重要的配置文件

(1)main block

“main block`位于配置文件的最外层,其包含了影响Nginx服务器整体行为的全局参数,例如

     - `user`:定义Nginx工作进程的用户和用户组。
     - `worker_processes`:指定Nginx使用的工作进程数。
     - `error_log`:配置全局错误日志文件路径。

(2)http block

`http block`位于`main block`中,用于配置HTTP服务器相关功能。例如

     - `access_log`:指定访问日志的路径
     - `log_format`:指定访问日志的格式

(3)server block

`server block`位于`http block`,用于配置虚拟主机,一个Nginx服务可包含多个虚拟主机,每个虚拟主机都可以独立的提供服务,因此借助Nginx,我们可以在一台服务器部署多个独立的网站,每个虚拟主机使用一个`server block`进行配置,配置的内容包括
   
     - `listen`:虚拟主机监听的端口号。
     - `server_name`:指定虚拟主机的域名或者IP。

(4)location block

`location block`位于`server block`,用于配置请求的处理逻辑,一个`server block`中可以包含多个`location block`,例如:
 

     server {
         listen 80;
         server_name www.atguigu.com;
         location /index {
             root /var/www/html;
         }
     
         location /api {
             proxy_pass http://backend-api;
         }
     }

3,实践案例hello-nginx

(1)简单案例配置:

上传静态资源到server02服务器,注意解压一般放在/usr/share/nginx/html中:unzip hello-nginx.zip -d /usr/share/nginx/html,最终路径如下:

/usr
  └── share
       └── nginx
           └── html
               └── hello-nginx
                   ├── css
                   │   └── style.css
                   ├── images
                   │   └── img.png
                   └── index.html

配置Nginx虚拟主机

   虚拟主机的配置应位于`/etc/nginx/nginx.conf`的**server block**中,
   由于`/etc/nginx/nginx.conf`的**http bolck**中引入了`/etc/nginx/conf.d/*.conf`
   所以虚拟主机在`/etc/nginx/conf.d/`目录下的任意`.conf`文件配置即可。

创建/etc/nginx/conf.d/hello-nginx.conf(一般带上资源名),添加location:

     server {
         listen       8080;
         server_name  192.168.10.102;
     
         location /hello-nginx {
             root   /usr/share/nginx/html;
             index  index.html;
         }
     }

根据请求,如:http://192.158.10.102:8080/hello-nginx就会定位到这个location中,然后根据root路径找到hello-nginx目录,再根据index找到index。html文件,最后返回

注意:/hello-nginx代表的是所有以此为前缀的请求

(2)反向代理
依旧先创建虚拟主机-->创建/etc/nginx/conf.d/hello-proxy.conf文件,然后添加server block:

server{
    listen 9090;
    server_name 192.168....;
    
    location{
        //你想要转发的服务器域名
        proxy_pass http://www.baidu.com
}
}

4,项目部署

(1)顶级模块lease的maven上执行clean+package打包操作

毫不意外,出现了大量问题(os:已经习惯了)

1,Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type.

这个算不上问题,就是一警告,不过解决方法依旧记录一下:再src/main/java下新建lombok.config配置文件,然后添加:

config.stopBubbling=true
lombok.equalsAndHashCode.callSuper=call

当我们给一个继承了父类的子类上使用@Data @ToString @EqualsAndHashCode 注解时,IDE 会警告上述问题,意思是,该注解在实现 ToString EqualsAndHashCode 方法时,不会考虑父类的属性

2,“程序包xxx不存在,找不到符号”(用这个插件打包的Jar包可以直接运行,但是不可依赖!)

真正的问题来了,其实最主要的问题是,我在最顶级的模块lease的pom.xml文件中添加了打包插件,因为common模块和model模块依赖于lease所以也会传递到这个插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

但是!!!:在需要打成可执行jar的地方添加就好了,如果是被依赖的,就不要添加此插件,也就是common和model模块,所以删除lease中的这个插件,然后单独在web模块的pom文件里添加就行,web下的web-admin,web-app都需要打包为可执行jar包

3,“测试类报错”

这个解决简单,直接删掉测试类即可

5,下载jdk21,小tips:centOS内置了jdk1.8

下载jdk安装包,然后解压到/opt路径下,/opt路径一般用来存放用户自己的下载内容,上传项目jar包到/opt/lease/路径下

6,启动项目,集成systemmd

后续启动可以直接使用systemctl start lease-app/admin命令启动

/opt/jdk-21.0.7/bin/java -jar /opt/lease/web-admin-0.0.1-SNAPSHOT.jar
/opt/jdk-21.0.7/bin/java -jar /opt/lease/web-app-0.0.1-SNAPSHOT.jar
#创建`lease-app.service`文件
vim /etc/systemd/system/lease-app.service
#内容如下
[Unit]
Description=lease-app
After=syslog.target
#/opt/lease/app.log记录日志
[Service]
User=root
ExecStart=/opt/jdk-21.0.7/bin/java -jar /opt/lease/web-app-0.0.1-SNAPSHOT.jar 1>/opt/lease/app.log 2>&1
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target

7,结合nginx启动项目

1,打包前端静态资源npm run build生成dist文件,压缩上传到虚拟机,解压路径一般是在/usr/share/nginx/html+app/admin

前端.env.production文件环境变量不能修改,前端代码会全局加载这个变量,修改会导致后续通过域名访问访问不到静态资源的情况:始终定位到default.conf默认配置文件的location中

VITE_APP_BASE_URL='http://admin.lease.atguigu.com'

2,编写配置文件,然后重新加载systemctl reload nginx:

   server {
       listen       80;//端口,默认80
       server_name  lease.atguigu.com;//域名
       //定位
       location / {
           root   /usr/share/nginx/html/app;//静态资源路径
           index  index.html;//index文件
       }
       //处理各种调用后端接口数据
       location /app {
           proxy_pass http://虚拟IP:8081;
       }
   }

3,域名映射(模拟)

修改C:\Windows\System32\drivers\etc\hosts文件,使lease.atguigu.com和admin.lease.atguigu.com域名指向虚拟IP:

192.168.xxx.xxx lease.atguigu.com admin.lease.atguigu.com

最后就可以直接通过http://lease.atguigu.com访问项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值