Docker 部署
使用 Docker 部署 Mizuki 博客可以实现环境隔离、快速部署和轻松扩展。
- 已安装 Docker(推荐使用最新稳定版)
- 已安装 pnpm(Mizuki 使用的包管理器)
安装 Docker
Section titled “安装 Docker”在 Ubuntu/Debian 系统上安装 Docker:
sudo apt updatesudo apt install docker.io -y安装完成后,确保 Docker 服务已启动:
sudo systemctl start dockersudo systemctl enable docker准备项目文件
Section titled “准备项目文件”将 Mizuki 项目克隆到本地:
git clone https://github.com/matsuzaka-yuki/Mizuki.gitcd Mizuki创建 Docker 配置文件
Section titled “创建 Docker 配置文件”1. 创建 .dockerignore 文件
Section titled “1. 创建 .dockerignore 文件”在项目根目录创建 .dockerignore 文件:
.gitnode_modulesdist.gitignoreDockerfile.dockerignore.vscode.githubdocsscripts.astrofrontmatter.jsonpagefind.ymlvercel.json2. 创建 Dockerfile
Section titled “2. 创建 Dockerfile”在项目根目录创建 Dockerfile 文件:
# 使用 Node.js 官方镜像作为基础镜像FROM node:20-alpine AS builder
# 设置工作目录WORKDIR /app
# 复制 package.json 和 pnpm-lock.yamlCOPY package.json pnpm-lock.yaml ./
# 安装 pnpmRUN npm install -g pnpm
# 安装依赖RUN pnpm install
# 复制项目文件COPY . .
# 构建项目RUN pnpm run build || pnpm exec astro build && pnpm exec pagefind --site dist
# 使用 nginx 作为运行时镜像FROM nginx:alpine
# 复制构建结果到 nginx 的 html 目录COPY --from=builder /app/dist /usr/share/nginx/html
# 设置文件权限RUN chmod -R 755 /usr/share/nginx/html/RUN chown -R nginx:nginx /usr/share/nginx/html/
# 复制自定义 nginx 配置COPY nginx.conf /etc/nginx/conf.d/default.conf
# 暴露端口 80EXPOSE 80
# 启动 nginxCMD ["nginx", "-g", "daemon off;"]3. 创建 nginx.conf
Section titled “3. 创建 nginx.conf”在项目根目录创建 nginx.conf 文件:
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html;
# 支持前端路由 location / { try_files $uri $uri/ /index.html; }
# 静态资源缓存 location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; }}构建 Docker 镜像
Section titled “构建 Docker 镜像”完成上述配置后,使用以下命令构建 Docker 镜像:
docker build -t mizuki-blog .使用以下命令运行容器:
docker run -d --name mizuki-blog -p 5090:80 mizuki-blog容器启动成功后,可以通过以下地址访问博客:
- 本地访问:
http://localhost:5090 - 远程访问:
http://服务器IP地址:5090
Docker Compose
Section titled “Docker Compose”创建 docker-compose.yml 文件来简化部署:
version: '3'
services: mizuki-blog: build: . container_name: mizuki-blog ports: - "5090:80" restart: unless-stopped environment: - NODE_ENV=production使用 Docker Compose 启动:
docker compose up -d自动更新脚本
Section titled “自动更新脚本”#!/bin/bash
# 构建 Docker 镜像echo "正在构建 Docker 镜像..."docker build -t mizuki-blog .
# 检查是否有正在运行的容器并停止echo "检查是否有正在运行的容器..."container_id=$(docker ps -q --filter "name=mizuki-blog")
if [ -n "$container_id" ]; then echo "停止正在运行的容器: $container_id" docker stop $container_id docker rm $container_idfi
# 运行新容器echo "启动新容器..."docker run -d -p 5090:80 --name mizuki-blog mizuki-blog如果端口 5090 已被占用,可以修改端口映射:
docker run -d --name mizuki-blog -p 8080:80 mizuki-blog如果构建失败,可能是由于:
- 网络问题 - 检查网络连接
- 依赖安装失败 - 尝试更新 Dockerfile 中的 Node.js 版本
- 权限问题 - 确保当前用户有 Docker 权限
容器无法访问
Section titled “容器无法访问”- 检查容器是否正在运行:
docker ps - 检查端口映射是否正确
- 查看容器日志:
docker logs mizuki-blog