封印解除 -Solo 博客搭建日记!

本贴最后更新于 1645 天前,其中的信息可能已经渤澥桑田

搭建 Solo 博客的过程,新卤煮作为第一次尝试,可谓是一言难尽。其重点不在于代码的修改上,而是网站运维端的一些细节。

下面对本次 Solo 的成功部署及升级 https 过程,进行一个简要的文字总结,对于后期网站的部署和升级也有一定借鉴意义。


下面正文开始,先列一个部署的前提清单:

名称 详情 备注
云服务器 若干台 可单机、可集群
域名 1 个 配置 dns 解析
SSL 证书 绑定域名 升级 https 用
Solo 源代码 Solo git 到本地后进行调整并用 maven 打包
系统环境 Linux+Java+MySQL+Tomcat+Nginx windows 系统也可行

从清单可以大致看出,本次我们想要部署方法的是非官方推荐的 Docker 部署,而是使用 Tomcat 的一种方式,同时使用 Nginx 进行了均衡负载实现,并且加强了网站安全性,使用 https 对网站进行加密。


前三个东西需要预先从各种平台购买、获取和配置(包括 DNS 解析及备案),这里不再详细描述,从 Solo 项目开始。

  1. Linux 基本运行环境安装和数据库建库

在 Linux 环境下先后需要安装 Java、MySQL、Tomcat、Nginx,这里我们先进行基本安装,默认大伙都知道基本的使用,基础配置不再描述,关键配置后面再讲;

Solo 的运行可以自行指定数据库类型,其中官方文档提供了两种方式 H2 和 MySQl,这里我们选择 MySQL;

登录 MySQL 并执行 sql 语句(数据库名称自定):

CREATE DATABASE database_name DEFAULT CHARACTER SET UTF8MB4 COLLATE UTF8MB4_UNICODE_CI;
  1. 代码配置修改

image.png

从 Git 到本地并向成功导入 IDE 的代码中,我们修改了蓝色的几个文件:

在 latke 中修改了请求协议以及运行环境(其中请求方式改为 https 会影响网站部署后的静态资源请求地址,https 下是不允许网站混合请求 http 的),如下:

#### Server ####
# Browser visit protocol
serverScheme=https #如果不做https升级可以默认http
# Browser visit domain name
serverHost=localhost

#### Runtime Mode ####
### runtimeMode=DEVELOPMENT
runtimeMode=PRODUCTION

在 local 中我们修改了链接数据库的相关参数(根据用户名、密码参数自行配置);

  1. 小坑……皮肤在另外一个项目中

这里是一个坑,卤煮在第一次部署时发现,tomcat 日志竟然报错,显示找不到皮肤,一查原因,原始项目中已经不包含皮肤,但是却被默认指向一个 Pinghsu 的皮肤。经过查找,原来皮肤项目在这里:Solo-Skins

git 过来后,将里面内容 Copy 到 webapp/skins 下面,目录存放如下图:

image.png

  1. 打 war 包

带上 dev 配置,此配置使用了 Aliyun 的仓库镜像,比较快,推荐~

image.png

打包成功!

image.png

  1. war 包上传

将 war 包上传到 Tomcat 目录下,启动 Tomcat,war 包会自动部署;

观察日志,Solo 会自动初始化数据库,并提示成功:

[INFO ]-[2019-09-14 16:13:05]-[org.b3log.solo.SoloServletListener:99]: Solo is booting [ver=3.6.4, servletContainer=Apache Tomcat/xxx, os=Linux, isDocker=false, markdownHttpAvailable=false, pid=26689, runtimeDatabase=MYSQL, runtimeMode=PRODUCTION, jdbc.username=xxx, jdbc.URL=jdbc:]
[INFO ]-[2019-09-14 16:13:05]-[com.zaxxer.hikari.HikariDataSource:110]: HikariPool-2 - Starting...
[INFO ]-[2019-09-14 16:13:06]-[com.zaxxer.hikari.HikariDataSource:123]: HikariPool-2 - Start completed.
[INFO ]-[2019-09-14 16:13:06]-[org.b3log.solo.SoloServletListener:138]: Solo is running

至此,通过域名到 Tomcat 的指定端口应该已经可以正常访问!


  1. 高级部分-Nginx 负载均衡

以上基础步骤完成,现在想要进行高级点的试验——负载均衡,这个时候就是 Nginx 派上用场的时候了;

在 Linux 下,修改 nginx.conf 文件:

upstream tomcatServer { #负载均衡到不同的服务器上去
 ip_hash;
 server ip1:port1 weight=200;
 server ip2:port2 weight=100;
}

server {
 listen 80;
 server_name localhost;
 location / { # 转发到配置的负载上去
  #index index.html index.htm;
  proxy_pass http://tomcatServer;
 }
 location ~.* { # 将静态资源转发到配置的负载上去
  proxy_pass http://tomcatServer;
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}

然后进行 nginx Reload:

nginx -s reload
  1. 高级部分-网站升级 HTTPS

此部分可谓是艰辛,网站升级 https 是一件非常麻烦的事,各种坑都有可能遇见,本文列出详细配置,以供参考;

首先下载 nginx 证书,放到特定目录下,并对 nginx 进行 443 端口的 https 配置:

# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置
server {
 listen 443;
 server_name localhost;  # localhost修改为您证书绑定的域名
 ssl on;   #设置为on启用SSL功能。
 root html;
 index index.html index.htm;
 ssl_certificate /xxx/domain.pem;   #将domain.pem替换成您证书的文件名,xxx为路径
 ssl_certificate_key /xxx/domain.key;   #将domain.key替换成您证书的密钥文件名,xxx为路径
 ssl_session_timeout 5m;
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置
 ssl_prefer_server_ciphers on;
 location / {
  #root html;   #站点目录
  #index index.html index.htm;
  proxy_pass https://tomcatServer;
 }
 location ~.* {
  proxy_pass https://tomcatServer;
  proxy_set_header Host $http_host;
  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 https;
 }
}

修改原 80 端口的配置,强制跳转 https:

server {
 listen 80;
 server_name localhost;
 rewrite ^(.*)$ https://$host$1 permanent; #强行跳转
 location / {
  #index index.html index.htm;
  proxy_pass https://tomcatServer;
 }
 location ~.* {
  proxy_pass https://tomcatServer;
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}

然后 reload nginx;

此时,直接访问域名应该已经可以看到 nginx 界面,并且提示网站证书是安全的;

接下来,进行 Tomcat 容器的 https 的配置,这里以 Tomcat8.0 及以上版本为例,其他版本可能有差别:

<!-- xxx.pfx是你的tomcat所用ssl证书的位置及文件名,password是证书密码,type为加密方式,默认RSA -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="xxx.pfx" type="RSA" certificateKeystorePassword="xxx" />
        </SSLHostConfig>
</Connector>

这里我们保留了 Tomcat 的 8080 端口和 8443 端口

重启 Tomcat……

好了,大功告成,如果一切顺利的话,网站已经实现了负载均衡和 https!

介于细节较多,文章只列举了核心的内容,其中滋味体验了才能知道,快来试试吧~不得不说 Solo 的界面和项目设计都是非常赏心悦目的,这里给点个大大的赞!👍 👍 👍 👍 👍


转载请注明出处,如有疑问欢迎留言~

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1424 引用 • 10041 回帖 • 469 关注
  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖
  • 搭建
    3 引用 • 2 回帖
  • HTTPS
    98 引用 • 271 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 7 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 18 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 430 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    66 引用 • 124 回帖
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • OnlyOffice
    4 引用 • 19 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖 • 1 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 1 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    51 引用 • 190 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 346 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖 • 3 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 41 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 636 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 212 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    81 引用 • 122 回帖 • 614 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    163 引用 • 1446 回帖 • 1 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 1 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    3 引用 • 74 回帖 • 3 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 275 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 56 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    90 引用 • 383 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 294 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 8 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 426 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖