使用Docker搭建Chirpy博客

news/2024/10/25 2:05:48

使用Docker搭建Chirpy博客

成功版

docker pull n1ce2cv/chirpyblogdocker 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 版本,软件源没有这个版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/75709.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu22.04桌面版开启root用户登陆并开启root用户远程ssh连接

最近在使用Ubuntu22.04时需要用到root用户登录桌面,于是配置了下系统,也在网上查找了类似的文章,发现几篇文章都操作都存在一定的问题,所以在这里写了一份较为完整的,这份文档是清澈过可以正常使用运行的,具体步骤如下: 修改root用户登录桌面权限 一、设置root用户密码…

Arm64内存模型、内存类型、性能与DMA

一、背景 写下本文的原因来自一次 bug 排查,平台为某个 Arm64 处理器。 问题简单来说就是,就是申请一块 dma-buf 并映射到用户空间,对 buffer 使用memcpy()时发现一些异常性能问题:从 dma-buf 向通过malloc()申请的普通堆内存拷贝速度,远慢于从普通堆内存向 dma-buf 拷贝的…

[rCore学习笔记 030] 虚拟地址与地址空间

时隔很久,终于忙里偷闲可以搞一搞rCore,上帝啊,保佑我日更吧,我真的很想学会. 导读部分 首先还是要看官方文档. 我决定看一遍然后自己表述一遍(智将). 这里反复提到MMU,就是因为之前学MCU的时候有一个疑问,就是为什么MCU上不选择跑一个Linux,当时找到的答案是因为没有MMU. MMU的…

11. 使用MySQL之使用数据处理函数

1. 函数 与其他大多数计算机语言一样,SQL支持利用函数来处理数据。 函数一般是在数据上执行的,它给数据的转换和处理提供了方便。 在前一章中用来去掉串尾空格的RTrim()就是一个函数的例子。 补充: 函数没有SQL的可移植性强 能运行在多个系统上的代码称为可移植的(portable…

【CodeForces训练记录】Codeforces Round 981 (Div. 3)

https://codeforces.com/contest/2033 训练情况 22队长率先开出E题,但是结局可能还是掉分了 TAT赛后反思 这场太板了,D题有点反常(存疑?) A题 我们直接模拟位置的变化就行,先手 \(-2 \times i - 1\) 后手 \(+ 2 \times i - 1\),用一个while找到 \(>n\) 的地方来结束循…

东山Pi柒号-4-STM32MP157 TF-A移植

STM32MP157 TF-A 移植 在了解了 STM32MP 系列芯片的启动流程后,我们将开始进行东山 Pi 柒号的 TF-A 移植。 准备工作 首先,我们需要下载 STM32MP1 系列的 STM32MPU_Developer_Package,该包中包含编译器 SDK 和官方源码:STM32MP1 OpenSTLinux 开发套件 https://www.st.com.c…

7-1将数组中的数逆序存放

24级一维数组 题目不难,就是格式啥的要看仔细楼#include<stdio.h> int main (){int a[11] = {0};int num;int input;scanf("%d",&num);for(int i=num-1;i>=0;i--){//逆序存放!!!scanf("%d",&input);a[i] = input;}for(int i=0;i<n…