Mqlhaha 的自留地 - IT技术
type: channel
link: https://wp.mqlhaha.cn/index.php/category/IT/
description: IT技术类相关的文章
items: 搭建typecho博客

搭建typecho博客
type: item
date: 2024-11-22T15:22:00+08:00
description: 搭建typecho博客上班摸鱼的时候，刷到了网友的博客。觉得建设的很好，想起来之前自己也搭过基于wordpress的博客，但是因为wordpress太重而且用起来体验也很不好就放弃了。心血来潮又研究了一下typecho这个博客平台。发现比较简洁，同时还支持好用的Markdown语法，于是决定搭一个试试看。服务器搭建参考了官方的repo，编写了如下的docker-compose.yamlversion: '3.7' services: typecho: image: joyqi/typecho:nightly-php8.2-apache container_name: typecho-server restart: always environment: - TYPECHO_SITE_URL=https://wp.mqlhaha.cn - TIMEZONE=Asia/Shanghai - TYPECHO_DB_ADAPTER=Pdo_Pgsql - TYPECHO_DB_HOST=xxxx - TYPECHO_DB_PORT=xxxx - TYPECHO_DB_USER=xxxx - TYPECHO_DB_PASSWORD=xxx - TYPECHO_USER_NAME=xxx - TYPECHO_USER_PASSWORD=xxxx - TYPECHO_USER_MAIL=xxxx ports: - 8080:80 volumes: - ./typecho_data:/app/usr执行docker compose up -d后，服务成功启动。问题排查打开页面执行安装，此时发现了参照官方repo填写的环境变量并没有生效，并且重启服务后需要重新安装。经过搜索后，发现了有相关的issue。原来的docker-compose.yaml文件存在问题，包括没有设置TYPECHO_INSTALL环境变量，默认为0，即不执行自动安装没有设置TYPECHO_DB_NEXT环境变量，默认为none，此时即使读取到数据库的信息，也不执行任何操作，故仍会在启动后出现安装界面卷映射中需要添加对/app这个目录的映射，否则重启后仍然需要重新安装（原因是config.inc.php文件没有持久化存储，其中包含了一些服务器的配置文件）修复上述问题后的docker-compose.yaml文件如下：version: '3.7' services: typecho: image: joyqi/typecho:nightly-php8.2-apache container_name: typecho-server restart: always environment: - TYPECHO_SITE_URL=https://wp.mqlhaha.cn - TYPECHO_INSTALL=1 - TIMEZONE=Asia/Shanghai - TYPECHO_DB_ADAPTER=Pdo_Pgsql - TYPECHO_DB_HOST=xxx - TYPECHO_DB_PORT=xxx - TYPECHO_DB_USER=xxx - TYPECHO_DB_PASSWORD=xxx - TYPECHO_USER_NAME=xxx - TYPECHO_USER_PASSWORD=xxx - TYPECHO_USER_MAIL=xxx - TYPECHO_DB_NEXT=keep ports: - 8080:80 volumes: - ./typecho_data:/app/usr - ./typecho_installer:/app此时typecho服务正常了，重启后也能正常访问。计划登录后台执行一些初始化，发现在PC端无法正常登录管理后台，但是在手机端开启wireguard VPN后可以正常访问。结合网络设置，发现是部分请求自动使用了http协议导致。参照此issue，在config.inc.php文件中添加如下命令define('__TYPECHO_SECURE__', true);再次访问typecho网站，发现正常了进阶配置迁移至Mysql尝试设置自定义主题山海，下载并启用后有报错，发现和数据库相关。同样的尝试安装访客插件也报错。经排查发现是PGSQL数据库的问题。由于国内mysql非常流行，推测是大部分插件和主题开发的时候并没有直接用typecho提供的数据库插件，而是直接绑定了mysql的语法。因此参照文档搭建了如下的mysql服务器以供后续其他服务使用version: '3.1' services: db: image: mysql restart: always ports: - 3306:3306 volumes: - ./mysqldata:/v…