Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

鸣谢codesheep的教程

Why do you need a personal blog?

  • show who you are and what you can do
  • When you complete a project, you can put it in your portfolio for all to see

1.购买云服务器

我选择的是百度智能云,操作系统为centos

得到服务器的公网ip地址,下称

2.云服务器安装环境

java11

用于运行halo jar包

yum install java-11-openjdk -y

查看版本

java -version

nginx

用于配置端口转发

源码编译安装

  • 下载源码压缩包

官网下载:nginx: download

比如nginx-1.17.10版本的

下载nginx-1.17.10.tar.gz到/root目录下(下面以此为例)

  • 安装依赖
yum install gcc
yum install pcre-devel
yum install openssl openssl-devel
  • 源码编译安装

创建目录和源码解压(目标是把nginx可可执行文件放在目录/usr/local/nginx/sbin/下面)

cd /usr/local/
mkdir nginx
cd nginx
tar zxvf /root/nginx-1.17.10.tar.gz -C ./

进入源码目录,编译安装

cd nginx-1.17.10
./configure 
# 如果后面需要配置成https的话,nginx需要安装https支持,则要加参数:
# ./configure --with-http_ssl_module
make && make install # make会输出可执行文件到当前目录/objs/下面,make install其实可选

安装完成后,Nginx的可执⾏⽂件位置位于/usr/local/nginx/sbin/nginx

  • 添加环境变量(可选)

可以把上述可执行文件位置添加到环境变量$PATH(这样直接nginx的话shell找得到nginx的可执行文件在哪里),或者以后运行的时候指定路径

在~/.bashrc最后添加一行

export PATH=$PATH:/usr/local/nginx/sbin/

然后使得配置在当前shell生效:

source ~/.bashrc

可以检查一下$PATH内容:

echo $PATH

3.运行halo和配置端口转发

参考Halo几分钟,拥有⾃⼰的⾼颜值网站!代码都不用写_哔哩哔哩_bilibili

获取和后台运行jar包

wget -c https://dl.halo.run/release/halo-1.5.4.jar
nohup java -jar halo-1.5.4.jar & 
#nohup,no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
#&的意思是后台运行

此时浏览器访问http://:8090会进入首次配置界面,填写信息后会进入管理后台

以后访问http://:8090是你的博客界面,http://:8090/admin是后台管理界面

[可选]配置端口转发

如果想直接http://访问的就是你的博客界面:

  • 修改nginx配置文件

按如上方式安装的nginx则配置文件在/usr/local/nginx/conf下面,是nginx.conf

新增upstream,并将server监听的端口80转发到upstream上

upstream halo {
  server 127.0.0.1:8090; 
}

server {
  listen 80;
  server_name localhost;
  client_max_body_size 1024m; #设置允许上上传文件的大小,因为nginx默认的是限制1M
  location / {
    proxy_pass http://halo; #这个halo和上面的upstream名字一致
    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;
  }
}
  • 重启nginx服务
nginx -s reload

[可选]4.域名

http://www.访问的就是你的博客,则需购买域名并绑定域名到公网ip

注册域名

我选的是腾讯云注册域名

域名需要备案

绑定域名到公网ip

以腾讯云为例,其他的可以搜官方文档

主机记录:www

记录类型:A

线路类型:默认

记录值:

TTL:600

点击”确定“

  • 点击新出现记录的三角形图标,启动解析
  • 过大约10分钟之后,ping www.如果ping通则ok了

[可选]5.配置https

SSL证书

  • 申请免费ssl证书和下载证书

一般在注册域名的网站都有申请免费SSL证书的入口

比如腾讯云可以直接搜索”ssl证书“然后有入口,按指示操作即可,认证挺快的

证书申请成功后请下载对应服务器类型的证书文件,这里使用的是Nginx

  • 上传

.key 与 .pem 后缀的两个文件,上传到服务器中

比如nginx目录下cert目录下(按上述nginx安装方式即目录/usr/local/nginx/cert/下)

配置nginx.conf

upstream halo {
  server 127.0.0.1:8090; 
}

## 配置http转发到https
server {
    listen 80;
 
    # 将demo.uanin.com改为您自己的域名
    server_name demo.uanin.com;
    # 上传文件大小的限制
    client_max_body_size 1024m;
    # 将所有http请求通过rewrite重定向到https。
    rewrite ^(.*)$ https://$host$1 permanent;
 
}
 
## 配置demo.uanin.com的ssl
server {
    listen 443 ssl;
 
    # 将demo.uanin.com改为您自己的域名
    server_name demo.uanin.com;
    # 上传文件大小的限制
    client_max_body_size 1024m;
    # 将证书文件存放路径和证书的密钥文件名替换成自己存放路径与证书的密钥文件名。
    ssl_certificate /usr/local/nginx/cert/3977015_demo.uanin.com.pem;
    ssl_certificate_key /usr/local/nginx/cert/3977015_demo.uanin.com.key;
 
    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 / {
        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;
        proxy_pass http://halo; #这个halo和上面的upstream名字一致
    }
}
  • nginx reload重新生效nginx -s reload

可能报错解决

  • 如果之前安装nginx时没有参数指定安装https支持的话,会报错nginx: [emerg] the “ssl“ parameter requires ngx_http_ssl_module,解决法

先获取之前编译安装nginx的参数,然后再加上–with-http_ssl_module的参数重新configure-make(获取之前参数主要是希望重新编译安装得到的可执行文件只是比之前多了https支持,而不是少了些东西):

nginx -V #显示的configure arguments:后面的内容即之前nginx的make参数

重新源码编译

# 进入nginx源码目录,然后
./configure <之前安装给configure的参数> --with-http_ssl_module
make #这会输出可执行文件到当前目录/objs/下面

然后将原先/usr/local/nginx/sbin/nginx覆盖为新的可执行文件

nginx -s stop #先停止运行,才能覆盖成功的
cp ./objs/nginx /usr/local/nginx/sbin/nginx
  • 此时nginx -s reload可能会报错nginx: [error] invalid PID number “” in “/usr/local/nginx/logs/nginx.pid

因为reload会从nginx.pid文件中读取进程pid,此时如果nginx.pid没有内容,则会报错如上,

所以可以重新指定一下配置文件,然后reload:

nginx -c /usr/local/nginx/conf/nginx.conf #这样之后nginx.pid里面就有一个pid了
nginx -s reload 

检查

配置完成上述之后,浏览器访问或者www.的话浏览器会自动请求https://开头的url

此时访问后台和博客的url:

https://<your_server_ip> #博客
https://<your_server_ip>/admin #后台

https://www.<your_domain_name> #博客
https://www.<your_domain_name>/admin #后台

注意halo后台“系统”-“博客设置”(-“基础选项”-“常规设置”)-“博客地址”更新http为https

其他操作

备份和迁移

比如迁移服务器:把旧服务器中的/.halo目录整个迁移为新服务器的/.halo目录,然后新服务器重新运行halo jar包

  • 旧服务器备份:把~/.halo压缩
tar -zvcf ~/.halo.tar.gz ~/.halo # 得到~/.halo.tar.gz
  • 移到新服务器中

在旧服务器上运行

scp ~/.halo.tar.gz <新服务器用户名>@<新服务器ip地址>:~/.halo.tar.gz #scp即secure copy,是用来进行远程文件拷贝的。数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证

scp也可以直接目录拷贝,scp -r递归拷贝,但是亲测感觉压缩之后传输快一点

  • 新服务器中解压

在~/目录下

tar -zvxf .halo.tar.gz
  • 新服务器上重新执行上文步骤2、3、4、5

可能问题

  • 访问后台的时候加载不出来,F12报错net::ERR_ABORTED 404 (Not Found):

先确认下服务器上halo jar包还在运行不

ps -eo pid,comm | grep "java" #搜索被java命令唤起的进程

如果还在,可能需要重新清除缓存,然后重新登录后台

评论