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

资讯详情

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

宝塔面板+Typecho:Linux服务器建站完整实操记录

宝塔面板+Typecho:Linux服务器建站完整实操记录 刚拿到一台 Linux 云服务器想把 Typecho 项目部署上线又不想从头手搓 Nginx、PHP、MySQL 那一整套环境宝塔面板是最省心的选择。Typecho 这个博客程序我前后搭了不下五台服务器个人博客、团队知识库都用它它不像 WordPress 功能那么全但胜在轻量、干净、响应快在 Linux 宝塔面板这套组合下从零到一个能访问、带 HTTPS、带定时备份的站点熟练的话半小时到四十分钟就能搞定。这篇文章就是一次完整 Typecho 项目部署的记录中间会讲清楚每一步为什么要这么选、参数怎么定、遇到报错怎么排查。第一次碰服务器的新手照着基本能把博客跑起来已经部署过几次的后面关于 PHP-FPM、伪静态、TLS 1.0/1.1 关闭和自动部署的内容应该能补上一些平时容易忽略的坑。1. 部署前的整体思路与方案选型1.1 Typecho 为什么值得用来建站Typecho 是一个 PHP 开发的开源博客程序官方定位就是“轻量级”。跟 WordPress 对比它没有后台页面构建器没有那种大而全的插件市场但换来的是极低的内存占用和非常快的响应速度。我在 1 核 2G 的入门服务器上跑 Typecho日常访问基本不卡页面打开速度比同配置下的 WordPress 快很多因为 Typecho 一个请求涉及的 PHP 文件和数据表都少得多。另一个加分项是 Typecho 的主题机制。它的模板就是纯 PHP 混 HTML改字段、改样式不需要学一整套模板语言直接在后台编辑模板文件保存刷新就能看到效果。我自己改过几版主题基本都是这样操作不像某些建站系统改个颜色都要走编译流程。如果你只是写文章、整理知识库不需要会员系统、商城这类重型功能Typecho 是这个场景下性价比很高的选择。它的数据表只有十几张数据库备份出来基本几十 KB 到几 MB迁移也方便。1.2 为什么选 Linux 宝塔面板而不是手工编译环境服务器系统无脑选 Linux这基本是共识。Windows Server 也能跑 PHP但稳定性和资源占用差不少而且 Typecho 社区里常见问题几乎都是基于 Linux 环境讨论的出了错搜解决方案也方便。Linux 发行版我推荐 Debian 系的 Ubuntu 22.04或者 CentOS 系的 RockyLinux 9、Alibaba Cloud Linux 这类常更新维护的版本下面要讲的宝塔操作在这些系统上表现一致。但 Linux 本身门槛不低。裸机部署要自己装 Nginx、PHP、MySQL装完还要配进程管理、写 nginx.conf、处理权限每一步都能劝退新手。宝塔面板的价值在于把重复劳动图形化一键装 LNMP、创建站点时自动生成 Nginx 配置和目录、MySQL 建库建号一键完成、SSL 和计划任务全在面板里操作。有人说这降低了技术含量但对老手来说省下来的是时间遇到问题还能在面板的日志入口快速定位这才是核心价值。1.3 部署清单和服务器配置建议开始前列一个清单确认手里有这几样东西一台 Linux 服务器建议最低配置 1 核 2G硬盘 40G 以上。Typecho 本身不吃配置但 MySQL 数据文件和日志会占磁盘空间。一个已解析到服务器的域名。不备案的海外服务器可以直接用国内服务器域名需要备案否则 80 和 443 端口的请求会被拦截。一个 SSH 客户端Windows 可以用系统自带终端或者 XshellmacOS 直接用 Terminal 就行。一个能访问 Typecho 官网下载源码的网络环境。这套部署的推荐软件栈是Linux Nginx MySQL 5.7/8.0 PHP 7.4/8.0 Typecho 1.2.x。PHP 版本主要看主题兼容性2024 年之后大多数主题在 7.4 上最稳8.0/8.1 也没问题但如果你用了比较老的主题建议先用 7.4。数据库方面宝塔默认安装的 MySQL 版本可能比较高如果对数据库不熟选 5.7 或 MariaDB 10.3 会更省心后面做备份恢复时兼容性也好。2. 从零装好宝塔面板与环境2.1 服务器初始化要注意的三件事第一次拿到服务器我建议先别急着装面板先做三件事。第一更新系统软件源。Ubuntu/Debian 用apt update apt upgrade -yCentOS/Rocky 用yum update -y。这一步能避免后续安装宝塔时因为依赖源太旧而报错也能顺手把系统安全补丁打上。第二确认 root 账号能正常登录并且把 SSH 默认端口记下来。宝塔安装后面板自带一个独立端口跟 22 不是一回事后续安全策略里我会改 SSH 端口但这一步先确保能登上去。第三去云厂商控制台的安全组或防火墙里放行需要用到的端口。这是最常见的坑很多人在服务器内部用firewall-cmd开了端口结果还是连不上因为云平台的安全组没放行。Typecho 部署阶段至少要放行 22SSH、80HTTP、443HTTPS以及宝塔面板端口默认 8888。面板端口建议后面改掉再正式上线具体操作放到安全加固那节。2.2 安装宝塔面板的实操记录登录 SSH 后到宝塔官网复制安装命令。命令形式一般是wget下载一个 install 脚本然后bash执行。这里我不贴死具体命令因为官方更新很频繁旧命令可能装出旧版面板直接用官网最新脚本就行。执行后安装过程大概一两分钟跑完会自动输出面板访问地址、账号和初始密码类似下面这样外网面板地址: http://IP:8888/xxxx 用户名: xxxx 密码: xxxx看到这串信息后马上用浏览器访问。如果打不开百分之八十是安全组没放行 8888 端口。登录面板后第一次进入会引导你选择安装 Nginx、Apache、MySQL、PHP 等组件这一步我建议选“LNMP 一键安装”模板也就是 Linux Nginx MySQL PHP不选 Apache。Typecho 用 Nginx 是最顺的伪静态规则简单性能也好。安装过程在后台跑可以在面板的“任务列表”里看进度。这段时间不要反复重启服务器MySQL 编译或二进制安装都需要时间强行中断容易出现半装状态到时候查错更麻烦。2.3 用宝塔一键安装 LNMP 环境在 LNMP 模板里Nginx 选 1.22 或 1.24 都行MySQL 如果机器内存只有 1G建议选 MySQL 5.7 或直接选 MariaDB 10.3MySQL 8.0 在 1G 内存上跑得比较吃力PHP 选 7.4 或 8.0。有个小细节值得说宝塔面板里 MySQL 和 PHP 都有“编译安装”和“极速安装”两种方式。极速安装是二进制包速度快适合大多数人。编译安装性能理论上更好但耗时很长1 核 2G 机器编译 MySQL 可能要一两个小时不推荐新手尝试。等组件安装完成后到“软件商店”页面确认 Nginx、MySQL、PHP 都显示“已安装”并且能正常启动。再用php -v和nginx -v检查版本确认无误后就可以开始创建站点。2.4 创建站点和数据库的关键参数进入宝塔面板的“网站”菜单选择“添加站点”。这一步的参数会影响后面很多配置要细心域名填已经解析好的域名例如blog.example.com。如果域名解析还没生效可以先用 IP 加端口做临时访问但 SSL 证书申请必须在域名解析生效后进行。根目录宝塔默认会在/www/wwwroot/域名下创建目录保持默认即可。FTP如果不打算用 FTP 传文件直接选“不创建”后面用 SFTP 或宝塔文件管理器更方便。数据库选择“同时创建数据库”数据库类型选 MySQL编码选utf8mb4。用户名和密码可以用宝塔自动生成也可以自己设一个强密码建议记到密码管理器里。PHP 版本选择刚才安装好的 PHP 版本。网站类型如果宝塔要求选择请选择“PHP 项目”不要选“纯静态”否则 Nginx 配置里不会加载 PHP 解析规则。创建完成后在“网站列表”里能看到一条记录点“设置”可以修改站点配置。Typecho 的伪静态、SSL、防盗链都集中在这个设置面板里后面一步步用。3. 安装Typecho并完成站点基础设置3.1 上传Typecho源码的正确姿势Typecho 官方提供稳定版压缩包一般是 zip 格式。不要直接在服务器上用wget随便猜一个地址建议先去官网页面拿到真实下载链接。下载到本地后解压会得到一个包含 build 文件夹的目录看到这个结构不要慌把 build 里的内容拷贝到网站根目录即可。在宝塔面板里更简单的做法是先在本地把 build 目录重命名成你喜欢的名字然后用面板的“文件”功能上传 zip 到/www/wwwroot/你的域名再解压、移动。记得把最终的文件直接放在根目录不是放在二级目录里。如果非要用 SSH命令参考下面这样cd /www/wwwroot/你的域名 unzip typecho.zip mv build/* ./ chown -R www:www /www/wwwroot/你的域名最后一行chown -R www:www很关键。宝塔的 Nginx 和 PHP-FPM 默认都以 www 用户运行如果目录属主是 root 或其他用户PHP 可能没有权限写缓存和上传文件安装时会报“无法写入”之类的错误。上传源码的过程里权限问题几乎是新手第一大坑。3.2 安装向导中的数据库配置细节源码放好后浏览器访问http://你的域名/install.php进入 Typecho 安装向导。第一步选择“全新安装”第二步填写数据库参数。这里有几个点我要专门说一下数据库地址默认填 localhost。如果宝塔的 MySQL 服务跑在本机就填 localhost如果数据库是单独一台服务器填数据库服务器的内网 IP 或公网 IP。数据库端口默认 3306除非你改过 MySQL 端口否则不用动。数据库用户名和密码用创建站点时生成的数据库账号不要用 MySQL 的 root 账号。原因很简单Typecho 只需要单库读写权限用 root 账号等于一次性把所有库的权限都暴露给 Web 程序站点一旦被入侵所有数据都跟着遭殃。数据库名填创建站点时生成的库名。填完以后点“初始化”如果报错多半是账号权限、密码或主机名问题下面常见问题那部分会专门讲。初始化成功后设置一个管理员用户名和密码这个密码一定要复杂一点后台登录入口被暴力扫描是常态弱密码很容易被打进。3.3 固定链接与Nginx伪静态规则Typecho 默认的链接风格是/?p123这种动态参数不好看也不利于搜索引擎收录。后台“设置-固定链接”里可以改成伪静态地址比如/archives/{cid}.html。我喜欢这种风格既简短又带文章 ID迁移时不容易冲突。但开了地址重写后如果 Nginx 没配伪静态规则所有文章点进去都是 404。宝塔面板的处理方式很简单进“网站设置-伪静态”下拉框选择 typecho然后保存。如果列表里没有对应模板就手动粘贴下面的规则location / { index index.php index.html; if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; } }保存后回到后台把固定链接选项里的“地址重写功能”选择“启用”点击保存。配置正确的话文章页不会再 404。这里解释一下那条 rewrite 的含义当用户访问的路径不指向一个真实存在的文件或目录时把请求重写到 index.php由 Typecho 的路由去解析。静态资源图片、CSS、JS是真实文件不会走重写所以不影响加载速度。这套逻辑是很多 PHP 框架的通用玩法理解了它后面配置其他伪静态也大同小异。3.4 HTTPS部署和TLS旧协议关闭现在新站点必须开 HTTPS否则浏览器很容易出现“不安全”提示而且很多 HTTP/2、HTTP/3 特性都没法用。宝塔面板里申请免费证书非常简单进入“网站设置-SSL”选择 Let’s Encrypt勾选你的域名点申请。等证书签发成功后打开“强制 HTTPS”开关让所有 HTTP 请求自动跳转到 HTTPS。证书到期后宝塔会通过计划任务自动续期。如果不放心可以在面板里手动加一条“每月 1 日 3 点执行续期脚本”的计划任务。Let’s Encrypt 证书有效期是 90 天自动续期是刚需不要省这个配置。关于 TLS 1.0/1.1这两个旧协议已经有较多安全漏洞2020 年后主流浏览器基本不再支持建议直接关闭。在“网站设置-配置文件”里找到ssl_protocols这一行修改为ssl_protocols TLSv1.2 TLSv1.3;然后保存并重载 Nginx。新版宝塔面板默认配置可能已经是这样但如果站点是从旧版面板升级来的很有必要检查一下。改完可以用nginx -t测试配置是否正确再执行重载。改配置前建议先把原文件复制一份出了问题能快速回滚。3.5 主题插件安装与上传限制调整Typecho 的主题放在根目录的usr/themes下插件放在usr/plugins下。下载主题后解压上传到对应目录然后在后台“外观”里启用就行。上传方式可以用宝塔文件管理器也可以直接用 SFTP拖拽文件更直观。很多主题都会用到图片上传所以提前把 PHP 的上传限制调大。在宝塔“软件商店-PHP设置-配置修改”里搜索下面几个参数upload_max_filesize 20M post_max_size 40M memory_limit 256M改完记得重启 PHP-FPM。光改 PHP 还不行Nginx 层也有个限制在“网站设置-配置文件”里加一行client_max_body_size 50m;否则你传一张超过 1M 的图片PHP 可能还没执行Nginx 就直接返回 413。这个坑我踩过改完 PHP 上传上限还是传不了大图查了半天才发现是 Nginx 在网关层卡住了。4. 性能优化与安全加固4.1 PHP-FPM进程数怎么调才不浪费内存Typecho 站点刚上线流量不大时默认的 PHP-FPM 配置也能跑但默认pm.max_children往往给得过高1G 内存的机器很容易 OOM。我一般按内存大小做估算每个 PHP-FPM 进程约占 20-40MB 内存1G 内存要留出系统、Nginx、MySQL 的空间实际给 PHP 的预算大约 500-600MB所以max_children设置成 10-15 就差不多了。2G 内存可以给到 20 个左右。在宝塔的 PHP 设置“性能调整”里可以改这几项pm dynamic pm.max_children 10 pm.start_servers 2 pm.min_spare_servers 1 pm.max_spare_servers 5 pm.max_requests 500pm.max_requests是每个进程处理 500 个请求后自动重启能缓解 PHP 脚本内部的内存泄漏。Typecho 本身很轻基本不会发生泄漏但装了十几个插件后很难说设置这个参数等于加了个保险。改完以后观察 top 或宝塔的“监控”页面如果内存长期在 90% 以上就把数值再调低。别照抄我的数字每个人的环境和插件不一样需要根据实际负载微调。4.2 OPcache、Redis之类到底有没有必要Typecho 是 PHP 程序每次请求都要把 PHP 文件解析进内存。OPcache 能缓存解析后的字节码让请求响应快一个档次。我的建议是一定要开。在宝塔 PHP 设置里找到“安装扩展”安装 opcache然后配置opcache.enable1 opcache.memory_consumption128 opcache.interned_strings_buffer8 opcache.max_accelerated_files10000 opcache.validate_timestamps0validate_timestamps0表示不再每次请求都检查文件是否变化性能最好但代价是你改了 PHP 文件后必须重启 PHP-FPM 或清 OPcache 才能生效。对生产环境来说没问题修改后重启一次 PHP 也就一两秒。如果你还在频繁调试主题建议先保持validate_timestamps1上线后再改成 0。Redis 和 Memcached 这类对象缓存Typecho 本身用不上它的动态数据主要存 MySQL不借助对象缓存速度也不慢。但如果你装了评论过滤、热门文章、浏览量统计这类插件插件依赖 Redis 时再装。不要为了“高级”硬加反倒是多了一个需要维护的进程崩了还要排查。4.3 宝塔免费版的安全基线配置很多人会纠结宝塔是不是收费的我这里明确说个人部署 Typecho用免费版完全够不需要买专业版。专业版的价值主要是更多插件、防火墙规则库更新、网站监控报表一类对一个小博客来说都不是必需品。宝塔免费版已经有 Linux 防火墙、SSH 防爆破等基础功能配合下面几个手动配置安全性不差。第一步修改 SSH 端口并启用密钥登录。在面板“安全”菜单里放行新端口然后用 ssh-keygen 生成密钥把公钥放到服务器的~/.ssh/authorized_keys测试密钥能登录后再在 SSHD 配置里把PasswordAuthentication改成 no重启 sshd。这一步能挡住大量用弱口令扫服务器的机器人。当然如果你对密钥登录不熟至少要把 SSH 端口改成高位端口并设置一个强密码。第二步把宝塔面板默认端口改掉。在“面板设置-安全设置”里修改面板端口和入口安全路径开启面板 SSL。注意要先放行新端口否则改了端口后你自己都登不进面板。入口安全路径相当于给面板地址加一层访问前缀不输入前缀就进不去。第三步MySQL 不要让 root 账号允许远程登录。Typecho 只需要本地访问创建数据库时账号主机限定为 localhost 就可以。在面板“数据库-权限”里确认每个账号的访问权限只限于本机。第四步Nginx 层拦截一些恶意扫描。在“网站设置-配置文件”的 server 块里加location ~* /(wp-admin|admin|phpmyadmin|\.env) { deny all; }Typecho 后台路径如果是 /admin这条规则会把自己也拦掉所以要么后台路径改掉要么不用这条。更稳妥的做法是装一个免费的“宝塔防火墙”插件在面板“软件商店”里找到 Nginx 防火墙免费版有基础款开启 CC 防护和 URL 黑白名单。4.4 定时备份网站和数据库一个都不能少数据无价这句话在部署 Typecho 时尤其适用。文章写在数据库里主题和上传的图片在文件系统里两边都得备份。宝塔面板“计划任务”里可以新增两个任务。第一个是“备份数据库”选择你的 Typecho 库备份到本地目录/www/backup执行周期建议每天凌晨。第二个是“备份网站”选择网站根目录排除一些临时缓存目录如果有执行周期建议每周两次。本地备份有磁盘损坏的风险所以我还会额外做一个动作把备份目录挂到云存储或者每周手动下载一次最重要的数据库备份到本地。宝塔免费版的云存储功能需要安装插件部分云存储场景要专业版不强求。你有对象存储资源的话可以自己写一个简单的 shell 脚本配合定时任务把备份文件上传上去。恢复备份的流程也要提前演练宝塔“数据库-管理-导入”可以恢复 SQL 文件网站文件直接用解压覆盖回去。真出了事故再翻文档人会很慌。我一般会在新服务器上练一次恢复流程确认备份文件能正常导入这半小时的时间值得花。5. 常见问题与排查技巧实录5.1 安装引导页404或白屏访问 /install.php 直接 404最常见原因是 PHP 解析没生效。先确认你已经创建的是 PHP 项目站点而不是纯静态。再进网站设置看配置文件里是否包含类似include enable-php-74.conf;的一行如果没有说明 PHP 版本没绑定重新创建站点时选对即可。白屏的话优先看错误日志/www/wwwlogs/你的域名.error.log。看最后几行一般会给出PHP Fatal error或Nginx 502的线索。另一个可能是目录权限问题PHP 无法读取源码文件先执行chown -R www:www /www/wwwroot/你的域名再刷新。很多“莫名其妙的白屏”最终都是权限导致的看似是代码问题其实是 Linux 文件权限在捣乱。5.2 数据库连接失败和登录闪退安装时报“数据库连接失败”先检查数据库名、用户名、密码是否和创建数据库时完全一致特别注意大小写和下划线。接着检查数据库服务是否启动宝塔面板“数据库”页面能看到 MySQL 的运行状态如果显示停止点启动并看错误日志。另一个隐蔽问题站点文件和数据库不在同一台服务器时MySQL 账号的主机白名单没有包含 Web 服务器的 IP也会报连接失败。后台登录后闪退多半是 cookie 和 session 的问题。Typecho 的配置写在 usr 目录里如果目录不可写session 文件写不进去登录状态存不住。修复方法还是那几件套确认目录属主为 www确认 PHP 的session.save_path可写确认服务器时间准确。时间偏差太大会导致 cookie 校验失败这个很多人想不到我遇到过一台刚开通的服务器时间慢了五分钟登录后立刻被弹出来。5.3 502、504和内存不足网站突然 502最常发生在访问量上来以后。登录服务器 top 看一眼如果内存快满说明 PHP-FPM 进程数开太多了。调低pm.max_children并考虑加一点 swapfallocate -l 2G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile写进/etc/fstab才能开机自动挂载不写重启又没了。加 swap 是治标应急长期还是要优化进程数和内存占用。504 一般是上游 PHP 处理超时改fastcgi_read_timeout和 PHP 的max_execution_time。Typecho 正常请求不会卡这么久如果经常 504还要检查是不是有过期外链请求导致脚本在等第三方接口返回这类问题可以在主题里给远程请求加超时或者直接禁用那个插件。5.4 SSL证书不自动续期Let’s Encrypt 证书有效期只有 90 天宝塔默认安装了自动续期脚本但有些情况会失败。最常见原因是 80 端口没有开放续期验证无法访问站点其次是 DNS 解析变了导致验证不通过。排查时先手动在宝塔“计划任务”里执行一次续期脚本看输出日志把报错关键词拿去搜基本都能解决。如果实在不想折腾自动续期也可以用一年期的付费证书或云厂商的免费证书到期前手动上传替换但这样每年要多一次人工操作。我的习惯还是 Let’s Encrypt 加自动续期只要端口和 DNS 正常跑了几年都没出过问题。5.5 用宝塔Webhook实现Typecho自动部署如果 Typecho 项目是用 Git 管理的主题和插件都推送到代码仓库提交代码后自动拉到服务器确实很爽。宝塔面板自带 Webhook 插件免费版就能用配置也很简单。先进入网站根目录初始化 Gitcd /www/wwwroot/你的域名 git init git remote add origin https://你的代码仓库地址然后在宝塔“软件商店”安装 Webhook 插件新建一个 hook执行脚本类似#!/bin/bash cd /www/wwwroot/你的域名 git pull origin master chown -R www:www ./把插件生成的 Webhook 地址填到代码仓库的后台比如 Gitee 或 GitHub 的 Webhook 配置里push 事件触发后服务器自动拉取代码。Typecho 是 PHP 项目不用构建拉完代码立刻生效比手动传文件省事很多。一个小坑如果是私有仓库服务器要配置好部署公钥并且确认 Git 账号有拉取权限否则 Webhook 触发后脚本会静默失败。我建议第一次配置完手动在服务器上执行一次git pull确认能正常拉取再去配置 Webhook。5.6 服务器迁移和版本升级玩 Typecho 久了总会遇到换服务器的时候。迁移流程我基本都是三步走先在老服务器用宝塔备份数据库和网站目录把两个备份文件下载到本地然后新服务器按前面的流程装好宝塔、LNMP、Typecho 站点接着恢复数据库把网站目录解压覆盖到新站点根目录。最后检查 usr 目录下的配置文件里的数据库连接信息必要时改成新服务器对应的账号密码。域名解析切到新 IP 后记得重新申请 SSL 证书。版本升级方面Typecho 1.2.x 是当前稳定线后台如果有新版提示升级前先备份数据库和 usr 目录再覆盖程序文件。覆盖时不要直接删掉 usr里面有你的主题、插件和配置删了等于白干。我见过有人升级时rm -rf整个网站目录结果主题和文章附件全没了数据库还在但站点已经不成样子恢复起来很麻烦。最后分享一个我自己的习惯每次部署完 Typecho我都会把整个部署过程、端口、密码策略、备份策略整理成一篇 Markdown 放在本地笔记里。这台服务器以后不管是被攻击还是需要迁移翻笔记就能快速恢复。这套流程我搭了不下五台服务器最顺的一次从装面板到发出第一篇文章只花了四十分钟最折腾的一次卡在 PHP 版本和主题兼容上来回花了两三个小时。上面写的这些坑基本都是那次折腾后总结出来的希望你能一次过。
返回列表