目 录CONTENT

文章目录

日常研究 | 使用容器搭建 Typecho

Wissy
2021-07-31 / 0 评论 / 0 点赞 / 60 阅读 / 0 字

动机

最近在搜索内网穿透的时候,搜索到 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 一下。

graph TD; A(User)-->B(ECS Nginx); B-->C(Home Nginx); C-->D(Typecho)

部署

如果部署的 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~

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区