我的博客-从Hexo到Typecho
从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的安装页面了,按照下图填写即可安装完成。
2. 安装插件
- 代码高亮推荐插件:CodeHighlighter2
- 数学公式 Mathjax 解析推荐插件:MarkdownParse3
- 评论邮件提醒:CommentNotifier4
- 添加sitemap:八云酱sitemap5
没有default.conf和nginx.conf的样板没发弄呀,能麻烦贴出来吗?
已添加,仅供参考