动机
最近在搜索内网穿透的时候,搜索到 zerotier 的时候发现有人推广免费主机(免费是不可能的),随搭建了 Emlog Pro,不管是 Hexo,还是 EmlogPro,然而不够高大上,果断入手 Typecho 的 Handsome 主题。
准备
首先你得有一台服务器,如果后续需要发布到外网那需要一个外网 IP 和域名。我这边是在家里部署了一台笔记本电脑当作服务器,租了一台阿里云的 ECS 服务器用作备案和外网访问。阿里云 ECS 和家里的笔记本用 N2N 组成内网,当访问网站时搜先访问的是阿里云的 ECS,ECS 转发到家里服务器。
机器的系统不管是 Centos 系列 还说 Ubuntu 系列都可以,本质上 Centos 7 和 Ubuntu 可以装 Docker,而 Centos 8 自带 Podman,Podman 和 Docker 的用法类似,不同的是 Podman 没有开机自动启动容器,需要手动 start 一下。
部署
如果部署的 typecho 版本是从官网下载的 1.1 的那应该使用 php5,如果使用的是 php8 需要拉取 git 的最新代码。git 代码 Typecho 官网
创建数据目录
# 创建 typecho 目录
mkdir /data/typecho
cd /data/typecho
# 后续使用sock转发,端口太多不太方便管理
mkdir -p run/php-fpm
chmod o+w run/php-fpm
# 解压 typecho 代码 (这里使用的git的最新代码)
wget https://github.com/typecho/typecho/archive/refs/heads/master.zip
unzip master.zip && rm master.zip
mv typecho-master/* ./ && rm typecho-master
# 解压 typecho 代码 (这里使用的是官网发布的版本)
wget https://typecho.org/downloads/1.1-17.10.30-release.tar.gz
tar xavf 1.1-17.10.30-release.tar.gz && rm 1.1-17.10.30-release.tar.gz
mv build/* ./ && rm build
容器启动 Typecho
# 运行容器 根据下载的Typecho版本选择不太的php镜像版本
podman run --privileged --name typecho --hostname typecho -v /data/typecho:/data/typecho -w /data/typecho -d php:5-fpm
podman run --privileged --name typecho --hostname typecho -v /data/typecho:/data/typecho -w /data/typecho -d php:8-fpm
容器第一次运行配置参数
进入到容器内部
podman exec -it typecho bash
安装 php 扩展
# 必要扩展
docker-php-ext-install iconv pdo
apt update
apt-get install libcurl4-openssl-dev
docker-php-ext-install curl
apt install git automake libtool
git clone --depth=1 https://github.com/kkos/oniguruma && cd oniguruma
autoreconf -vfi
libtoolize --automake --copy --debug --force
./configure
automake --add-missing
make && make install
cd .. && rm -rf oniguruma
docker-php-ext-install mbstring
docker-php-ext-install -j$(nproc) shmop
# Handsome 主题依赖扩展
apt-get install zlib1g-dev libpng-dev libjpeg-dev
docker-php-ext-configure gd --with-jpeg
docker-php-ext-install -j$(nproc) gd
apt-get clean
# 安装 MySQL 数据库扩展
docker-php-ext-install pdo_mysql
# 安装 PostgreSQL 数据库扩展
docker-php-ext-install pdo_pgsql
修改配置文件,将端口转为 Socket
sed -i 's/listen = 127.0.0.1:9000/listen = \/data\/typecho\/run\/php-fpm\/www.sock/g' /usr/local/etc/php-fpm.d/www.conf
sed -i 's/listen = 9000/listen = \/data\/typecho\/run\/php-fpm\/www.sock/g' /usr/local/etc/php-fpm.d/zz-docker.conf
cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini
重新启动容器
podman restart typecho
配置 MySQL 用户和数据库
以 root 用户启动 MySQL 客户端
podman run --name mysql-cli \
--hostname mysql-cli \
-v /data/mysql/run/mysqld:/var/run/mysqld \
-it --rm mysql:latest \
mysql -u root -p
创建 typecho 用户,允许外网和本地连接数据库
create user 'typecho'@'%' IDENTIFIED WITH mysql_native_password by 'typecho';
create user 'typecho'@'localhost' IDENTIFIED WITH mysql_native_password by 'typecho';
创建 typecho 数据库
-- utf8mb4 才是MySQL真正的 utf8,否则emoji不能显示
CREATE DATABASE typecho DEFAULT CHARACTER SET utf8mb4;
授权
grant all privileges on typecho.* to 'typecho'@'%' with grant option;
grant all privileges on typecho.* to 'typecho'@'localhost' with grant option;
flush privileges;
配置 Nginx
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name typecho.wissy.com.cn;
# LOGO
location = /favicon.ico {
root /etc/nginx/logo;
}
#root /var/www/html;
root /data/typecho;
# Specify how to handle directories -- specifying `/index.php$request_uri`
# here as the fallback means that Nginx always exhibits the desired behaviour
# when a client requests a path that corresponds to a directory that exists
# on the server. In particular, if that directory contains an index.php file,
# that file is correctly served; if it doesn't, then the request is passed to
# the front-end controller. This consistent behaviour means that we don't need
# to specify custom rules for certain paths (e.g. images and other assets,
# `/updater`, `/ocm-provider`, `/ocs-provider`), and thus
# `try_files $uri $uri/ /index.php$request_uri`
# always provides the desired behaviour.
index index.php index.html /index.php$request_uri;
# Default Cache-Control policy
expires 1m;
# Root Path
location ~ \.php$ {
proxy_read_timeout 300;
root /data/typecho;
fastcgi_pass unix:/data/typecho/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ .*\.php(\/.*)*$ {
root /data/typecho;
#fastcgi_split_path_info ^(.+\.php)(/.*)$;
#设置监听端口
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/data/typecho/run/php-fpm/www.sock;
#设置nginx的默认首页文件,和上面二选一,可删除
fastcgi_index index.php;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?q=$1 last;
break;
}
#设置脚本文件请求路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param SCRIPT_NAME $real_script_name;
#fastcgi_param PATH_INFO $path_info;
#引入FastCGI配置文件
include fastcgi_params;
include fastcgi.conf;
#fastcgi_intercept_errors on;
}
}
安装
输入地址进行安装,这个期间会提示手动创建 config.inc.php
配置 Handsome 主题
安装主题和插件
cd /data/typecho/usr/themes
cp -r /home/wissy/handsome-v8/主题/handsome ./
cd /data/typecho/usr/plugins/
cp -r /home/wissy/handsome-v8/插件/Handsome ./
chmod o+w -R Handsome/cache/
cd /data/typecho/usr
mkdir uploads
chmod -R o+w ./*
后台 --> 外观 --> 启用 handsome 主题
后台 --> 插件 --> 启用 Handsome 插件
配置时间机
后台 --> 撰写 --> 创建页面
发布页面以后,其中 3 就是时光机编码(在本站是唯一的),如果需要微信工众号需要在 后台 --> 外观 --> 设置外观 --> 时光机配置 --> 时光机身份验证编码 设置和 handsome Auth 界面配置一样的。时光机需要从微信公众号发一条消息才能在界面添加动态。
同理,可以创建留言板和文章归档。
其他就需要大家自己探索了。
bye~ bye~
评论区