搭建Halo博客

kolbe 2021年08月28日 194次浏览

1 安装Docker

1.1 使用yum安装Docker

安装依赖

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

安装docker

$ sudo yum install docker-ce docker-ce-cli containerd.io

1.2 常用镜像仓库

阿里云

$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

清华大学

$ sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

官方仓库

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

1.3 启动Docker

$ sudo systemctl start docker

2 安装Docker Compose

2.1 下载最新稳定版Docker Compose

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2.2 调整脚本权限

$ sudo chmod +x /usr/local/bin/docker-compose

2.3 查看Docker Compose版本

$ docker-compose --version
docker-compose version 1.29.2, build 1110ad01

3 安装Mysql

3.1 初始化MySql安装目录结构

1)在 /opt目录下新建mysql文件夹
2)在mysql文件夹下新建

  • .env 文件,存放docker-compose中的变量
  • docker-compose.yml 文件,docker compose核心配置文件
  • mysql/config 文件夹,存放mysql配置文件
  • mysql/data 文件夹,存放mysql数据文件

3.2 编辑配置文件

.env文件

MYSQL_ROOT_PASSWORD=root
MYSQL_ROOT_HOST=%
MYSQL_DIR=./mysql

docker-compose.yml

version: '3'
services:
  mysql-db:
    container_name: mysql              # 指定容器的名称
    image: mysql:8.0                   # 指定镜像和版本
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST}
    volumes:
      - "${MYSQL_DIR}/data:/var/lib/mysql"           # 挂载数据目录
      - "${MYSQL_DIR}/config:/etc/mysql/conf.d"      # 挂载配置文件目录

environment变量

  • MYSQL_ROOT_PASSWORD :root 用户的密码。
  • MYSQL_USER,MYSQL_PASSWORD :这两个变量为可选,创建一个新用户,这个用户在 MYSQL_DATABASE 变量指定的数据库上拥有超级用户权限。
  • MYSQL_DATABASE :指定一个数据库,在容器启动时创建。
  • MYSQL_ALLOW_EMPTY_PASSWORD :设置为 yes 允许 root 用户的密码为空。
  • MYSQL_RANDOM_ROOT_PASSWORD :设置为 yes 将在容器启动时为 root 用户生成一个随机的密码,密码会显示到标准输出流(GENERATED ROOT PASSWORD:......)。
  • MYSQL_ONETIME_PASSWORD :一次性密码,为 root 用户设置,第一次登录后必须修改密码(仅支持 5.6 以上的版本)。

4 安装Nginx

4.1 初始化Nginx安装目录

1)在 /opt目录下新建 nginx目录
2)在nginx目录下新建

  • conf 文件夹,存放nginx配置文件
  • conf/nginx.conf 文件,nginx核心配置
  • conf/proxy.conf 文件,nginx代理配置
  • conf/cert 文件夹,nginx https证书文件
  • data 文件夹,存放nginx日志文件
  • docker-compose.yml 文件,docker compose的核心配置文件

4.2 编辑配置文件

docker-compose.yml

version: '3.1'
services:
  nginx:
    restart: always
    image: nginx
    container_name: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./conf/nginx.conf:/etc/nginx/nginx.conf
      - ./conf/proxy.conf:/etc/nginx/proxy.conf
      - ./conf/conf.d:/etc/nginx/conf.d
      - ./conf/cert:/etc/nginx/cert
      - ./data/log:/var/log/nginx

nginx.conf

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {
	listen 443 ssl;
	server_name www.kolbe.net;
	ssl_certificate cert/www.kolbe.net.pem;
	ssl_certificate_key cert/www.kolbe.net.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_pass http://192.168.1.1:10000;
	}
    }

    # 设置 http自动跳转到 https
    server {
	listen 80;
	server_name  www.kolbe.net;
	location / {
		proxy_pass http://192.168.1.1:10000;
	}
    }
}

注:
https的证书文件可以到阿里云上申请免费版,审批通过后,下载nginx版证书文件上传到cert文件夹下即可

5 安装Halo博客

5.1 初始化Halo安装目录

1)在 /opt 目录下新建 blog文件夹
2)在 blog 文件夹下新建

  • conf 文件夹,存放halo的配置文件
  • conf/application.yaml 文件,halo的核心配置
  • docker-compose.yml 文件,docker compose核心配置

5.2 编辑配置文件

application.yaml配置

server:
  port: 10000

  compression:
    enabled: false
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/db_blog?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: root

halo:
  admin-path: admin
  cache: memory

docker-compose.yml

version: '2'
services:

  halo:
    restart: always
    image: halohub/halo
    container_name: blog
    ports:
      - 10000:10000
    environment:
      - VIRTUAL_PORT=10000
      - VIRTUAL_HOST=www.kolbe.net  # 你的博客地址(务必修改)
      - LETSENCRYPT_HOST=www.kolbe.net # 你的博客地址 (务必修改)
      - LETSENCRYPT_EMAIL=me@kolbe.net # 证书所有者的邮箱,快过期时会提醒(务必修改)
      - MAX_UPLOAD_SIZE=10m
      - JVM_XMS=1024m
      - JVM_XMX=2048m
    volumes:
      - /opt/blog/conf:/root/.halo