首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从零开始建设网站!typecho部署全流程介绍

从零开始建设网站!typecho部署全流程介绍

作者头像
夜梦星尘
发布2026-05-09 09:23:41
发布2026-05-09 09:23:41
310
举报

1. 服务器准备

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

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

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

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

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

2.1 更新系统与修复apt源

代码语言:javascript
复制
apt update && apt upgrade -y

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

代码语言:javascript
复制
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)

代码语言:javascript
复制
apt install wget unzip -y

2.3 安装Nginx

代码语言:javascript
复制
apt install nginx -y
# 设置开机自启并启动Nginx
systemctl enable nginx
systemctl start nginx

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

2.4 安装PHP

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

代码语言:javascript
复制
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. 下载并部署Typecho

3.1 下载Typecho最新版

typecho官网:Download – Typecho Official Site

代码语言:javascript
复制
cd /tmp
wget https://github.com/typecho/typecho/releases/latest/download/typecho.zip

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

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

代码语言:javascript
复制
# 创建Typecho根目录
mkdir -p /var/www/html/typecho
# 移动压缩包到根目录
mv /tmp/typecho.zip /var/www/html/typecho/

3.3 进入根目录并解压

解压网站程序zip:

代码语言:javascript
复制
cd /var/www/html/typecho
# 解压压缩包
unzip typecho.zip

3.4 设置目录权限

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

代码语言:javascript
复制
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配置文件,此处需要域名:

代码语言:javascript
复制
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

具体配置内容如下:

代码语言:javascript
复制
# =====================================================
# 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

代码语言:javascript
复制
# 启用站点(创建软链接)
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端口,如果没开可以手动操作一下。

代码语言:javascript
复制
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修改成你自己的域名。

代码语言:javascript
复制
apt install certbot python3-certbot-nginx -y
# 自动配置SSL,替换成自己的域名
certbot --nginx -d yemengstar.top -d www.yemengstar.top

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

重启nginx:

代码语言:javascript
复制
systemctl restart nginx

完成。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-5-08 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 服务器准备
  • 2. 环境准备(Nginx + PHP + 基础工具)
    • 2.1 更新系统与修复apt源
    • 2.2 安装基础工具(wget、unzip)
    • 2.3 安装Nginx
    • 2.4 安装PHP
  • 3. 下载并部署Typecho
    • 3.1 下载Typecho最新版
    • 3.2 创建网站根目录并移动压缩包
    • 3.3 进入根目录并解压
    • 3.4 设置目录权限
  • 4. 配置Nginx站点
    • 4.1 新建Nginx站点配置文件
    • 4.2 写入配置内容
    • 4.3 启用站点并重启Nginx
  • 5. 防火墙配置
  • 6. Typecho网页安装
    • 6.1 访问域名,进入安装页面
    • 6.2 填写数据库信息
    • 6.3 设置管理员信息(网站后台账号)
  • 7. 优化
    • 7.1 开启伪静态(已在Nginx配置,确认生效)
    • 7.2 安装SSL证书
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档