FIRST.Solo 博客搭建日记

本贴最后更新于 1838 天前,其中的信息可能已经沧海桑田

搭建 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 构思 - 分布式社区网络)。

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

    1433 引用 • 10052 回帖 • 484 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖

相关帖子

欢迎来到这里!

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

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

    一个小建议,皮肤确实需要单独下载的,但不需要自己单独下载放入。非常简单,只需要在项目目录下输入以下命令:

    git submodule update  --init --recursive
    

    git 会自动把皮肤下载下来并且放到 skins 里。
    为什么呢?请看 .gitmodules 文件:

    [submodule "src/main/webapp/skins"]
    	path = src/main/webapp/skins
    	url = https://github.com/b3log/solo-skins
    

    D 哥已经配置好子模块了,直接用 git 更新下来就好了~

    1 回复
  • someone53869
    作者

    👍

推荐标签 标签

  • Markdown

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

    167 引用 • 1509 回帖
  • webpack

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

    41 引用 • 130 回帖 • 257 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 6 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 561 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 3 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 652 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 733 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 615 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 209 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 383 回帖 • 6 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 248 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    264 引用 • 665 回帖 • 1 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 2 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 2 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 511 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 127 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 705 关注
  • OnlyOffice
    4 引用 • 2 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1347 回帖
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 181 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    6 引用 • 14 回帖