MENU

基于VestaCP部署Typecho

October 15, 2023 • Lab

前言

VestaCP 是国外的一个老牌的开源的主机控制面板,界面简洁清晰。
官网:http://www.vestacp.com

开始

首先运行指令安装VestaCP而安装速度取决于VPS的性能,程序安装需要 15 分钟左右,不过笔者这里不到10分钟即安装完了~~

**# Download installation script**
curl -O http://vestacp.com/pub/vst-install.sh
**# Run it**
bash vst-install.sh

在登录后VestaCP,单击页面顶部的“WEB”。
然后,单击“➕”。
新建网站,输入你的域名。

[scode type="green"]建议开启SSL加密[/scode]
在创建网站完成后,前往“数据库”页面新建数据库。

注意,如注释所说新建的数据库名称会自动添加前缀"admin_"
例如你输入test,那么新建的数据库名称则为"admin_test"
完成以上操作,我们可以上传程序了
此处建议使用Xftp软件,因为VestaCP是没有在线文件管理的
连接上服务器后,访问目录"/home/admin/web/此处是你刚刚创建的网站的域名/public_html"
这相当于你的网站的根目录,上传程序即可。
然后按照正常流程安装就好了~~

伪静态部署

[scode type="yellow"]基于环境为Nginx的用户[/scode]
在VestaCP,当我们添加网站的时候:可以看到有个叫做Web模板nginx的,这是Vesta关于一些程序做的预制,我们所需要的伪静态设置也包括于其中。
可见,程序没有针对Typecho做针对的预制,但是我们可以自行添加。
继续使用Xftp,访问目录"/usr/local/vesta/data/templates/web/nginx/php-fpm"

我们可见每个模板都有分别为 .stpl 和 .tpl 两个后缀的文件
.stpl 是https模式下的,同理 .tpl 是http模式下的。
以下是添加typecho伪静态规则的代码的模板,创建文件复制代码;上传至上述模板目录,然后于后台处使用即可。(注意需要.tpl和.stpl的都上传一份)

server {
    listen      %ip%:%web_port%;
    server_name %domain_idn% %alias_idn%;
    root        %docroot%;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/%domain%.log combined;
    access_log  /var/log/nginx/domains/%domain%.bytes bytes;
    error_log   /var/log/nginx/domains/%domain%.error.log error;

    location / {

        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
            expires     max;
        }

        location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }

            fastcgi_pass    %backend_lsnr%;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
        }
    }

    error_page  403 /error/404.html;
    error_page  404 /error/404.html;
    error_page  500 502 503 504 /error/50x.html;

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location ~* "/\.(htaccess|htpasswd)$" {
        deny    all;
        return  404;
    }

    location /vstats/ {
        alias   %home%/%user%/web/%domain%/stats/;
        include %home%/%user%/conf/web/%domain%.auth*;
    }

    include     /etc/nginx/conf.d/phpmyadmin.inc*;
    include     /etc/nginx/conf.d/phppgadmin.inc*;
    include     /etc/nginx/conf.d/webmail.inc*;

    include     %home%/%user%/conf/web/nginx.%domain%.conf*;

if (-f $request_filename/index.html){
    rewrite (.*) $1/index.html break;
    }
if (-f $request_filename/index.php){
    rewrite (.*) $1/index.php;
    }
if (!-e $request_filename){
    rewrite (.*) /index.php;
    }
}
server {
    listen      %ip%:%web_ssl_port%;
    server_name %domain_idn% %alias_idn%;
    root        %sdocroot%;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/%domain%.log combined;
    access_log  /var/log/nginx/domains/%domain%.bytes bytes;
    error_log   /var/log/nginx/domains/%domain%.error.log error;

    ssl         on;
    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;

    location / {

        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
            expires     max;
        }

        location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }

            fastcgi_pass    %backend_lsnr%;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
        }
    }

    error_page  403 /error/404.html;
    error_page  404 /error/404.html;
    error_page  500 502 503 504 /error/50x.html;

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
    }

    location ~* "/\.(htaccess|htpasswd)$" {
        deny    all;
        return  404;
    }

    location /vstats/ {
        alias   %home%/%user%/web/%domain%/stats/;
        include %home%/%user%/conf/web/%domain%.auth*;
    }

    include     /etc/nginx/conf.d/phpmyadmin.inc*;
    include     /etc/nginx/conf.d/phppgadmin.inc*;
    include     /etc/nginx/conf.d/webmail.inc*;

    include     %home%/%user%/conf/web/snginx.%domain%.conf*;

if (-f $request_filename/index.html){
    rewrite (.*) $1/index.html break;
    }
if (-f $request_filename/index.php){
    rewrite (.*) $1/index.php;
    }
if (!-e $request_filename){
    rewrite (.*) /index.php;
    }
}


以下是我遇到的一些问题

typecho无法上传照片

应该是权限的问题?运行代码修改权限组即可。

chown -R admin:admin /home/admin/web/你的网站/public_html/usr/
Last Modified: January 16, 2025