halo搭建炫酷个人博客快速部署:docker+docker-compose+nginx(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: halo搭建炫酷个人博客快速部署:docker+docker-compose+nginx

部署一个炫酷的个人博客只需要按照本文的指令直接 cv 即可。

但请注意打开服务器防火墙的 803306 端口。

1.halo简介与地址

1.1 简介

Halo是一款现代化的开源博客/CMS系统,所有代码开源在GitHub上且处于积极维护状态。它是基于 Java Spring Boot 构建的,易于部署,支持REST API、模板系统、附件系统和评论系统等功能。

Halo 作为一款好用又强大的开源建站工具,配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站,可以是你的个人博客,也可以是团队共享的知识库,甚至可以是一个论坛、一个商城。

1.2 开源仓库

🏠 github: halo-dev/halo: 强大易用的开源建站工具。 (github.com)

🏠 gitee:halo: 强大易用的开源建站工具。 (gitee.com)

1.3 中文文档

🏠 Halo Documents

1.4 社区

🏠 Halo 社区

1.5 官网

🏠 Halo 建站 - 强大易用的开源建站工具

1.6 主题仓库

🏠 主题仓库 | Halo 建站 - 强大易用的开源建站工具

2.安装docker与docker-compose

2.1 安装docker

🍀 基于centos的安装

  1. 安装yum-utils
sudo yum install -y yum-utils
  1. 从国内服务器上下载docker
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 验证是否成功
sudo docker --version

🍀 基于ubuntu

  1. 安装需要的包
sudo apt-get update
  1. 安装依赖包
sudo apt-get install \
   apt-transport-https \
   ca-certificates \
   curl \
   gnupg-agent \
   software-properties-common
  1. 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  1. 设置远程仓库
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) \
  stable"
  1. 安装 Docker-CE
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 验证是否成功
sudo docker --version

2.2 配置国内加速器

国内镜像中心常用的为阿里云与网易云,选择其中一个加速器进行配置即可。在本地 Docker 中指定要使用的国内加速器地址后,就可以直接从国内镜像中心下载镜像了。

2.1.1 配置阿里云加速器

🍀 找到相应页面

若要配置阿里云加速器,必须首先要有阿里云的账号。登录阿里云后,打开阿里云的容器镜像服务页面 https://cr.console.aliyun.com ,然后找到如下页面,可以查看到你的 registry-mirrors

🍀 创建 docker 目录

sudo mkdir -p /etc/docker

🍀 创建 daemon.json 文件

注意,该 json 数据中的 URL 地址是与用户登录账号绑定的,不同的用户所生成的地址是不同的。

sudo vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://******.mirror.aliyuncs.com"]
}

🍀 重新加载服务配置文件

sudo systemctl daemon-reload

🍀 重启 docker 引擎

sudo systemctl restart docker

2.2.2 配置网易云加速器

配置网易云加速器,无需注册网易云用户。只需将前面的 daemon.json 文件中的那个URL 替换为如下 URL 即可。

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

当然,替换过后,仍需重新加载服务配置文件,重启 docker 引擎。

2.3 离线安装docker-compose

🍀 下载安装包

🏠 所有版本预览:Releases · docker/compose (github.com)

选择一个版本:

进入后往下拉,选择对应版本:

将文件上传到linux后,移动到与环境变量相关的指定位置:

sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

🍀 添加可执行权限

为 docker-compose 文件添加可执行权限。

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

🍀 测试

通过 docker-compose version 测试安装是否成功。

sudo docker-compose version

3.nginx反向代理配置

在系统任意位置创建一个 halo 文件夹,并创建多级目录

sudo mkdir -p /halo/nginx/conf/

编写Nginx配置文件

sudo vim /halo/nginx/conf/nginx.conf
#user  root;
error_log  /var/log/nginx/error.log notice;
worker_processes  1;
pid        /var/run/nginx.pid;
events {
  worker_connections  1024;
}
http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile        on;
  keepalive_timeout  65;
  # 设置上传文件的最大值
  client_max_body_size 256m;
  upstream blog {
    # 使用容器服务名
  server halo:8090;
  }
  server {
      listen       80;
      # 可进行域名绑定
      server_name  localhost;
      location / {
          # 设置反向代理的地址(实际是请求转发)
          proxy_pass http://blog;
          # 设置HTTP请求头
          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;
      }
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   html;
      }
  }
}

4.Docker-compose部署halo,mysql,nginx

sudo vim /halo/compose.yaml

1️⃣ 您必须修改的自定义配置,找到下面的参数所在位置修改:

服务器或虚拟机ip:halo.external-url 中的 ip 设置,我写的配置中是 8.130.97.145,需要修改为你自己的服务器ip地址。

2️⃣ 您可选修改的自定义配置,找到下面的参数所在位置修改:

  1. 超级管理员账号密码
  • 账号 halo.security.initializer.superadminusername,我写的配置中是 admin
  • 密码 halo.security.initializer.superadminpassword ,我写的配置中是 123456
  1. mysql的root用户密码,以下两个参数的值都需要修改且必须保持一致
  • spring.r2dbc.password,我写的配置中是 123456
  • MYSQL_ROOT_PASSWORD,我写的配置中是 123456
services:
  halo:
    image: halohub/halo:2.4.0
    container_name: halo
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo:/root/.halo2
    ports:
      - "8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=123456
      - --spring.sql.init.platform=mysql
      # 外部访问地址,我的服务器 ip 为8.130.97.145,此处需要修改为你自己的服务器或虚拟机 ip
      - --halo.external-url=http://8.130.97.145:80/
      # 初始化的超级管理员用户名
      - --halo.security.initializer.superadminusername=admin
      # 初始化的超级管理员密码
      - --halo.security.initializer.superadminpassword=123456
  halodb:
    image: mysql:8.0.31
    container_name: halodb
    restart: on-failure:3
    networks:
      halo_network:
    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"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=halo
  halonginx: # 服务名称,用户自定义
    image: nginx:1.23.4  # 镜像版本
    container_name: halonginx
    # 链接到其它容器,能在 nginx.conf 反向代理配置时使用
    links:
      - halo
    networks:
      halo_network:
    ports:
      - 80:80  # 暴露端口
    volumes: # 挂载
      - /halo/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    privileged: true # 这个必须要,解决nginx的文件调用的权限问题
networks:
  halo_network:


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
86 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
28天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
94 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
18天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
18天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
39 1
|
1月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
29 4
|
1月前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
57 2
|
1月前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
36 3
|
1月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
39 3
|
2月前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
282 3
|
2月前
|
弹性计算 数据库连接 Nacos
阿里云ECS服务器在docker中部署nacos
docker pull nacos 失败,docker部署nacos遇到的问题,nacos数据库连接,nacos端口映射
115 1