Ubuntu 20.04 搭建 Typecho 博客全栈指南
Ubuntu 20.04 搭建 Typecho 博客全栈指南
PHP 8.1 + Apache2 + MySQL 8.0 + SSL 自动化配置 + typecho安装
重要
系统准备
1.准备域名一枚,收费/免费均可,免费域名推荐 eu.org 或者 us.kg
2.注册 cloudflare 账号
3.云服务器或者本地自建虚拟机均可
4.解析域名并获取帐户 API 令牌( 登录 Cloudflare → 个人资料 → API 令牌)
1.添加 PPA 源并安装php8.1
提示
Ubuntu 20.04 的默认软件源只有 PHP 7.4,如果需要PHP 8需添加PPA 源。
sudo apt update && sudo apt upgrade -y
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update安装 PHP 及扩展
sudo apt install -y php8.1 php8.1-fpm php8.1-mysql \
php8.1-curl php8.1-xml php8.1-mbstring \
php8.1-zip php8.1-gd相关信息
php8.1-fpm:PHP FastCGI 进程管理器
php8.1-mysql:MySQL 数据库支持(Typecho 需要)
php8.1-curl、php8.1-xml、php8.1-mbstring:Typecho 依赖的扩展
验证安装
php -v # 应输出:PHP 8.1.x (cli)...2. 安装 Apache2
sudo apt install apache2 -y
sudo systemctl enable --now apache2检查apache2版本:
apache2 -v # 应输出:Server version: Apache/2.4.41 (Ubuntu)配置防火墙,如果没有安装防火墙此步可以省略
sudo ufw allow 'Apache Full' && sudo ufw reload3. 安装 MySQL 8.0
sudo apt install mysql-server -y
sudo systemctl enable --now mysql安全配置
sudo mysql_secure_installation
# 按照提示操作:
# 设置 root 密码(重要!)。
# 移除匿名用户(Remove anonymous users? → Y)。
# 禁止 root 远程登录(Disallow root login remotely? → Y)。
# 删除测试数据库(Remove test database and access to it? → Y)。
# 重新加载权限表(Reload privilege tables now? → Y)。
4. 创建 Typecho 数据库
mysql
mysql -u root -p
sql
CREATE DATABASE typecho_db;
CREATE USER 'typecho_user'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
GRANT ALL PRIVILEGES ON typecho_db.* TO 'typecho_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;相关信息
typecho_db:创建的数据库
typecho_user:MySQL数据库用户名
YourStrongPassword123!:MySQL 数据库密码
4. SSL 证书自动化配置
安装 acme.sh
sudo apt install socat curl -y
curl https://get.acme.sh | sh -s email=admin@yourdomain.com
source ~/.```bashrc
acme.sh --set-default-ca --server letsencrypt申请证书(Cloudflare 示例)
export CF_Token="your_cf_api_token"
export CF_Account_ID="your_cf_account_id"
acme.sh --issue --dns dns_cf -d yourdomain.com -d *.yourdomain.com安装证书
sudo mkdir -p /etc/ssl/yourdomain.com
sudo chmod 700 /etc/ssl/yourdomain.com
acme.sh --install-cert -d yourdomain.com \
--key-file /etc/ssl/yourdomain.com/private.key \
--fullchain-file /etc/ssl/yourdomain.com/fullchain.pem \
--reloadcmd "sudo systemctl reload apache2"全自动脚本示例
#!/bin/bash
DOMAIN="yourdomain.com"
EMAIL="admin@example.com"
CF_TOKEN="your_cf_token"
CF_ACCOUNT_ID="your_cf_account_id"
# 安装 acme.sh
curl https://get.acme.sh | sh -s email=$EMAIL
source ~/.bashrc
# 设置 Cloudflare API
export CF_Token=$CF_TOKEN
export CF_Account_ID=$CF_ACCOUNT_ID
# 申请证书
acme.sh --issue --dns dns_cf -d $DOMAIN -d *.$DOMAIN
# 安装证书
sudo mkdir -p /etc/ssl/$DOMAIN
acme.sh --install-cert -d $DOMAIN \
--key-file /etc/ssl/$DOMAIN/private.key \
--fullchain-file /etc/ssl/$DOMAIN/fullchain.pem \
--reloadcmd "sudo systemctl reload apache2"注意事项
证书存储位置:~/.acme.sh/ 存放原始证书,不要直接使用
权限安全:私钥文件应设置为 600 权限
sudo chmod 600 /etc/ssl/yourdomain.com/private.key5. Apache2 站点配置
创建配置文件
vi /etc/apache2/sites-available/typecho.conftypecho.conf内容如下:
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
Redirect permanent / https://www.yourdomain.com/
ErrorLog ${APACHE_LOG_DIR}/typecho_error.log
</VirtualHost>
<VirtualHost *:443>
ServerName www.yourdomain.com
DocumentRoot /var/www/typecho
# SSL 配置
SSLEngine on
SSLCertificateFile /etc/ssl/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/ssl/yourdomain.com/private.key
# 安全协议
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
# HSTS 安全头
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
<Directory /var/www/typecho>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.php
# URL 重写规则
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
</Directory>
# 静态资源缓存
<FilesMatch "\.(ico|css|js|gif|jpe?g|png|webp)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/typecho_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/typecho_ssl_access.log combined
</VirtualHost>启用配置
sudo a2enmod rewrite ssl headers
sudo a2dissite 000-default
sudo a2ensite typecho
sudo apache2ctl configtest
sudo systemctl restart apache26. 下载typecho并完成安装
下载并解压
sudo mkdir -p /var/www/typecho
sudo wget https://github.com/typecho/typecho/releases/latest/download/typecho.zip -O /tmp/typecho.zip
sudo unzip /tmp/typecho.zip -d /var/www/typecho/
sudo chown -R www-data:www-data /var/www/typecho设置权限
sudo find /var/www/typecho -type d -exec chmod 755
sudo find /var/www/typecho -type f -exec chmod 644安装typecho
浏览器访问 https://www.yourdomain.com,根据提示信息完成typecho博客安装
填写数据库信息:
数据库地址:localhost
数据库用户:typecho_user
数据库密码:YourStrongPassword123!
数据库名:typecho_db
设置管理员账号/密码/邮箱
7.安全措施
安装完成后务必禁用安装文件:
sudo mv /var/www/typecho/install.php /var/www/typecho/install.php.bak
安全加固措施
mysql
mysql -u root -p
sql
REVOKE ALL PRIVILEGES ON *.* FROM 'typecho_user'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON typecho_db.* TO 'typecho_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;# 设置私钥严格权限
sudo chmod 600 /etc/ssl/yourdomain.com/private.key自动续期验证
acme.sh --renew -d yourdomain.com --force --debug
grep "acme.sh" /var/log/cron.log故障排查命令
# 检查服务状态
sudo systemctl status apache2 mysql php8.1-fpm
# 查看错误日志
sudo tail -f /var/log/apache2/typecho_*error.log
# 测试PHP处理
echo "<?php phpinfo(); ?>" | sudo tee /var/www/typecho/info.php
# 访问 https://www.yourdomain.com/info.php 后删除该文件重要提示:
替换所有 yourdomain.com 为你的真实域名
Cloudflare API 令牌需具备 Zone:Read 和 DNS:Edit 权限
首次安装若遇权限问题:
sudo chmod -R 775 /var/www/typecho
sudo chown -R www-data:www-data /var/www/typecho
数据库密码应符合强密码策略(大小写字母+数字+特殊字符)文档说明
完整流程:涵盖从系统准备到博客上线的所有步骤
安全优化:
- 最小权限数据库用户
- SSL 安全协议配置
- 严格的私钥权限控制
- 安装后禁用安装脚本
自动化设计:
- SSL 证书自动申请和续期
- Apache 自动重载配置
- 证书更新无需人工干预
生产就绪:
- HSTS 安全头配置
- 静态资源缓存策略
- 优化的 URL 重写规则
- 错误日志分离管理
