Linux 部署 Bolo 博客 - v2.6 稳定版

安装必要的环境

下载 Bolo 博客

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

创建数据库

  1. 版本:5.7 +
  2. 字符集(Character Set):utf8mb4
  3. 排序规则(Collate):utf8mb4_bin
  4. 存储引擎:InnoDB
  5. 数据库名: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

image.png

部署成功

image.png

Tomcat 参数优化

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

image.png

启用 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

image.png

  • 修改 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

image.png


标题:Linux 部署 Bolo 博客 - v2.6 稳定版
作者:Mune
地址:https://cnxiaobai.com/articles/2021/04/27/1619519011942.html

    评论
    7 评论
    yiwp @ mzq
    2023-09-10 20:54 回复»

    我也喜欢本站的主题

    2022-08-17 16:58 回复»

    第二个是location缓存用的,可以不要的

    2022-08-17 16:57 回复»

    location / location ~ .*\. 我感觉这两个留一个location ~ .*\.就行了因为在location ~ .*\.里面写了这句话

        if ( !-e $request_filename)  
    	{  
    	     proxy_pass http://43.138.248.126:8080;
    	}
    
    2022-08-17 16:06 回复»

    可以参考上面的nginx-http配置对比看看。

    2022-08-17 16:00 回复»

    为什么我用80端口访问样式有问题..用8080访问就正常

    是nginx哪边配的有问题吗?

    Mune @ mzq
    2022-07-30 23:58 回复»

    是的

    mzq
    2022-07-30 23:29 回复»

    博主,这个blog代码是本站的代码吗?挺喜欢这个样式

avatar

取消