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

前言

介绍邮件发送

官网

邮箱授权码通常在:邮箱设置-账号与安全-设备管理-开启服务

然后就有授权码了

先引入依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

然后配置邮箱

xml 复制代码
spring
  mail:
    # 指定邮件服务器地址
    host: smtp.qq.com
    # 登录账户
    username: [email protected]
    # 登录密码
    password: 授权码
    # 端口
    port: 465
    # 默认编码
    default-encoding: UTF-8
    # 使用的协议
    protocol: smtps

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

这样就可以了,可以写密码,不写授权码的话

然后开始测试

这样就可以了

然后就收到邮件了

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

发送邮件

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

先引入依赖

xml 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

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

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

然后就是邮箱那些东西都可以用配置

发件人名称也用配置文件

收件人是一个变量

邮件信息也是配置文件

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

xml 复制代码
    private MailProperties mailProperties;

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

这个对象MailProperties就可以获得配置了

mailProperties.getUsername()可以获取邮箱

但是发件人名字呢

这个要自定义属性了

properties就是自定义属性了

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

xml 复制代码
spring
    properties:
      personal: "康氏社区"

这样就可以了

这个方法就分装好了

然后开始应用

先在user-service里面创建config,注入bean

这样就可以了

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

然后就是做配置了

这样引入依赖,就会自动注入bean了

然后就是只有使用了Mail,才会注入bean

这样就可以了

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

xml 复制代码
 @Autowired
 private Mail mail;

先注入

发送内容可以拼接html

xml 复制代码
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("为了确保您的账⼾安全,请妥善保管您的登录信息. 如果使⽤过程中, 遇到任何 问题, 欢迎联系我们的⽀持团队. [email protected] <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,然后停掉

第二是命令关闭

先进入安装目录

xml 复制代码
.\nginx.exe -s stop

或者

xml 复制代码
nginx -s stop

输入这个就可以了

然后就是nginx如何部署服务

conf->打开nginx.conf

这里可以看出默认访问的就是html下的index.html

改这个路径就可以了,要部署我们的服务的话

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

这样就可以了

nginx启动,也可以用命令

start nginx

但还是要在本目录下

这样就有了

但是这个是无法登录的

xml 复制代码
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)向另⼀个域名的服务器发送请求.

具体来说,⼀个⻚⾯的协议,域名,端⼝三者任意⼀个与请求的⽬标地址不同,就被视为跨域请求.

当前前端和后端不在⼀个服务,端⼝号也就不同,就会存在跨域问题

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

配置⽹关项⽬允许跨域

配置⽹关项⽬允许跨域

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

这个就是跨域的网关配置

这样就可以了

这样就成功了

前端用户注册开发

然后我们添加用户注册页面,和注册成功页面,然后还有register.css 到我们要启动的页面下

还有一个图片

然后就是修改登录页面,里面增加一个注册的跳转页面、

vscode自动保存


然后就是开始写前端代码来访问了

这样就可以了

直接注册

环境准备与前端部署

就这么多个环境

Mysql •

Redis •

RabbitMQ •

Nacos •

Nginx

Mysql :

xml 复制代码
mysql -uroot -p
show datebases;

然后就是初始化数据

就是以前的sql脚本

xml 复制代码
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

xml 复制代码
#更新软件包
sudo apt-get update
 #安装nginx
 sudo apt-get install nginx
 #查看nginx版本
nginx -v
 #启动nginx
 systemctl start nginx
 #查看nginx状态
systemctl status nginx

要开放80端口号

部署前端

需要修改统一的url前缀

这样前端代码就改好了

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

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

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

然后开始配置nginx的访问目录

在/etc/nginx/sites-enabled下有一个default文件

就是这个文件

到server这里,把root和index都给修改了

然后直接重启nginx

xml 复制代码
systemctl restart nginx

这样前端就部署好了

后端部署

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

我们还可以用---来区分环境

总共部署三个

blog,网关,user

要变化的就是mysql(密码),和naocs(本机)

blog-service:

我们这个是定义变量的方式,也可以不用这个方式,就是直接和第一部分一样的配置

就是这样就可以了

xml 复制代码
nacos:
  address: 139.159.230.105:10020
mysql:
  password: "123456"

这个是定义的变量

xml 复制代码
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

这个可以看日志,这个日志文件也是配置的

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

总结

相关推荐
0509152 分钟前
测试基础笔记第九天
数据库·笔记·oracle
二年级程序员4 分钟前
多表查询之嵌套查询
数据库·sql·mysql
碎梦归途10 分钟前
23种设计模式-创建型模式之原型模式(Java版本)
java·开发语言·jvm·设计模式·原型模式
techdashen17 分钟前
性能比拼: Redis vs Dragonfly
数据库·redis·缓存
自带五拨片22 分钟前
XHTMLConverter把docx转换html报java.lang.NullPointerException异常
java·html
胡斌附体36 分钟前
mysql增加字段并添加索引怎样写语句合适
数据库·sql·mysql
_Djhhh41 分钟前
【Redis】缓存三剑客问题实践(上)
数据库·redis·缓存
doglc1 小时前
Java 动态代理教程(JDK 动态代理)(以RPC 过程为例)
java·rpc·动态代理·jdk动态代理
向哆哆1 小时前
Java 性能优化:如何利用 APM 工具提升系统性能?
java·python·性能优化
一一Null1 小时前
Android studio—socketIO库return与emit的使用
android·java·网络·ide·websocket·网络协议·android studio