环境信息
服务器
类型:云服务器
厂商:阿里云
配置
实例规格:计算型C6
CPU:2核
内存:4G
硬盘:40G(高效云盘)
带宽:10Mbps(峰值)
Linux:CentOS Linux release 8.5.2111
Docker(CE):20.10.17
Docker Compose:2.7.0
Halo:1.5.4
MySQL:8.0.29
Redis:7.0.4
Nginx:1.23
SSL证书:DigiCert
域名及解析:阿里云
准备
服务器、域名购买及域名解析、SSL证书
各大厂商均可,具体步骤略。
务必在后台安全策略中放开80、443及远程登录端口(默认22)
本配置运行后部分数据如下
Docker
安装
方式一:国内daocloud,速度较快
curl -sSL https://get.daocloud.io/docker | sh
方式二:官方安装,阿里云镜像,速度较慢
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
启动
sudo systemctl start docker
设置开机自启动
systemctl enable docker
校验安装结果
docker version
输出如下信息即代表安装成功
Docker Compose
安装
方式一:国内daocloud,速度较快
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.7.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
方式二:官方,速度较慢
sudo curl -L "https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
赋予执行权限
chmod +x /usr/local/bin/docker-compose
创建软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
校验安装结果
docker-compose --version
部署
登录服务器
可使用厂商提供web远程功能或PC下载相应工具远程连接服务器,具体步骤略
创建并进入工作目录
mkdir ~/app && cd ~/app
配置Nginx
创建并进入Nginx相关目录
mkdir -p nginx/data/certs && mkdir nginx/data/conf.d && cd nginx/data
放置SSL证书
将申请的SSL证书解压,得到对应的xxxxx.pem和xxxxx.key文件,并将其放置到证书目录(~/app/nginx/certs)。
可使用FTP工具或用如下命令
scp 本地文件路径 服务器用户名@服务器地址:~/app/nginx/certs
创建nginx.conf文件
vim nginx.conf
将以下内容复制粘贴到nginx.conf文件并保存
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 65535;
}
http {
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 60;
gzip on;
include /etc/nginx/conf.d/*;
}
创建blog.shihd.cn文件
文件名自定义,个人习惯用相应域名当做其配置文件的文件名
vim conf.d/blog.shihd.cn
将以下内容复制粘贴到nginx.conf文件并保存。务必把域名和证书信息替换成自己的
# 禁用HTTP的IP访问
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 404;
}
# HTTP强制跳转HTTPS
server {
listen 80;
server_name 替换成自己的域名;
return 301 https://$host$request_uri;
}
# 禁用HTTPS的IP访问
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/nginx/certs/替换成自己的SSL证书pem文件名称;
ssl_certificate_key /etc/nginx/certs/替换成自己的SSL证书key文件名称;
server_name _;
return 404;
}
# HTTPS访问配置
server {
listen 443 ssl;
server_name 替换成自己的域名;
ssl_certificate /etc/nginx/certs/替换成自己的SSL证书pem文件名称;
ssl_certificate_key /etc/nginx/certs/替换成自己的SSL证书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;
client_max_body_size 100m;
location / {
proxy_pass http://halo_server:8090;
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;
}
}
返回工作目录并创建docker-compose.yaml文件
cd ~/app && vim docker-compose.yaml
将以下内容复制粘贴到docker-compose.yaml文件并保存。务必把数据库和Redis密码替换成自己的
version: "3"
services:
halo_server:
image: halohub/halo:1.5.4
container_name: halo_server
restart: on-failure:3
depends_on:
- halo_mysql
- halo_redis
volumes:
- ./halo:/root/.halo
ports:
- "8090:8090"
environment:
- SERVER_PORT=8090
- SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver
- SPRING_DATASOURCE_URL=jdbc:mysql://halo_mysql:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=替换成自己的数据库密码
- HALO_ADMIN_PATH=admin
- HALO_CACHE=redis
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_DATABASE=0
- SPRING_REDIS_HOST=halo_redis
- SPRING_REDIS_PASSWORD=替换成自己的Redis密码
- TZ=Asia/Shanghai
halo_mysql:
image: mysql:8.0.29
container_name: halo_mysql
restart: on-failure:3
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=替换成自己的数据库密码
- MYSQL_DATABASE=halodb
- TZ=Asia/Shanghai
halo_redis:
image: redis:7.0.4
container_name: halo_redis
restart: on-failure:3
volumes:
- ./redis/data:/data
- ./redis/logs:/logs
command: redis-server --requirepass 替换成自己的Redis密码
ports:
- "6379:6379"
environment:
- TZ=Asia/Shanghai
nginx:
image: nginx:1.23
container_name: nginx
restart: on-failure:3
volumes:
- ./nginx/data:/etc/nginx
- ./nginx/log:/var/log/nginx
ports:
- "80:80"
- "443:443"
environment:
- TZ=Asia/Shanghai
启动
docker-compose up -d
验证
查看Halo启动日志
tail -f halo/logs/spring.log
输出如下信息即代表安装成功
访问
管理后台
打开浏览器,输入https://域名/admin,即可进入安装向导页面,输入对应的信息就完成了。
应用前台
打开浏览器,输入https://域名,enjoy it!
参考资料
Halo
阿里云
Docker
Nginx
评论区