最近重新搭建了博客,续费真的好贵,以前的数据一不小心还弄丢了,一把辛酸泪。
环境:
我选择使用 Docker-Compose 安装,并且安装的是 1.6 版本,因为 Joe 2.0 主题还不适配 2.0 的 Halo ,所以选择了低版本的 Halo.
Ubuntu 的安装命令是 apt ,所以先更新 apt 的软件包列表,让它知道 Docker 软件包的存在:
sudo apt update
然后可以使用使用 apt install
命令将 Docker 的组件添加到你的系统中。你将会安装最新版本的 Docker 社区版(CE)。有三个软件包需要安装:
docker-ce
: Docker引擎守护程序。docker-ce-cli
: 将与之互动的Docker CLI。containerd.io
: 用于启动和运行你的容器。使用命令:
sudo apt install docker-ce docker-ce-cli containerd.io
接下来可以安装 docker-compose ,它是一个流行的 Docker 配套工具,它让使用多个容器的应用程序更容易工作。虽然 docker
CLI 每条命令只针对一个容器,但 docker compose
可以通过每个动作启动和停止几个容器。执行以下命令:
sudo apt install docker-compose-plugin
安装好了之后可以看看版本:
docker compose version
安装好 Docker 环境后,可以创建一个文件夹,比如 ~/halo-app
:
mkdir ~/halo-app && cd ~/halo-app
在文件夹里面创建 docker-compose. yaml
文件,我选择创建 Halo + MySQL + Redis 的实例:
sudo vi docker-compose.yaml
在文件里面写以下内容,注意==密码一定要改==,要不数据库立马就被搞了:
端口号我就不改了,后面用 Nginx 代理一下,8090:8090
中,前面的 8090 表示主机的端口,后面的 8090 表示 Docker 容器的端口,如果改成 80:8090
,我们可以直接通过 http://ip
就可以访问,因为 80 是默认端口。但是我们建议 80 端口留给 nginx ,用 8090 就可以。
version: "3"
services:
halo_server:
image: halohub/halo:1.6.0
container_name: halo_server
restart: on-failure:3
depends_on:
- halo_mysql
- halo_redis
networks:
halo_network:
volumes:
- ./:/root/.halo
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
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=o#DwN&JSa56
- HALO_ADMIN_PATH=admin
- HALO_CACHE=redis
- SPRING_REDIS_PORT=6379
- SPRING_REDIS_DATABASE=0
- SPRING_REDIS_HOST=halo_redis
- SPRING_REDIS_PASSWORD=dm5fD%rvPtq
halo_mysql:
image: mysql:8.0.27
container_name: halo_mysql
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:
- /etc/localtime:/etc/localtime:ro
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
ports:
- "3306:3306"
environment:
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_DATASOURCE_PASSWORD 变量值
- MYSQL_ROOT_PASSWORD=o#Dw232432fda6
- MYSQL_DATABASE=halodb
halo_redis:
image: redis
container_name: halo_redis
restart: on-failure:3
networks:
halo_network:
volumes:
- ./redis/data:/data
- ./redis/logs:/logs
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_REDIS_PASSWORD 变量值
command: redis-server --requirepass dm5fD%rvPtq
ports:
- "6379:6379"
networks:
halo_network:
保存后,以下命令就可以启动 Halo 服务了,打开打开 http://ip:端口号
即可看到安装引导界面。
官方提示:如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。如果通过
http://ip:端口号
的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。sudo docker-compose up -d
我们先停掉:
sudo docker-compose down
在域名解析里面添加以下两条解析记录就可以了:比如你域名是 abc.cn
,分别对应:
http://abc.cn
http://www.abc.cn
到这里为止,只要你启动 Docker 容器,就可以用 http 的方式访问,但是我想要 https 也能访问,并且我不想用一个域名带着一个端口,这个时候我们有很多方式可以解决,我选择 NGINX 的方式。
使用以下命令安装:
sudo update
sudo apt install nginx
配置 nginx:
# 下载 Halo 官方的 Nginx 配置模板
curl -o /etc/nginx/conf.d/halo.conf --create-dirs https://dl.halo.run/config/nginx.conf
下载之后,需要修改配置:
sudo vi /etc/nginx/conf.d/halo.conf
里面格式应该是这样,把我们的域名和端口配置上,80 端口留给 nginx 本身:
修改完成之后
# 检查配置是否有误
sudo nginx -t
# 重载 Nginx 配置
sudo nginx -s reload
y
或 a
同意相关协议,具体请参考输入命令后的输出。这个时候,重新启动 Docker 容器就可以了,值得注意的是,在设置完反向代理后,必须在博客的后台管理界面设置正确的博客地址,否则可能导致 CSS 加载不成功、样式混乱等错误。
如果每次点击都跳走打开新标签,可以看看主题设置 -- 主题相关 -- 链接跳转行为(全局-内容区域) -- 选当前页
导航栏配置了之后,点击标签,会到首页下,可以看看菜单,需要配置为相对路径,不要加上域名:
备份之后,导入发现是需要 json ,但是我备份的是全量文件,瞬间傻眼。可以通过数据库导入重新找回,但是我是个怕麻烦的人,直接重新搞。最好就是两个都备份一下,省事很多。
作者: 秦怀,个人站点 秦怀杂货店,纵使缓慢,驰而不息。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。