NBlog个人博客部署维护过程记录 -- 后端springboot + 前端vue

项目是fork的Naccl大佬NBlog项目,页面做的相当漂亮,所以选择了这个。可以参考2.3的效果图

惭愧,工作两年了也没个自己的博客系统,趁着过年时间,开始搭建一下.

NBlog原项目的github链接:Naccl/NBlog: 🍓 Spring Boot + Vue 前后端分离博客系统 https://naccl.top (github.com)

非常建议自己去部署一个来维护,之前尝试csdn、github做笔记,但是效果都不好,不如一个可以自己完全控制的博客让人舒心。

目前项目进度:
1.IP端口部署(完成,可以通过IP+端口访问服务)
2.域名访问(完成,域名访问即可)
3.功能熟悉及完善(进行中,对于不熟悉的功能实现进行学习,对于需要扩展的功能进行修改等)

可以访问下面的链接查看效果:
https://www.chaobk.com

个人Fork的代码放这里了,慢慢改:https://github.com/Chaobk/CBlog

美图镇楼

image-20240216161505644

一、本地初步尝试

clone项目到本地,名字和配置都改一改。注意不要全局替换,因为有一些图片的链接也会包含在内。

繁杂工作,就不记录了。

另外项目里使用了redis与mysql,需要准备一下这两个软件。

本地运行足够使用了,不过这里我选择使用服务器上的,因为部署到服务器也是需要准备这两个组件的。详细步骤下一章节写。

二、前后端部署

1.服务器环境准备

既然要部署自己的博客,那么需要准备一台服务器环境。

这里我选择的是观星云(国内领先的云服务器、高防服务器、香港服务器云计算服务商!上云就上观星云! - - 观星云 (guanxingyun.com))的服务器,4核8G,一年五百,定了三年。有条件建议使用阿里云或者腾讯云,观星云的只是便宜,但是稳定性不行,有遇到过整个机房停电,导致服务器挂掉的情况。

服务器内存还是建议4G起步,2G实在干不了啥东西。

准备下docker环境,使用docker安装配置软件太方便了。

1.1 配置Docker

Linux安装配置Docker,详细可以参考这篇文章:Linux安装Docker完整教程-腾讯云开发者社区-腾讯云 (tencent.com)

安装成功后可以使用docker -v检查是否安装成功。

1.2 安装并启动mysql

使用Docker安装mysql,详细可以参考这篇文章:Docker 上安装、启动 MySQL (图解)-腾讯云开发者社区-腾讯云 (tencent.com)。注意使用的mysql版本,不指定的话默认是最新的。

启动后,使用本地数据库客户端检查下是否可以使用,显示连接成功即完成。

1.3 安装并启动redis

类似于Mysql,也是先搜索可用版本,然后选择指定的版本进行安装,不指定默认最新。详细流程可以参考这篇文章:最详细的docker中安装并配置redis-腾讯云开发者社区-腾讯云 (tencent.com)

启动后使用本地客户端尝试连接,这里使用的软件是Another Redis Desktop Manager,可以连接即完成。

1.4 准备Java8环境

由于我们的项目是Java8版本,所以这里使用Java8的环境。

安装配置参考这篇文章即可:Linux安装JDK并配置环境变量 - 详细步骤-腾讯云开发者社区-腾讯云 (tencent.com)

配置好环境变量,使用java -version显示版本说明成功。

1.5 准备Nodejs环境

选择合适的版本进行安装,建议选择和本地一样的,避免出环境问题。

详细流程可以参考这篇文章:Linux下Nodejs安装(最新版)-腾讯云开发者社区-腾讯云 (tencent.com)

服务器运行node -v以及npm -v来验证是否成功。

2.准备部署资源

2.1 后端部署

既然要部署在服务器上,环境信息是要改的。

服务的ip和端口需要配置成服务器的,域名或者ip都行,前后端统一。

目前还没有配置域名,我就先写死成了IP地址+端口,域名之后搞。

# 后端服务URL
blog.api=http://185.242.235.202:${server.port}
# 后台管理URL https://admin.naccl.top
blog.cms=http://185.242.235.202:8080
# 前台界面URL https://naccl.top
blog.view=http://185.242.235.202:8079

修改一下redis、mysql的配置信息,如果代码使用git进行管理,请一定注意不要把服务器上的数据库密码暴露出去,容易被攻击,别问我怎么知道的,求方便的话,直接在blog-api.gitignore中添加配置文件的忽略项,即:

image-20240216154927063

/src/main/resources/application-dev.properties

另外配置信息中还有个评论里的QQ头像保存方式,也请注意修改,就是下面的这几个。(我使用的OSS图床,后续更新代码和配置,Github太慢了)

# 评论中QQ头像存储方式: 本地:local GitHub:github 又拍云:upyun
upload.channel=local# 静态文件上传访问路径 Windows环境例如: C:/Users/cblog/Desktop/upload/ Linux环境例如:/home/cblog/upload/
upload.file.path=/home/cblog/upload/
upload.file.access-path=/image/**
upload.file.resources-locations=file:${upload.file.path}

之后上传到服务器运行即可,我这里是放在了/home/CBlog/api下面

[root@ser723958765859 CBlog]# ls
api  cms  view
[root@ser723958765859 CBlog]# pwd
/home/CBlog

上传后直接后台启动即可。

[root@ser723958765859 api]# pwd
/home/CBlog/api
[root@ser723958765859 api]# ls
blog-api-0.0.1.jar 
[root@ser723958765859 api]# nohup java -jar blog-api-0.0.1.jar &

2.2 前端部署

首先根据项目的README.md文档,先把/blog-view/src/plugins/axios.js/blog-cms/src/util/request.js中的baseUrl修改为后端 API 地址。

然后前端直接使用npm run build生成dist包,然后制作一个server.js文件,用来配置启动信息。注意和后端配置相统一。

例如,我个人的配置的如下:

  • blog-cms,8079端口
const express = require('express');
const app = express();
app.use(express.static('./dist'));//运行时的端口,可以自己自定义
const port = 8079;app.listen(port, function (err) {if (err) {console.log(err);return;}console.log('Listening at http://localhost:' + port + '\n');
});
  • blog-view,8080端口
const express = require('express');
const app = express();
app.use(express.static('./dist'));//运行时的端口,可以自己自定义
const port = 8080;app.listen(port, function (err) {if (err) {console.log(err);return;}console.log('Listening at http://localhost:' + port + '\n');
});

部署资源准备好后,把distnode-modulesserver.js打包上传到服务器的目录下。

view为例,上传后解压,直接后台启动即可:
(使用nohup不知道为什么退出终端就失效了,改用了disown)

[root@ser723958765859 view]# pwd
/home/CBlog/view
[root@ser723958765859 view]# ls
dist  node_modules  server.js
[root@ser723958765859 view]# node server.js & disown

前端部署完成

2.3 部署测试

启动后直接本地通过ip+端口尝试访问下是否成功。

例如下图,首页显示,前端部署成功。

分类点过去有一篇文章显示,后端部署成功。(测试数据)

image-20240216161152576

image-20240216161221893

基本部署流程结束,现在就有了一个好看的个人博客了~
现在好多东西都是用的原来的,只替换了名字和图片,之后逐步改了。

3.开启域名访问

3.1 域名购买

直接网络搜索域名即可购买,我这里选择的阿里云。

登录后直接搜索域名,进入域名注册页面,输入自己预购入的域名即可。

image-20240217200304350

image-20240217200319756

选择后直接购买即可,不需要购买其他服务。注册的时候需要选择信息模板,根据提示创建即可。

3.2 DNS解析

域名购买完成后,进入控制台,看到域名点过去即可。

image-20240217200700428

进入域名,点击解析。

image-20240217202011834

image-20240217202037983

按照类似右边的配置即可,因为已经配过了,所以左边是有记录的。

image-20240217202156444

按需配置,我这里配置了www以及@的解析,两者的含义在主机记录有显示:

主机记录就是域名前缀,常见用法有:
www:解析后的域名为www.aliyun.com。
@:直接解析主域名 aliyun.com。
*:泛解析,匹配其他所有域名 *.aliyun.com。
mail:将域名解析为mail.aliyun.com,通常用于解析邮箱服务器。
二级域名:如:abc.aliyun.com,填写abc。
手机网站:如:m.aliyun.com,填写m。
显性URL:不支持泛解析(泛解析:将所有子域名解析到同一地址)

配置完成后,本地打开cmd,通过ping命令测试一下:

C:\Users\xxx>ping www.chaobk.com正在 Ping www.chaobk.com [185.242.235.202] 具有 32 字节的数据:
来自 185.242.235.202 的回复: 字节=32 时间=17ms TTL=48
来自 185.242.235.202 的回复: 字节=32 时间=17ms TTL=48
来自 185.242.235.202 的回复: 字节=32 时间=16ms TTL=48
来自 185.242.235.202 的回复: 字节=32 时间=17ms TTL=48

显示了解析后的IP,域名解析配置成功。

3.3 证书申请

不用备案,我们直接用免费三个月的就行,也就更新证书稍微麻烦一点,详细步骤可以参考官方的:2022阿里云免费SSL证书申请全过程(图文详解)-阿里云开发者社区 (aliyun.com)

3.4 下载证书到服务器

进入SSL证书控制台,找到对应的域名下载。我这里分别为前台页面、管理台页面、后端服务(后端服务调用也需要https调用)申请了证书,这里展示www.chaobk.com。

我这里使用的是nginx,所以选取nginx证书进行下载。

image-20240219204258192

image-20240219204427182

下载后是个压缩包,上传到服务器。

解压后是两个文件,分别是.pem和.key,把这两个证书放到nginx容器里的某个位置进行管理(如果使用了目录映射的话,放到宿主机对应的目录即可;如果没有使用目录映射,可以通过docker cp命令放到容器里面,建议配置映射更方便)。

例如:

docker cp ./xxx.pem nginx:/etc/nginx/cert/cblog

这是把当前目录下的pem文件复制到nginx实例cblog目录下。nginx是容器运行的实例名,/etc/nginxnginx文件所在目录,如果cert/blog目录不存在,记得先创建这个目录,可以进入到容器里面去创建这个目录,有目录后再复制过去。

以下命令可以进入到容易里面:

docker exec -it nginx /bin/bash

证书放置完后,就可以配置nginx转发了。

3.5 配置Ngnix转发

我这里直接在nginx的配置目录conf.d新建了一个cblog.conf文件,内容如下:

#定义一个HTTP服务组
upstream cblog {#定义HTTP地址,负载均衡配置为加权轮询,weight:权重,默认为1, weight越大,负载的权重就越大server 185.242.235.202:8080 weight=1;
}server {#HTTPS的默认访问端口443。listen 443 ssl;#填写证书绑定的域名server_name www.chaobk.com chaobk.com;#填写证书文件绝对路径ssl_certificate /etc/nginx/cert/cblog/www.chaobk.com.pem;#填写证书私钥文件绝对路径ssl_certificate_key /etc/nginx/cert/cblog/www.chaobk.com.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;#表示优先使用服务端加密套件。默认开启ssl_prefer_server_ciphers on;location / {#通过代理将请求发送给upstream命名的HTTP服务proxy_pass http://cblog;}}

这里的证书记得对应上一步证书存放的位置,位置指的是容器内部证书的位置。

配置完成后重启nginx,本地尝试通过域名访问。
image-20240219205729884

配置成功。

管理页、后台服务的配置也是类似的逻辑。配置完成后测试是否成功即可。

3.6 服务代码重新部署

修改成域名部署后,之前写死的IP地址也需要更改,否则,页面功能其实是不可用的,只是域名转发正常。

把后端的配置文件,前端的request.js、axios.js等该修改的都改了。

改完后重新部署到服务器。

下一步,对于不熟悉的功能实现进行学习,对于需要扩展的功能,有很多想法想试试,例如看板娘、数据备份、简化部署(现在每次都要手动上传包麻烦死了)、过程会继续记录。

4.功能完善及扩展(待更新)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/261089.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

展示用HTML编写的个人简历信息

展示用HTML编写的个人简历信息 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document…

网贷大数据查询多了对征信有影响吗?

网贷大数据在日常的金融借贷中起到很重要的风控作用&#xff0c;不少银行已经将大数据检测作为重要的风控环节。很多人在申贷之前都会提前了解自己的大数据信用情况&#xff0c;那网贷大数据查询多了对征信有影响吗?本文带你一起去看看。 首先要说结论&#xff1a;那就是查询网…

【AI视野·今日Robot 机器人论文速览 第七十八期】Wed, 17 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Wed, 17 Jan 2024 Totally 49 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Safe Mission-Level Path Planning for Exploration of Lunar Shadowed Regions by a Solar-Powered Rover Authors Olivier L…

24-k8s的附件组件-Metrics-server组件与hpa资源pod水平伸缩

一、概述 Metrics-Server组件目的&#xff1a;获取集群中pod、节点等负载信息&#xff1b; hpa资源目的&#xff1a;通过metrics-server获取的pod负载信息&#xff0c;自动伸缩创建pod&#xff1b; 参考链接&#xff1a; 资源指标管道 | Kubernetes https://github.com/kuberne…

SpringMVC第一天

SpringMVC简介 1.导入spring-mvc坐标 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.7</version></dependency> 2.在web.xml里配置DispatcherServlet前端控制器 …

dubbo源码中设计模式——注册中心中工厂模式的应用

工厂模式的介绍 工厂模式提供了一种创建对象的方式&#xff0c;而无需指定要创建的具体类。 工厂模式属于创建型模式&#xff0c;它在创建对象时提供了一种封装机制&#xff0c;将实际创建对象的代码与使用代码分离。 应用场景&#xff1a;定义一个创建对象的接口&#xff0…

【AI学习】LangChain学习

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密

一、前言 之前我写过一篇文章使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置&#xff08;读取时自动解密&#xff09;&#xff0c;对Spring Boot项目的属性读取时进行加解密&#xff0c;但是没有说明对System.setProperty(key, value)设…

5 Nacos本地启动配置

1、修改启动配置 修改nacos-console模块的application.properties,具体如下: 其中,url参数详见链接:

使用AndroidStudio调试Framework

1.前言 最近在工作过程中&#xff0c;涉及到FW的一些修改&#xff0c;比如PhoneWindowManager&#xff0c;只能通过加日志看打印的方式查看一些内容&#xff0c;比较低效&#xff0c;所以想了解一下FW的调试方式&#xff0c;后来发现AS就可以调试FW.我平时都是在Docker服务器编…

多目图像拼接算法

图像拼接一般要经过图像特征提取、特征匹配、融合等步骤来实现。 特征匹配与变换: SIFT(尺度不变特征变换)SURF(加速鲁棒特征)ORB(Oriented FAST and Rotated BRIEF)AKAZE(加速的KAZE特征)全景图像拼接算法: 基于特征匹配的拼接:利用特征点匹配找到重叠区域,然后进…

Rust 数据结构与算法:3栈:用栈实现符号匹配

1、符号匹配 如&#xff1a; (56)(78)/(43)、{ { ( [ ] [ ])}}、(ab)(c*d)func() 等各类语句的符号匹配。 这里我们关注的不是数字而是括号&#xff0c;因为括号更改了操作优先级&#xff0c;限定了语言的语义&#xff0c;这是非常重要的。如果括号不完整&#xff0c;那么整个…

数学建模:BP神经网络(含python实现)

原理 BP 神经网络&#xff0c;也称为多层感知机&#xff08;Multilayer Perceptron&#xff0c;MLP&#xff09;&#xff0c;是一种常见的神经网络模型&#xff0c;用于解决各种机器学习问题&#xff0c;包括分类和回归。BP 代表“反向传播”&#xff08;Backpropagation&#…

【Go map的底层实现原理?】

Go中的map是一个指针&#xff0c;占用8个字节&#xff0c;指向hmap结构体 源码包中src/runtime/map.go定义了hmap的数据结构&#xff1a; hmap包含若干个结构为bmap的数组&#xff0c;每个bmap底层都采用链表结构&#xff0c;bmap通常叫其bucket hmap结构体 // A header for…

Linux中alarm/setitimer函数(信号函数)

alarm函数 函数原型&#xff1a; unsigned int alarm(unsigned int seconds); 函数描述&#xff1a;设置定时器&#xff08;闹钟&#xff09;。在指定seconds后&#xff0c;内核会给当前进程发送 14&#xff09;SIGALRM信号。进程收到该信号&#xff0c;默认动作终止。每个进程…

判断一个dll/exe是32位还是64位

通过记事本判断&#xff08;可判断C或者C#&#xff09; 64位、将dll用记事本打开&#xff0c;可以看到一堆乱码&#xff0c;但是找到乱码行的第一个PE&#xff0c;如果后面是d?则为64位 32位、将dll用记事本打开&#xff0c;可以看到一堆乱码&#xff0c;但是找到乱码行的第…

服务网格Service Mesh和Istio

文章目录 服务网格&#xff08;Service Mesh&#xff09;市场上三种服务网格解决方案服务网格的特征流量管理安全性可观察性 Istio简介Istio提供了什么功能服务 &#xff1f;Istio 核心特性流量管理安全可观察性 平台支持 服务网格&#xff08;Service Mesh&#xff09; 服务网…

【Linux】Linux调试器-gdb使用

1. 背景 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项 2. 开始使用 gdb binFile 退出&#xff1a; ctrl d 或 quit 调…

【JGit】分支管理实践

本文紧接【JGit】简述及学习资料整理。 以下梳理了使用 JGit 进行 Git 操作的实践 JGit实践 主函数 public static void main(String[] args) throws Exception {String localDir "D:\\tmp\\git-test\\";String gitUrl "http://192.168.181.1:3000/root/g…

我的音乐伙伴:南卡、韶音、墨觉三款热门骨传导耳机体验分享

作为一个热爱运动的音乐爱好者。对我来说&#xff0c;没有什么能比在运动时配上心爱的歌曲更让人兴奋的了。不管是清晨的跑步&#xff0c;还是傍晚的散步&#xff0c;音乐总能激发我更多的能量。但是&#xff0c;找到既能陪伴我完成高强度训练&#xff0c;又不失音质的耳机&…