从19年余大佬带我一起搞个人独立博客开始,到现在也有四年了。这4年花在博客上的时间其实并不多,但也让我相比一个对web和网络一窍不通的小白进步了很多。

在前几年我一直使用的是Hexo,这是一个很不错的静态博客框架。我在自己的windows笔记本上安装好hexo,每次想要发博客时就在本地编辑好md格式的博文,然后运行hexo generate命令将md按照主题模板生成静态文件,再运行hexo deploy命令将生成的静态文件通过git推送到服务器端。

使用Hexo最大的优点就是,它可以做到完全0成本,这使当时在大学拮据的我能够开始踏入独立博客的大门。起初我使用Hexo+Github Pages,后来发现Github Pages在国内访问速度太慢于是增加了Gitee Pages,做了国内外双解析。这些都是完全不用花钱的。再之后感觉图片和视频显示还是有点慢,恰逢阿里云和腾讯云都有学生优惠主机,所以没有折腾图床而是直接租了个云服务器。然后了解了nginx,将Hexo接到了自己的服务器,通过nginx代理。

Hexo除了可以0成本搭博客外,另一个优点是网上关于它的资料特别多,且有丰富的免费主题和插件。我先后为自己的博客增加了Mathjax插件、代码高亮插件、评论插件、RSS订阅插件、文章加密插件、豆瓣插件、文章日历插件等。并在Ayer主题的基础上进行了一些个性化的修改。

使用Hexo两年多后,它渐渐满足不了我的需求。比如我又装了一台台式机,我想随时随地写博文,而不是只能在自己的笔记本上;我想更方便的管理评论;我想更自由的设定文章加密等级......在此期间,我先后帮同学用.NET(C#)做了一个电商网站的demo,还参与了一个Vue+flask的平台网站开发,对网站什么好实现什么不好实现心里也有数了。因此开始琢磨把博客换成一个带后台的动态页面。

然后我遇到了Typecho框架,一番了解之后发现它完美符合我的需求,于是把博客搬了过来,在此做一下备忘:

1. 安装Typecho

使用docker-compose可以方便的安装和部署typecho1,我的版本是 Docker 20.10.22 + docker-compose 2.15.1。

按如下结构建立文件夹:

├── mysql
│      └── conf.d                  // mysql配置文件目录
│      └── data                    // mysql数据目录
├── nginx
│      └── conf.d                  // nginx配置目录
│           └── default.conf       
│      └── ssl                     // ssl证书目录
│      └── logs                    // nginx日志文件目录
│      └── nginx.conf              // nginx配置
├── php-fpm
│      └── Dockerfile              // php构建文件
│      └── typecho                 // typecho路径
│             └── blog                 // typecho站点,请解压typecho程序到此文件夹
├── docker-compose.yml

Dockerfile文件如下:

FROM php:8.1.13-fpm-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
    && apk update \
    && docker-php-ext-install pdo pdo_mysql

docker-compose.yaml文件如下:

version: "2"
networks:
  default:
    external: false
    name: app-tier
services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: your_passwd
    ports:
      - 3306:3306
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/logs:/var/log/mysql
      - ./mysql/conf.d:/etc/mysql/conf.d
      - ./mysql/init:/docker-entrypoint-initdb.d/
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    networks:
      - default
  php-fpm:
    build: ./php-fpm
    container_name: php-fpm
    restart: always
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./php-fpm/typecho/blog:/var/www/blog
    networks:
      - default
    depends_on:
      - mysql
  nginx:
    image: nginx:1.23.3-alpine
    container_name: nginx
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/logs:/var/log/nginx
      - ./nginx/ssl:/etc/nginx/ssl
      - ./php-fpm/typecho/blog:/var/www/blog
      - /home/www:/home/www
    networks:
      - default
    depends_on:
      - php-fpm
    environment:
      TZ: Asia/Shanghai

nginx根据自己的域名配置 nginx.conf 和 default.conf。这里贴出一个配置文件供参考,欢迎大家批评指正:
nginx.conf:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen 443 ssl;
        server_name www.kppkkp.top kppkkp.top;
        ssl on;
        ssl_certificate /etc/nginx/ssl/kppkkp.top_bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/kppkkp.top.key;

        ssl_session_timeout 5m;
        ssl_protocols TLSv1.2 TLSv1.3;
        index index.php index.html index.htm default.php default.htm default.html;
        root /var/www/blog;
        # wei static
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php$1 last;
        }

        #PHP
        location ~ [^/]\.php(/|$) {
            fastcgi_pass php-fpm:9000;
            fastcgi_index index.php;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED /var/www/blog$fastcgi_path_info;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
            fastcgi_param SCRIPT_FILENAME /var/www/blog$fastcgi_script_name;
            include fastcgi_params;
        }

        # forbiden files and dirs
        location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) {
            return 404;
        }
    }    
}

default.conf:

server {
    listen 80;
    server_name www.kppkkp.top kppkkp.top;

    rewrite ^(.*) https://$server_name$1 permanent;
}

然后在docker-compose.yml文件所在目录执行docker-compose up -d,然后访问你的域名,就可以进入到Typecho的安装页面了,按照下图填写即可安装完成。

install

2. 安装插件

  • 代码高亮推荐插件:CodeHighlighter2
  • 数学公式 Mathjax 解析推荐插件:MarkdownParse3
  • 评论邮件提醒:CommentNotifier4
  • 添加sitemap:八云酱sitemap5

3. 外观修改

  • 模板挑选:typecho模板6
  • 添加打赏:在Typecho文章底部添加打赏功能的实现-WuSiqi7
  • 增加备案号,标签云,为手机端增加侧边栏等
  • 侧边栏增加文章目录和相关文章推荐

标签: web

已有 2 条评论

  1. 1

    没有default.conf和nginx.conf的样板没发弄呀,能麻烦贴出来吗?

添加新评论