部署指南

详细的 XinAdmin 生产环境部署教程和最佳实践

当你准备将 XinAdmin 应用部署到生产环境时,有一些重要的事情可以确保你的应用尽可能高效地运行。在本文中,我们将介绍一些确保你的 XinAdmin 应用正确部署的好起点。

Tip

XinAdmin 的部署非常简单,如果你服务于第三方客户,我们推荐你使用 Github + Laravel Cloud 一键部署,无需管理服务器, 一键自动扩展、数据库、缓存、存储和安全。

服务器需求

确保你的服务器符合 XinAdmin 的运行环境,并且安装了相关的扩展。

  • PHP >= 8.2
  • Mysql >= 5.7
  • Redis >= 3.0
  • Nginx、Apache、FrankenPHP 等服务器软件就绪
  • PHP扩展:Ctype、cURL、DOM、Fileinfo、Filter、Hash、Mbstring、OpenSSL、PCRE、PDO、Session、Tokenizer、XML

前端打包

在部署到服务器之前,需要先在本地将前端资源文件打包,执行下面命令进行打包:

npm run build
# or
pnpm run build

打包后,会生成 /public/assets 资源 和 /public/index.html 文件,如果你使用 Git 来管理你的项目,可以将打包好的文件添加到 Git。

Warning

打包后的静态资源文件 /public/assets 不会覆盖之前的文件,如果之前有冗余的文件,请先删除后再打包。

前端资源单独部署

如果你希望将前端资源文件分开到单独的网站进行部署,需要先修改前端API的请求路径,修改文件 .env.productionVITE_BASE_URL 的值为你的后端地址 :

# /.env.production
# 修改为你后端的网站地址:
VITE_BASE_URL=https://example.com

之后重新运行前端打包,将生成的 /public/assets 资源 和 /public/index.html 文件转移到其他网站。

后端部署

你可以将 XinAdmin 作为正常的网站进行部署,在服务器中创建网站目录并且通过 Git 拉取最新的项目文件,线上环境可以选择不上传 /web 目录, 前端每次重新打包后,只将 /public/assets 目录 和 /public/index.html 文件,同步到服务器上即可

Info

如果你不考虑将API后端和前端项目作为两个网站部署,请确保 /public/assets 资源 和 /public/index.html 文件存在。

你需要使用 Nginx、Apache 等服务器软件运行站点,站点的根目录配置为 XinAdmin 的项目目录,运行目录为 /public,如无运行目录配置项,请直接将根目录配置为 /public

如果您将应用部署到运行 Nginx 的服务器上,可以使用以下配置文件作为配置 Web 服务器的起点。

server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    root /srv/example.com/public;
 
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
 
    index index.html index.php index.htm default.php default.htm default.html;
 
    charset utf-8;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
    
    include enable-php-80.conf; # PHP 引用配置
}

默认情况下所有请求由前端 index.html 处理,前端会通过 /index.php 来访问后端接口,如果你将前端资源单独部署,可以使用下面配置隐藏 index.php

# 单独部署时,可以直接将所有请求代理到 index.php 中
location / {
    try_files $uri $uri/ /index.php?$query_string;
}

如果你希望一个站点部署,并且隐藏 index.php 可以将前端API的请求路径修改为 /api,然后将所有 /api 请求代理到 /index.php

location /api {
    try_files $uri $uri/ /index.php?$query_string;
}
Info

这个文件可能需要根据服务器的配置进行定制。如果遇到特殊情况确实需要协助,目前提供付费部署支持服务,收费标准为 100 元/次。先付费后服务,感谢理解 🙏

优化

XinAdmin 支持所有 Laravel 生产环境优化,包括配置、事件、路由和视图。

你可以使用一下命令一键生成缓存:

php artisan optimize
Tip

更多部署优化,你可以参考 Laravel 文档

FrankenPHP

XinAdmin 提供了开箱即用的 FrankenPHP 部署方案,你可以参考 FrankenPHP 文档