博客系统-邮件发送-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

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

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

总结

相关推荐
辛一一1 小时前
neo4j图数据库基本概念和向量使用
数据库·neo4j
熊大如如2 小时前
Java 反射
java·开发语言
巨龙之路2 小时前
什么是时序数据库?
数据库·时序数据库
蔡蓝2 小时前
binlog日志以及MySQL的数据同步
数据库·mysql
猿来入此小猿2 小时前
基于SSM实现的健身房系统功能实现十六
java·毕业设计·ssm·毕业源码·免费学习·猿来入此·健身平台
goTsHgo3 小时前
Spring Boot 自动装配原理详解
java·spring boot
卑微的Coder3 小时前
JMeter同步定时器 模拟多用户并发访问场景
java·jmeter·压力测试
是店小二呀3 小时前
【金仓数据库征文】金融行业中的国产化数据库替代应用实践
数据库·金融·数据库平替用金仓·金仓数据库2025征文
pjx9873 小时前
微服务的“导航系统”:使用Spring Cloud Eureka实现服务注册与发现
java·spring cloud·微服务·eureka
炒空心菜菜3 小时前
SparkSQL 连接 MySQL 并添加新数据:实战指南
大数据·开发语言·数据库·后端·mysql·spark