avatar

卷心菜的博客

卷心菜笔记

  • 首页
  • 技术博客
  • 数独
  • 科技圈
  • 上线项目
  • 哲学
主页 建站经历
文章

建站经历

发表于 2025-02-1 更新于 2025-08- 18
作者 ylq 管理员
34~43 分钟 阅读

Halo是一个开源建站项目,文档地址:https://docs.halo.run/

  • 正常购买3个月以上的域名和云服务器备案就可以了,如果嫌备案麻烦就买一个香港的云服务器,减少上线的流程和等待时间,我使用的莱卡云2核2G和阿里云2核2G

  • 购买一个云平台托管的域名,同样也不需要备案,我使用的cloudflare托管免费注册的.dpdns.org域名,也可以在阿里云注册一个域名.xyz

  • 使用docker-compose部署Halo开源项目提供的个人博客建站模板

  • 使用nginx反向代理将域名解析到云服务器ip端口

  • 莱卡云管理平台需要开放端口,Linux服务器上暂时没有防火墙,由于远程连接的端口不是22,这个要在安全组里单独设置ssh端口开放

缺点:

  • 国内只能以IP+端口的方式访问香港服务器IP地址进入个人博客,域名由于托管在cloudflare上,无法从国内直接访问,不备案的话只能将阿里云托管的域名临时解析到香港IP

  • 可扩展性不强,不能自己写代码定制网站展示页面

  • 文件上传有限制,图片音视频等资源有大小限制,基本不好用

  • 暂时没有设置SSL证书,网站显示连接不安全

  • 挂载postgresql的时候没有设置配置文件,数据库不支持远程访问,开放5432端口也没用

使用 Docker Compose 部署

在系统任意位置创建一个文件夹,此文档以 ~/halo 为例。

mkdir ~/halo && cd ~/halo

注意:后续操作中,Halo 产生的所有数据都会保存在这个目录,请妥善保存。

创建 docker-compose.yaml采用Halo + PostgreSQL方案。

~/halo/docker-compose.yaml

version: "3"

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.21
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/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
    environment:
      # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
      - --spring.r2dbc.username=halo
      # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=openpostgresql
      - --spring.sql.init.platform=postgresql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/
  halodb:
    image: postgres:15.4
    restart: on-failure:3
    networks:
      halo_network:
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      - POSTGRES_PASSWORD=openpostgresql
      - POSTGRES_USER=halo
      - POSTGRES_DB=halo
      - PGUSER=halo

networks:
  halo_network:

启动容器:

docker compose up -d

输入docker ps 查看容器。

在云服务器安全组开启8090端口。

初始化后进入后台

备份还原与迁移,本次是迁移操作。

nginx配置域名解析

步骤 1: 拉取Nginx镜像

首先,从Docker官方镜像仓库拉取最新的Nginx镜像:

docker pull nginx

步骤 2: 创建挂载目录

为了方便管理配置文件、日志和网站内容,创建以下目录:

mkdir -p /home/nginx/conf
mkdir -p /home/nginx/logs
mkdir -p /home/nginx/html

设置权限以避免权限问题:

chmod 777 /home/nginx/conf /home/nginx/logs /home/nginx/html

步骤 3: 启动容器并挂载目录

先创建一个容器复制配置文件,这一步避免由于没有挂载文件导致报错。

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

运行以下命令启动Nginx容器,并将宿主机目录挂载到容器中:

docker run -d \
--name my-nginx \
-p 80:80 \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/logs:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
--restart always \
nginx

编辑 /home/nginx/conf/nginx.conf 文件,根据需求调整配置。设置静态文件路径或反向代理。

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;  

events {
    worker_connections  1024;
}

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

    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;

    keepalive_timeout  65;

    #gzip  on;

    # 重要安全设置(防止嵌入攻击)
    server_tokens off;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;

    # 包含其他配置文件
    include /etc/nginx/conf.d/*.conf;

    # 上游服务器定义
    upstream backend_server {
        server x.x.x.x:8090;  # 替换为实际后端IP和端口
    }
    # 自定义代理服务器配置
    server {
        listen 80;
        server_name cabbage.dpdns.org ylq0001.xyz;  # 域名
        
        # 重要安全设置
        client_header_buffer_size 2k;
        large_client_header_buffers 4 8k;
        client_body_buffer_size 100k;
        
        # 上传限制
        client_max_body_size 50m;
        
        # 默认文件索引
        index index.php index.asp index.html index.htm;
        
        # 代理配置
        location / {
            proxy_pass http://backend_server;  # 使用上游服务器名称
            
            # 标准代理头设置
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            
            # 连接优化参数
            proxy_connect_timeout 60s;
            proxy_send_timeout 90s;
            proxy_read_timeout 90s;
            proxy_buffering off;
            proxy_request_buffering off;  # 支持大文件上传
        }
    }
}

修改完成后,重启容器使配置生效:

docker restart my-nginx

检查容器状态和日志:

docker ps
docker logs nginx

日志无报错,访问http://ylq0001.xyz,成功进入博客。

PostgreSQL命令

因为PostgreSQL是以docker容器的方式运行的,所以要进入容器内部修改PostgreSQL远程连接权限。

先运行docker ps 查看正在运行的docker容器。

执行docker exec -it halo-halodb-1 bash进入容器,看到命令提示发生改变。

[root@iZ2vc6aghw8fcd8mbgu23zZ ~]# docker exec -it halo-halodb-1 bash
root@69b0f2a20cdb:

执行psql连接数据库,执行\l 显示数据库。用户通过-U 用户名和-d 数据库也可以进入。

psql -U halo -d halo -h 127.0.0.1 -p 5432

执行\c halo连接数据库。

执行\dt 展示当前数据库的表格。

远程连接PostgreSQL

根据之前挂载的数据库配置位置,进入db目录。

开启云服务器安全组PostgreSQL的端口

要远程连接数据库,还需要修改postgresql.conf添加规则。

listen_addresses = '*'

修改pg_gba.conf,添加规则。

host    all             all             0.0.0.0/0               md5  # 允许所有IPv4地址用密码连接

本地电脑连接测试。

注意:开放数据库远程连接是高危行为,并且数据库存储的二进制数据并不方便修改,没有本地连接的意义。

技术博客
许可协议:  转载标注作者
分享

相关文章

9月 8, 2025

Next.js学习

官网地址:Next.js by Vercel - The React Framework 什么是Next.js Next.js 是基于 React 的开源全栈框架,由 Vercel 开发维护,核心目标是解决 React 单页应用(SPA)在SEO、首屏加载速度、服务端能力等方面的痛点,同时简化开发流

8月 22, 2025

Shadowsocks教程

注:本教程仅供技术学习参考,无任何盈利性质,不承担任何法律责任 假设云vps和服务器已经拥有,可以通过莱卡云、vultr获取。 CentOS6/Debian6/Ubuntu14 ShadowsocksR一键部署管理脚本: wget --no-check-certificate https://raw

8月 22, 2025

配置https加密证书

根据github上的43k stars开源项目配置:acmesh-official/acme.sh 安装 执行安装命令。 curl https://get.acme.sh | sh -s email=my@example.com 国内服务器可能安装不了,使用git安装。 git clone http

下一篇

上一篇

Docker笔记

最近更新

  • 数独程序
  • 面试刷题平台
  • Next.js学习
  • 解锁防复制网页
  • VSCode/IDEA插件/快捷键

热门标签

Docker 微服务 数独 项目 nacos

目录

©2025 卷心菜的博客. 保留部分权利。

使用 Halo 主题 Chirpy