laravel site1 env
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
随着互联网技术的飞速发展,Laravel 框架凭借其优雅的语法设计、强大的功能模块以及活跃的社区生态,已成为众多企业和开发者构建现代化 Web 应用的首选工具之一,云虚拟主机以其成本低廉、部署灵活、运维简便等优势,成为中小型项目上线初期的理想选择。
在实际开发中,许多用户面临一个常见需求:如何在同一台云虚拟主机上安全、稳定地运行多个独立的 Laravel 项目?这不仅涉及目录结构规划、环境配置,还需要解决域名解析、数据库隔离和性能调优等问题。
本文将手把手带你完成 在同一台 Linux 云服务器上部署两个独立 Laravel 网站 的全过程,涵盖环境准备、项目创建、Nginx 虚拟主机配置、数据库分离、HTTPS 启用及安全优化策略,助你实现多站点共存且互不干扰的目标。
环境准备:选择合适的云主机并确认基础依赖
在开始之前,首先要确保所选云主机满足 Laravel 运行的基本要求,推荐使用主流云服务商(如阿里云、腾讯云、华为云或海外平台 DigitalOcean、Vultr)提供的轻量级云服务器(Ubuntu 20.04 LTS 或更新版本),以便获得更高的自定义权限。
Laravel 所需最低环境要求:
- PHP 版本 ≥ 8.1(建议使用 PHP 8.2 或更高版本以获取更好的性能)
- 已安装 Composer 包管理工具
- 启用必要 PHP 扩展:
OpenSSLPDOMbstringTokenizerXMLCtypeJSONBCMathFileinfo
- Web 服务器支持:Nginx 或 Apache
- 数据库系统:MySQL 5.7+ 或 MariaDB 10.3+
- 支持 Git(便于后续代码拉取与更新)
✅ 提示:大多数现代云主机镜像已预装 LAMP/LEMP 环境,但建议手动检查并升级至最新稳定版组件。
本文以 Ubuntu 20.04 + Nginx + PHP 8.2 + MySQL 组合作为演示环境。
创建两个独立的 Laravel 项目
为了保证各网站之间的完全隔离,避免文件冲突和权限混乱,应为每个 Laravel 应用分配独立的根目录。
创建项目目录结构
sudo mkdir -p /var/www/laravel-site1 sudo mkdir -p /var/www/laravel-site2
设置适当的所有者权限(假设当前用户为 ubuntu):
sudo chown -R $USER:$USER /var/www/laravel-site1 sudo chown -R $USER:$USER /var/www/laravel-site2
使用 Composer 初始化 Laravel 项目
进入 /var/www 目录并创建两个 Laravel 应用:
cd /var/www composer create-project --prefer-dist laravel/laravel laravel-site1 composer create-project --prefer-dist laravel/laravel laravel-site2
❌ 原文中存在一处明显错误:
composer create-preview是无效命令,正确应为create-project。
设置目录写入权限
Laravel 需要对 storage 和 bootstrap/cache 目录具有写权限,执行以下命令:
chmod -R 755 laravel-site1/storage laravel-site1/bootstrap/cache chmod -R 755 laravel-site2/storage laravel-site2/bootstrap/cache
也可使用更精细的权限控制(生产环境中推荐):
sudo chgrp -R www-data storage bootstrap/cache sudo chmod -R 775 storage bootstrap/cache
配置域名与 Nginx 虚拟主机
为了让两个 Laravel 项目通过不同域名访问,需要配置 Nginx 的虚拟主机(Virtual Host),实现基于域名的请求路由。
准备域名解析
假设你拥有主域名 example.com,可以为其添加两条 DNS A 记录:
| 域名 | 指向 IP 地址 |
|---|---|
| site1.example.com | 你的云主机公网 IP |
| site2.example.com | 你的云主机公网 IP |
等待 DNS 生效后(通常几分钟到几小时),即可进行下一步配置。
编写 Nginx 虚拟主机配置文件
配置 site1.example.com
创建配置文件:
sudo nano /etc/nginx/sites-available/site1.conf
server {
listen 80;
server_name site1.example.com;
root /var/www/laravel-site1/public;
index index.php index.html index.htm;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
error_log /var/log/nginx/site1_error.log;
access_log /var/log/nginx/site1_access.log;
}
配置 site2.example.com
复制上述配置并修改关键字段:
sudo cp /etc/nginx/sites-available/site1.conf /etc/nginx/sites-available/site2.conf sudo nano /etc/nginx/sites-available/site2.conf
仅需更改以下两行:
server_name site2.example.com; root /var/www/laravel-site2/public;
同时调整日志路径(可选):
error_log /var/log/nginx/site2_error.log; access_log /var/log/nginx/site2_access.log;
启用站点并测试配置
将配置链接到 sites-enabled 目录:
sudo ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/site2.conf /etc/nginx/sites-enabled/
移除默认站点(如有):
sudo rm /etc/nginx/sites-enabled/default
测试 Nginx 配置是否正确:
sudo nginx -t
若输出 “syntax is ok” 且无错误,则重启服务生效:
sudo systemctl reload nginx
数据库与环境变量隔离
为防止数据交叉污染,必须为每个 Laravel 项目创建独立的数据库和数据库用户。
登录 MySQL 并创建数据库与用户
CREATE DATABASE laravel_site1 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE DATABASE laravel_site2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'laravel_user1'@'localhost' IDENTIFIED BY 'StrongPass!2025#'; CREATE USER 'laravel_user2'@'localhost' IDENTIFIED BY 'SecurePass@2025$'; GRANT ALL PRIVILEGES ON laravel_site1.* TO 'laravel_user1'@'localhost'; GRANT ALL PRIVILEGES ON laravel_site2.* TO 'laravel_user2'@'localhost'; FLUSH PRIVILEGES;
🔐 强烈建议使用高强度密码,并避免在
.env中使用明文敏感信息(可结合 Vault 或 CI/CD 加密机制进一步保护)。
配置各自的 .env 文件
编辑第一个项目的环境配置:
nano /var/www/laravel-site1/.env
设置如下:
APP_NAME=LaravelSiteOne APP_ENV=production APP_KEY= APP_DEBUG=false APP_URL=http://site1.example.com DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_site1 DB_USERNAME=laravel_user1 DB_PASSWORD=StrongPass!2025#
同理配置第二个项目:
nano /var/www/laravel-site2/.env
APP_NAME=LaravelSiteTwo APP_ENV=production APP_KEY= APP_DEBUG=false APP_URL=http://site2.example.com DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_site2 DB_USERNAME=laravel_user2 DB_PASSWORD=SecurePass@2025$


