docker搭建halo博客系统

docker搭建halo博客系统

官网

1. 安装docker

#移除旧的版本:避免安装中出现冲突导致安装失败
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
#安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#添加软件源信息,使用阿里云的镜像,不配置镜像下载可能会很慢
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新 yum 缓存:
sudo yum makecache fast
#安装 Docker-ce:
sudo yum -y install docker-ce
#启动 Docker 后台服务
sudo systemctl start docker

docker -v 查看是否安装成功

2. 安装mysql(不配置数据库默认使用halo自带的H2数据库,用于生产最好还是重新安装一个数据库)

#拉取镜像
docker pull mysql:8.0.30
 
#创建目录()
mkdir -p /app/docker/mysql/data
mkdir -p /app/docker/mysql/conf 
mkdir -p /app/docker/mysql/log
 
 #启动容器
 docker run -p 3306:3306 --name mysql \
-v /app/docker/mysql/log:/var/log/mysql \
-v /app/docker/mysql/data:/var/lib/mysql \
-v /app/docker/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=1234  \
-d mysql:8.0.30

#进入mysql
docker exec -it mysql bash 
mysql -uroot -p1234

docker搭建halo博客系统_第1张图片

3. 创建数据库

#创建数据库 halodb
CREATE DATABASE IF NOT EXISTS halodb
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;

4. 创建工作目录,并下载统一配置文件到该目录

mkdir ~/.halo && cd ~/.halo
#下载配置文件,完成后会出现一个application.yaml的文件
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml --no-check-certificate

#修改配置文件
vi application.yaml

使用mysql需要修改配置文件,不使用mysql的话不用修改配置文件

使用mysql,修改后的配置文件:

server:
  port: 8090

  # Response data gzip.
  compression:
    enabled: false
spring:
  datasource:

    # MySQL database configuration.
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://172.17.0.2:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: 1234

halo:

  # Your admin client path is https://your-domain/{admin-path}
  admin-path: admin

  # memory or level
  cache: memory

注意:

​ 由于使用的是docker部署,docker容器之间没有配置网络的话是不能通过127.0.0.1环回地址访问另一个容器中的mysql容器的,需要知道mysql容器暴露的ip才行。

#查看mysql的容器名称
docker ps -a
#查看容器信息
docke inspect mysql(容器名)

docker搭建halo博客系统_第2张图片

​ IPAddress就是对应的id地址啦

​ 得到ip后把url中的ip,还有数据库密码替换掉就可以了

5. 拉取镜像,因为一些主题不支持高版本,所以我这里还是使用的较低版本。高版本的安装可以通过docker compose统一安装。

#拉取镜像
docker pull halohub/halo:1.5.2

docker run -it -d --name halo \             #容器名称
-p 8090:8090 \                              #配置容器到主机的端口映射   
-v ~/.halo:/root/.halo \					#数据重定向到指定目录
--restart=unless-stopped halohub/halo:1.5.2	#镜像名称

​ 安装完成后就可以通过就可以通过主机公网ip+8090端口进行访问了。如果不能访问,可以查看/root/.halo/log目录下的启动日志进行查看。

6. Nginx代理域名

docker pull nginx

# 创建挂载目录
mkdir -p ~/docker/nginx/conf
mkdir -p ~/docker/nginx/log

#容器中的nginx.conf文件和conf.d文件夹复制到宿主机
# 生成容器
docker run -it -d --name nginx -p 9960:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf ~/docker/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d ~/docker/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html ~/docker/nginx

# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx
# 删除正在运行的nginx容器
docker rm -f nginx

#重新启动容器,并配置启动参数
docker run \
-p 9960:80 \
--name nginx \
-v ~/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v ~/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v ~/docker/nginx/log:/var/log/nginx \
-v ~/docker/nginx/html:/usr/share/nginx/html \
-d nginx:latest

若nginx启动成功,可以通过主机公网 ip + 9960 访问到nginx的欢迎界面。

进入 ~/docker/nginx/conf/nginx.conf 目录下修改default.conf配置文件,halo容器的端口跟mysql一样,用 docker inspect name 查看

upstream halo {
  server 172.17.0.3:8090;
}
server {
  listen 80;
  listen [::]:80;
  server_name www.yourdomain.com;
  client_max_body_size 1024m;
  location / {
    proxy_pass http://halo;
    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;
  }
}

重启容器nginx容器使配置生效。

docker restart nginx

最后就可以通过域名访问到你的博客啦!

你可能感兴趣的:(docker,运维,容器,数据库)