如何将Laravel 5.8+Vue应用部署到cPanel共享主机的主域及子域
嘿,很高兴能帮你搞定这个多应用部署的问题!既然两个都是Vue+Laravel的组合,部署思路其实大同小异,只是域名配置和服务器站点划分要注意区分。下面我一步步给你捋清楚:
前置准备工作
- 先把服务器的基础环境搞定哈——Ubuntu(或者你用的其他Linux发行版)+ Nginx + PHP(建议8.1以上版本,和你开发环境尽量一致)+ MySQL/MariaDB,这些都得提前装好并正常运行。
- 域名解析:把你的主域名(比如
yourdomain.com)和子域名(比如app.yourdomain.com)都解析到你的服务器公网IP,解析类型选A记录就行。 - 代码上传:用Git拉取或者SFTP工具,把两个项目的代码分别传到服务器的不同目录,比如主应用放
/var/www/main-app,子应用放/var/www/sub-app,别混在一起哦。
主域名应用部署步骤
Laravel后端配置
- 进入主应用目录:
cd /var/www/main-app - 复制
.env.example为.env,然后编辑.env文件:- 配置数据库信息(DB_HOST、DB_DATABASE、DB_USERNAME、DB_PASSWORD)
- 把
APP_URL设为你的主域名:APP_URL=https://yourdomain.com(后面配SSL的话用https,先配http也可以)
- 安装PHP依赖:
composer install --optimize-autoloader --no-dev(--no-dev会跳过开发依赖,适合生产环境) - 生成应用密钥:
php artisan key:generate - 创建存储目录的软链接:
php artisan storage:link(这样前端才能访问存储的文件) - 如果需要初始化数据库,运行迁移:
php artisan migrate --force(--force避免生产环境误操作提示) - 设置目录权限,让Nginx能读写关键目录:
sudo chown -R www-data:www-data /var/www/main-app/storage /var/www/main-app/bootstrap/cache sudo chmod -R 775 /var/www/main-app/storage /var/www/main-app/bootstrap/cache
Vue前端配置
如果你的Vue是和Laravel整合在一起的(比如Vue代码放在resources/js目录):
- 安装前端依赖:
npm install - 打包生产环境代码:
npm run build(打包后的文件会自动放到Laravel的public目录)
如果是前后端完全分离的Vue项目:
- 在Vue项目的
.env里把API地址改成主域名的后端接口地址(比如VUE_APP_API_BASE_URL=https://yourdomain.com/api) - 打包:
npm run build - 把打包后的
dist目录里的所有文件复制到/var/www/main-app/public目录覆盖原文件,或者单独配置Nginx指向dist目录(不过整合的方式更省心)
子域名应用部署步骤
这部分和主域名的操作几乎一样,只是要注意目录和配置文件的区别:
- 进入子应用目录:
cd /var/www/sub-app - 复制并编辑
.env:把APP_URL设为你的子域名APP_URL=https://app.yourdomain.com,数据库可以选择和主应用共用一个库(用不同前缀区分表),或者单独新建一个库,看你的需求。 - 重复主域名的Laravel后端配置步骤:
composer install、生成密钥、存储链接、迁移、权限设置。 - 同样打包Vue代码,放到子应用的
public目录。
Nginx站点配置(核心步骤)
你需要给两个应用分别创建Nginx配置文件,让服务器知道不同域名对应哪个项目:
主域名配置
- 创建配置文件:
sudo nano /etc/nginx/sites-available/main-app - 粘贴以下配置(记得替换成你的域名和PHP版本):
server { listen 80; server_name yourdomain.com www.yourdomain.com; root /var/www/main-app/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; # 处理Laravel路由和Vue单页应用路由 } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 这里的PHP版本要和你服务器安装的一致,比如php8.1-fpm } location ~ /\.ht { deny all; # 禁止访问.htaccess文件 } } - 保存退出后,创建软链接到启用站点目录:
sudo ln -s /etc/nginx/sites-available/main-app /etc/nginx/sites-enabled/
子域名配置
创建配置文件:
sudo nano /etc/nginx/sites-available/sub-app粘贴以下配置:
server { listen 80; server_name app.yourdomain.com; root /var/www/sub-app/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; } location ~ /\.ht { deny all; } }创建软链接:
sudo ln -s /etc/nginx/sites-available/sub-app /etc/nginx/sites-enabled/测试Nginx配置是否正确:
sudo nginx -t,如果提示test is successful就没问题重启Nginx生效:
sudo systemctl restart nginx
配置SSL证书(推荐)
为了让网站走HTTPS,用Let's Encrypt免费证书就行,用certbot一键配置:
- 安装certbot和Nginx插件:
sudo apt install certbot python3-certbot-nginx - 申请并配置证书:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com -d app.yourdomain.com - 按照提示操作,选择是否重定向HTTP到HTTPS,推荐选2(强制HTTPS)
这样certbot会自动修改你的Nginx配置,开启HTTPS,还会自动续签证书。
额外优化建议
- 运行Laravel缓存命令提升性能:
php artisan config:cache、php artisan route:cache、php artisan view:cache - 如果是高流量场景,可以配置Nginx的静态资源缓存,比如对js、css、图片设置过期时间
- 开启PHP-FPM的优化配置,比如调整进程数,根据服务器CPU核心数来设置
内容的提问来源于stack exchange,提问作者Biruk Mamo
相关产品推荐
相关产品推荐

