首页
/ Fontello项目Docker Compose部署指南

Fontello项目Docker Compose部署指南

2025-07-07 04:56:49作者:平淮齐Percy

概述

Fontello是一个流行的图标字体生成器,允许用户从多个图标库中选择图标并打包成自定义字体。本文将详细解析Fontello项目的Docker Compose部署方案,帮助开发者理解其容器化架构和部署流程。

核心服务架构

该Docker Compose文件定义了三个主要服务:

  1. Nginx反向代理:作为前端代理处理所有HTTP/HTTPS请求
  2. Let's Encrypt证书服务:自动管理SSL/TLS证书
  3. Fontello应用服务:运行实际的Fontello应用

详细配置解析

Nginx服务配置

nginx:
  image: nginxproxy/nginx-proxy:1.0
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
    - nginx-vhostd:/etc/nginx/vhost.d:ro
    - letsencrypt-certs:/etc/nginx/certs:ro
    - letsencrypt-challenges:/usr/share/nginx/html/.well-known
    - ./nginx/conf.d/client_max_body_size_10m.conf:/etc/nginx/conf.d/client_max_body_size_10m.conf:ro
    - ./nginx/conf.d/proxy_redirect_off.conf:/etc/nginx/conf.d/proxy_redirect_off.conf:ro
  ports:
    - '80:80'
    - '443:443'

关键点说明:

  • 使用nginxproxy/nginx-proxy镜像作为自动配置的反向代理
  • 挂载Docker套接字以实现动态配置发现
  • 通过共享卷与Let's Encrypt服务通信
  • 自定义配置文件设置客户端最大请求体大小和代理重定向行为
  • 暴露标准HTTP(80)和HTTPS(443)端口

Let's Encrypt服务配置

letsencrypt:
  image: nginxproxy/acme-companion:2.2
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock:ro
    - nginx-vhostd:/etc/nginx/vhost.d
    - letsencrypt-acme:/etc/acme.sh
    - letsencrypt-certs:/etc/nginx/certs
    - letsencrypt-challenges:/usr/share/nginx/html/.well-known
  depends_on:
    - nginx

关键点说明:

  • 使用nginxproxy/acme-companion镜像自动管理证书
  • 同样需要访问Docker套接字来监听服务变化
  • 与Nginx共享多个卷用于配置和证书存储
  • 明确依赖Nginx服务,确保启动顺序

Fontello应用服务配置

fontello:
  build:
    args:
      BRANCH: ${BRANCH:-master}
    context: ./fontello
  volumes:
    - /var/log/fontello:/app/log
  environment:
    - FONTELLO_PROTO=${PROTO:-https}
    - FONTELLO_HOST=${HOST:-fontello.com}
    - VIRTUAL_HOST=${HOST:-fontello.com}
    - VIRTUAL_PORT=80
    - LETSENCRYPT_HOST=${HOST:-fontello.com}

关键点说明:

  • 从本地./fontello目录构建镜像
  • 支持通过BRANCH参数指定构建分支(默认为master)
  • 挂载日志目录持久化存储
  • 通过环境变量配置应用协议、主机名等参数
  • 提供必要的虚拟主机和证书配置信息供代理使用

共享卷设计

volumes:
  nginx-vhostd: ~
  letsencrypt-acme: ~
  letsencrypt-certs: ~
  letsencrypt-challenges: ~

这些命名卷用于服务间共享关键数据:

  • nginx-vhostd:存储Nginx虚拟主机配置
  • letsencrypt-acme:存储ACME客户端数据
  • letsencrypt-certs:存储SSL证书
  • letsencrypt-challenges:存储HTTP验证挑战文件

环境变量配置

部署时可通过环境变量自定义:

  • HOST:设置服务域名(默认为fontello.com)
  • PROTO:设置协议类型(默认为https)
  • BRANCH:设置构建Fontello的分支(默认为master)

部署建议

  1. 准备工作

    • 确保已安装Docker和Docker Compose
    • 准备域名并正确配置DNS解析
  2. 部署步骤

    # 克隆项目代码
    git clone <项目仓库>
    cd <项目目录>
    
    # 设置环境变量(可选)
    export HOST=your.domain.com
    export PROTO=https
    
    # 启动服务
    docker-compose up -d
    
  3. 维护建议

    • 定期检查证书续期情况
    • 监控日志卷使用情况
    • 关注Nginx和Let's Encrypt镜像更新

安全考虑

  1. Docker套接字以只读模式挂载,限制权限
  2. 使用HTTPS作为默认协议,确保传输安全
  3. 证书自动续期机制保证服务连续性
  4. 日志持久化存储便于审计和故障排查

总结

该Docker Compose配置展示了Fontello项目的现代化部署方案,通过容器化技术实现了:

  • 自动化反向代理配置
  • 零停机证书管理
  • 弹性伸缩能力
  • 环境隔离
  • 简化部署流程

这种架构不仅适用于Fontello项目,也可作为类似Web应用的部署参考模板。