使用Docker搭建Chirpy部落格
成功版
docker pull n1ce2cv/chirpyblog
docker run -dit --name blogok -p 4100:4000 -v .:/srv/jekyll --workdir /srv/jekyll chirpyblog:v1.0 bundle exec jekyll serve --host 0.0.0.0 --port 4000
失敗版1(待解決)
方案:基於 debian:bullseye
,構建一個新的映象,用於部署。
修改基礎映象 debian:bullseye
:
# 更新源
cat > /etc/apt/sources.list << EOF
deb http://mirrors.ustc.edu.cn/debian bullseye main contrib non-free
deb http://mirrors.ustc.edu.cn/debian bullseye-updates main contrib non-free
deb http://mirrors.ustc.edu.cn/debian bullseye-backports main contrib non-free
deb-src http://mirrors.ustc.edu.cn/debian bullseye-backports main contrib non-free
EOF
# 更新系統
sudo apt update
sudo apt upgrade -y
# 安裝構建 Ruby 所需的依賴包
sudo apt install -y build-essential libssl-dev libreadline-dev zlib1g-dev
# 使用 rbenv 來管理 Ruby 版本。首先,安裝 rbenv 和 ruby-build
# 安裝 git
sudo apt install -y git
# 克隆 rbenv 倉庫
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
# 設定環境變數
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
# 克隆 ruby-build 倉庫
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
# 安裝完成後,rbenv 就可以使用 curl 或 wget 來下載所需的依賴包
sudo apt install -y curl wget
# 安裝 OpenSSL 和相關依賴
sudo apt install -y libssl-dev zlib1g-dev build-essential libreadline-dev
sudo apt install -y libffi-dev libyaml-dev
rbenv install 3.3.5
# 設定全域性使用 Ruby 3.3.5
rbenv global 3.3.5
# 確認 Ruby 安裝成功並檢查版本
ruby -v
# Ruby 安裝完成後,Gem 會自動安裝。然後可以安裝 Bundler
gem install bundler -v 2.3.25
# 使用 Bundler 安裝 Jekyll:
gem install jekyll -v 4.3.4
# 驗證安裝
ruby -v # 應該顯示 3.3.5
gem -v # 應該顯示 3.5.16
bundler -v # 應該顯示 2.5.16
git --version # 應該顯示 2.30.2
jekyll -v # 應該顯示 4.3.4
製作映象 debianchirpy:latest
啟動容器
docker run -dit --name blogtest -p 4200:4000 -v .:/srv/jekyll --workdir /srv/jekyll debianchirpy:latest /bin/bash
進入容器內 /srv/jekyll
更新包
bundle install
然後啟動部落格,啟動失敗
bundle exec jekyll serve --host 0.0.0.0 --port 4000
失敗版2(待解決)
方案:基於 debian:bullseye
,構建一個新的映象,用於部署。
構建映象
Dockfile 檔案(確保在部落格的根目錄下):
FROM jekyll/jekyll:latest
# 將當前目錄中的檔案複製到容器中的 /srv/jekyll
COPY . /srv/jekyll
# 設定工作目錄
WORKDIR /srv/jekyll
# 安裝依賴並構建站點
RUN bundle install
# 啟動服務
CMD ["jekyll", "serve", "--host", "0.0.0.0", "--port", "4000", "--watch"]
docker-compose.yml 檔案(確保在部落格的根目錄下):
services:
chirpy:
build:
context: .
dockerfile: Dockerfile
image: chirpyblog # 設定映象名稱
ports:
- "8888:4000" # 將容器的 4000 埠對映到宿主機的 8888 埠
volumes:
- .:/srv/jekyll # 將本地目錄掛載到容器內,以便實時更新
environment:
- JEKYLL_ENV=production # 設定環境變數
然後在部落格的根目錄下執行構建命令 docker compose build
:
root@spring:~/GithubRepo/sprinining.github.io# docker compose build
[+] Building 685.0s (10/10) FINISHED docker:default
=> [chirpy internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 343B 0.0s
=> [chirpy internal] load metadata for docker.io/jekyll/jekyll:latest 0.0s
=> [chirpy internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [chirpy internal] load build context 0.1s
=> => transferring context: 65.25kB 0.0s
=> CACHED [chirpy 1/4] FROM docker.io/jekyll/jekyll:latest 0.0s
=> [chirpy 2/4] COPY . /srv/jekyll 0.4s
=> [chirpy 3/4] WORKDIR /srv/jekyll 0.1s
=> [chirpy 4/4] RUN bundle install 682.2s
=> [chirpy] exporting to image 2.1s
=> => exporting layers 2.0s
=> => writing image sha256:288e34cbff59701f4d6e95b404d71b2a190ab875f958c5c0a1b8a353d97a1fab 0.0s
=> => naming to docker.io/library/chirpyblog 0.0s
=> [chirpy] resolving provenance for metadata file 0.0s
執行容器
- 手動執行(推薦)
docker run -dit --name test -v .:/srv/jekyll -p 8888:4000 chirpyblog:latest /bin/bash
- 透過 docker-compose.yml 執行
docker compose up -d
啟動部落格
進入容器的終端後,在容器內執行下面的命令,會生成 _site
目錄,其中包含網站的靜態檔案:
jekyll serve --host 0.0.0.0 --port 4000 --watch
常見報錯
報錯 1:fatal: detected dubious ownership in repository at '/srv/jekyll' To add an exception for this directory, call: git config --global --add safe.directory /srv/jekyll
進入容器內部修改檔案許可權:
chmod -R 777 /srv/jekyll
報錯 2:Conversion error: Jekyll::Converters::Scss encountered an error while converting 'assets/css/jekyll-theme-chirpy.scss':
匯入缺失的檔案 assets/css/jekyll-theme-chirpy.scss
,放到主機的這個位置就行,會同步到容器內,因為設定了目錄掛載。
報錯 3(未解決):fatal: detected dubious ownership in repository at '/srv/jekyll'
容器內執行(git最好大於 2.35 版本):
git config --global --add safe.directory /srv/jekyll
無法把 git 升級到 2.35 版本,軟體源沒有這個版本。