[博客] 在阿里云上部署 solo 博客

本贴最后更新于 2140 天前,其中的信息可能已经东海扬尘

我的博客之前世今生

在给我爸做完卖单车的网站后,我爸说:“单车不好卖了,我决定干点别的。”

然后,我做的网站就荒废了。

偶然的机会,看到用上 solo 的博客,开源还漂亮,而且还是 java 写的,好,就你了。

1.服务器

之前就用的阿里的服务器,那我的 solo 也直接和卖单车的部署在一块好了。

2.环境

apache-tomcat-7.0.73 - 需要升级到tomcat9.0.7
nginx-1.10.2
mysql5.1 -需要升级到5.6,不然不支持utf8mb4字符集

2.1 升级 tomcat 9.0.7

这个就很简单了,直接从官网下载就可以了,sftp 上传到服务器,解压,重新部署。贴下我用的部署脚本

echo "===========进入git项目bikemall目录============="
cd /developer/git-repository/bikemall
 
echo "==========git切换分之到v1.0==============="
git checkout v1.0

echo "==================git fetch======================"
git fetch

echo "==================git pull======================"
git pull

echo "===========编译并跳过单元测试===================="
mvn clean package -Dmaven.test.skip=true

echo "============删除旧的ROOT.war==================="
#rm /developer/apache-tomcat-7.0.73/webapps/ROOT.war
rm /developer/apache-tomcat-9.0.7/webapps/ROOT.war

echo "======拷贝编译出来的war包到tomcat下-ROOT.war======="
#cp /developer/git-repository/bikemall/target/BikeMall.war  /developer/apache-tomcat-7.0.73/webapps/ROOT.war
cp /developer/git-repository/bikemall/target/BikeMall.war  /developer/apache-tomcat-9.0.7/webapps/ROOT.war

echo "============删除tomcat下旧的ROOT文件夹============="
#rm -rf /developer/apache-tomcat-7.0.73/webapps/ROOT
rm -rf /developer/apache-tomcat-9.0.7/webapps/ROOT

echo "====================关闭tomcat====================="
#/developer/apache-tomcat-7.0.73/bin/shutdown.sh
/developer/apache-tomcat-9.0.7/bin/shutdown.sh

echo "================sleep 10s========================="
for i in {1..10}
do
        echo $i"s"
        sleep 1s
done

echo "====================启动tomcat====================="
#/developer/apache-tomcat-7.0.73/bin/startup.sh
/developer/apache-tomcat-9.0.7/bin/startup.sh

因为这个脚本,我只需要在同样的目录解压这个 tomcat9.0.7,再改一下脚本就可以了。这样卖单车就不会受到影响了。😄

2.2 升级 mysql

2.2.1 备份数据

因为我的网站刚做完就荒废了,什么数据都没有,所以也无需要备份了,但是 mysql 的配置需要备份一下。/etc/my.cnf

直接开干咯。😆

2.2.2 停止服务

sudo service mysqld stop

2.2.3 卸载原版本

sudo yum remove mysql mysql-*

执行卸载之后,检查一下是否卸载完成

sudo yum list installed | grep mysql

好了,检查没有任何 mysql 相关的东西了。

2.2.4 安装

在网上找到一种快速的方式,如果使用安装包安装,会提示需要依赖 glibc 更高版本,当你安装了更高版本之后,会提示依赖其它,比较麻烦,直接用下面方法即可快速安装:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh http://mirrors.neusoft.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

安装依赖
yum --enablerepo=remi,remi-test info mysql mysql-server

安装mysql
yum --enablerepo=remi,remi-test install mysql mysql-server

配置执行升级
mysql_upgrade -u root -p

把之前的my.cnf替换掉现在/etc/my.cnf

2.2.5 启动检查

sudo service mysqld start

第一次启动比较慢,因为它会自己做初始化,耐心等待即可。

如果启动失败,提示“MySQL Daemon failed to start”,可以尝试先初始化 mysql,输入命令:

mysqld --initialize。

如果初始化提示:

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
[ERROR] --initialize specified but the data directory has files in it. Aborting.
[ERROR] Aborting

说明数据文件夹已被创建,直接删除,让 mysql 自己创建即可,输入命令:

rm -rf /var/lib/mysql

删除后,注意:然后不需要再初始化了,直接启动 mysql,它会自己初始化,输入命令:

sudo service mysqld start

2.2.6 设置开机自动启动

将 mysql 设置为随系统自动启动

sudo chkconfig mysqld on

sudo chkconfig --list mysqld

第二到第五个都是 on 则代表配置完成。

等级 0 表示:表示关机

等级 1 表示:单用户模式

等级 2 表示:无网络连接的多用户命令行模式

等级 3 表示:有网络连接的多用户命令行模式

等级 4 表示:不可用

等级 5 表示:带图形界面的多用户模式

等级 6 表示:重新启动

2.2.7 建用户、建库

root登陆mysql
mysql -u root -p
新建用户solo
insert into mysql.user(Host, User, Password) values("localhost","solo",password("自己定密码"));
创建数据库
create database `solo` default character set utf8mb4 collate utf8mb4_general_ci;
进入数据库
use solo;
查看用户权限
select * from mysql.user \G
赋予权限,给solo用户赋予solo数据库所有表的所有权限
grant all privileges on solo.* to solo@'%' identified by '自己定的密码' with grant option;
select * from mysql.user \G
flush privileges;

3 开始部署 solo

因为匆忙,也是因为懒,并不打算再修改 solo 代码了,所以直接从百度云下载 war 包下来,war 包

3.1 上传 solo

直接用 sftp 上传到阿里云就好了,我直接用的 SecureCRT 上传的,也可以用其它软件协议,只要能传就 OK。

3.2 tomcat 配置

修改 apache-tomcat-9.0.7/conf/server.xml,在 Server 标签中添加一个 Service,如下:

  <Service name="Catalina_blog">
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->


    <Engine name="Catalina_blog" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps_blog"
            unpackWARs="true" autoDeploy="true">

        <!--<Context path="" docBase="solo" reloadable="true" />-->

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
  1. Service 标签 的 name 属性值为 Catalina_blog
  2. Connector 的 port 属性值为 8081(该端口号可以自由拟定)
  3. Engine 的 name 属性值为 Catalina_blog
  4. Host 的 appBase 属性值为 webapps_blog
  5. Conext 的 docBase 为 solo

保存退出后,我们在 apache-tomcat-9.0.7 根目录下,新建 webapps_blog 目录。如下:

apache-tomcat-9.0.7/webapps_blog

把 solo 的 war 包放入这个目录中即可。

3.3 solo 配置

修改 solo 配置有很多种方式,
-一种是直接在 windows 打开 war 包,在里面修改更新 war 包;
-一种是直接运行 tomcat,tomcat 解压了 solo 的 war 包后,直接在解压的配置上修改;
-一种是直接从 github 上下载源码,修改后再打成 war 包。

这里就不展开了。爱怎么弄怎么弄。反正是自己的服务器,是吧。😆

这里我们需要配置三个配置文件:

3.3.1 Latke 配置剖析

/WEB-INF/classes/latke.properties(详细介绍:Latke 配置剖析

主要看 Server 里的三个配置项

#### Server ####
# Browser visit protocol
serverScheme=http
# Browser visit domain name
serverHost=blog.linliqiang.top
# Browser visit port, 80 as usual, THIS IS NOT SERVER LISTEN PORT!
serverPort=

serverHost 用域名
serverPort 用 http 默认 80 端口即可,这里注意,如果你要用 80 端口的话,这一项是可以不填的。

3.3.2 local.properties

/WEB-INF/classes/local.properties
这个配置文件用于配置数据库,如果要使用 MySQL 的话请先手动建库(字符集使用 utf8mb4,排序规则 utf8mb4_general_ci),并注释掉 H2 相关属性同时打开 MySQL 相关属性。

#### H2 runtime ####
#runtimeDatabase=H2
#jdbc.username=root
#jdbc.password=
#jdbc.driver=org.h2.Driver
#jdbc.URL=jdbc:h2:~/solo_h2/db
#jdbc.pool=h2

#### MySQL runtime ####
runtimeDatabase=MYSQL
jdbc.username=solo
jdbc.password=自己定义的密码
jdbc.driver=com.mysql.jdbc.Driver
jdbc.URL=jdbc:mysql://localhost:3306/solo?useUnicode=yes&characterEncoding=utf8
jdbc.pool=druid

因为我用的是 mysql,所以把 H2 相关的注释掉,打开 mysql,并填自己的实际内容

3.3.3 mail.properties

这个我还没调过,我用的是公司的邮箱服务器,反正我没收到过邮件,不知道是哪里配置错了,这个反正不要求的, 这里就不介绍了,自己按意思填完就好了。

3.4 nginx 配置

首先是需要在阿里云的域名管理里,添加 blog.linliqiang.top 的映射。
然后开始配置 nginx,因为我之前已经在卖单车那里用过 nginx 了,这里就在这基础上加个配置就好了。

首先,我在 /usr/local/nginx/conf/nginx.conf 里加了以下内容,

include vhost/*.conf;

这样我每配置一项我就只需要在 vhost 文件夹里加个配置文件就行了。

因为我在前面的 tomcat 配置中,把 solo 的端口配置为 8081 了,所以 nginx 这里也需要配置为 8081

upstream backend {
    server localhost:8081; # Tomcat/Jetty 监听端口
}

server {
        listen 80;
        server_name blog.linliqiang.top;

        access_log off;

        location / {
                proxy_pass http://backend$request_uri;
                proxy_set_header  Host $host:$server_port;
                proxy_set_header  X-Real-IP  $remote_addr;
                client_max_body_size  10m;
        }

}

配置好之后,重启 nginx 就好了。

cd /usr/local/nginx/sbin
sudo ./nginx -t
sudo ./nginx -s reload

附录

1.solo 用户指南
2.solo 开发指南

  • 博客

    记录并分享人生的经历。

    272 引用 • 2386 回帖
  • Solo

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

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

    1433 引用 • 10052 回帖 • 485 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3170 引用 • 8209 回帖

相关帖子

欢迎来到这里!

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

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

    总结的很不错 ,就像自己弄过一样😄

  • xiaoweizha

    很不错 说的很清楚 避免走弯路

    1 回复
  • 目前最新版建议用 Docker 搭建,非常方便并且可以实现自动升级。