记录一下在Nginx+Xray环境下配置Typecho的过程。

环境

Typecho要求在PHP环境下运行,我这里选择的是PHP8.3+sqlite3

首先直接运行

sudo apt install php php-common php-curl php-sqlite3 php-mbstring php-fpm

会出现报错Depends: xxx but it is not installable,在StackOverflow上查到可以通过添加数据源解决。
需要执行

sudo add-apt-repository ppa:ondrej/php
sudo apt update

在执行过程中又会出现add-apt-repository: command not found的报错,需要执行

sudo apt install software-properties-common
另外由于使用了Replicon的主题,其中需要php-xml的支持,因此需要安装php-xml扩展

因此需要执行的命令如下:

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php php-common php-curl php-sqlite3 php-mbstring php-fpm php-xml sqlite3

安装完成后可以通过php -vsqlite3 --version来检查安装是否完成。

Typecho

我这里是直接把安装包在/var/www/目录下解压,即把/var/www/typecho作为网站根目录,主题和插件都直接拖到相应的位置即可。这里需要注意一点主题和插件的权限设置,因为后续手动对主题进行一些更改。需要执行

chmod -R 777 /var/www/typecho/usr/themes/Replicon

Nginx配置

本来觉得这个配置直接按照之前部署服务那样配置就行,结果配置完发现一直无法连接,问题就出在服务端。
尝试了一圈解决方法,发现必须把网站根目录放在/var/www下面才可以。

证书和80端口的配置按照之前一些服务的配置就可以。443端口上Xray的回落也跟之前的配置保持一致。

与之前的配置不一样的地方在443回落后的Nignx的配置:

server {
    listen blogport;
    server_name blog.domain.name;
    root /path/to/blog;
    index index.php index.html index.htm;
    ssl_certificate /path/to/cert/fullchain.crt; 
    ssl_certificate_key /path/to/cert/cert.key;

    # 伪静态配置
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php$1 last;
    }
    location / {
        try_files $uri $uri/ =404;
    }

    # pass PHP scripts to FastCGI server
    location ~ .*\.php(\/.*)*$ {
        include snippets/fastcgi-php.conf;
        set $path_info "";
        set $real_script_name $fastcgi_script_name;
        if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
            set $real_script_name $1;
            set $path_info $2;
        }

        # With php-fpm (or other unix sockets):
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param SCRIPT_NAME $real_script_name;
        fastcgi_param PATH_INFO $path_info;
    }
}

配置完成后重启Nginx和Xray,在https://blog.domain.name/install.php下就可以开始博客的安装了,之后的安装过程应该是图形化的。

一些配置

公式支持

Replicon自带了Prism.js的公式支持,但是我实际用下来效果不是很好(服务器配置小拉),后来查到了按需渲染的解决方法。直接按照博客里的流程就可以。这里做一下备份
function.php:

function themeFields($layout) {
    $isLatex = new Typecho_Widget_Helper_Form_Element_Radio('isLatex', 
    array(1 => _t('启用'),
    0 => _t('关闭')),
    0, _t('LaTeX 渲染'), _t('默认关闭增加网页访问速度,如文章内存在LaTeX语法则需要启用'));
    $layout->addItem($isLatex);
}

header.php:

<?php if ($this->is('post') && $this->fields->isLatex == 1): ?>
<script defer type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" />
<script defer type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/contrib/auto-render.min.js"></script>
<?php endif; ?>

footer.php:

<?php if ($this->is('post') && $this->fields->isLatex == 1): ?>
<script type = "text/javascript" >
  document.addEventListener("DOMContentLoaded", function() {
    renderMathInElement(document.body, {
      delimiters: [{
          left: "$$",
          right: "$$",
          display: true
      }, {
          left: "$",
          right: "$",
          display: false
      }],
      ignoredTags: ["script", "noscript", "style", "textarea", "pre", "code"],
      ignoredClasses: ["nokatex"]
    });
  });
</script>
<?php endif; ?>

版权声明

Replicon自带的版权声明是当前年份的,我改成了固定年份到当前年份,需要把footer.php中的第九行改成

        <span id="copyright">&copy; 2019-<?php echo date('Y'); ?>

友链

Replicon的仓库里给了生成友链卡片的实例,但是我在实际渲染中会出现错误,需要把格式改成:

    <a class="friend-card" href="xxx">
        <img class="friend-avatar" src="xxx" alt="xxx">
        <div class="friend-info">
            <p class="friend-name">xxx</p>
            <p class="friend-description">xxx</p></div></a>

才可以正确显示。

标签页图标

参考这篇文章,把图标放在主题根目录/var/www/typecho/usr/themes/Replicon下,在header.php中第5行插入一行:

<link rel="shortcut icon" href="<?php $this->options->themeUrl('favicon.ico'); ?>" type="image/x-icon" />

即可。

文末快速导航

✅2025.3.26

Replicon默认没有添加文末快速导航至相邻文章的功能,需要手动实现一下。
post.php中的</article>前添加如下两行:

<p><?php $this->thePrev(_t('上一篇:%s'), _t('没有上一篇')); ?></p>
<p><?php $this->theNext(_t('下一篇:%s'), _t('没有下一篇')); ?></p>

2025-03-26T08:47:07.png

目录与边栏共存

✅2025.3.26

Replicon添加了目录功能,但是在文章中,如果有目录存在,其余的边栏内容会被略去,个人认为不是很方便,于是对sidebar.php内容进行了更改:
将第8行的<?php else: ?>改为<?php endif; ?>,并将倒数第三行的<?php endif; ?>删去即可。

部分内容来源

  1. Replicon
  2. 为 Typecho 增加 LaTeX 公式的渲染
  3. 为 Typecho 博客添加 favicon.ico(网页标签小图标)
本文作者:masteren
本文链接:https://blog.masteren.top/archives/1/
版权声明:本文部分内容引用或转载自网络,已标明出处,若侵权请联系删除。本文原创部分采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议(CC BY-NC-SA 4.0 ) 进行许可,转载时须注明出处及本声明。

上一篇:最优化简单笔记

下一篇:Hello World Again Again

添加新评论