标签 Web 下的文章

从搭建Blog开始

近期抽空注册了一个免费的VPS,本着不浪费的原则,考虑顺手搭建个Blog,虽然很老土,但还是有不少收获,至少可以解决几点关键需求:

  • 个人技术存档
  • 工具类后台需要
  • 练练手,动动脑

技术方案选型

考虑几点关键需求:

  • 支持HTTPS,证书注册及维护简单
  • 有管理后台,支持Markdown,方便编写文档
  • 小小简单,快速,对VPS要求低
  • 整个站点维护简单,移机轻松

综合上述需求,对应的技术方案:

  • Caddy 支持免费HTTPS证书自动注册及续期
  • typecho 小小简单,支持Markdown
  • Dockers+Docker-compose 实现快速部署,并解决后期的维护问题
    所以综合建立3个docker,分别是:

    Caddy2 + php8 + mysql8

VPS及域名

  • VPS
    VPS有太多的选择,个人注册了Oracle Cloud免费版,可以参考这篇文章,获取高性价比VPS:高性价比VPS整理
  • 域名
    域名注册推荐: Namesilo 或者 Freenom

Docker-compose

Docker-compose.yml:

version: '3'

services:

    caddy:
        image: caddy
        ports:
            - "80:80"
            - "443:443"
            - "443:443/udp"
        volumes:
            - /path_to_your/Caddyfile:/etc/caddy/Caddyfile
            - /path_to_your/caddy_data:/data
            - /path_to_your/caddy_config:/config
#Caddy requires write access to two locations: a data directory, and a configuration directory.
            - /path_to_your/site:/srv
        restart: unless-stopped
        networks:
            - frontend
    db:
        image: mysql
        volumes:
            - /path_to_your/database:/var/lib/mysql
            - /path_to_your/mysql_logs:/var/log/mysql
            - /path_to_your/mysql_conf:/etc/mysql/conf.d
        restart: always
        expose:
            - "3306"
        environment:
            - MYSQL_ROOT_PASSWORD=your_root_password
            - MYSQL_DATABASE=typecho
            - MYSQL_USER=typecho
            - MYSQL_PASSWORD=your_user_password
            - TZ=Asia/Shanghai
        networks:
            - frontend
    php:
      #image: php:fpm
        build: .
        volumes:
            - /path_to_your/site:/var/www/html
        restart: always
        expose:
            - "9000"
        environment:
          - TZ=Asia/Shanghai
        depends_on:
            - db
            - caddy
        networks:
            - frontend
networks:
    frontend:

Caddy配置

Caddyfile:

v365.life www.v365.life {
    encode gzip
    tls [email protected]
    php_fastcgi php:9000 {
        root /var/www/html
    }
    file_server
    log {
      output file /data/log/web.log
    }
}

PHP docker

dockerfile:

FROM php:fpm
RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql

typecho

下载最新的typecho zip包,并解压到目录:/path_to_your/site下面

运行

执行如下命令,启动服务:

sudo docker-compose up -d

启动后根据typecho安装页面提示进行配置,在数据库界面选择pdo Mysql数据接口,需要根据配置填写:

  • 用户名: 根据配置MYSQL_USER=typecho
  • 密码: 根据配置MYSQL_PASSWORD=your_user_password
  • 数据库路径: db (默认的localhost需要修改)
  • 数据库名: typecho

注意点

  • Caddy V2与V1配置文件不兼容,有一些细节关键字段有差异,可以参考:Caddy2文档CaddyV2配置文件解析
  • PHP、Caddy及Mysql都在不同的Dockers内,不同于单机部署,需要通过bridge互相访问,即通过docker名+端口号形式,在配置文件时需要特别注意
  • Mysql /var/lib/mysql映射的数据库所在目录,第一次需确保里面为空,这样才能根据ENV变量自动创建MYSQL_DATABASE