侧边栏壁纸
  • 累计撰写 8 篇文章
  • 累计创建 6 个标签
  • 累计收到 2 条评论
隐藏侧边栏

从零搭建部署halo博客+mysql+nginx反向代理+配置https SSL证书

散人_
2021-02-20 / 1 评论 / 0 点赞 / 959 阅读 / 10,397 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-04-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

从零搭建部署halo博客+mysql+nginx反向代理+配置https SSL证书(详细步骤)

  本文是记录我在搭建开源halo博客halo时遇见的所有坑,以及各种问题,下面,是我详细的搭建过程:

准备工作

  准备一个云服务器:阿里云、腾讯云等等,我这里使用的是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反向代理及https访问

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;//https访问
}
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

如下图:
在这里插入图片描述

如果启动Nginx报错:
将SELINUX=enforcing 修改为 SELINUX=disabled 状态。

vi /etc/selinux/config    
SELINUX=enforcing//修改之前
SELINUX=disabled//修改之后

重启生效:

reboot

之后利用域名访问即可,若访问不了,关闭服务器防火墙即可!(亲测有用!)
后台默认管理地址为:域名/admin

0

评论区