编辑
2025-01-04
Docker
00
请注意,本文编写于 88 天前,最后修改于 36 天前,其中某些信息可能已经过时。

目录

拉取官方代码
部署流程
配置 PostgreSQL 数据库
配置 Typecho
配置 Nginx Proxy Manager

本文主要内容

本文介绍了如何使用 Docker 部署 Typecho,特别是解决官方 Docker 镜像导致部分主题不可使用的问题,如 Cuckoo 主题。

拉取官方代码

  1. 克隆仓库并进入目录:

    bash
    git clone https://github.com/typecho/Dockerfile && cd Dockerfile
  2. 修改 Dockerfile 和初始化脚本:

    • 打开 Dockerfile.base 并将最后几行改为:

      yaml
      VOLUME /typoche WORKDIR /typoche
    • 修改 scripts/init.sh 文件,替换所有 /app 关键字为 typecho

  3. 修改构建脚本:

    • 编辑 build.sh,设置 Docker Hub 用户名:
      bash
      dockerhub_username=${dockerhub_username:-your_username}
  4. 执行构建命令:

    bash
    ./build.sh -v 1.2.1 -p 8.0 -o alpine fpm
    • v: Typecho 版本,参考官方 Release Tag
    • p: PHP 版本
    • o: 镜像平台,这里使用 alpine
    • fpm: 使用 fpm,如需 apache 版本,改为 php

部署流程

配置 PostgreSQL 数据库

  1. 创建并编辑 docker-compose.yaml

    bash
    cd .. && mkdir pgsql && cd pgsql && nano docker-compose.yaml

    添加以下内容:

    yaml
    services: db: image: postgres:17-alpine restart: unless-stopped networks: - network environment: POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ${DB_NAME} volumes: - ./data:/var/lib/postgresql/data - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"] interval: 5s timeout: 5s retries: 5 networks: network: driver: bridge
  2. 创建环境变量文件 .env

    bash
    nano .env

    添加如下配置:

    env
    DB_USER=xxxx DB_PASSWORD='xxxxxx' DB_NAME=typecho-blog
  3. 启动数据库服务:

    bash
    docker compose up -d

 

配置 Typecho

  1. 设置 Typecho 服务:

    bash
    cd .. && mkdir typecho && cd typecho && nano docker-compose.yaml

    配置如下内容:

    yaml
    services: typecho: image: your_dockerhub_username/typecho:1.2.1-php8.0-fpm-alpine restart: unless-stopped networks: - pgsql_network ports: - 65021:9000 environment: TYPECHO_SITE_URL: https://blog.useforall.com TYPECHO_DB_ADAPTER: Pdo_Pgsql TYPECHO_DB_HOST: db TYPECHO_DB_PORT: 5432 TYPECHO_DB_USER: ${DB_USER} TYPECHO_DB_PASSWORD: ${DB_PASSWORD} TYPECHO_DB_DATABASE: ${DB_NAME} TYPECHO_USER_NAME: ${ADMIN_USER} TYPECHO_USER_PASSWORD: ${ADMIN_PASSWORD} TYPECHO_USER_MAIL: ${ADMIN_MAIL} TYPECHO_INSTALL: 1 TIMEZONE: Asia/Shanghai MEMORY_LIMIT: 200M volumes: - ./typecho:/typecho networks: pgsql_network: external: true
  2. 创建 .env 文件以设定环境变量:

    bash
    nano .env

    添加以下信息:

    env
    DB_USER=xxxx DB_PASSWORD='xxxx' DB_NAME=typecho-blog ADMIN_USER=lim ADMIN_PASSWORD='xxxx' ADMIN_MAIL=blog@awebapp.useforall.com

    注意

    DB_* 配置项必须与 PostgreSQL 数据库中的一致,否则无法连接数据库。

  3. 启动 Typecho 服务:

    bash
    docker compose up -d

 

配置 Nginx Proxy Manager

  1. 设置 Nginx 代理服务:

    bash
    cd .. && mkdir npm && nano docker-compose.yaml

    添加如下内容:

    yaml
    services: app: network_mode: bridge image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - 80:80 - 65020:81 - 443:443 volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt - ../typecho/typecho:/typecho:ro
  2. 启动 Nginx Proxy Manager:

    bash
    docker compose up -d
  3. 配置 Nginx 使用 SSL 证书:

    image.png clipboard-2025-01-04.png

    Nginx 配置:

    yaml
    root /typecho; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php(.*)$ { fastcgi_pass 172.17.0.1:65021; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }

本文作者:Lim

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!