typecho 部署

元气满满
2024-12-12 / 4 评论 / 1 阅读 / 正在检测是否收录...

docker-compose 配置

创建目录

  • certificates 证书存放目录
  • mysql 数据库数据存放目录
  • typecho 博客主题插件存放目录

    mkdir -p certificates mysql typecho

创建文件

  • config.inc.php php配置文件
  • mysql.env mysql配置文件
  • nginx.conf nginx配置文件

    for i in config.inc.php mysql.env nginx.conf
    do
    touch $i
    done

添加权限

  • 执行命令

    chmod -R 755 ./

文件内容

  • config.inc.php

    <?php
    
    //start debug
    //define('__TYPECHO_DEBUG__', true);
    
    // site root path
    define('__TYPECHO_ROOT_DIR__', dirname(__FILE__));
    /** 开启HTTPS */
    define('__TYPECHO_SECURE__',true);
    
    // plugin directory (relative path)
    define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins');
    
    // theme directory (relative path)
    define('__TYPECHO_THEME_DIR__', '/usr/themes');
    
    // admin directory (relative path)
    define('__TYPECHO_ADMIN_DIR__', '/admin/');
    
    // register autoload
    require_once __TYPECHO_ROOT_DIR__ . '/var/Typecho/Common.php';
    // init
    \Typecho\Common::init();
    
    // config db
    $db = new \Typecho\Db('Pdo_Mysql', 'typecho_');
    // 由于我们的typecho后续也是允许在docker里,所以根据之前的网络配置我们可以写db来连接同在docker部署的mysql,注意端口时docker内的端口,而不是映射到docker外的
    $db->addServer(array (
    'host' => 'db',
    'port' => 3306,
    'user' => 'root',
    'password' => '123456',
    'charset' => 'utf8mb4',
    'database' => 'typecho',
    'engine' => 'InnoDB',
    ), \Typecho\Db::READ | \Typecho\Db::WRITE);
    \Typecho\Db::set($db);
    
    /** &#x5F00;&#x542F;HTTPS */
    define(&apos;__TYPECHO_SECURE__&apos;true);
    define('__TYPECHO_SECURE__',true);
  • mysql.env

    # MySQL的root用户默认密码,这里自行更改
    MYSQL_ROOT_PASSWORD=123456
    # MySQL镜像创建时自动创建的数据库名称
    MYSQL_DATABASE=typecho
    # MySQL镜像创建时自动创建的用户名
    MYSQL_USER=typecho
    # MySQL镜像创建时自动创建的用户密码
    MYSQL_PASSWORD=123456
  • nginx.conf

    ############################## 公共资源 ##############################
    # SSL优化参数 共享SSL参数(减少重复配置)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
    server {
      listen 443 ssl;
      server_name demo.cloud.com;
    
      ssl_certificate /etc/nginx/ssl/fullchain.pem; # 将这路径替换为你的证书路径
      ssl_certificate_key /etc/nginx/ssl/privkey.pem; # 将这路径替换为你的证书私钥路径
    
      # 关闭直接IP访问
      if ($host != "demo.cloud.com") {
          return 444;
      }
    
      # 全站反向代理配置
      location / {
          proxy_pass http://10.7.0.15:8003;
      }
    
      # 强制HTTPS跳转
      error_page 497 https://$host$request_uri;
    }
    
    server {
      listen 8003;
      server_name demo.cloud.com;
      return 301 https://$server_name$request_uri;
    }
    
    ############################## 公共资源 ##############################
    # 公共代理参数文件 proxy_params
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    # 可选:WebSocket支持
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  • docker-compose.yml

    services:
    typecho:
      #image: joyqi/typecho:1.2.0-php7.4-apache
      image: joyqi/typecho:1.3.0-php7.4-apache
      container_name: typecho-typecho
      restart: always
      ports:
        - 8003:80
      volumes:
        - ./typecho:/app
      environment:
        - TYPECHO_SITE_URL=https://cloud.emal.cc
      networks:
        xy:
          ipv4_address: 172.19.0.10
      logging:
        driver: "json-file"
        options:
          max-size: "50m"
          max-file: "3"
    
    db:
      image: mysql:5.7.21
      container_name: typecho-mysql
      restart: always
      ports:
        - 13306:3306
      volumes:
        - ./mysql:/var/lib/mysql
      env_file:
        - mysql.env
      networks:
        xy:
          ipv4_address: 172.19.0.11
      logging:
        driver: "json-file"
        options:
          max-size: "50m"
          max-file: "3"
    
    #  nginx:
    #    image: nginx:latest
    #    restart: always
    #    ports:
    #      - 8002:80
    #      - 11443:443
    #    volumes:
    #      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    #      - ./certificates:/etc/nginx/ssl
    #    networks:
    #      xy:
    #        ipv4_address: 172.19.0.12
    #    depends_on:
    #      - typecho
    
    networks:
    xy:
      driver: bridge
      ipam:
        config:
          - subnet: 172.19.0.0/16

typecho文件设置

  • 编辑Typecho站点根目录下的文件config.inc.php加入下面一行配置,否则网站后台还是会调用HTTP资源。

    /* 开启HTTPS /
    define('__TYPECHO_SECURE__',true);

启动typecho

  • 执行命令

    docker-compose up -d

Typecho设置

  • 登录Typecho后台 -> 设置 -> 基本设置 -> 站点地址改成https的域名是必须的

或者直接下载博主写好的docker-compose

  • 下载后,修改docker-compose里面的域名,然后根据自己的域名生成证书,替换certificates里面的证书

    wget https://packages.emal.cc/package/typecho/blogc-20250527.tar.gz
    
    # 更换域名
    sed -i 's/demo.cloud.com/你的域名/g' docker-compose.yml
    sed -i 's/demo.cloud.com/你的域名/g' nginx.conf
    sed -i 's/10.7.0.15/你部署机器的IP/g' nginx.conf
    
    # 部署typecho
    docker-compose up -d

访问地址

https://域名/install.php

数据库地址:你本地IP:13306
数据库密码:部署目录文件 mysql.env
  • 原著:元气满满
  • 转载请添加原链接
0

评论 (4)

取消
  1. 头像
    qq
    Android · Google Chrome

    qqq

    回复
  2. 头像
    xfgppwqzch
    Windows 10 · Google Chrome

    瑕不掩瑜,稍加打磨必成佳作。

    回复
  3. 头像
    lrhirkqvsx
    Windows 10 · Google Chrome

    这篇文章提供了宝贵的经验和见解,对读者有很大的启发和帮助。

    回复
  4. 头像
    feeniblwet
    Windows 10 · Google Chrome

    选材新颖独特,通过细节描写赋予主题鲜活生命力。

    回复