阿里云主机安装halo博客

前置要求

环境要求

  • 操作系统:Cent OS 7.8 64位

  • JRE 11

  • MySQL 可选:5.7+(默认是H2 Database)

安装软件

  • 1.MySQL

    # 更新YUM源。
    rpm -Uvh  http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
    # 安装MySQL
    yum -y install mysql-community-server --nogpgcheck
    # 查看MySQL版本号
    mysql -V
    # 启动MySQL
    systemctl start mysqld
    # 设置开机启动MySQL
    systemctl enable mysqld
    systemctl daemon-reload
    # 查看MySQL的初始密码
    grep "password" /var/log/mysqld.log
    # 配置MySQL的安全性
    mysql_secure_installation
      ## 重置root账号的密码。
      ## 输入Y删除匿名用户账号。
      ## 输入Y禁止root账号远程登录。
      ## 输入Y删除test库以及对test库的访问权限。
      ## 输入Y重新加载授权表。
    # 登陆并并创建数据库
    mysql -u root -p
    mysql> create database halodb character set utf8mb4 collate utf8mb4_bin;
    
    
  • 2.JDK

    sudo yum install java-11-openjdk -y
    java -version
    

Halo安装

  • 创建新的系统用户

    # 创建一个名为 halo 的用户(名字可以随意)
    useradd -m halo
    # 给予 sudo 权限
    usermod -aG wheel halo
    # 为 halo 用户创建密码[wzq@love@lsy1314]
    passwd halo
    # 登录到 halo 账户
    su - halo
    
  • 创建存放 运行包 的目录,这里以 ~/app 为例

    mkdir ~/app && cd ~/app
    
  • 下载运行包

    wget https://dl.halo.run/release/halo-1.5.4.jar -O halo.jar
    
  • 创建 工作目录

    mkdir ~/.halo && cd ~/.halo
    
  • 下载示例配置文件到 工作目录

    wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml 
    
  • 编辑配置文件,配置数据库或者端口等,如需配置请参考 配置参考 【主要取消默认h2数据库,用mysql】

    vim application.yaml
    
  • 测试运行 Halo

    cd ~/app && java -jar halo.jar
    
  • 如看到类似以下日志输出,则代表启动成功。

    2022-07-30 09:36:40.933  INFO 11884 --- [           main] run.halo.app.listener.StartedListener    : Halo started at         http://127.0.0.1:8090
    2022-07-30 09:36:40.933  INFO 11884 --- [           main] run.halo.app.listener.StartedListener    : Halo admin started at   http://127.0.0.1:8090/admin
    2022-07-30 09:36:40.933  INFO 11884 --- [           main] run.halo.app.listener.StartedListener    : Halo has started successfully!
    

作为服务运行

  • 退出 halo 账户,登录到 root 账户

  • 下载 Halo 官方的 halo.service 模板

    wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service
    
  • 修改 halo.service

    vim /etc/systemd/system/halo.service
    
  • 修改配置

    • YOUR_JAR_PATH:Halo 运行包的绝对路径,例如 /home/halo/app/halo.jar,注意:此路径不支持 ~ 符号。

    • USER:运行 Halo 的系统用户,如果有按照上方教程创建新的用户来运行 Halo,修改为你创建的用户名称即可。反之请删除 User=USER

      [Unit]
      Description=Halo Service
      Documentation=https://halo.run
      After=network-online.target
      Wants=network-online.target
      
      [Service]
      Type=simple
      User=USER
      ExecStart=/usr/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
      
  • 重新加载 systemd

    systemctl daemon-reload
    
  • 运行服务

    systemctl start halo
    
  • 在系统启动时启动服务

    systemctl enable halo
    
  • 您可以查看服务日志检查启动状态

    journalctl -n 20 -u halo
    

反向代理

  • 通过 OneinStack 安装 Nginx

    点击下方链接进入 OneinStack 官网,仅选择 安装 Nginx,其他的都可以取消选择。

    https://oneinstack.com/auto

    最后点击 复制安装命令 到服务器执行即可。如果你仅安装 Nginx,你的链接应该是这样:

    wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --nginx_option 1
    
    INFO

    这一步会经过编译安装,可能会导致安装时间很漫长,这主要取决于你服务器的性能。

    出现下面的信息即代表安装成功:

    Nginx installed successfully! 
    Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
    Redirecting to /bin/systemctl start nginx.service
    ####################Congratulations########################
    Total OneinStack Install Time: 5 minutes
    
    Nginx install dir:              /usr/local/nginx
    
    Index URL:                      http://172.22.49.1/
    
  • 创建 vhost

    即创建一个站点,你可以通过这样的方式在你的服务器创建无限个站点。接下来的目的就是创建一个站点,并反向代理到 Halo。这一步在此教程使用 demo.halo.run 这个域名做演示,实际情况请修改此域名。

    • 进入到 oneinstack 目录,执行 vhost 创建命令

      cd oneinstack
      sh vhost.sh
      
    • 按照提示选择或输入相关信息

      1. 按照提示选择或输入相关信息
      What Are You Doing?
          1. Use HTTP Only
          2. Use your own SSL Certificate and Key
          3. Use Let's Encrypt to Create SSL Certificate and Key
          q. Exit
      Please input the correct option:
      

      这一步是选择证书配置方式,如果你有自己的证书,输入 2 即可。如果需要使用 Let's Encrypt 申请证书,选择 3 即可。【我输入的1】

      Please input domain(example: www.example.com):
      

      输入自己的域名即可,前提是已经提前解析好了域名。【我输入的 wangzengqiang.cn

      Please input the directory for the domain:demo.halo.run :
      (Default directory: /data/wwwroot/demo.halo.run):
      

      提示输入站点根目录,因为我们是使用 Nginx 的反向代理,所以这个目录是没有必要配置的,我们直接使用默认的即可(直接回车)。

      Do you want to add more domain name? [y/n]:
      

      是否需要添加其他域名,按照需要选择即可,如果不需要,输入 n 并回车确认。

      Do you want to add hotlink protection? [y/n]:
      

      是否需要做防盗链处理,按照需要选择即可。

      Allow Rewrite rule? [y/n]:
      

      路径重写配置,我们不需要,选择 n 回车确定即可。

      Allow Nginx/Tengine/OpenResty access_log? [y/n]:
      

      Nginx 的请求日志,建议选择 y。

      这样就完成了 vhost 站点的创建,最终会输出站点的相关信息:

      #######################################################################
      #       OneinStack for CentOS/RedHat 7+ Debian 8+ and Ubuntu 16+      #
      #       For more information please visit https://oneinstack.com      #
      #######################################################################
      Your domain:                  wangzengqiang.cn
      Virtualhost conf:             /usr/local/nginx/conf/vhost/wangzengqiang.cn.conf
      Directory of:                 /data/wwwroot/wangzengqiang.cn
      

      Nginx 的配置文件即 /usr/local/nginx/conf/vhost/demo.halo.run.conf

  • 修改 Nginx 配置文件

    上方创建 vhost 的过程并没有创建反向代理的配置,所以需要我们自己修改一下配置文件。

    • 使用你熟悉的工具打开配置文件,此教程使用 vim。
    vim /usr/local/nginx/conf/vhost/demo.halo.run.conf
    
    • 删除一些不必要的配置
    location ~ [^/]\.php(/|$) {
      #fastcgi_pass remote_php_ip:9000;
      fastcgi_pass unix:/dev/shm/php-cgi.sock;
      fastcgi_index index.php;
      include fastcgi.conf;
    }
    

    此段配置是针对 php 应用的,所以可以删掉。

    • 添加 upstream 配置

    server 的同级节点添加如下配置:

    upstream halo {
      server 127.0.0.1:8090;
    }
    
    • server 节点添加如下配置
    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;
    }
    
    • 修改 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ 节点
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
      proxy_pass http://halo;
      expires 30d;
      access_log off;
    }
    
    • 修改 location ~ .*\.(js|css)?$ 节点
    location ~ .*\.(js|css)?$ {
      proxy_pass http://halo;
      expires 7d;
      access_log off;
    }
    

    如果不按照如上两 步操作,请求一些图片或者样式文件不会经过 Halo,所以请不要忽略此配置。

    至此,配置修改完毕,保存即可。最终你的配置文件可能如下面配置一样:

    upstream halo {
      server 127.0.0.1:8090;
    }
    server {
      listen 80;
      listen [::]:80;
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      ssl_certificate /usr/local/nginx/conf/ssl/demo.halo.run.crt;
      ssl_certificate_key /usr/local/nginx/conf/ssl/demo.halo.run.key;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
      ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
      ssl_prefer_server_ciphers on;
      ssl_session_timeout 10m;
      ssl_session_cache builtin:1000 shared:SSL:10m;
      ssl_buffer_size 1400;
      add_header Strict-Transport-Security max-age=15768000;
      ssl_stapling on;
      ssl_stapling_verify on;
      server_name demo.halo.run;
      access_log /data/wwwlogs/demo.halo.run_nginx.log combined;
      index index.html index.htm index.php;
      root /data/wwwroot/demo.halo.run;
      if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
      include /usr/local/nginx/conf/rewrite/none.conf;
      #error_page 404 /404.html;
      #error_page 502 /502.html;
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
        proxy_pass http://halo;
        expires 30d;
        access_log off;
      }
      location ~ .*\.(js|css)?$ {
        proxy_pass http://halo;
        expires 7d;
        access_log off;
      }
      location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
        deny all;
      }
      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;
      }
      location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        allow all;
        root /data/wwwroot/demo.halo.run/;
      }
    }
    
  • 重载 Nginx 使配置生效

    验证 nginx 配置

    nginx -t
    

    如果输出如下提示则代表配置有效:

    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    

    重载 Nginx 配置:

    nginx -s reload
    

    至此,整个教程完毕,现在你可以访问域名检查是否已经配置成功。

参考

问题

  • 1.访问http://wangzengqiang.cn/ 403 Forbidden

    重新加载nginx即可

    nginx -s reload
    
  • 2.http://wangzengqiang.cn/admin/index.html#install 首页第一次进入一直转圈圈

    看浏览器console报错:
    Failed to load resource: the server responded with a status of 404 (Not Found)

    vim /usr/local/nginx/conf/vhost/demo.halo.run.conf在

    location ~ .*.(js|css)?$ {

    和location ~ .*.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {的下一行添加:

    proxy_pass http://halo;

    重新加载nginx即可nginx -s reload

最近的文章

从字节码分析自增变量

如下代码的运行结果:public class IncrementVariableTest { public static void main(String[] args) { int i = 1; i = i++; int j = i++; …

继续阅读
更早的文章

Hello Halo

Hello Halo如果你看到了这一篇文章,那么证明你已经安装成功了,感谢使用 Halo 进行创作,希望能够使用愉快。相关链接官网:https://halo.run文档:https://docs.halo.run社区:https://bbs.halo.run主题仓库:https://halo.run…

继续阅读