Laravel远程部署最佳实践:本地项目部署至Siteground方案咨询
Laravel项目部署到Siteground的最佳实践:Git+SSH vs FTP
针对你把本地开发的Laravel项目部署到Siteground的需求,Git+SSH绝对是远优于FTP的选择,也是现代Web项目部署的行业最佳实践。下面我会详细拆解原因、具体操作步骤,以及额外的优化建议:
为什么不推荐FTP?
FTP(包括SFTP)虽然上手简单,但存在诸多痛点:
- 版本混乱风险:手动上传文件容易遗漏、覆盖,无法追溯代码变更历史,出问题后很难回滚。
- 效率低下:大项目需要上传所有文件,哪怕只是修改了一行代码,耗时远高于Git的增量拉取。
- 权限与安全隐患:手动设置文件权限容易出错,FTP默认明文传输(SFTP虽加密,但流程缺乏规范)。
- 无自动化可能:无法实现一键部署或CI/CD,每次部署都要重复手动操作。
Git+SSH的核心优势
选择Git+SSH部署,能完美解决FTP的所有问题:
- 版本控制联动:本地开发的代码推送到Git仓库后,服务器直接拉取最新版本,确保代码与本地完全一致,还能随时回滚到历史稳定版本。
- 高效增量更新:只拉取变更的文件,大项目部署速度提升明显。
- 安全可靠:SSH加密传输数据,Siteground完全支持SSH访问,配合密钥免密登录,比FTP更安全。
- 可自动化扩展:后续可以通过脚本或CI/CD工具实现一键部署,甚至代码推送后自动部署到服务器。
Siteground上Git+SSH部署的具体步骤
1. 准备远程Git仓库
确保你的本地Laravel项目已经初始化Git,并推送到远程仓库(推荐用私有仓库,避免代码泄露)。
2. 开启Siteground的SSH访问
登录Siteground后台,找到「SSH Access」或「SSH Keys」选项:
- 生成服务器端的SSH密钥,或者上传你本地的SSH公钥(
~/.ssh/id_rsa.pub内容),这样服务器可以免密拉取Git仓库。
3. 连接到Siteground服务器
你可以用本地终端通过SSH连接:
ssh your_siteground_username@your_server_ip
也可以直接使用Siteground后台提供的Web SSH工具,无需本地终端。
4. 配置服务器目录结构
Siteground的Web根目录默认是public_html,而Laravel的入口文件在public目录下,推荐两种配置方式:
- 方式一:将Laravel项目放在
public_html的上层目录(比如~/laravel-project),然后将public_html软链到项目的public目录:rm -rf public_html ln -s ~/laravel-project/public public_html - 方式二:直接在
public_html目录下拉取代码,然后修改Siteground站点的文档根目录为public_html/public(需要在后台站点设置中调整)。
5. 拉取Git代码
在服务器的目标目录下执行拉取命令:
# 首次部署 git clone git@your-repo-url.git # 后续更新 git checkout main # 切换到生产分支 git pull origin main
6. 安装生产环境依赖
执行Composer安装命令,跳过开发依赖并优化自动加载:
composer install --no-dev --optimize-autoloader
7. 配置环境变量
复制示例环境文件,修改生产环境配置(数据库、APP_URL、缓存驱动等):
cp .env.example .env # 编辑.env文件,填写正确的配置 nano .env
然后生成应用密钥:
php artisan key:generate
8. 设置正确的文件权限
确保Laravel的存储和缓存目录有合适的权限:
chmod -R 775 storage bootstrap/cache chown -R your_username:www-data storage bootstrap/cache
(Siteground的Web用户组一般是www-data,如果不对可以咨询客服确认)
9. 优化生产环境性能
缓存配置和路由,提升应用运行速度:
php artisan config:cache php artisan route:cache php artisan view:cache
额外的最佳实践建议
- 分支规范:本地用
dev分支开发,测试通过后合并到main分支再部署,避免直接部署未验证的代码。 - 备份机制:部署前务必备份服务器上的代码和数据库,Siteground自带自动备份功能,也可以手动执行
mysqldump备份数据库。 - 自动化部署脚本:可以写一个简单的bash脚本,把拉取代码、安装依赖、缓存配置等步骤整合,实现一键部署:
给脚本添加执行权限:# deploy.sh #!/bin/bash echo "Pulling latest code..." git pull origin main echo "Installing dependencies..." composer install --no-dev --optimize-autoloader echo "Caching config and routes..." php artisan config:cache php artisan route:cache echo "Deployment completed!"chmod +x deploy.sh,之后部署只需运行./deploy.sh。 - 避免服务器端改代码:所有代码变更都在本地完成,推送到Git后再拉取到服务器,确保代码版本统一。
关于FTP的最后说明
如果你实在对Git不熟悉,或者项目极小,FTP也能临时用,但一定要注意:
- 上传所有文件(包括隐藏文件如
.env) - 严格设置文件权限
- 每次部署前手动备份代码
但长期来看,Git+SSH的流程更规范、更高效,值得花一点时间学习。
内容的提问来源于stack exchange,提问作者Luca4k4




