centos+docker+halo搭建個人博客
- 從零部署halo博客
- 準備作業
- 安裝寶塔面板
- 安裝Docker管理器
- 下載并修改halo組態檔
- ①直接使用本地資料庫
- ②利用容器間的關聯使用容器中的資料庫
- ==以下為注意事項!!!==
- 配置域名訪問、SSL,使用 Nginx 進行反向代理
從零部署halo博客
此教程是使用寶塔+docker+mysql搭建個人博客,使用H2可上halo官網教程查閱
準備作業
- 一臺云服務器
- 一個域名(國內服務器需要備案,備案要很久,最好提前)
- 域名實名,申請SSL證書
- 域名決議
安裝寶塔面板
安裝前注意系統必須為沒裝過其它環境如Apache/Nginx/php/MySQL的新系統,以下使用centos系統安裝寶塔面板
- 執行安裝命令
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
安裝成功后會給你面板地址和管理員賬號和密碼,注意要在服務器后臺安全組或是防火墻中打開8888埠
面板登錄進去后會讓你一鍵部署環境(LNMP或LAMP,推薦LNMP)
安裝方式編譯安裝比極速安裝更加穩定,但安裝時間需要1到2小時,極速安裝10多分鐘,時間充裕推薦編譯安裝
- halo官方要求mysql資料庫需要5.7+,8.0需要6RAM以上,推薦就5.7,php和phpmyadmin選最新,其他隨意
這里我進行編譯安裝時面板卡死了一次,任務串列是空的,服務器滿載,cpu使用率低,重登也是特別卡和慢,這時候就別等了,這里我重啟服務器后,問題解決,編譯安裝正常繼續運行
安裝Docker管理器
- 在寶塔面板的軟體商店中直接安裝即可
下載并修改halo組態檔
- 創建并進入作業目錄
mkdir ~/.halo && cd ~/.halo
- 下載示例組態檔到作業目錄
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
- 根據需要編輯組態檔,配置資料庫或者埠等
vim application.yaml
使用mysql本地資料庫的配置圖

- 默認是使用的H2資料庫
- 使用mysql資料庫則將H2配置打上注釋,將mysql配置注釋放開
- 修改username和password為mysql的賬號和密碼,密碼在寶塔資料庫界面可查看
- 若在容器中使用資料庫,則需要將127.0.0.1換成資料庫的容器名,埠為容器內部埠 例:將127.0.0.1:3306換成blog_mysql:3306
- 以下根據個人需求配置:
port為halo博客運行的埠
admin-path為后臺管理的根路徑
cache是設定快取資料的保存方式
compression設定是否開啟壓縮,用Nginx等反向代理服務器時通常會默認開啟
下面根據個人 選擇一種進行配置
①直接使用本地資料庫
- 進入msyql
mysql -u root -p
- 創建halodb資料庫
create database halodb character set utf8mb4 collate utf8mb4_bin;
注意這里官方要求字符集為utf8mb4,排序規則為utf8mb4_bin
- 拉取最新的 Halo 鏡像
docker pull halohub/halo
從 1.4.3 開始,Docker 鏡像已經轉移到 halohub 組織,不再是 ruibaby/halo
- 創建halo容器并使用本地資料庫
docker run -itd --net host --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=always halohub/halo
引數說明:
- -i, 即使沒有連接,也要保持標準輸入保持打開狀態,一般與 -t 連用
- -t, 分配一個偽tty,一般與 -i 連用
- -d,在后臺運行容器,并且列印容器id
- - -name,容器名
- - -net,指定容器的網路配置
- -net=bridge 這個是默認值,連接到默認的網橋,
- -net=host 容器使用本地主機的網路,它擁有完全的本地主機介面訪問權限
- -net=container:NAME_or_ID 讓 Docker 使用其他容器的網路,共享IP和PORT等網路資源,兩者行程可以直接通過 lo 環回介面通信
- -net=none 容器使用自己的網路,但是不進行網路配置,之后用戶可以自行配置- -p, 容器內部埠系結到指定的主機埠,主機埠:容器埠
- -v, 掛載目錄,這里是將主機的目錄~/.halo掛載到容器的目錄/root/.halo上
- - -restart=always,當docker重啟時,容器自動啟動
docker默認的網路模式是bridge,因此默認容器內無法訪問本地127.0.0.1
②利用容器間的關聯使用容器中的資料庫
- 拉取mysql5.7鏡像
docker pull mysql:5.7
- 創建并啟動mysql容器
docker run --name blog_mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=****** -d mysql:5.7
- - -name,容器名
- -e 設定環境變數,MYSQL_ROOT_PASSWORD為資料庫密碼,自行修改,用戶名默認root
- 這里因為我主機已有mysql,所以映射埠到3307,這個自行決定
- 進入容器
docker exec -it blog_mysql /bin/bash
- 進入mysql并創建halo必要資料庫halodb,注意字符集和排序規則
mysql -u root -p
create database halodb character set utf8mb4 collate utf8mb4_bin;
- 拉取最新的 Halo 鏡像
docker pull halohub/halo
- 創建halo容器并使其關聯資料庫容器
docker run -itd --name halo --link blog_mysql -p 8090:8090 -v ~/.halo:/root/.halo --restart=always halohub/halo
引數說明:
- -i, 即使沒有連接,也要保持標準輸入保持打開狀態,一般與 -t 連用
- -t, 分配一個偽tty,一般與 -i 連用
- -d,在后臺運行容器,并且列印容器id
- - -name,容器名
- - -link,指定容器間的關聯
- -p, 容器內部埠系結到指定的主機埠,主機埠:容器埠
- -v, 掛載目錄,這里是將主機的目錄~/.halo掛載到容器的目錄/root/.halo上
- - -restart=always,當docker重啟時,容器自動啟動
PS:如果要使用外部資料庫管理工具遠程管理mysql,則需要用戶開啟遠程登錄功能
Grant all privileges on *.* to 'root'@'%' identified by ‘password’with grant option;
flush privileges; 重繪權限
*. * 為 資料庫.表 ,root為用戶,%代表所有主機 ,password處填寫用戶密碼
以下為注意事項!!!
創建并啟動halo容器后,會有20s左右的初始化建表時間,初始化后在資料庫halodb當中能看見自動創建的表,若沒有表,請檢查問題
Halo作業目錄的絕對路徑為 ~/.halo,這個作業目錄是固定的,Halo容器運行后里面通常包含下列目錄或檔案:
db:存放 H2 Database 的物理檔案,如果您使用 MySQL 資料庫,那么不會存在這個目錄
templates/themes:里面包含用戶所下載的主題
static:相當于網站的根目錄
logs:運行日志目錄
application.yaml:組態檔
放行埠80 443 8090!!!
云服務器防火墻和寶塔的防火墻兩邊都要放行!!!
到這里我們就可以以http://ip:8090的方式訪問halo安裝程式了
可以先配置好域名訪問和SSL再進行安裝
配置域名訪問、SSL,使用 Nginx 進行反向代理
- 安裝 Nginx
之前安裝LNMP時已安裝 - 編輯組態檔
官方是下載模板再進行配置,這里使用全域
vim /www/server/nginx/conf/nginx.conf
在http的括號內加入以下代碼:
server {
listen 80;
server_name luoyunhao.com www.luoyunhao.com; #域名
rewrite ^(.*)$ https://$host$1 permanent;
client_max_body_size 1024m;
}
server {
listen 443 ssl;
server_name luoyunhao.com www.luoyunhao.com; #域名
ssl_certificate /usr/local/xxxxxx.pem; #證書地址
ssl_certificate_key /usr/local/xxxxxxx.key; #證書地址
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
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;
proxy_pass http://127.0.0.1:8090/; #halo進入埠
}
}
- 修改域名
- 用ftp將證書檔案放到云服務器中,配置好證書地址,第一個證書后綴不一定是pem
- rewrite ^(.*)$ https://$host$1 permanent;是強制跳轉http到https
- 修改后需要多載Nginx
在寶塔中重啟Nginx 或 nginx -s reload
到這里,就可以使用域名訪問網站了!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/259707.html
標籤:其他
上一篇:CUDA計算
下一篇:盤點關于程式員的那些經典案例
