尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

宝塔面板Linux部署Typecho:LNMP环境配置与上线维护实战

宝塔面板Linux部署Typecho:LNMP环境配置与上线维护实战 前阵子帮朋友迁移一个老博客从一台快报废的虚拟主机挪到自己的Linux服务器上。对方用的是Typecho程序本身轻量但迁移时我发现真正花时间的不是Typecho而是底下那套运行环境——Nginx、PHP、MySQL各自的版本、配置路径、权限关系乱成一团。后来索性全部推倒用宝塔面板在Linux上重新部署了一遍整个过程从一个下午压缩到半小时。这篇文章就把这套流程完整写下来包括我踩过的坑和后来固化下来的操作习惯给准备在Linux上用宝塔面板部署Typecho的朋友一个可以直接照着做的参考。1. 裸装LNMP攒下的一堆教训让我最终把手动部署换成了宝塔1.1 手动配置NginxPHPMySQL的痛点在哪不是说不该手动部署而是对大多数人来说手动部署Typecho的性价比太低。Typecho本身对运行环境的要求并不高官方文档写得很简单PHP 7.4以上、MySQL/MariaDB、Nginx或Apache都行。但能用和用得舒服之间隔着大量琐碎配置。我最早那台服务器是Ubuntu当时用apt分别装了nginx、mysql-server、php-fpm光是让三个服务互相认识就折腾了很久。Nginx的默认站点配置里要手写fastcgi_pass的socket路径PHP这边要改php.ini里的upload_max_filesizeMySQL还要单独建库建用户。这些配置散落在/etc/nginx/sites-available、/etc/mysql/mysql.conf.d、/etc/php/8.1/fpm这几个目录里改完一个忘了重载服务页面就报502。更麻烦的是卸载重装。有一次PHP版本和某个Typecho插件不兼容我想把PHP 7.4换成8.0apt把依赖关系弄得一团糟最后只能手动删配置目录。那之后我意识到如果只是想踏踏实实跑一个Typecho博客把时间花在写文章上环境层的事应该交给更可靠的工具。1.2 宝塔在Typecho部署流程中到底接手了什么宝塔面板解决的正是环境编排这件事。它把Linux下常见的Web运行环境做成了可视化操作Nginx、Apache、MySQL、MariaDB、PHP多个版本、Redis、Pure-FTPd这些组件全部通过面板一键安装和切换。对Typecho部署而言宝塔真正省力的点有三个。第一LNMP环境是整个面板体系的默认组合装完面板以后勾选版本就能一次性装好不用自己处理依赖关系。第二站点、数据库、SSL证书、伪静态、计划任务这些Typecho上线要用到的能力面板都作为独立模块提供每个模块的配置界面比直接改文件直观得多。第三出现问题时排查路径清晰——面板里每个站点有独立的日志文件PHP-FPM的状态也可以在面板里直接看到。当然宝塔不是万能的。它生成的Nginx配置是模板化的遇到奇葩需求还是得自己改配置。但对于Typecho这种结构清晰、路由规则简单的程序来说宝塔的默认模板完全够用。1.3 Typecho官方要求的运行环境对照部署之前先把Typecho对运行环境的要求和宝塔能提供的版本对照清楚避免装完环境发现不兼容。组件Typecho 1.2.x要求宝塔推荐版本备注PHP7.4以上7.4或8.0老插件可能不兼容8.x新站建议8.0数据库MySQL 5.5以上MySQL 5.7或MariaDB 10.6二选一即可Typecho兼容良好Web服务器Nginx/ApacheNginx 1.22伪静态规则网上一搜一大把我自己的选择是PHP 8.0 MariaDB 10.6 Nginx。之所以没有直接用PHP 8.2或8.3不是因为Typecho跑不了而是部分第三方插件和主题的代码还停留在PHP 7时代为了兼容性选一个中间版本最稳妥。2. 服务器准备与面板安装这一步没做对后面全是坑2.1 服务器配置怎么选1核2G跑Typecho是否够用Typecho是出了名的轻量一个刚安装完的Typecho站点数据库里可能只有十几张表首页动态生成一次也不会超过几十毫秒。所以服务器配置不需要往高了买。我自己的经验1核1G内存的入门机就能跑Typecho但如果同时开了面板、Nginx、MySQL、PHP-FPM这几个常驻进程1G内存会比较紧张。内存不足时会触发swap磁盘I/O直接拖慢访问速度。预算允许的情况下2G内存的机器体验会明显好一个档次尤其是安装Redis做缓存之后。硬盘方面Typecho程序本体不到10MB加上主题插件也就几十MB真正的空间消耗来自上传的图片和数据库备份。建议至少给数据盘留50GB以上并且别把备份文件放在系统盘上。服务器地区这件事主要考虑访问延迟。国内节点访问快但涉及域名和合规手续境外节点延迟稍高胜在方便。这个根据自己的备案情况和访客群体来定就行不影响Typecho本身。2.2 一条命令装好宝塔装完先做这三件事宝塔的安装命令在官网首页就能拿到支持CentOS、Ubuntu、Debian等主流发行版。安装过程一般需要2到5分钟取决于机器网络状况。装完会输出面板地址、默认账号密码这段信息建议先存下来后面登录要用。安装完成以后不要急着建站先把三件事做了第一修改面板默认端口。宝塔默认端口是8888这个端口太出名了公网IP扫一下就能发现面板入口。在面板的安全设置里把它改成一个不常用的五位端口。第二设置面板SSL。登录面板后可以在面板设置里开启SSL证书这样访问面板时就是HTTPS加密连接避免账号密码在网络上裸奔。第三创建非root用户。宝塔面板本身允许用root身份操作但安全起见建议在服务器上新建一个普通用户用于日常SSH登录root只保留紧急情况使用。注意面板安装完成后阿里云、腾讯云这类云厂商默认的安全组里边可能没有放行你修改后的面板端口。一定要在服务器厂商的控制台安全组里同步放行否则面板会一直打不开。2.3 从面板安装LNMP环境时的版本选择逻辑进入宝塔面板后软件商店首页会有LNMP一键安装的选项。不要全选按需安装即可。我选择的是Nginx 1.22稳定Typecho的伪静态规则兼容性好MySQL 5.7资料多遇到问题好搜PHP 8.0兼顾新语法和旧插件兼容性phpMyAdmin数据库管理用方便导入导出不装FTP用SFTP或面板文件管理就行少一个服务少一份风险安装时长和服务器配置直接相关1核2G的机器大概需要10到20分钟。安装过程中最好不要重启服务器也别同时跑其他重负载任务容易出现进程中途失败。装完之后可以在软件商店-已安装里确认各个服务的状态都是运行中。PHP的版本切换也是面板的一大优势。如果后续某个Typecho插件在PHP 8.0下报错你可以在站点设置里直接把PHP版本切到7.4Tomcat级别的重启都省了整个过程几秒钟。3. 创建站点与数据库整个部署中最容易埋雷的环节3.1 站点创建时域名、根目录、PHP版本的关系在宝塔面板网站-添加站点里需要填域名、创建FTP、创建数据库这几个选项。对Typecho部署来说这几个选项背后有一套逻辑要理解清楚。域名这里填你实际要使用的域名如果是www开头和裸域名都要用建议用主域名建站后在域名的DNS解析里把另一个域名做301跳转到主域名避免搜索引擎收录两套重复内容。根目录默认是/www/wwwroot/你的域名这个位置我建议保持默认。宝塔的文件管理、备份计划都是基于这个规则找目录的改到别处会导致计划任务里的备份失效。PHP版本这里如果在2.3里装了多个PHP版本下拉框里就能选。我的建议是在建站时就选好最终要用的PHP版本后面虽然可以切但切换后PHP进程需要重新启动期间会有短暂的不可用。创建站点以后宝塔会在网站目录下生成.user.ini文件里面默认禁用了exec等危险函数对Typecho来说这些限制不影响使用不要因为网上教程说删除.user.ini就去删。保留它对安全有利。3.2 数据库该用什么引擎和排序规则站点创建向导里勾选创建数据库后会要求填数据库名、账号、密码。这里有几个细节值得注意数据库名和用户名不要用过于简单的单词容易被扫描爆破密码尽量用面板推荐的随机强密码别图好记数据库类型选MySQL或MariaDB都行Typecho两个都支持排序规则选utf8mb4_general_ci这个排序规则支持emoji字符Typecho评论里有人发emoji也不会乱码数据库创建完成后建议进phpMyAdmin检查一下确认新建的库和用户权限是否正确。宝塔创建的用户默认只授权了对这个独立库的所有权限不会影响其他库这点做得比很多人手动建库规范。3.3 顺手把HTTPS证书配上别等上线再折腾现在部署新站点我建议直接在创建站点这一步就把SSL证书搞定别等上线后才想起来加。在网站-设置-SSL里选择Lets Encrypt证书勾选你要申请证书的域名一键申请。申请成功后开启强制HTTPS宝塔会自动在Nginx配置里加301跳转规则把HTTP请求全部跳到HTTPS。有了HTTPS之后Nginx的443端口监听、证书路径、HTTP/2这些细节都不用手动配置。这里提醒一句Typecho后台的站点地址如果之前填的是http://开头的部署完证书后记得去后台改成https://否则会出现登录后跳转回http、样式丢失这类诡异问题。4. 把Typecho装进服务器从下载到站点出现仅需四步4.1 下载安装包的方式官网、GitHub与解压细节Typecho的安装包可以从官网下载也可以从GitHub的Releases页面获取。建议优先用官网的正式包版本稳定和文档描述一致。拿到安装包后两种方式放进服务器。一种是在服务器上直接wgetcd /tmp wget https://typecho.org/download/1.2.1.tar.gz tar -zxvf 1.2.1.tar.gz cp -r build/* /www/wwwroot/你的域名/另一种更简单粗暴用宝塔面板自带的远程下载功能把安装包下载到站点目录再解压。这里有一个非常容易踩的坑Typecho的安装包解压后程序文件都在build目录下层。如果你直接把整个build目录拷贝到站点根目录会导致访问网站根路径时找不到index.php页面空白。正确做法是把build目录下的文件全部移动到站点根目录让根目录直接出现index.php、admin等文件和目录。4.2 上传与目录权限755/644的纪律和原因Typecho程序文件上传完后权限设置要符合Linux安全习惯。宝塔面板创建站点时目录所有者和权限默认是www:www和755这个默认值就很合适不要随意改成777。为什么不能全站777因为777代表所有用户可读可写可执行一旦Web服务器进程被利用攻击者可以直接修改程序文件。Typecho的持久化数据其实只集中在少数字目录里没有必要给全站开放写权限。需要特殊处理的目录/usr/themes下主题相关目录755即可如果后台安装主题报权限错误再单独chown成www:www/usr/uploads上传目录必须保证www用户可写否则后台上传附件会失败/data目录Typecho 1.2.x运行时会向这里写缓存数据同样需要www可写在宝塔文件管理器里选中这些目录点权限按钮所有者填www权限填755就可以。如果已经出现权限错误执行一行命令搞定chown -R www:www /www/wwwroot/你的域名4.3 安装向导的关键项数据库信息和管理员账号打开浏览器访问你的域名正常情况下会进入Typecho的安装向导页面。整个向导分两步第一步填数据库信息第二步填站点配置。数据库信息这一页有几个容易填错的地方。数据库前缀默认是typecho_如果是新库就保持默认。数据库适配器默认Mysql不用改。数据库地址一般是localhost这个要确认一下宝塔里MySQL服务是否只监听了本地回环地址。最后填的用户名密码是在第3.2里创建的那个别填成root或面板的账号。第二步创建管理员账号用户名和密码将来要用来登后台。密码强度至少要达到8位混合大小写和数字。邮箱地址也别乱填将来密码找回要往这里发邮件。登录名一旦创建后面改起来比较麻烦想好了再填。提交完成后站点根目录会自动生成config.inc.php配置文件Typecho的安装向导这一步会自动完成。如果安装向导在最后一步报无法写入配置文件多半是根目录的写权限问题按4.2的方法处理。4.4 安装完成后立即做的清理与验证安装完成以后我的习惯是立刻做几件事第一确认后台能正常登录并且站点首页显示正常主题。如果首页样式乱了先按F12看控制台多半是资源路径还是http去后台设置改成 https。第二确认固定链接能访问。在后台设置-固定链接里随便选一个结构如/%postname%.html保存后再前台访问一篇文章URL如果404说明伪静态没配好这一步放到下一章详细说。第三删除安装引导文件或确认系统不允许重复安装。Typecho会判断根目录是否已经有config.inc.php存在就直接进首页所以理论上没问题但我习惯顺手确认一下不要在根目录残留安装包压缩文件既占空间又有安全风险。5. 伪静态、固定链接与主题插件部署完成不等于能用得舒服5.1 Nginx下Typecho的伪静态规则和生效方式Typecho默认的URL是带index.php的比如https://example.com/index.php/archives/123.html。既不好看也不利于搜索引擎收录。配置伪静态后URL就变成了https://example.com/archives/123.html。在宝塔面板里进入网站-设置-伪静态下拉框里选择Typecho宝塔会自动填好规则。Typecho官方推荐Nginx规则是location / { index index.html index.php; if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; } }保存后宝塔会自动重载Nginx配置不需要手动执行nginx -s reload。如果你发现保存规则后访问文章还是404检查一下站点配置里是否有其他location规则冲突比如有的站点会额外配置location ~ \.php规则两者叠加可能导致请求匹配错误。5.2 固定链接结构怎么选美观与搜索收录兼顾Typecho后台的固定链接设置提供多种结构我建议新站直接用/%postname%.html这种格式。原因有两个一是URL里带上文章标题的英文拼音或自定义slug搜索引擎能从中读取主题信息二是.html后缀让URL看起来像静态页面用户心理上觉得访问更快。如果你已经有老文章切换固定链接结构会影响旧链接的访问。Typecho会在切换时自动生成旧的URL规则到新规则的301跳转吗实际上Typecho对部分切换场景有内置重定向逻辑但为了稳妥我建议在切换前后对比测试几篇旧文章同时检查百度站长后台的抓取异常。固定链接配合slug使用更佳。每篇文章发布时Typecho后台会自动根据中文标题生成URL编码形式的slug建议手动改成英文或拼音。比如标题是关于Typecho的部署笔记slug填typecho-deploy-notes比一串%E5%85%B3%E4%BA%8E...干净得多。5.3 主题与插件安装时绕不开的权限坑Typecho的主题放在usr/themes目录插件放在usr/plugins目录。从后台直接上传压缩包并启用是最常见的安装方式。后台上传主题时Typecho会解压文件到themes目录。如果之前按第4.2把网站根目录权限改成了644这里的解压操作会失败表现是上传成功但列表里看不到主题。解决方法还是那句话确保usr/themes和usr/plugins目录对www用户可写。另外注意Typecho对插件和主题的目录命名有要求目录名必须和插件/主题主文件同名。比如某主题主文件是mytheme.php那目录名就必须是mytheme。否则后台会提示无法加载主题。这个问题在手动从GitHub下载源码包时特别常见GitHub仓库名和主文件名不一致就会踩坑。6. 上线后我实际遇到的坑和日常维护清单6.1 常见报错排错404、502、无法写入目录部署完不是终点我把自己遇到的几个高频问题列出来按症状和解决方案对照。症状可能原因解决办法首页正常文章页404伪静态规则未配置或未生效重新选择Typecho伪静态模板并保存确认Nginx已重载所有页面502 Bad GatewayPHP-FPM进程挂掉或FastCGI配置错误面板软件商店里查看PHP运行状态重启PHP-FPM检查站点错误日志/www/wwwlogs/域名.error.log后台无法登录跳转404站点地址填错或强制HTTPS跳转异常进数据库options表检查siteUrl字段改回正确地址上传附件失败usr/uploads目录无写权限chown -R www:www /www/wwwroot/域名/usr/uploads安装向导无法写入配置根目录无写权限根目录临时给www用户写权限安装完成后收回排查的时候先看日志再动配置这个顺序很重要。宝塔每个站点的错误日志都在/www/wwwlogs/你的域名.error.logPHP错误日志则要看PHP-FPM的配置文件里error_log指向哪。多数问题看一眼日志就能定位不用瞎猜。6.2 PHP版本与扩展兼容老插件在PHP 8下的问题Typecho本身对PHP 8兼容性做得很不错但第三方生态就不一定了。有的插件用了PHP 7时代已经移除的函数比如each()、create_function()在PHP 8下会直接报Fatal Error连带着整个后台白屏。遇到这种情况我的处理顺序是第一临时在站点设置里把PHP版本切回7.4先恢复站点可用。第二查看该插件的官方仓库有没有新版本很多老插件后来都做了兼容更新。第三如果插件确实停更了就只能找替代方案。比如老牌评论插件有的用高版本不兼容可以换成纯前端实现的方案。另外PHP扩展里openssl、pdo_mysql、mbstring这些是Typecho运行的基础扩展。宝塔安装的PHP默认都带上了但如果你从命令行额外执行过PHP脚本记得用php -m确认一下扩展加载情况。6.3 定期备份宝塔计划任务与手动备份结合Typecho数据包含两部分程序文件和数据库。程序文件里的主题、插件、上传图片都是辛苦积累的素材数据库里则是文章和评论。在宝塔计划任务里我配置了两个任务任务类型备份网站执行周期每天凌晨3点备份到对象存储或本地磁盘任务类型备份数据库执行周期每天凌晨3点30分备份到与网站备份同样的位置备份保留份数建议设成7份这样即使某个时间点已经损坏也能回溯到一周之内的数据。这里要强调备份一定要保留一份到异地本地磁盘备份遇到服务器硬盘损坏就是白搭。对象存储、云盘、另一台服务器都行。有时候我会在手动操作前额外打一个快照备份。比如要升级Typecho版本、换主题、改数据库结构之前先用宝塔的一键备份做个当前状态的快照。万一操作失误恢复起来按两个按钮就搞定。6.4 一轮部署完成后的检查清单最后给一张我每次部署完Typecho都会过一遍的检查清单网站首页能正常访问响应时间在500ms以内后台能登录文章发布、编辑、删除均正常固定链接规则生效文章页、分类页、标签页都能打开HTTPS强制跳转生效浏览器无混合内容警告伪静态规则在Nginx重启后仍然有效usr/uploads上传附件测试通过计划任务备份已启用备份文件能正常下载和恢复面板和SSH登录密码已修改为强密码面板端口已修改站点错误日志里有可疑报错没有反复出现的异常这套检查下来基本可以放心让站点开始对外提供服务。以后要做的无非是定期看日志、更新程序版本、按时检查备份有没有正常执行。我自己在维护Typecho时的一个习惯是每季度至少做一次完整恢复演练把最近的备份下载到本地环境里恢复一遍。真正操作过恢复流程的人都知道备份文件存在但恢复不了才是最让人崩溃的事。这个习惯救过我一次——有一回数据库备份文件因为对象存储那边的生命周期规则被提前清掉了如果没做演练真到出事那天才发现备份是空的那就只能对着屏幕干瞪眼了。
返回列表