侧边栏壁纸
  • 累计撰写 1 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

使用Docker + Halo + Nginx搭建个人博客

Shihd
2022-08-04 / 0 评论 / 3 点赞 / 175 阅读 / 1,561 字 / 正在检测是否收录...
温馨提示:
工具、技术在迭代,再加本人水平实在有限,如发现任何问题,烦请各位评论区指正,感谢!

环境信息

  • 服务器
    • 类型:云服务器
    • 厂商:阿里云
    • 配置
      • 实例规格:计算型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)

本配置运行后部分数据如下

AliYun-Usage

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-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

输出如下信息即代表安装成功
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

输出如下信息即代表安装成功
Halo-Started-Successfully


访问

管理后台

打开浏览器,输入https://域名/admin,即可进入安装向导页面,输入对应的信息就完成了。

Halo-Setup-Guide

应用前台

打开浏览器,输入https://域名,enjoy it!


参考资料

3

评论区