当前位置: 首页 > news >正文

博客系统-邮件发送-nginx-服务部署

前言

介绍邮件发送

官网
邮箱授权码通常在:邮箱设置-账号与安全-设备管理-开启服务
然后就有授权码了

先引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

然后配置邮箱

springmail:# 指定邮件服务器地址host: smtp.qq.com# 登录账户username: 747692844@qq.com# 登录密码password: 授权码# 端口port: 465# 默认编码default-encoding: UTF-8# 使用的协议protocol: smtps

注意要声明端口号不然运行不起来,这个是服务器的端口号

这样就可以了,可以写密码,不写授权码的话
然后开始测试
在这里插入图片描述
在这里插入图片描述
这样就可以了

然后就收到邮件了

我的社区,那个是发件人的名字,就是新起的一个名称

发送邮件

先把方法进行封装,在blog-comon里面

先引入依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>

这个工具包无法注入JavaMailSender,因为user-service中spring扫描不到这个,或者blog-common也无法扫描这个,因为它没有spring的扫描机制

还是采用redis的使用方法,就是用构造方法,配置文件

在这里插入图片描述
然后就是邮箱那些东西都可以用配置
发件人名称也用配置文件
收件人是一个变量
邮件信息也是配置文件
在这里插入图片描述

然后发件人和名称就是配置了

    private MailProperties mailProperties;

引入这个对象
然后就是构造函数传入进来这个变量,因为我们不能直接构造,blog-common就不是一个spring项目,就没有启动类,所以无法注入的,只能用构造函数传进来了

在这里插入图片描述
这个对象MailProperties就可以获得配置了

mailProperties.getUsername()可以获取邮箱
但是发件人名字呢
这个要自定义属性了
在这里插入图片描述

properties就是自定义属性了

而且这个配置是写在user-service,因为传进来的参数是来自user-service的,所以mailProperties获取的配置也是user-service的

springproperties:personal: "康氏社区"

这样就可以了

在这里插入图片描述
这个方法就分装好了

然后开始应用
先在user-service里面创建config,注入bean
在这里插入图片描述
这样就可以了

然后我们把这个配置放在Blog-comon里面

在这里插入图片描述
然后就是做配置了

在这里插入图片描述
这样引入依赖,就会自动注入bean了
然后就是只有使用了Mail,才会注入bean

在这里插入图片描述
这样就可以了

然后就是在消息队列,消费者那里监听,成功后,发送邮件

 @Autowiredprivate Mail mail;

先注入

发送内容可以拼接html

UserInfo userInfo = JSON.parseObject(body, UserInfo.class);String content = new StringBuilder().append("尊敬的").append(userInfo.getUserName()).append(", 您好! <br/>").append("感谢您注册成为我们博客社区的⼀员! 我们很⾼兴您决定加⼊我们的⼤家庭. <br/>").append("您的注册信息如下: </br/>").append("⽤⼾名:").append(userInfo.getUserName()).append("<br/>").append("为了确保您的账⼾安全,请妥善保管您的登录信息. 如果使⽤过程中, 遇到任何 问题, 欢迎联系我们的⽀持团队. XXXX@bite.com <br/>").append("再次感谢您的加⼊,我们期待看到您的精彩内容!<br/>").append("最好的祝愿<br/>").append("康氏博客团队").toString(); mail.send(userInfo.getEmail(), "欢迎加⼊⽐特博客社区", content);

在这里插入图片描述
在这里插入图片描述
这样就可以运行了
注册的时候用可以用的邮箱,就成功了

前端服务部署

Nginx介绍

Nginx是⼀款开源的Web服务器软件,可以⽤作反向代理、负载均衡器.它因⾼性能,⾼稳定性,丰富的
功能和低资源消耗⽽闻名.
Nginx本⾝也是⼀个静态资源的服务器,当只有静态资源的时候,可以使⽤Nginx来做服务器实现部署
前端作为一个服务来启动

官网下载

在这里插入图片描述
Windows下载第三个,linux下载第二个
我先下载Windows

在这里插入图片描述

直接双击nginx.exe就可以启动了
一闪而过的
然后开始访问
在这里插入图片描述
出现了这个就成功了
端口号默认是80,80可以不用输入
然后就是如何关闭nginx
第一任务管理器,搜索nginx,然后停掉
第二是命令关闭

先进入安装目录

.\nginx.exe -s stop

或者

nginx -s stop

输入这个就可以了
在这里插入图片描述
然后就是nginx如何部署服务

conf->打开nginx.conf

在这里插入图片描述
这里可以看出默认访问的就是html下的index.html
改这个路径就可以了,要部署我们的服务的话
在这里插入图片描述

直接把前端代码放在一个文件中,然后复制路径

在这里插入图片描述
这样就可以了
nginx启动,也可以用命令

start nginx
但还是要在本目录下
在这里插入图片描述
这样就有了
但是这个是无法登录的

start nginx
# 停⽌.\nginx.exe -s stop
或者
.\nginx.exe -s quit

在这里插入图片描述
因为这个里面的url是有问题的
我们要加上前缀才可以
统一加上前缀
在common.js里面加上去就可以了

我们先安装一个vscode
然后安装几个插件
在这里插入图片描述
这个是让前端代码的<>与</>里面的内容自动对齐的

在这里插入图片描述
这个是在vscode中打开页面
右键,view in browser
在这里插入图片描述
这个是后端代码修改,前端页面跟着变
右键,open with live server
这个是相当于在本地启动一个服务,来启动前端页面,所以写的代码保存后页面就可以动态跟着变

然后继续在common.js里面加上去就可以了
在这里插入图片描述
里面的这个就是在发送请求之前做的处理
给所有的url都加上前缀
在这里插入图片描述

这样写就可以了

记得启动服务

在这里插入图片描述
这个Access-Control-Allow-Origin报错就是跨域的问题

跨域

跨域(Cross-Origin)指的是浏览器阻⽌前端⽹⻚从⼀个域名(Origin)向另⼀个域名的服务器发送请求.
具体来说,⼀个⻚⾯的协议,域名,端⼝三者任意⼀个与请求的⽬标地址不同,就被视为跨域请求.
当前前端和后端不在⼀个服务,端⼝号也就不同,就会存在跨域问题

所以我们要配置网关,允许跨域
配置⽹关项⽬允许跨域

配置⽹关项⽬允许跨域

spring:cloud:gateway:# 网关全局跨域配置globalcors:# 解决options请求被拦截的问题add-to-simple-url-handler-mapping: truecors-configurations:'[/**]':allowedOriginPatterns: "*"     #设置允许跨域的来源allowedMethods: "*"allowedHeaders: "*"allowCredentials: true

这个就是跨域的网关配置
在这里插入图片描述
这样就可以了

在这里插入图片描述
这样就成功了

前端用户注册开发

然后我们添加用户注册页面,和注册成功页面,然后还有register.css 到我们要启动的页面下
在这里插入图片描述
在这里插入图片描述
还有一个图片
在这里插入图片描述
然后就是修改登录页面,里面增加一个注册的跳转页面、
在这里插入图片描述

vscode自动保存

在这里插入图片描述
在这里插入图片描述
然后就是开始写前端代码来访问了

在这里插入图片描述

这样就可以了
在这里插入图片描述
直接注册

在这里插入图片描述

在这里插入图片描述

环境准备与前端部署

就这么多个环境
Mysql •
Redis •
RabbitMQ •
Nacos •
Nginx

Mysql :

mysql -uroot -p
show datebases;

然后就是初始化数据
就是以前的sql脚本

show databases;
use spring_cloud_blog;

redis

redis-cli
ok

RibbtMQ

http://139.159.230.105:15672/
ok

nacos

http://139.159.230.105:10020/nacos
ok

nginx

#更新软件包
sudo apt-get update#安装nginxsudo apt-get install nginx#查看nginx版本
nginx -v#启动nginxsystemctl start nginx#查看nginx状态
systemctl status nginx

在这里插入图片描述
要开放80端口号
在这里插入图片描述

部署前端

需要修改统一的url前缀

在这里插入图片描述
这样前端代码就改好了


mkdir /var/www/blog   #创建⽂件夹
cd /var/www/blog/     #进⼊⽂件夹rz -E     #上传代码lsunzip blog-html.zip     #解压pwd     #查看路径

/var/www里面有一个html,这个就是nginx的页面

在这里插入图片描述

先对前端代码压缩,然后上传

在这里插入图片描述
然后开始配置nginx的访问目录
在这里插入图片描述

在/etc/nginx/sites-enabled下有一个default文件
就是这个文件
在这里插入图片描述
到server这里,把root和index都给修改了

然后直接重启nginx

systemctl restart nginx

在这里插入图片描述
这样前端就部署好了

后端部署

以前我们用的是多个配置文件来进行环境的区分

我们还可以用—来区分环境
总共部署三个
blog,网关,user
要变化的就是mysql(密码),和naocs(本机)
blog-service:
在这里插入图片描述
我们这个是定义变量的方式,也可以不用这个方式,就是直接和第一部分一样的配置
在这里插入图片描述
就是这样就可以了

nacos:address: 139.159.230.105:10020
mysql:password: "123456"

这个是定义的变量

spring:config:activate:on-profile: dev

这个是配置自带属性,区分环境的
然后是网关:
application.yml:
在这里插入图片描述
bootstrap.yml:

在这里插入图片描述
然后是user
redis不用改了,就是本地的

要改的还有mq,mysql,nacos
在这里插入图片描述
然后就是开始打包
确认要有插件————》maven-plugin
就打包这三个
就是blog-servicee,网关,user-service
因为都引入了blog-common
所以单个项目是打包不成功的
因为从中央仓库打包,找不到blog-comon
所以用整体打包的方式
在这里插入图片描述
直接在root这里打包
在这里插入图片描述

但是他说blog-info/blog-info-api有问题
因为我们的blog-info/blog-info-api也加了maven打包插件, 让blog-info/blog-info-api作为一个项目打包了,所以肯定错了

在这里插入图片描述
取消掉就可以了
然后还有user-api,blog-common
记得刷新maven
在这里插入图片描述
我们这里打包出现错误
看错误日志发现
(D:\spring-project2\spring-cloud-blog\pom.xml)中的modules的19行有问题
在这里插入图片描述
就是这里有问题,因为有重复的module
改一下
在这里插入图片描述

这样就可以了
但是这样也是不行的
因为父工程只能声明子工程的module,不能声明子孙的module
在这里插入图片描述
这样就可以了
然后就是没有引入maven,打包组件的就不会打包
在这里插入图片描述
然后打包的时候记得跳过测试test
在这里插入图片描述
这样就OK了

mkdir spring-cloud-blog

总共三个jar包
上传
然后运行的时候要指定环境
nohup java -jar -Dspring-profiles.active=prod xxx.jar &

tail -100f user.log
tail -100f blog.log
这个可以看日志,这个日志文件也是配置的

我这里就不演示了,因为实在太卡了,机器不行

总结

相关文章:

  • 计算机视觉中的正则化:从理论到实践的全面解析
  • OSPF --- LSA
  • 华为设备命令部分精简分类汇总示例
  • 安卓的桌面 launcher是什么
  • 让数据应用更简单:Streamlit与Gradio的比较与联系
  • 【基础算法】二分算法详解
  • HTML 表单学习笔记
  • 19_大模型微调和训练之-基于LLamaFactory+LoRA微调LLama3
  • 第42讲:走进智慧农业的“感知神经系统”——农田遥感 + 边缘计算的融合实践
  • [SpringBoot]配置文件
  • Kubeflow 快速入门实战(三) - Qwen2.5 微调全流程
  • 大模型学习笔记 day01
  • SVM(支持向量机)
  • app控制的吸尘拖地扫地机研究
  • 【上位机——MFC】菜单类与工具栏
  • 483. 找到字符串中所有的字母异位词
  • 深度图可视化
  • opencv函数展示4
  • 《TCP/IP详解 卷1:协议》之第三章:IP:网际协议
  • 数码管静态显示一位字符(STC89C52单片机)
  • 大学2025丨浙大哲学院院长王俊:文科的价值不在于直接创造GDP
  • 外媒:罗马教皇方济各去世
  • 俄方因复活节停止战斗行动,外交部:乐见一切通往停火的努力
  • “我们一直都是面向全世界做生意”,“世界超市”义乌一线走访见闻
  • 2025中国互联网企业家座谈会在京召开
  • 张九思任电子科大副教授,曾以学生身份入选爱思唯尔全球前2%顶尖科学家