服务器安全配置
买到服务器后的第一件事:远程登陆,更新软件并重启。
# 用root账号登录,系统会提示输入密码
ssh root@ip_address
# 更新软件
apt update
apt upgrade
# 重启
reboot
买到服务器的第二件事:新建用户,添加 sudo 权限。
# 新建用户,名字随意,此处用user
# 新建账号时系统会提示添加用户相关信息
adduser user
# 赋予user sudo 权限
ln /usr/sbin/usermod /usr/bin
usermod -a -G sudo user
newgrp sudo
# 退出登录
logout
买到服务器的第三件事:测试ssh,修改相关配置。
测试新建用户能否正常登录
# 用新建账号登陆账号,系统会提示输入密码
ssh user@ip_address
# 登录成功后退出登录
logout
生成ssh密钥并测试用户能否无密码登录
# 在本机终端环境下生成ssh密钥, 邮箱可有可无 ssh-keygen -t ed25519 -C "user@email.com" # 在系统提示下完成相关信息输入后,最终生成以下文本: The key's randomart image is: +--[ED25519 256]--+ | o=+=.| | o +. +++| | = . o..| | . . . . | | S =..| | +. o+.oo| | ...oo..Eo .o| | .++=*.o . ..| | o+o+*=+ .. ..| +----[SHA256]-----+ # 将公钥导入远程服务器 ssh-copy-id user@ip_address # 退出登录 logout # 测试无密码登录 ssh user@ip_address
修改ssh配置,确保服务器安全
用喜欢的编辑器修改 /etc/ssh/sshd_config 文件中的内容:
1.禁止 root 用户登录 :将文件中的 PermitRootLogin yes 修改为 PermitRootLogin no
2.禁止 密码 登录:将文件中的 #PasswordAuthentication yes 修改为 PasswordAuthentication no
使以上更改生效,需要重启服务器的ssh服务,在终端输入 sudo systemctl restart ssh
打开新的终端,测试是否还能用root用户或者密码登录。
为了让服务器更安全,还可以更改ssh默认端口:
1.用喜欢的编辑器修改 /lib/systemd/system/ssh.socket 文件中的内容:将 ListenStream=22 修改为 ListenStream=23468 当然,也可以将23468 改成你喜欢的任意一个小于65536的数字,只要端口不冲突即可。
2.用喜欢的编辑器修改 /etc/ssh/sshd_config 文件的内容:将 #Port22 修改为 Port 23468
使以上更改生效,请先在终端输入 sudo systemctl daemon-reload ,再输入 sudo systemctl restart ssh
打开新的终端,利用 ssh -p 23468 user@ip_address 测试是否登录成功
注意:修改ssh配置时千万要小心,确保不要断开旧有链接,否则,只能寻求服务器供应商的帮助了。
买到服务器的第四件事:打开防火墙,做好安全配置。
远程登录后,输入以下命令:
sudo ufw allow 23468 # enable ssh
sudo ufw allow 80 # enable http
sudo ufw allow 443 # enable https
sudo ufw enable
运行环境配置
安装 java 运行环境
# 新建文件夹存放java 库文件 sudo mkdir /usr/local/java # 移动到新建文件夹,下载最新版 openjdk 文件并解压 cd /usr/local/java sudo wget https://download.java.net/java/GA/jdk23.0.1/c28985cbf10d4e648e4004050f8781aa/11/GPL/openjdk-23.0.1_linux-x64_bin.tar.gz sudo tar -xvf openjdk-23.0.1_linux-x64_bin.tar.gz # 可以更改文件夹名 sudo mv jdk-23.0.1/ jdk23
用喜欢的编辑器修改 /etc/profile 文件的内容,在最后添加:
# JAVA export JAVA_HOME=/usr/local/java/jdk23 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVAHOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
为使修改生效,在终端输入命令: source /etc/profile
安装 mariadb 数据库
sudo apt install mariadb-server -y sudo mysql_secure_installation
在终端输入
sudo mysql
进入数据库程序后,新建数据库:create database halodb character set utf8mb4 collate utf8mb4_bin; create user 'halo'@'localhost' identified by 'password'; grant all privileges on halodb.* TO 'halo'@'localhost'; flush privileges; exit
测试运行Halo 程序的安装、配置
下载并安装halo jar
# 创建存放运行包的目录 mkdir ~/app && cd ~/app # 下载运行包并更名 wget https://github.com/halo-dev/halo/releases/download/v2.20.11/halo-2.20.11.jar mv halo-2.20.11.jar halo.jar
添加配置文件
# 创建配置文件目录 mkdir ~/.halo2 && cd ~/.halo2 # 使用编辑器创建配置文件,此处用nano sudo nano application.yaml
配置文件内容如下:
server:
# 运行端口
port: 8090
spring:
# 数据库配置,此处用 MariaDB,填写之前创建的数据库信息
r2dbc:
url: r2dbc:pool:mariadb://127.0.0.1:3306/halodb
username: halo
password: password
sql:
init:
mode: always
# 需要配合 r2dbc 的配置进行改动
platform: mariadb
halo:
caches:
page:
# 是否禁用页面缓存
disabled: true
# 工作目录位置
work-dir: ${user.home}/.halo2
# 外部访问地址
external-url: http://localhost:8090
# 附件映射配置,通常用于迁移场景
attachment:
resource-mappings:
- pathPattern: /upload/**
locations:
- migrate-from-1.x
测试运行
# 打开防火墙测试端口 sudo ufw allow 8090 # 测试命令 cd ~/app && java -Dfile.encoding=UTF-8 -jar halo.jar --spring.config.additional-location=optional:file:$HOME/.halo2/
如果一切顺利,halo没有报错的话,我们就可以通过ip地址登录初始安装界面了,在浏览器输入 ip_address:8090 可以看到以下界面:
确保服务开机自启
用喜欢的编辑器在 /etc/systemd/system 文件夹中创建 halo.service 文件 ,内容如下
[Unit]
Description=Halo Service
Documentation=https://docs.halo.run
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=user
ExecStart=/usr/local/java/jdk23/bin/java -Dfile.encoding=UTF-8 -server -Xms256m -Xmx256m -jar /home/user/app/halo.jar --spring.config.additional-location=optional:file:/home/user/.halo2/
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog
StandError=inherit
[Install]
WantedBy=multi-user.target
利用 Caddy 反向代理实现自动https
没有购买过域名的同学,本教程已经结束了。但如果你购买了域名并想要使用自动https的话,还可以再看看:
下载并安装 Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy
编写Caddyfile
使用你喜欢的编辑器将文件/etc/caddy/Caddyfile 修改如下:
# 将example.com 更换为你的域名 example.com:443 encode gzip reverse_proxy 127.0.0.1:8090
大功告成!
Halo的备份、恢复与升级
Halo 的备份
在 Console 中,点击左侧菜单的 备份,进入备份页面。
点击右上角的 创建备份 按钮,即可创建一个新的备份请求,需要注意的是,创建备份请求并不会立即开始备份,而是会在后台异步执行,因此需要等待一段时间才能看到备份的结果。
备份中:
备份完成:
Halo 的恢复
在恢复前,需要了解以下几点:
恢复不限制部署方式,也不限制数据库,也就是说新站点的部署方式和数据库类型可以和备份的站点不同。
恢复过程可能会持续较长时间,期间请勿刷新页面。
在恢复的过程中,虽然已有的数据不会被清理掉,但如果有冲突的数据将被覆盖。
恢复完成之后会提示停止运行 Halo,停止之后可能需要手动运行。
在 Console 中,点击左侧菜单的 备份,进入备份页面,然后点击 恢复 选项卡即可进入恢复界面,阅读完注意事项之后点击 开始恢复 按钮即可显示备份文件上传界面。
Halo 支持三种恢复方式:
上传备份文件:上传已有的备份文件进行恢复。
远程恢复:从远程 URL 下载备份文件进行恢复。
从备份文件恢复:支持从backups 目录扫描备份文件,并选择文件进行恢复。
提示
如果你的备份文件较大,推荐提前将备份文件上传到服务器,然后选择 从备份文件恢复 方式进行恢复,避免因为网络原因导致上传失败。
使用 上传备份文件 方式进行恢复的操作示例:
选择备份文件后,点击 上传 按钮即可开始上传备份文件,上传完成后会自动开始恢复。
恢复完成,会提示重启 Halo,点击 确定 按钮即可重启 Halo。
最后,建议去服务器检查 Halo 的运行状态,如果没有设置自动重启,需要手动重启。
Halo升级
停止 Halo 服务
service halo stop
下载新版本的 Halo 运行包,覆盖原有的运行包
wget https://dl.halo.run/release/halo-2.20.0.jar -O /home/halo/app/halo.jar
启动 Halo 服务
service halo start