特點
可插拔架構
Halo 采用可插拔架構,功能模塊之間耦合度低、靈活性提高。支持用戶按需安裝、卸載插件,操作便捷。同時提供插件開發(fā)接口以確保較高擴展性和可維護性。
? 支持在運行時安裝和卸載插件
? 更加方便地集成三方平臺
? 統(tǒng)一的可配置設置表單
? 支持自定義模型,自動生成 RESTful API
功能豐富的主題機制
Halo 提供完整的主題模板機制,用于構建前臺界面。這意味著用戶可以根據(jù)自己的喜好選擇不同類型的主題模板來定制化自己的站點外觀。
? 動態(tài)切換主題模板
? 支持實時編輯和預覽效果
? 多語言支持
? 與插件配合實現(xiàn)更多功能
編輯器
Halo 的富文本編輯器提供了方便豐富的功能,包括添加標題、段落、引用、列表、代碼塊等元素,并支持設置樣式屬性、上傳圖片、插入視頻等功能。這些工具讓你的文章創(chuàng)作更加便捷和生動。
? 完備的富文本格式支持
? 支持拖拽和粘貼圖片上傳
? 支持通過插件擴展編輯器
更多特性
代碼開源
Halo 的項目代碼開源在 GitHub 上且處于積極維護狀態(tài),截止目前已經(jīng)發(fā)布了 109 個版本。你也可以在上面提交你的問題或者參與代碼貢獻。
易于部署
推薦使用 Docker 的方式部署 Halo,便于升級,同時避免了各種環(huán)境依賴的問題。統(tǒng)一管理在工作目錄中的應用數(shù)據(jù)也能方便地進行備份和遷移。
插件機制
支持在插件運行時為系統(tǒng)添加新功能,同時保持 Halo 自身的簡潔輕量。這種靈活的插件機制讓用戶根據(jù)自身需求自由擴展 Halo 的功能,幫助用戶實現(xiàn)富有想象力的站點。
模板機制
支持自定義配置、主題預覽、多語言等功能。這種靈活的模板系統(tǒng)讓用戶可以針對自己的需求進行自定義配置,為網(wǎng)站帶來更加個性化的外觀和交互體驗。
附件管理
支持多種存儲策略,并支持通過插件擴展外部存儲位置,可以讓用戶更加靈活地地上傳、查看和管理附件。
搜索引擎
內置全文搜索引擎,支持關鍵字搜索文章和頁面內容。同時支持通過插件擴展外部搜索引擎,做到讓用戶按需選擇、自由擴展。
部署
快速部署
docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 halohub/halo:2.9
環(huán)境要求
硬件配置
提示
如果您要使用服務器進行部署 Halo,您需要注意的是,Halo 目前不支持市面上的云虛擬主機,請使用云服務器或者 VPS。
CPU
無特別要求。目前我們的 Docker 鏡像 也已經(jīng)支持多平臺。
內存
為了獲得更好的體驗,我們建議至少配置 1G 的 RAM。
磁盤
無特別要求,理論上如果不大量在服務器上傳附件,Halo 對磁盤的容量要求并不是很高。但我們推薦最好使用 SSD 硬盤的服務器,能更快的運行 Halo。
網(wǎng)絡
Halo 目前必須在外網(wǎng)暢通的情況下使用,否則會導致頁面異常
軟件環(huán)境
Halo 理論上可以運行在任何支持 Docker 及 Java 的平臺。
Docker
必須在運行環(huán)境安裝好 Docker 環(huán)境,目前 Halo 的默認安裝運行方式均使用容器。
JRE(可選)
目前 Halo 的默認及推薦安裝方式為 Docker 容器運行,使用 jar 包運行的方式需要用戶自行構建 jar 包。
信息:
當前版本(2.0)需要 JRE 17 的版本,推薦使用 OpenJDK 17。
PostgreSQL(可選)
也可以使用系統(tǒng)自帶的 H2 Database 數(shù)據(jù)庫,無需安裝。但不推薦在生產(chǎn)環(huán)境中使用 H2 Database。
Web 服務器(可選)
如果您部署在生產(chǎn)環(huán)境,那么你很可能需要進行域名綁定,這時候我們推薦使用諸如 Nginx、Caddy 之類的 Web 服務器進行反向代理。但需要注意的是,目前 Halo 不支持代理到子目錄(如:halo.run/blog)。
Wget(可選)
后續(xù)的文檔中,我們會使用 wget 為例,用于下載所需要的文件,所以請確保服務器已經(jīng)安裝好了這個軟件包。當然,下載文件不限制工具,如果你對其他工具熟悉,可以忽略。
VIM(可選)
后續(xù)的文檔中,我們會使用 vim 為例,用于修改一些必要的配置文件,所以同樣請確保服務器已經(jīng)安裝了這個軟件包。當前,修改文檔也不限制工具,如果你對其他編輯軟件熟悉,也可以忽略。
瀏覽器支持
1、用戶前臺:視主題所支持的情況而定,由于目前的評論模塊使用了 Vuejs 開發(fā),所以在 Vuejs 不支持的某些瀏覽器中無法正常顯示評論區(qū)域。
2、管理后臺:支持目前常見的現(xiàn)代瀏覽器,具體視 Vuejs 框架的支持情況而定。
名詞解釋
~(符號)
代表當前系統(tǒng)下的 用戶目錄。
鏡像
指 Halo 構建所產(chǎn)生的 Docker 鏡像。用戶通過該鏡像啟動 Halo 應用。
工作目錄
指 Halo 所依賴的工作目錄,在 Halo 運行的時候會在系統(tǒng)當前用戶目錄下產(chǎn)生一個.halo2
的文件夾,絕對路徑為 ~/.halo2。由于這個工作目錄是固定的,所以上面所說的 運行包 不限制所存放的位置,里面通常包含下列目錄或文件:
? db:存放 H2 Database 的物理文件,如果你使用其他數(shù)據(jù)庫,那么不會存在這個目錄。
? themes:里面包含用戶所安裝的主題。
? plugins:里面包含用戶所安裝的插件。
? attachments:附件目錄。
? logs:運行日志目錄。
? application.yaml:配置文件。
主題
包含了各種站點頁面模板的資源包。用戶訪問 Halo 站點瀏覽到的內容及樣式,由 Halo 管理端所配置使用的主題所決定。
插件
用于擴展 Halo 功能的軟件包。插件獨立于 Halo 核心應用,可以單獨安裝、升級、卸載。
使用Docker-Compose
注意
目前 Halo 2 并未更新 Docker 的 latest 標簽鏡像,主要因為 Halo 2 不兼容 1.x 版本,防止使用者誤操作。我們推薦使用固定版本的標簽,比如 halohub/halo:2.9 或者 halohub/halo:2.9.0。
? halohub/halo:2.9:表示最新的 2.9.x 版本,即每次發(fā)布 patch 版本都會同時更新 halohub/halo:2.9 鏡像。
? halohub/halo:2.9.0:表示一個具體的版本。
后續(xù)文檔以halohub/halo:2.9
為例。
1、在系統(tǒng)任意位置創(chuàng)建一個文件夾,此文檔以 ~/halo 為例。
mkdir ~/halo && cd ~/halo
2、創(chuàng)建 docker-compose.yaml
此文檔提供兩種場景的 Docker Compose 配置文件,請根據(jù)你的需要選擇一種。
創(chuàng)建 Halo + PostgreSQL 的實例:
version: "3"
services:
halo:
image: halohub/halo:2.9
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./:/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:postgresql://halodb/halo
- --spring.r2dbc.username=halo
# PostgreSQL 的密碼,請保證與下方 POSTGRES_PASSWORD 的變量值一致。
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
# 外部訪問地址,請根據(jù)實際需要修改
- --halo.external-url=http://localhost:8090/
halodb:
image: postgres:latest
container_name: halodb
restart: on-failure:3
networks:
halo_network:
volumes:
- ./db:/var/lib/postgresql/data
ports:
- "5432:5432"
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:
創(chuàng)建 Halo + MySQL 的實例:
version: "3"
services:
halo:
image: halohub/halo:2.9
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./:/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=o#DwN&JSa56
- --spring.sql.init.platform=mysql
# 外部訪問地址,請根據(jù)實際需要修改
- --halo.external-url=http://localhost:8090/
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=o#DwN&JSa56
- MYSQL_DATABASE=halo
networks:
halo_network:
僅創(chuàng)建 Halo 實例(使用默認的 H2 數(shù)據(jù)庫,不推薦用于生產(chǎn)環(huán)境,建議體驗和測試的時候使用):
version: "3"
services:
halo:
image: halohub/halo:2.9
container_name: halo
restart: on-failure:3
volumes:
- ./:/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:
# 外部訪問地址,請根據(jù)實際需要修改
- --halo.external-url=http://localhost:8090/
僅創(chuàng)建 Halo 實例(使用已有外部數(shù)據(jù)庫,MySQL 為例):
version: "3"
services:
halo:
image: halohub/halo:2.9
container_name: halo
restart: on-failure:3
network_mode: "host"
volumes:
- ./:/root/.halo2
command:
# 修改為自己已有的 MySQL 配置
- --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/halo
- --spring.r2dbc.username=root
- --spring.r2dbc.password=
- --spring.sql.init.platform=mysql
# 外部訪問地址,請根據(jù)實際需要修改
- --halo.external-url=http://localhost:8090/
# 端口號 默認8090
- --server.port=8090
參數(shù)詳解:
參數(shù)名 | 描述 |
---|---|
spring.r2dbc.url |
數(shù)據(jù)庫連接地址,詳細可查閱下方的 數(shù)據(jù)庫配置
|
spring.r2dbc.username |
數(shù)據(jù)庫用戶名 |
spring.r2dbc.password |
數(shù)據(jù)庫密碼 |
spring.sql.init.platform |
數(shù)據(jù)庫平臺名稱,支持 postgresql 、mysql 、h2
|
halo.external-url |
外部訪問鏈接,如果需要在公網(wǎng)訪問,需要配置為實際訪問地址 |
halo.cache.page.disabled |
是否禁用頁面緩存,默認為禁用,如需頁面緩存可以手動添加此配置,并設置為 false 。 開啟緩存之后,在登錄的情況下不會經(jīng)過緩存,且默認一個小時會清理掉不活躍的緩存,也可以在 Console 儀表盤的快捷訪問中手動清理緩存。 |
數(shù)據(jù)庫配置:
鏈接方式 | 鏈接地址格式 | spring.sql.init.platform |
---|---|---|
PostgreSQL | r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE} |
postgresql |
MySQL | r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE} |
mysql |
MariaDB | r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE} |
mysql |
H2 Database | r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE |
h2 |
3、啟動 Halo 服務
docker-compose up -d
實時查看日志:
docker-compose logs -f
4、用瀏覽器訪問 /console 即可進入 Halo 管理頁面,首次啟動會進入初始化頁面。
提示:
如果需要配置域名訪問,建議先配置好反向代理以及域名解析再進行初始化。如果通過 http://ip:端口號
的形式無法訪問,請到服務器廠商后臺將運行的端口號添加到安全組,如果服務器使用了 Linux 面板,請檢查此 Linux 面板是否有還有安全組配置,需要同樣將端口號添加到安全組。
更新容器組
1、停止運行中的容器組
cd ~/halo && docker-compose down
2、備份數(shù)據(jù)(重要)
需要注意的是,halo.archive 文件名不一定要根據(jù)此文檔命名,這里僅僅是個示例。
cp -r ~/halo ~/halo.archive
3、更新 Halo 服務
修改 docker-compose.yaml 中配置的鏡像版本。
services:
halo:
image: halohub/halo:2.9
container_name: halo
docker-compose pull halo
docker-compose up -d
反向代理
更多信息請訪問https://docs.halo.run/category/%E5%85%B6%E4%BB%96%E6%8C%87%E5%8D%97
Nginx
簡介
顧名思義,Nginx Proxy Manager 就是一個 Nginx 的代理管理器,它最大的特點是簡單方便。
即使是沒有 Nginx 基礎的小伙伴,也能輕松地用它來完成反向代理的操作,而且因為自帶面板,操作極其簡單,非常適合配合 docker 搭建的應用使用。
Nginx Proxy Manager 后臺還可以一鍵申請 SSL 證書,并且會自動續(xù)期,方便省心。
upstream halo {
server 127.0.0.1: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;
}
}
Caddy 2
www.yourdomain.com
encode gzip
reverse_proxy 127.0.0.1:8090
Traefik
Traefik 是一款開源的反向代理與負載均衡工具,它監(jiān)聽后端的變化并自動更新服務配置。
它與傳統(tǒng)反向代理最大的區(qū)別,是支持聲明式的動態(tài)路由規(guī)則,大大簡化網(wǎng)關規(guī)則的配置。而且還有諸多實用特性,例如:健康檢查、多實例負載均衡、能夠實現(xiàn) Let’s Encrypt 證書的自動簽發(fā)、驗證與續(xù)期等等。
更新 halo 容器組的配置
1、networks
中引入已存在的網(wǎng)絡 traefik
(此網(wǎng)絡需要 提前創(chuàng)建)
2、services.halo.networks
中添加網(wǎng)絡 traefik
3、修改外部地址為你的域名
4、聲明路由規(guī)則、開啟 TLS文章來源:http://www.zghlxwxcb.cn/news/detail-696896.html
version: "3.8"
networks:
traefik:
external: true
halo:
services:
halo:
image: halohub/halo:2.9
container_name: halo
restart: on-failure:3
volumes:
- ./:/root/.halo2
networks:
- traefik
- halo
command:
# 外部訪問地址,請根據(jù)實際需要修改
- --halo.external-url=https://yourdomain.com
labels:
traefik.enable: "true"
traefik.docker.network: traefik
traefik.http.routers.halo.rule: Host(`yourdomain.com`)
traefik.http.routers.halo.tls: "true"
traefik.http.routers.halo.tls.certresolver: myresolver
traefik.http.services.halo.loadbalancer.server.port: 8090
Any limitation starts from your own heart.文章來源地址http://www.zghlxwxcb.cn/news/detail-696896.html
到了這里,關于強大易用的開源 建站工具Halo的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!