从零搭建部署halo博客+mysql+nginx反向代理+配置https SSL证书(详细步骤)
本文是记录我在搭建开源halo博客halo时遇见的所有坑,以及各种问题,下面,是我详细的搭建过程:
这是我搭建的博客,欢迎指正!点这个→MyBlog
准备工作
准备一个Linux的CentOS云服务器:阿里云、腾讯云等等,我这里使用的是vultr的云服务器,可自行百度。
一、安装jre,配置java环境变量。(推荐直接安装jdk)步骤如下:
1. 创建java文件夹,并进入:
[root@vultr ~]# mkdir /usr/local/java
[root@vultr ~]# cd /usr/local/java
2. 使用wget工具下载JDK文件:
确定你的liunx版本去找相应的jdk版本点击下载链接,我的是64位的CentOS7,选择jdk-15.0.2_linux-x64_bin.tar.gz文件点击,不用下载!!!!!因为下载到电脑上,还得传到云服务器上,获取到下载连接后,如下:
链接的最前面加wget命令就可以
[root@vultr java]# wget https://download.oracle.com/otn-pub/java/jdk/15.0.2+7/0d1cfde4252546c6931946de8db48ee2/jdk-15.0.2_linux-x64_bin.tar.gz?AuthParam=1613811123_cc2bfbffa45ff6a3f32ac6a53c694fe9
下载链接会过期,不要直接复制上述链接。
通过上述操作下载的文件可能文件名不正确,更改文件名为:
[root@vultr java]# mv 下载的文件全名 jdk.tar.gz
利用tar命令解压:
[root@vultr java]# tar -zxvf jdk.tar.gz
解压之后会出现一个jdk文件,然后删除tar.gz后缀文件:
[root@vultr java]# rm -rf jdk.tar.gz
3.配置java环境变量
编辑/etc/profile文件:
[root@vultr java]# vim /etc/profile
在最后一行加入如下配置:
export JAVA_HOME=/usr/local/java/jdk
export JRE_HOME=${JAVA_HOME}/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
之后按esc键后输入:
:wq!
保存退出
使用如下命令让profile文件生效:
[root@vultr java]# source /etc/profile
4.验证java是否配置正确
利用:
[root@vultr java]# java -version
即可查看java版本信息
出现上图,证明你成功安装jdk15
二、安装Mysql数据库,并进行配置
1、下载MySQL官方的 Yum Repository
[root@vultr java]# cd ~ && mkdir /usr/mysql && cd /usr/mysql
[root@vultr mysql]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
2、用yum安装Yum Repository
[root@vultr mysql]# yum -y install mysql57-community-release-el7-10.noarch.rpm
3、安装MySQL服务器
[root@vultr mysql]# yum -y install mysql-community-server
该步骤会花一点时间,等待出现complete时表示安装完毕。
4、Mysql设置
启动Mysql数据库:
[root@vultr mysql]# systemctl start mysqld.service
查看Mysql运行状态:
[root@vultr mysql]# systemctl status mysqld.service
此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:
[root@vultr mysql]# grep "password" /var/log/mysqld.log
密码是输入上述命令出现的结果root@localhost:之后的字段
使用此命令进入数据库:
[root@vultr mysql]# mysql -uroot -p
修改数据库进入密码:
[root@vultr mysql]# mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
其中‘new password’替换成你要设置的密码,注意:密码设置必须要大小写字母数字和特殊符号(,/’;:等),不然不能配置成功
5、开启mysql的远程访问
执行以下命令开启远程访问限制(注意:下面命令开启的IP是所有的,如果需要开启指定IP,把%更换成IP即可):
[root@vultr mysql]# grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
建议直接使用上述命令,直接使用所有IP访问数据库
然后再输入下面命令:
mysql> flush privileges;
halo博客在利用 MySQL 之前,必须要先新建一个 halodb 数据库。在Mysql命令行执行以下命令:
mysql> create database halodb character set utf8mb4 collate utf8mb4_bin;
退出:
mysql> exit
搭建halo博客
1、创建新的系统用户
创建一个名为 halo 的用户(名字可以随意)
[root@vultr ~]# useradd -m halo
给予 sudo 权限
[root@vultr ~]# usermod -aG wheel halo
为 halo 用户创建密码
[root@vultr ~]# passwd halo
登录到 halo 账户
[root@vultr ~]# su - halo
2、创建存放运行包的目录
[halo@vultr ~]# mkdir ~/app
[halo@vultr ~]# cd ~/app
3、下载运行包
[halo@vultr app]# wget https://dl.halo.run/release/halo-1.4.5.jar -O halo.jar
4、创建工作目录
[halo@vultr app]# mkdir ~/.halo
[halo@vultr app]# cd ~/.halo
5、下载示例配置文件到工作目录
[halo@vultr .halo]# wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
6、编辑配置文件
[halo@vultr .halo]# vim application.yaml
6.1 配置数据库或者端口等,如需配置请参考如下配置
使用Mysql参考以下配置,上述初始文件中H2的配置注释掉就可以
server:
port: 8090//这里是你要访问的halo服务端口
# Response data gzip.
compression:
enabled: false
spring:
datasource:
# MySQL database configuration.
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://你的服务器ip地址:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: mysql
password: //你的mysql数据库登录密码
halo:
# Your admin client path is https://your-domain/{admin-path}
admin-path: admin
# memory or level
cache: memory
尽量根据以上配置进行修改!
7、测试运行 Halo
[halo@vultr .halo]# cd ~/app
[halo@vultr app]# java -jar halo.jar
8、如看到类似以下日志输出,则代表启动成功
run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090
run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener : Halo has started successfully!
打开 http://ip:端口号 即可看到安装引导界面。
Ctrl+c退出
作为服务运行
1、退出 halo 账户,登录到 root 账户
[halo@vultr app]# exit
2、下载 Halo 官方的 halo.service 模板到/etc/systemd/system/halo.service
[root@vultr ~]# wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service
3、修改 halo.service
[root@vultr ~]# vim /etc/systemd/system/halo.service
4、修改配置
YOUR_JAR_PATH:Halo 运行包的绝对路径,/home/halo/app/halo.jar,注意:此路径不支持 ~ 符号。
USER:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo,修改为你创建的用户名称即可。用root用户启动请删除 User=USER(千万注意!!!!)
ExecStart:后到java字段的路径,根据从准备工作第一步安装jdk的路径,这里应该为jdk的bin目录绝对路径:/usr/local/java/jdk/bin
[Unit]
Description=Halo Service
Documentation=https://halo.run
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=USER
/*你的jdk目录的绝对路径*/
ExecStart=/usr/local/java/jdk/bin/java -server -Xms256m -Xmx256m -jar YOUR_JAR_PATH
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog
StandError=inherit
[Install]
WantedBy=multi-user.target
请确保 /usr/local/java/jdk/bin/java 是正确无误的。建议将 ExecStart 中的命令复制出来运行一下,保证命令有效。
5、重新加载 systemd
[root@vultr ~]# systemctl daemon-reload
6、运行服务
[root@vultr ~]# systemctl start halo
7、在系统启动时启动服务
[root@vultr ~]# systemctl enable halo
8、查看服务日志检查启动状态
[root@vultr ~]# journalctl -n 20 -u halo
Nginx反向代理
1、安装Nginx依赖包
[root@vultr ~]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2、下载并解压安装包
创建一个nginx文件夹:
[root@vultr ~]# cd /usr/local
[root@vultr ~]# mkdir nginx
[root@vultr nginx]# cd nginx
下载tar包并解压:
[root@vultr nginx]# wget http://nginx.org/download/nginx-1.13.7.tar.gz
[root@vultr nginx]# tar -xvf nginx-1.13.7.tar.gz
3、安装nginx
进入nginx目录:
[root@vultr nginx]# cd nginx-1.13.7
[root@vultr nginx]# ./configure
执行make命令
[root@vultr nginx]# make
执行make install命令
[root@vultr nginx]# make install
4、打开配置文件
[root@vultr nginx]# vim /usr/local/nginx/conf/nginx.conf
如上路径如果找不到,就使用如下命令找nginx下的nginx.conf文件目录进入:
[root@vultr nginx]# find / -name nginx.conf
配置如下:
user root;//如果用root用户启动,这里修改为root 默认为nginx,否则会报错
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
keepalive_timeout 65;
#gzip on;
include /usr/local/nginx/conf/*.conf;
}
如上include里面,在这个路径下的.conf文件都会被加载,所以可以在/usr/local/nginx/conf/路径下创建一个单独的halo.conf文件
然后进入上述路径,创建halo.conf文件
[root@vultr ~]# cd /usr/local/nginx/conf/
[root@vultr ~]# touch halo.conf
如下配置复制到halo.conf中即可:
在nginx.conf文件所在目录上传你申请到的SSL证书与秘钥文件:
证书文件:1_www.域名_bundle.crt、1_域名_bundle.crt
秘钥:2_www.域名.key 、2_域名.key
以下域名替换为你申请的域名:
upstream halo {
server 127.0.0.1:8090;//8090是初始未修改的halo博客端口号
}
server {
listen 80;
listen [::]:80;
server_name 域名 www.域名;//这里写你的域名包括加www的前缀
client_max_body_size 1024m;
return 301 https://$host$request_uri;
}
server {//前缀为www.你的域名配置文件及ssl证书
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name www.域名;
#证书文件名称
ssl_certificate 1_www.域名_bundle.crt;
#私钥文件名称
ssl_certificate_key 2_www.域名.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM- SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://halo;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {//你的域名配置文件及ssl证书
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name 域名;
#证书文件名称
ssl_certificate 1_域名_bundle.crt;
#私钥文件名称
ssl_certificate_key 2_域名.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://halo;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
5、启动Nginx
[root@vultr nginx]# sudo nginx -s reload//使用sudo命令就可以不用进入nginx程序目录启动
查看nginx进程是否启动:
[root@vultr nginx]# ps -ef | grep nginx
如下图:
之后利用域名访问即可:
后台默认管理地址为:域名/admin