惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
GbyAI
GbyAI
L
LangChain Blog
Vercel News
Vercel News
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
T
Threat Research - Cisco Blogs
T
Threatpost
Scott Helme
Scott Helme
T
Tailwind CSS Blog
Latest news
Latest news
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
罗磊的独立博客
P
Proofpoint News Feed
腾讯CDC
S
Schneier on Security
雷峰网
雷峰网
A
About on SuperTechFans
T
Tenable Blog
F
Full Disclosure
Cyberwarzone
Cyberwarzone
博客园_首页
有赞技术团队
有赞技术团队
K
Kaspersky official blog

文章列表

心率广播接收器 – 夜梦星尘の折腾日记 《战双帕弥什》晨曦已至,晓光终明——锈夜逐光游玩感想 【docker】面向现代团队的企业级知识库平台 | docmost(Community社区版) 【docker】图像处理工具 | mazanoke 使用Inkscape处理eps图片 React 安装(Vite) 【ADB】Shizuku 无线调试 | scene | 让你的应用直接使用系统API 【ADB】Shizuku | 让你的应用直接使用系统API 【ADB】scene 玩机工具箱 | 优化性能 | 性能监控
从零开始建设网站!typecho部署全流程介绍
YeMeng · 2026-05-08 · via

1. 服务器准备

阿里云:轻量应用服务器,2核心CPU,0.5G内存,峰值带宽200M,系统为纯净debian11.3。

声明:请注意,由于夜梦星尘使用的服务器内存配置过低,故本文不使用MySQL数据库,本文使用的sqlite方法仅适用于个人博客(小流量小范围)如配置不当有泄露风险

本文纯命令行操作,不使用宝塔面板。同时解决阿里云debian11.3系统可能存在的apt源报错,以及安装过程中目录权限、上传目录无法写入等问题。

前期准备工作可以参考夜梦写的远古文章:

2. 环境准备(Nginx + PHP + 基础工具)

2.1 更新系统与修复apt源

apt update && apt upgrade -y

若执行apt update报错“无Release file”,先执行以下命令更换官方安全源,避免后续安装失败:

mv /etc/apt/sources.list /etc/apt/sources.list.bak
cat > /etc/apt/sources.list << EOF
deb http://deb.debian.org/debian bullseye main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb http://deb.debian.org/debian-security bullseye-security main contrib non-free
EOF
apt update

2.2 安装基础工具(wget、unzip)

apt install wget unzip -y

2.3 安装Nginx

apt install nginx -y
# 设置开机自启并启动Nginx
systemctl enable nginx
systemctl start nginx

验证:此步完成后可浏览器访问服务器公网IP,如果看到Nginx默认欢迎页,即为安装成功。

2.4 安装PHP

PHP版本推荐7.4,适配typecho1.3。

apt install php7.4-fpm php7.4-sqlite3 php7.4-gd php7.4-mbstring php7.4-xml php7.4-curl -y
# 设置开机自启并启动PHP-FPM
systemctl enable php7.4-fpm
systemctl start php7.4-fpm

3.1 下载Typecho最新版

typecho官网:Download – Typecho Official Site

cd /tmp
wget https://github.com/typecho/typecho/releases/latest/download/typecho.zip

3.2 创建网站根目录并移动压缩包

在www目录下创建typecho文件夹,用来放我们的网站程序:

# 创建Typecho根目录
mkdir -p /var/www/html/typecho
# 移动压缩包到根目录
mv /tmp/typecho.zip /var/www/html/typecho/

3.3 进入根目录并解压

解压网站程序zip:

cd /var/www/html/typecho
# 解压压缩包
unzip typecho.zip

3.4 设置目录权限

设置755权限,安全配置(仅给上传目录可写权限):

chmod -R 755 /var/www/html/typecho/usr/uploads
chown -R www-data:www-data /var/www/html/typecho/usr/uploads

4. 配置Nginx站点

4.1 新建Nginx站点配置文件

创建nginx配置文件,此处需要域名:

vim /etc/nginx/sites-available/typecho

4.2 写入配置内容

请注意,一定要按此文件进行配置,可多不少,这样别人爆破了数据库地址也下载不了,会返回403。

配置文件内容如下,可直接复制后修改使用,按i进入编辑模式,完成后按Esc退出编辑模式,并输入:wq保存、退出编辑。

配置项是否必须修改示例内容说明
server_name必须example.com www.example.com修改为自己的域名
root必须/var/www/site修改为自己的网站目录
ssl_certificate必须/etc/letsencrypt/live/example.com/fullchain.pem修改为自己的 SSL 证书路径
ssl_certificate_key必须/etc/letsencrypt/live/example.com/privkey.pem修改为自己的 SSL 私钥路径
fastcgi_pass必须unix:/run/php/php-fpm.sock修改为自己服务器对应的 PHP-FPM 版本
access_log可选/var/log/nginx/site_access.log可改为自己的日志文件名
error_log可选/var/log/nginx/site_error.log可改为自己的错误日志文件名
listen 443 ssl http2可选listen 443 ssl http2;新版 Nginx 推荐开启 HTTP2
Strict-Transport-Security可选max-age=31536000确认 HTTPS 正常后再开启 HSTS

具体配置内容如下:

# =====================================================
# HTTP -> HTTPS
# =====================================================
server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    return 301 https://$host$request_uri;
}

# =====================================================
# HTTPS
# =====================================================
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    # 如果确认 HTTP2 没问题,可以改回:
    # listen 443 ssl http2;
    # listen [::]:443 ssl http2;

    server_name example.com www.example.com;

    root /var/www/site;
    index index.php index.html;

    charset utf-8;

    # =====================================================
    # SSL
    # =====================================================
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';

    ssl_prefer_server_ciphers on;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # =====================================================
    # 基础安全
    # =====================================================
    server_tokens off;
    autoindex off;

    client_max_body_size 20m;

    # =====================================================
    # 安全 Header
    # =====================================================
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    # HSTS(确认 HTTPS 正常后再保留)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # 必须单行,避免 HTTP2 协议错误
    add_header Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: https:; font-src 'self' data: https:; connect-src 'self' https:; frame-ancestors 'self'; object-src 'none'; base-uri 'self'; form-action 'self';" always;

    add_header Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=()" always;

    # =====================================================
    # 限制请求方法
    # =====================================================
    if ($request_method !~ ^(GET|HEAD|POST)$) {
        return 403;
    }

    # =====================================================
    # 隐藏文件
    # =====================================================
    location ~ /\.(?!well-known).* {
        deny all;
    }

    # =====================================================
    # 禁止数据库文件访问
    # =====================================================
    location ~* \.(db|sqlite|sqlite3|db3|sql|wal|shm)$ {
        deny all;
    }

    # =====================================================
    # 禁止敏感文件
    # =====================================================
    location ~* \.(ini|conf|log|sh|bak|env)$ {
        deny all;
    }

    # =====================================================
    # Typecho 核心保护
    # =====================================================
    location ^~ /usr/var/ {
        deny all;
    }

    location ^~ /var/ {
        deny all;
    }

    # =====================================================
    # 上传目录禁止 PHP 执行
    # =====================================================
    location ~* /(usr/uploads|uploads|files|backup|temp)/.*\.(php|php5|phtml|phar)$ {
        deny all;
    }

    # =====================================================
    # 静态资源缓存
    # =====================================================
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|svg|woff|woff2)$ {
        expires 30d;
        access_log off;

        add_header Cache-Control "public";
    }

    # =====================================================
    # Typecho 伪静态
    # =====================================================
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # =====================================================
    # PHP 解析
    # =====================================================
    location ~ \.php$ {

        try_files $uri =404;

        include fastcgi_params;

        # 根据自己的 PHP 版本修改
        fastcgi_pass unix:/run/php/php-fpm.sock;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_intercept_errors on;

        fastcgi_read_timeout 300;
    }

    # =====================================================
    # 禁止访问 composer / git
    # =====================================================
    location ~* /(composer\.(json|lock)|package\.json|yarn\.lock|\.git) {
        deny all;
    }

    # =====================================================
    # 日志
    # =====================================================
    access_log /var/log/nginx/site_access.log;
    error_log  /var/log/nginx/site_error.log;
}

下图仅为示例,和实际代码不同。

4.3 启用站点并重启Nginx

# 启用站点(创建软链接)
ln -s /etc/nginx/sites-available/typecho /etc/nginx/sites-enabled/
# 检查配置是否有误
nginx -t
# 重启Nginx,使配置生效
systemctl restart nginx

若nginx -t提示“test is successful”,说明配置无误;若报错,检查域名替换是否正确、配置文件语法是否有误。

5. 防火墙配置

阿里云服务器默认开放443与80端口,如果没开可以手动操作一下。

ufw allow 80
ufw allow 443
ufw enable

提示“Command may disrupt existing ssh connections.”,按y确认即可。

6. Typecho网页安装

6.1 访问域名,进入安装页面

浏览器输入你的域名(如:http://yemengstar.top),会自动进入Typecho安装向导。

6.2 填写数据库信息

直接选择sqlite原生函数适配器,别的配置默认不动。

点击“确认,开始安装”,继续下一步。

6.3 设置管理员信息(网站后台账号)

  • 网站地址为域名http
  • 管理员账号:自定义
  • 管理员密码:自定义强密码
  • 管理员邮箱:填写自己的邮箱

点击“完成安装”,提示“安装成功”后,即可进入Typecho后台(域名/admin)。

7. 优化

7.1 开启伪静态(已在Nginx配置,确认生效)

进入Typecho后台 → 设置 → 永久链接 → “是否使用地址重写功能” → 开启保存,链接会更简洁。

7.2 安装SSL证书

强烈建议开启SSL!www.yemengstar.topyemengstar.top修改成你自己的域名。

apt install certbot python3-certbot-nginx -y
# 自动配置SSL,替换成自己的域名
certbot --nginx -d yemengstar.top -d www.yemengstar.top

按提示操作,输入你的邮箱、同意协议(Y),完成后会自动配置HTTPS,重启Nginx生效,浏览器访问会显示“小锁”图标。

重启nginx:

systemctl restart nginx

完成。