Linux 部署 Bolo 博客 - v2.6 稳定版
安装必要的环境
- Java - 🌏 CentOS 7 安装 Java
- Nginx - 🌏 CentOS 7 安装 Nginx
- Tomcat - 🌏 CentOS 7 安装 Tomcat
- MySQL - 🌏 CentOS 7 安装MySQL5.7
下载 Bolo 博客
- 🌏 GitHub - bolo_v2_6_stable.zip
- 🌏 本站下载 - Bolo_v2.6.zip
- 本站下载的代码对源代码进行了部分的删减与修改,具体内容如下:
- 修改后源码下载 - 🌏 Bolo_Solo_Source_Code_2.6.7z
1. 对后台界面样式进行了微调,并调整了一些按钮的位置等
2. 移除了bolo-bubble皮肤的footer图片,并对移除后样式进行了调整
3. 移除了bolo-bubble皮肤侧边导航的部分导航链接,并对侧边栏样式进行了微调
4. 移除了后台的帮助菜单
5. 针对bolo-butterfly皮肤,修复了代码块复制按钮的显示,以及文章目录的显示
6. 修复bolo-butterfly皮肤,新增导航链接时,手机端查看导航栏图标显示不统一问题
7. 文章内点击站内链接修改为新标签页打开
8. 修改bolo-butterfly皮肤,将分类链接移动到导航栏中(注:代码写死,使用时需要修改)
9. 升级Oracle MySQL JDBC版本,修复BUG:Oracle MySQL 的Connector/J JDBC驱动 < 8.0.27版本在处理XML数据时存在外部实体注入漏洞(XXE),可能导致敏感数据泄漏。 漏洞原因: MySQL Connector/J 8.0.27版本之前,MysqlSQLXML中的getSource()方法未对传入的XML数据做校验,导致攻击者可以在XML数据中引入外部实体,造成XXE攻击。
10. 升级SnakeYAML版本,修复BUG:SnakeYAML是一款基于Java的YAML解析器。 SnakeYAML 1.18版本中的Alias功能存在安全漏洞。攻击者可利用该漏洞造成拒绝服务。
11. 升级Github jsoup版本,修复BUG:Github jsoup是一个用于处理真实世界 HTML 的 Java 库。 jsoup 1.14.2之前版本存在安全漏洞,该漏洞可导致jsoup拒绝服务。
12. 升级Eclipse Jetty版本,修复BUG:Eclipse Jetty是Eclipse基金会的一个开源的、基于Java的Web服务器和Java Servlet容器。 Eclipse Jetty 存在安全漏洞,该漏洞源于系统的临时目录在该系统上的所有用户之间共享。并置用户可以观察在共享临时目录中创建临时子目录的过程,并争着完成临时子目录的创建。攻击者可利用该漏洞拥有对用于解压缩web应用程序的子目录的读写权限,包括它们的web - inf lib jar文件和JSP文件。以下产品及版本收到影响:1.0 thru 9.4.32.v20200930版本, 10.0.0.alpha1 thru 10.0.0.beta2版本, 11.0.0.alpha1 thru 11.0.0.beta2O版本。
13. 升级HttpClient版本,修复BUG:HttpClient是美国阿帕奇(Apache)基金会的一个 Java 编写的访问HTTP资源的客户端程序。该程序用于使用HTTP协议访问网络资源。 Apache HttpClient java.net.URI Authority Component存在安全漏洞,该漏洞允许攻击者访问敏感数据。
14. 将除看板娘之外的所有JSDelivr的资源替换为国内CDN站点或本站站点。
本站数据库读取
- 注:为了数据不遭到破坏,此用户只有读权限,数据库可导出,数据实时更新,欢迎查看~
- 博客初次启动时,会自动创建表结构以及初始化数据,搭建时只需建库即可
IP:194.36.170.75
端口:3306
用户名:mune
密码:Abc..123456Abc
创建数据库
- 版本:5.7 +
- 字符集(Character Set):
utf8mb4
- 排序规则(Collate):
utf8mb4_bin
- 存储引擎:
InnoDB
- 数据库名:solo
建议创建数据库采用下面的命令:
mysql> create database solo character set utf8mb4 collate utf8mb4_general_ci;
解压程序包
- 将
Bolo_v2.5.zip
上传至tomcat
安装路径的webapps
目录下
# cd /usr/local/tomcat/webapps
# unzip Bolo_v2.5.zip
修改数据库连接配置
- 修改为自己服务器的MySQL连接IP以及用户密码
# cd /usr/local/tomcat/webapps/bolo/WEB-INF/classes
# vim local.properties
runtimeDatabase=MYSQL
jdbc.username=root
jdbc.password=123456
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.URL=jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
启动服务
# cd /usr/local/tomcat/bin/
# ./startup.sh ;tailf ../logs/catalina.out
防火墙配置
# 开启防火墙
# systemctl start firewalld
# 开放http端口
# firewall-cmd --zone=public --add-port=80/tcp --permanent
# 开放MySQL端口
# firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 开放https端口
# firewall-cmd --zone=public --add-port=443/tcp --permanent
# 开放Tomcat端口
# firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 立即生效
# firewall-cmd --reload
# 查看已开放的端口号
# firewall-cmd --list-ports
浏览器访问
- 浏览器输入IP:端口/bolo即可访问
http://192.168.10.20:8080/bolo
部署成功
Tomcat 参数优化
- 参考文章 - 🌏 Tomcat 9 参数优化
Nginx 优化与缓存
- 创建静态资源缓存路径
# mkdir -p /home/power/static
# mkdir -p /var/cache/nginx/cache
- 将项目中的静态资源全部复制到该目录下
# cd /usr/local/tomcat/webapps/bolo
# cp -r images/ js/ scss/ skins/ sw.js manifest.json robots.txt /home/power/static/
- 修改 nginx.conf 文件,基于yum安装Nginx方式
- 非yum安装的nginx,只需修改配置文件中的相关文件的路径即可,可通过find命令查找相关文件的路径
- 本站下载,下载后修改IP、端口即可
# wget -O /etc/nginx/nginx.conf https://file.cnxiaobai.com/Code/Bolo/Http/nginx.conf
- 或手动编辑
# cd /etc/nginx/
# vim nginx.conf
user nginx nginx; # 定义nginx的启动用户,不建议使用root
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
worker_rlimit_nofile 65535; # 这个值为nginx的worker进程打开的最大文件数,如果不配置,会读取服务器内核参数(通过ulimit -a查看),如果内核的值设置太低会让nginx报错(too many open file),但是在此设置后,就会读取自己配置的参数不去读取内核参数
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
use epoll; # 客户端线程轮询方法、内核2.6版本以上的建议使用epoll
worker_connections 65535; # 设置一个worker可以打开的最大连接数
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120;
types_hash_max_size 2048;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
server_tokens off; # 隐藏nginx版本号
proxy_intercept_errors on;
fastcgi_intercept_errors on;
fastcgi_connect_timeout 1300;
fastcgi_send_timeout 1300;
fastcgi_read_timeout 1300;
fastcgi_buffer_size 512k;
fastcgi_buffers 4 512k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;
proxy_connect_timeout 20s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间。一般设置1和2
gzip_comp_level 2;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
# 设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /usr/local/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name 192.168.10.20;
access_log off;
location / {
proxy_pass http://192.168.10.20:8080;
# 隐藏端口号
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
#root /home/power/maintain/;
#index index.html;
}
# 需添加项目所需的静态资源的后缀名,根据项目需要进行添加
location ~ .*\.(css|js|ico|gif|jpg|jpeg|png|otf|eot|svg|ttf|woff|woff2|htm|mp3|json|scss)$ {
log_not_found off;
expires 7d;
access_log off;
root /home/power/static/;
proxy_store on;
proxy_temp_path /home/power/static/;
proxy_redirect off;
proxy_set_header Host 192.168.10.20:8080;
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
if ( !-e $request_filename)
{
proxy_pass http://192.168.10.20:8080;
}
# 缓存过期管理
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
}
}
- 检查
Nginx
配置是否有误
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
- 重加载
Nginx
# nginx -s reload
启用 https
- 将 webapps/ROOT/WEB-INF/classes/latke.properties 中的 http 修改为 https
# cd /usr/local/tomcat/webapps/bolo/WEB-INF/classes/
# vim latke.properties
serverScheme=http
# 修改为
serverScheme=https
- 修改 nginx.conf,根据实际修改即可
- 本站下载,下载后修改IP、端口即可
# wget -O /etc/nginx/nginx.conf https://file.cnxiaobai.com/Code/Bolo/Https/nginx.conf
- 或手动编辑
# cd /etc/nginx/
# vim nginx.conf
user nginx nginx; # 定义nginx的启动用户,不建议使用root
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
worker_rlimit_nofile 65535; # 这个值为nginx的worker进程打开的最大文件数,如果不配置,会读取服务器内核参数(通过ulimit -a查看),如果内核的值设置太低会让nginx报错(too many open file),但是在此设置后,就会读取自己配置的参数不去读取内核参数
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
use epoll; # 客户端线程轮询方法、内核2.6版本以上的建议使用epoll
worker_connections 65535; # 设置一个worker可以打开的最大连接数
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120;
types_hash_max_size 2048;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
server_tokens off; # 隐藏nginx版本号
proxy_intercept_errors on;
fastcgi_intercept_errors on;
fastcgi_connect_timeout 1300;
fastcgi_send_timeout 1300;
fastcgi_read_timeout 1300;
fastcgi_buffer_size 512k;
fastcgi_buffers 4 512k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;
proxy_connect_timeout 20s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间。一般设置1和2
gzip_comp_level 2;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
# 设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /usr/local/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
upstream cnxiaobai {
server 192.168.10.20:8080;
}
# http自动跳转https
server {
listen 80;
server_name cnxiaobai.com www.cnxiaobai.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl http2; # 添加 http2 支持
server_name www.cnxiaobai.com;
# 证书路径
ssl_certificate /etc/nginx/ssl/server.cer;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
# 浏览器已支持TLSv1.3,建议加上
# TLSv1和TLSv1.1即将废弃,如果不需要支持IE和XP建议去掉
# IE8-10/Win7需要TLSv1.0;IE8以下需要SSL3和单证书
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on; # on由服务器决定加密算法,off由浏览器决定,推荐使用on,更安全,对服务器性能有少量影响
access_log off;
# HSTS(ngx_http_headers_module is required) (180d)
# 严格传输安全:即在时间过期之前,每次访问HTTP站点时,由客户端直接跳转到HTTPS站点
# 设置后,该网站的HTTP站点无法打开,只能等待过期或禁用配置后清空浏览器缓存
# 启用后注意保持证书不过期,证书过期后网站可能无法访问
add_header Strict-Transport-Security "max-age=15552000" always;
# 开启 OCSP Stapling,作用:由服务器在线查询证书吊销情况
# 默认是由浏览器在线查询,由服务器查询效率更高
ssl_stapling on;
# OCSP Stapling 验证开启
ssl_stapling_verify on;
# 定时检测 DNS 的变化,自动更新 DNS 对应的 IP 列表
resolver 223.5.5.5 valid=5s;
resolver_timeout 1
location / {
proxy_pass http://cnxiaobai;
# 隐藏端口号
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 10m;
proxy_connect_timeout 30; #超时时间
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on; #开启缓冲区,减少磁盘io
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k; #当超过内存允许储蓄大小,存到文件
}
location ~ .*\.(css|js|ico|gif|jpg|jpeg|png|otf|eot|svg|ttf|woff|woff2|htm|mp3)$ {
log_not_found off;
expires 7d;
access_log off;
root /home/power/static/;
proxy_store on;
proxy_temp_path /home/power/static/;
proxy_redirect off;
proxy_set_header Host 192.168.10.20:8080;
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
if ( !-e $request_filename)
{
proxy_pass http://192.168.10.20:8080;
}
# 缓存过期管理
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
}
}
- 重启 Tomcat 服务
# ps -ef |grep tomcat
# kill -9 进程号
# cd /usr/local/tomcat/bin
# ./startup.sh ;tailf ../logs/catalina.out
- 检查
Nginx
配置是否有误
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
- 重加载 Nginx
# nginx -s reload
标题:Linux 部署 Bolo 博客 - v2.6 稳定版
作者:Mune
地址:https://cnxiaobai.com/articles/2021/04/27/1619519011942.html
我也喜欢本站的主题
第二个是
location
缓存用的,可以不要的location /
location ~ .*\.
我感觉这两个留一个location ~ .*\.
就行了因为在location ~ .*\.
里面写了这句话可以参考上面的nginx-http配置对比看看。
为什么我用80端口访问样式有问题..用8080访问就正常
是nginx哪边配的有问题吗?
是的
博主,这个blog代码是本站的代码吗?挺喜欢这个样式