试用用 Docker 或 php artisan serve。正式站把网站根目录指到 public,PHP 用 8.4,并每分钟跑定时任务。
宝塔(最短)
- 网站根目录选项目里的
public,PHP 选 8.4。 - 给
storage、bootstrap/cache运行用户可写(一般是 www)。 - 终端进入项目目录执行
bash install.sh,或打开/install网页装。 - 计划任务每分钟跑后台「监控」里复制出来的那一行(必须是
/bin/php,不要php-fpm)。
/www/server/php/84/bin/php /www/wwwroot/你的站点/artisan schedule:run >> /dev/null 2>&1
PHP 环境
需要 PHP 8.4 或更高,并打开这些扩展:pdo、mbstring、openssl、tokenizer、xml、ctype、json、fileinfo、curl。用 MySQL 再开 pdo_mysql;用 SQLite 再开 pdo_sqlite。
图片处理需要 gd 或 imagick,没有也能装,只是水印和缩略图不可用。建议在 php.ini 里:
memory_limit = 256M
upload_max_filesize = 32M
post_max_size = 32M
max_execution_time = 60
date.timezone = Asia/Shanghai
改完后重启 php-fpm。目录 storage 和 bootstrap/cache 必须可写,并执行过 php artisan storage:link。
MySQL
正式站点建议 MySQL 5.7 / 8.0 或 MariaDB 10.3+,字符集用 utf8mb4。先建空库,再把账号写进 .env。
CREATE DATABASE video CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'video'@'127.0.0.1' IDENTIFIED BY '请换成强密码';
GRANT ALL ON video.* TO 'video'@'127.0.0.1';
FLUSH PRIVILEGES;
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=video
DB_USERNAME=video
DB_PASSWORD=请换成强密码
试用可以继续用 SQLite(DB_CONNECTION=sqlite,文件 database/database.sqlite)。改完 .env 后执行 php artisan config:clear。
nginx
网站根目录必须是项目里的 public,不要指到项目根。
server {
listen 80;
server_name www.example.com;
root /var/www/laravideo/public;
index index.php;
charset utf-8;
client_max_body_size 32m;
location / {
try_files /html$uri/index.html /html$uri $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
第一行 try_files 会优先读后台生成的磁盘静态页(public/html)。没有文件时再交给 PHP。.env 写上 APP_URL、APP_ENV=production、APP_DEBUG=false。反向代理再设 TRUST_PROXIES=*。
搜索引擎
前台 /robots.txt 默认禁止 /admin、/install、/member,并带上 sitemap。站点地图在 /sitemap.xml。定时任务见「定时」。