香港AMD 4584PX服务器部署Laravel:PHP、Nginx与数据库环境怎么配
搭载 AMD 4584PX 的香港服务器部署 Laravel,建议先固定一套可复现的运行环境,再进行代码上线。下面以 Ubuntu Server 24.04 LTS 64 位、PHP 8.3、Nginx、MariaDB 10.11 为例,项目目录使用 /var/www/laravel-app,域名使用 example.com。这套组合适合 Laravel 10/11 的常见生产部署;如果项目的 composer.json 已锁定 PHP、数据库或扩展版本,应以项目要求为准。
上线目标是:Nginx 只暴露 Laravel 的 public 目录,PHP 请求交给 PHP-FPM,数据库仅监听本机,生产环境关闭调试信息,并完成依赖安装、数据库迁移、缓存构建、HTTP/HTTPS 访问验证和必要的回滚准备。AMD 处理器的高主频和 DDR5 内存可以为 PHP 请求处理、模板渲染和并发任务提供较好的基础,但 PHP-FPM 进程数、数据库索引、磁盘空间和应用代码仍然需要单独配置,不能仅依据 CPU 型号确定并发容量。

一、部署前确定环境和上线边界
1. 版本与目录规划
| 项目 | 示例配置 |
|---|---|
| 操作系统 | Ubuntu Server 24.04 LTS 64 位 |
| Web 服务 | Nginx |
| PHP 运行方式 | PHP 8.3-FPM |
| PHP 扩展 | mysql、mbstring、xml、curl、zip、bcmath、intl、gd、opcache |
| 数据库 | MariaDB 10.11,监听本机 |
| 应用目录 | /var/www/laravel-app |
| Laravel 公共目录 | /var/www/laravel-app/public |
| PHP-FPM Socket | /run/php/php8.3-fpm.sock |
| 网站域名 | example.com,需替换为实际域名 |
| 数据库名 | laravel_app |
| 部署用户 | deployuser,需替换为实际 SSH 用户 |
如果项目是 Laravel 10 或 Laravel 11,先检查仓库中的 composer.json:
cd /var/www/laravel-app
grep -E '"laravel/framework"|"php"' composer.json
还需要确认以下条件:
- 已经可以通过 SSH 登录服务器,并拥有
sudo权限。 - 域名的 A 记录已经指向服务器公网 IPv4 地址;如果暂时没有域名,可以先使用服务器 IP 做本地验证。
- 项目代码在 Git 仓库中,或已经准备好压缩包。
- 已经准备数据库名称、数据库用户和随机长密码。
- 生产环境已有可恢复的代码版本和数据库备份。
- 如果服务器上已经运行其他网站,不要直接覆盖现有 Nginx 配置或删除默认站点。
- 如果项目使用 Redis、队列、对象存储或第三方支付等依赖,应根据项目的
.env.example和composer.json逐项补齐,不要安装项目没有声明的服务。
2. 先确认系统、磁盘和端口
以下命令适用于 Ubuntu Server 24.04 LTS。它们只读取系统状态,不会修改服务:
cat /etc/os-release
uname -m
free -h
df -h
sudo ss -lntp
预期能够看到:
VERSION_ID="24.04"或兼容的 Ubuntu 24.04 系列信息;x86_64架构;- 根分区有足够空间保存项目、日志、数据库和备份;
- 80、443 端口没有被不相关服务占用。
如果 80 或 443 已被其他 Nginx、Apache 或容器占用,应先确认已有业务,不能直接停止服务。可使用以下命令定位进程:
sudo ss -lntp | grep -E ':80|:443'
二、安装 Nginx、PHP-FPM 和 Laravel 依赖
1. 更新软件索引并安装基础组件
sudo apt update
sudo apt install -y \
nginx \
mariadb-server \
mariadb-client \
php8.3-fpm \
php8.3-cli \
php8.3-mysql \
php8.3-mbstring \
php8.3-xml \
php8.3-curl \
php8.3-zip \
php8.3-bcmath \
php8.3-intl \
php8.3-gd \
php8.3-opcache \
composer \
git \
unzip \
curl
如果项目的 composer.json 要求 ext-redis,再安装对应扩展:
sudo apt install -y php8.3-redis
不要仅因为其他项目使用 Redis 就强行加入当前项目。扩展版本必须和当前 PHP 主版本一致,安装后检查:
php -v
php -m | sort
composer --version
预期可以看到 PHP 8.3、Composer 2.x,并在扩展列表中找到 curl、mbstring、mysqli 或 pdo_mysql、openssl、xml、zip 等项目常用扩展。
2. 启用并检查服务
sudo systemctl enable --now nginx
sudo systemctl enable --now mariadb
sudo systemctl enable --now php8.3-fpm
sudo systemctl --no-pager --full status nginx
sudo systemctl --no-pager --full status mariadb
sudo systemctl --no-pager --full status php8.3-fpm
三个服务都应显示 active (running)。如果 PHP-FPM 启动失败,先查看日志,不要反复重启:
sudo journalctl -u php8.3-fpm -n 80 --no-pager
常见原因是扩展配置错误、端口或 Socket 配置冲突,以及从其他 PHP 版本复制了不兼容的配置。
3. 设置生产环境 PHP 参数
以下配置写入单独的文件,不直接覆盖系统默认 php.ini。示例适合中小型 Laravel 应用,上传大小和内存值应根据实际业务调整:
sudo tee /etc/php/8.3/fpm/conf.d/99-laravel.ini > /dev/null <<'PHPINI'
memory_limit = 256M
upload_max_filesize = 32M
post_max_size = 40M
max_execution_time = 60
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 0
PHPINI
opcache.validate_timestamps=0 适合发布后的生产环境,但代码更新后必须重新加载 PHP-FPM,否则旧代码可能继续留在 OPCache 中。开发环境不建议使用这个值。
检查配置并重启 PHP-FPM:
sudo php-fpm8.3 -t
sudo systemctl restart php8.3-fpm
如果应用需要上传 32 MB 文件,Nginx 的 client_max_body_size 也必须不小于这个值,后文会配置为 32M。PHP 的 post_max_size 通常应略大于 upload_max_filesize,以容纳表单字段和其他请求内容。
三、创建 MariaDB 数据库和专用账号
1. 创建数据库用户
使用本机数据库连接进入 MariaDB:
sudo mariadb
在 MariaDB 提示符中执行以下 SQL。请先把密码替换为随机长密码,不要直接使用示例字符串:
CREATE DATABASE laravel_app
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
CREATE USER 'laravel_app'@'127.0.0.1'
IDENTIFIED BY '请替换为随机长密码';
GRANT ALL PRIVILEGES ON laravel_app.* TO 'laravel_app'@'127.0.0.1';
FLUSH PRIVILEGES;
EXIT;
这里使用 'laravel_app'@'127.0.0.1',因此 Laravel 的 DB_HOST 也应配置为 127.0.0.1。localhost 可能优先使用 Unix Socket,和 127.0.0.1 的授权记录不是同一个匹配项。
测试数据库账号:
mariadb -h 127.0.0.1 -u laravel_app -p -e "SELECT VERSION(), CURRENT_USER();"
输入密码后,预期可以返回 MariaDB 版本和当前用户。如果出现 Access denied,重点检查数据库用户名、密码、主机部分是否一致,不要立即开放数据库公网端口。
2. 设置数据库连接参数
Laravel 的 .env 示例配置如下:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://example.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_app
DB_USERNAME=laravel_app
DB_PASSWORD=请替换为数据库密码
生产环境不要把 APP_DEBUG 设置为 true。调试模式可能把路径、SQL、环境变量或堆栈信息返回给访问者。
如果需要在迁移前保存数据库备份,可以使用:
sudo install -d -m 700 /var/backups/laravel
sudo mariadb-dump \
--single-transaction \
--routines \
--events \
laravel_app \
| sudo tee "/var/backups/laravel/laravel_app-$(date +%F-%H%M).sql" > /dev/null
该备份命令主要适合 InnoDB 表。备份文件包含应用数据,权限设置为仅 root 可访问,不能放在网站 public 目录下。
四、部署 Laravel 代码和 Composer 依赖
1. 创建应用目录并拉取代码
下面以部署用户 deployuser 为例。请将它替换为实际 SSH 用户名;如果代码来自私有仓库,还要先配置对应的 Git 访问凭据。
sudo mkdir -p /var/www
sudo chown deployuser:www-data /var/www
sudo -u deployuser -H git clone \
https://example.com/your-project.git \
/var/www/laravel-app
sudo chown -R deployuser:www-data /var/www/laravel-app
如果项目已经以压缩包形式上传,可以解压到同一目录,但不要把 .env、数据库备份或包含密钥的文件放到 public 目录中。
2. 安装 PHP 依赖
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
composer install \
--no-dev \
--prefer-dist \
--optimize-autoloader \
--no-interaction
'
生产环境应优先使用仓库中的 composer.lock,不要使用 composer update 代替安装。composer update 可能升级大量依赖,导致当前代码和数据库迁移行为发生变化。
安装完成后执行平台依赖检查:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
composer check-platform-reqs
'
如果出现 ext-xxx missing,应根据缺失扩展安装对应的 php8.3-xxx 软件包,然后重启 PHP-FPM。不要使用 --ignore-platform-reqs 掩盖生产环境依赖问题。
3. 创建 .env 并生成应用密钥
首次部署可以复制环境模板:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
cp .env.example .env
'
然后编辑配置:
sudo -u deployuser -H nano /var/www/laravel-app/.env
至少确认以下内容已经正确填写:
APP_NAME=Laravel
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=https://example.com
LOG_CHANNEL=stack
LOG_LEVEL=warning
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_app
DB_USERNAME=laravel_app
DB_PASSWORD=请替换为数据库密码
首次安装时生成密钥:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan key:generate --force
'
如果这是已有生产项目,不能随意重新生成 APP_KEY。重新生成可能导致历史加密 Cookie、密码重置令牌或其他加密数据失效。此时应从原有安全备份恢复 .env 中的 APP_KEY。
设置应用目录权限:
sudo chown -R deployuser:www-data /var/www/laravel-app
sudo chmod 640 /var/www/laravel-app/.env
sudo chmod -R ug+rwX /var/www/laravel-app/storage
sudo chmod -R ug+rwX /var/www/laravel-app/bootstrap/cache
不建议使用 chmod -R 777。Laravel 只需要让 PHP-FPM 写入 storage 和 bootstrap/cache,代码目录本身不应对所有用户开放写权限。
4. 执行迁移并构建 Laravel 缓存
执行迁移前应确认数据库备份已经生成。首次部署或经过验证的升级可以执行:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan migrate --force
'
--force 会跳过生产环境交互确认,适合自动化或明确批准的上线操作。数据库迁移可能修改表结构,执行前必须确认迁移文件来自正确代码版本。
随后清理旧缓存并生成生产缓存:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan optimize:clear &&
php artisan config:cache &&
php artisan view:cache
'
如果项目路由中存在闭包,执行 php artisan route:cache 可能失败。只有确认路由可缓存时再执行:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan route:cache
'
如果项目使用本地文件存储,还需要创建符号链接:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan storage:link
'
检查应用状态:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan about
'
如果 about 报数据库连接错误,先检查 .env 和数据库账号,不要直接删除缓存或重装数据库。
五、配置 Nginx 访问 Laravel
1. 创建站点配置
先备份可能已有的配置文件:
sudo install -d -m 700 /var/backups/laravel
sudo cp -a /etc/nginx/sites-available/default \
"/var/backups/laravel/nginx-default-$(date +%F-%H%M).conf" 2>/dev/null || true
创建 Laravel 站点配置:
sudo tee /etc/nginx/sites-available/laravel-app > /dev/null <<'NGINX'
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/laravel-app/public;
index index.php index.html;
charset utf-8;
client_max_body_size 32M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico {
access_log off;
log_not_found off;
}
location = /robots.txt {
access_log off;
log_not_found off;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
NGINX
必须把 server_name 改成实际域名。root 必须指向 Laravel 的 public 目录,不能指向项目根目录,否则 .env、源代码或其他敏感文件可能被错误暴露。
启用站点:
sudo ln -s /etc/nginx/sites-available/laravel-app \
/etc/nginx/sites-enabled/laravel-app
如果 sites-enabled 中已经有同名软链接,不要重复创建。修改配置后先测试语法:
sudo nginx -t
预期结果为:
syntax is ok
test is successful
只有测试成功后才重新加载 Nginx:
sudo systemctl reload nginx
2. 验证 Nginx 与 PHP-FPM 连接
本机带 Host 头测试:
curl -I http://127.0.0.1 \
-H 'Host: example.com'
正常结果可能是 200、301 或 302。如果返回 502 Bad Gateway,通常是 PHP-FPM 没有运行、Socket 路径错误或权限异常;如果返回默认 Nginx 页面,通常是域名没有匹配到当前站点配置。

检查 PHP-FPM Socket:
sudo ss -xl | grep php
ls -l /run/php/php8.3-fpm.sock
Nginx 配置中的 Socket 必须和实际路径一致。如果系统使用的是 PHP 8.2,就应改为对应的 /run/php/php8.2-fpm.sock,同时检查服务名称和扩展版本,不能只修改 Nginx 一处。
3. 配置 HTTPS
确认域名解析已经生效、80 端口可以从公网访问后,再安装证书工具:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
证书工具会修改 Nginx 配置,执行前应保留原配置备份。证书申请完成后测试自动续期:
sudo certbot renew --dry-run
使用 HTTPS 后,将 .env 中的 APP_URL 设置为:
APP_URL=https://example.com
如果应用生成的链接仍然是 HTTP,检查 APP_URL、代理头配置和应用缓存,修改后重新执行:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan config:clear &&
php artisan config:cache
'
六、防火墙和 PHP-FPM 进程数调整
1. 开放必要端口
如果服务器使用 UFW,可以只开放 SSH、HTTP 和 HTTPS:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw status
确认 SSH 端口规则已经存在后再启用 UFW:
sudo ufw enable
启用防火墙可能导致当前 SSH 会话断开,尤其是 SSH 使用了非标准端口时。应先添加实际 SSH 端口规则,并保留一个已登录的备用会话。数据库 3306 不需要对公网开放,Laravel 通过本机连接即可。
2. 根据内存调整 PHP-FPM
PHP-FPM 的 pm.max_children 不是越大越好。进程过多会争抢内存并导致系统交换,进程过少则会在高峰期排队。先观察当前 PHP-FPM 进程的内存使用:
ps -o pid,ppid,rss,cmd -C php-fpm8.3
rss 的单位通常是 KB。可以用一段时间的平均 PHP-FPM 进程内存估算:
PHP-FPM 可用内存 ÷ 单个工作进程平均内存 ≈ pm.max_children可用内存还要扣除操作系统、MariaDB、Nginx、文件缓存和安全余量。例如一台 8 GB 内存服务器,如果为 PHP-FPM 预留约 3 GB,而单个工作进程长期约占 80~120 MB,初始值可以从 20~30 个进程测试,再依据内存、响应时间和队列长度调整。这个范围只是配置起点,不代表固定容量。
编辑 PHP-FPM 池配置前先备份:
sudo cp -a /etc/php/8.3/fpm/pool.d/www.conf \
"/var/backups/laravel/php-fpm-www-$(date +%F-%H%M).conf"
然后修改 /etc/php/8.3/fpm/pool.d/www.conf 中的 pm 参数,完成后检查并重新加载:
sudo php-fpm8.3 -t
sudo systemctl reload php8.3-fpm
如果出现内存持续上涨、系统开始使用 Swap 或 PHP 请求大量超时,应降低 pm.max_children,并检查慢查询、外部接口调用和应用代码,而不是继续增加进程数。
七、常见失败情况和处理顺序
1. 页面返回 502
先从服务状态和 Socket 开始排查:
sudo systemctl status php8.3-fpm --no-pager
sudo journalctl -u php8.3-fpm -n 80 --no-pager
sudo tail -n 80 /var/log/nginx/error.log
判断方式:
- PHP-FPM 未运行:修复 PHP-FPM 配置后启动服务。
- Socket 文件不存在:确认 PHP-FPM 版本和 Nginx 的
fastcgi_pass路径。 - Socket 存在但权限错误:检查 Nginx 用户、PHP-FPM 池配置及系统日志。
- PHP-FPM 正常但请求超时:检查
pm.max_children、数据库响应和应用日志。
2. 页面返回 500
查看 Laravel 日志:
sudo tail -n 100 /var/www/laravel-app/storage/logs/laravel.log
常见原因包括:
.env中缺少APP_KEY;- 数据库账号或密码错误;
storage、bootstrap/cache没有写权限;- 修改
.env后仍在使用旧的配置缓存; - PHP 扩展缺失;
- 代码版本和数据库结构不匹配。
确认环境变量已修正后,可以清理并重建缓存:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan optimize:clear &&
php artisan config:cache &&
php artisan view:cache
'
不要在生产环境通过开启 APP_DEBUG=true 来长期处理错误。必要时可在受控维护窗口短暂使用,但确认问题后应立即关闭并清理缓存。
3. 数据库连接失败
先从命令行验证同一组账号:
mariadb \
-h 127.0.0.1 \
-u laravel_app \
-p \
-e "SELECT 1;"
然后检查 MariaDB 服务:
sudo systemctl status mariadb --no-pager
sudo ss -lntp | grep 3306
如果命令行可以连接而 Laravel 不能连接,通常是 .env 配置缓存未刷新,或者 DB_HOST、DB_DATABASE、DB_USERNAME 和数据库实际授权不一致。检查完成后执行 php artisan optimize:clear 和 config:cache。
4. 页面 404、显示 Nginx 默认页或暴露静态目录
按以下顺序检查:
sudo nginx -T | grep -A 20 -B 5 'server_name example.com'
ls -ld /var/www/laravel-app/public
ls -l /var/www/laravel-app/public/index.php
重点确认:
server_name与访问域名一致;root指向/var/www/laravel-app/public;public/index.php存在;try_files指向/index.php?$query_string;- Nginx 配置测试通过并已经 reload。
5. 上传文件返回 413
同时检查 Nginx 和 PHP 限制:
sudo nginx -T | grep client_max_body_size
php -i | grep -E 'upload_max_filesize|post_max_size'
Nginx 的 client_max_body_size、PHP 的 upload_max_filesize 和 post_max_size 必须共同满足业务大小。修改后分别执行:
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl restart php8.3-fpm
6. Composer 或前端构建失败
Composer 失败时先确认 PHP 版本和扩展:
php -v
php -m
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
composer check-platform-reqs
'
如果项目存在 package.json,前端构建使用的 Node.js 版本应遵循项目的 engines 字段或锁文件要求:
cd /var/www/laravel-app
grep -n '"engines"' package.json 2>/dev/null || true
node -v
npm -v
确认版本后再执行:
npm ci
npm run build
如果仓库已经提交了 public/build,且上线流程不要求服务器重新打包,可以不在生产机执行 Node.js 构建。
八、上线验收与失败回滚
1. 上线验收清单
依次执行以下检查:
sudo systemctl is-active nginx mariadb php8.3-fpm
sudo nginx -t
sudo php-fpm8.3 -t
应用侧检查:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan about &&
php artisan migrate:status
'
访问侧检查:
curl -I https://example.com
curl -fsS https://example.com/health || true
如果项目没有 /health 路由,可以直接访问首页或一个不需要登录的业务页面。验收时至少确认:
- 首页能够返回预期的 200、301 或 302;
- 页面没有 PHP 错误或数据库异常;
- 登录、表单提交和文件上传等核心流程正常;
APP_DEBUG=false;.env不能通过 HTTP 访问;- HTTPS 证书有效;
- Nginx、PHP-FPM 和 MariaDB 均处于运行状态;
storage/logs没有持续增长的致命错误;- 数据库迁移状态符合当前代码版本。
2. 代码回滚
上线前记录当前版本和配置:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
git rev-parse HEAD
'
sudo cp -a /var/www/laravel-app/.env \
"/var/backups/laravel/env-$(date +%F-%H%M)"
如果新代码出现问题,可以回到已经验证过的提交:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
git checkout <上一个稳定提交ID> &&
composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction &&
php artisan optimize:clear &&
php artisan config:cache &&
php artisan view:cache
'
sudo systemctl reload php8.3-fpm
<上一个稳定提交ID> 必须替换为真实提交 ID。回滚代码不等于回滚数据库结构。如果新版本已经执行了不可逆迁移,应根据迁移文件设计和备份情况处理,不能直接假设 migrate:rollback 一定安全。
3. 数据库回滚
数据库恢复会覆盖备份时刻之后的变更,属于高影响操作。执行前应:

- 进入维护模式或暂时停止写入;
- 再保存一份当前数据库;
- 确认要恢复的备份文件;
- 通知相关人员该时间点之后的数据可能丢失。
先进入维护模式并保存当前库:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan down --render="errors::503"
'
sudo mariadb-dump \
--single-transaction \
--routines \
--events \
laravel_app \
| sudo tee "/var/backups/laravel/laravel_app-before-restore-$(date +%F-%H%M).sql" > /dev/null
确认备份文件后恢复。下面的文件名仅为示例,必须替换为实际备份路径:
sudo sh -c 'mariadb laravel_app < /var/backups/laravel/laravel_app-YYYY-MM-DD-HHMM.sql'
恢复完成后检查表和应用迁移状态:
sudo mariadb laravel_app -e "SHOW TABLES;"
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan migrate:status &&
php artisan optimize:clear &&
php artisan config:cache
'
确认代码、数据库和缓存一致后退出维护模式:
sudo -u deployuser -H bash -lc '
cd /var/www/laravel-app &&
php artisan up
'
sudo systemctl reload php8.3-fpm
sudo systemctl reload nginx
4. Nginx 配置回滚
如果新配置导致 Nginx 检查失败或网站无法访问,先恢复备份文件,再测试并 reload:
sudo cp -a /var/backups/laravel/nginx-default-YYYY-MM-DD-HHMM.conf \
/etc/nginx/sites-available/default
sudo nginx -t
sudo systemctl reload nginx
对于当前 Laravel 站点配置,也可以在修改前单独备份:
sudo cp -a /etc/nginx/sites-available/laravel-app \
"/var/backups/laravel/laravel-app-nginx-$(date +%F-%H%M).conf"
最终验收应同时覆盖代码版本、PHP-FPM、Nginx、数据库连接、HTTPS、文件权限、Laravel 缓存和数据库备份。只有这些项目均通过,搭载 AMD 4584PX 的香港服务器才算完成一套可维护的 Laravel 生产部署,而不是仅仅把首页临时显示出来。