一、准备工作
本章教程基于Docker搭建,所以需要你提前在服务器上安装好Docker环境。
Docker安装教程:https://blog.csdn.net/qq_19309473/article/details/113101602
二、流程
(1) docker安装mysql
#创建 Docker 自定义桥接网络,方便docker内部通信
docker network create halo-mysql-nginx-net
# 拉取mysql镜像
docker pull mysql
# 创建文件夹
mkdir -p ~/.halo/mysql
# 启动 MySQL 实例 xxxxxxxxx为你自己设置的密码
docker run --name halo-mysql -v ~/.halo/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxxxxxxx --net halo-mysql-nginx-net --restart=unless-stopped -d mysql
# 进入 MySQL 容器中登录 MySQL 并创建 Halo 需要的数据库
docker exec -it halo-mysql /bin/bash
# 登录 MySQL
mysql -u root -p
# 输入 MySQL 数据库密码
# 创建数据库
create database halodb character set utf8mb4 collate utf8mb4_bin;
# 使用 exit 退出MySQL
# 使用 exit 退出容器 因为之前设置了--restart=unless-stopped 不用担心容器停止
docker安装mysql命令解释
--name halo-mysql #设置容器名字
-v ~/.halo/mysql:/var/lib/mysql #卷挂载。 本地地址:容器内部地址
-e MYSQL_ROOT_PASSWORD=xxxxxxxx #设置mysql密码
--net halo-mysql-nginx-net #挂载网络
--restart=unless-stopped #除非手动停止否则自动重启
-d #后台运行
mysql #mysql版本
(2) docker安装halo
下载halo镜像
docker pull halohub/halo:1.4.17
创建工作目录
mkdir -p ~/.halo/halo && cd ~/.halo/halo
下载配置文件到工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
修改配置文件,配置数据库或者端口等
vim application.yaml
# 你需要做如下几个步骤:
# 注释 H2 database configuration.部分
# 启用 MySQL database configuration.部分
# 修改 datasource 下的 url 中的 ip 地址部分为容器名称并修改密码为您设定的 MySQL 密码
(3)启用halo
docker run -it -d --name halo -p 8090:8090 -v ~/.halo/halo:/root/.halo --net halo-mysql-nginx-net --restart=unless-stopped halohub/halo:1.4.17
docker安装halo命令解释
-it -d #运行方式
--name halo #设置容器名字
-p 8090:8090 #端口设置
-v ~/.halo/halo:/root/.halo #卷挂载。 本地地址:容器内部地址
--net halo-mysql-nginx-net #挂载网络
--restart=unless-stopped #除非手动停止否则自动重启
halohub/halo:1.4.17 #halo版本
到这里就可以去浏览器 使用ip:8090打开个人博客网站。会看到 Halo 安装向导,前提是安全组开放了8090端口
(4)配置nginx代理
docker安装nginx
#拉取nginx镜像
docker pull nginx
# 先运行一个nginx容器test
docker run --name test -p 81:80 -d nginx
# 建立服务器本地的文件夹
mkdir -p ~/.halo/nginx/data/nginx/conf ~/.halo/nginx/data/nginx/conf.d ~/.halo/nginx/data/nginx
# 从容器拷贝文件到本地方便之后挂载test
docker cp test:/etc/nginx/nginx.conf ~/.halo/nginx/data/nginx/conf && docker cp test:/etc/nginx/conf.d/default.conf ~/.halo/nginx/data/nginx/conf.d && docker cp test:/usr/share/nginx/html ~/.halo/nginx/data/nginx
# 删除这个测试容器
docker rm test -f
# 再安装需要的nginx容器
docker run \
--name halo-nginx \
-p 80:80 \
-p 443:443 \
-v ~/.halo/nginx/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v ~/.halo/nginx/data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v ~/.halo/nginx/data/nginx/html:/usr/share/nginx/html \
-v ~/.halo/nginx/data/nginx/log:/var/log/nginx \
-v ~/.halo/nginx/data/nginx/certs:/etc/nginx/certs \
--network halo-mysql-nginx-net \
--restart=unless-stopped \
-d \
nginx
此时访问服务器ip地址 看到Welcome to nginx! 即为成功
docker安装nginx参数说明
--name halo-nginx # 给容器取名为halo-nginx
-p 80:80 # 容器80端口映射到宿主机80端口,HTTP
-p 443:443 # 容器443端口映射到宿主机443端口,HTTPS
-v ~/.halo/nginx/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf # nginx.conf可以配置反向代理
-v ~/.halo/nginx/data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf # default.conf可以配置反向代理
-v ~/.halo/nginx/data/nginx/html:/usr/share/nginx/html # 挂载html目录,存放静态网页
-v ~/.halo/nginx/data/nginx/log:/var/log/nginx # 挂载log目录,存放日志
-v ~/.halo/nginx/data/nginx/certs:/etc/nginx/certs # 挂载certs目录,存放ssl证书
--network halo-net # 将Nginx容器加入与Halo容器同一网络。
--restart=unless-stopped # Docker启动时自动启动这个容器
-d # 设置后台容器运行
修改本地nginx配置文件default.conf ,之后容器restart即可同步进去容器的配置
vim /root/.halo/nginx/data/nginx/conf.d/default.conf
删除原有全部内容 并修改如下:
每个server功能:第一个 禁用ip访问;第二个 强制跳转https;第三个禁用https的ip访问 ; 第四个只允许https的域名访问
域名和证书要改成你自己的!!!!!!!!!!
return 400 404 444 看自己选择
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 404;
}
server {
listen 80;
server_name 你自己的域名;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/nginx/certs/自己的证书.pem;
ssl_certificate_key /etc/nginx/certs/自己的证书.key;
server_name _;
return 404;
}
server {
listen 443 ssl;
server_name 你自己的域名;
ssl_certificate /etc/nginx/certs/自己的证书.pem;
ssl_certificate_key /etc/nginx/certs/自己的证书.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 1024m;
location / {
proxy_pass http://halo: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;
}
}
# 重启nginx 服务
docker restart halo-nginx
至此就差不多了,,剩下的自己摸索吧,哈哈哈