Loading... # Ubuntu系统上Laravel项目的部署步骤 部署Laravel项目到Ubuntu服务器涉及多个步骤,包括环境配置、依赖安装、服务器设置以及安全性优化。以下是一个详尽的指南,帮助您在Ubuntu系统上成功部署Laravel应用。 ## 目录 1. [前提条件](#前提条件) 2. [更新系统软件包](#更新系统软件包) 3. [安装必要的软件](#安装必要的软件) - [安装Apache/Nginx](#安装apachenginx) - [安装PHP及扩展](#安装php及扩展) - [安装数据库(MySQL/MariaDB)](#安装数据库mysqlmariadb) - [安装Composer](#安装composer) 4. [配置数据库](#配置数据库) 5. [获取Laravel项目代码](#获取laravel项目代码) 6. [配置环境文件](#配置环境文件) 7. [安装项目依赖](#安装项目依赖) 8. [生成应用密钥](#生成应用密钥) 9. [配置Web服务器](#配置web服务器) - [Apache配置](#apache配置) - [Nginx配置](#nginx配置) 10. [设置文件权限](#设置文件权限) 11. [优化Laravel配置](#优化laravel配置) 12. [配置队列和缓存](#配置队列和缓存) 13. [启用HTTPS](#启用https) 14. [常见问题排查](#常见问题排查) 15. [总结](#总结) 16. [附录:常用命令汇总表](#附录常用命令汇总表) ## 前提条件 在开始部署之前,确保您具备以下条件: - 一台运行Ubuntu(推荐20.04 LTS或更新版本)的服务器。 - 具有sudo权限的用户账户。 - 基本的Linux命令行操作知识。 - 已完成Laravel项目的开发,并已在本地环境中测试通过。 ## 更新系统软件包 首先,确保您的系统软件包是最新的,以避免潜在的安全漏洞和兼容性问题。 ```bash sudo apt update && sudo apt upgrade -y ``` **解释:** - `sudo`:以超级用户权限执行命令。 - `apt update`:更新软件包列表。 - `apt upgrade -y`:升级所有已安装的软件包,并自动确认。 ## 安装必要的软件 ### 安装Apache/Nginx Laravel支持多种Web服务器,常用的有Apache和Nginx。以下分别介绍安装步骤。 #### 安装Apache ```bash sudo apt install apache2 -y ``` **解释:** - `apt install apache2 -y`:使用APT包管理器安装Apache Web服务器,并自动确认。 安装完成后,启用并启动Apache服务: ```bash sudo systemctl enable apache2 sudo systemctl start apache2 ``` #### 安装Nginx ```bash sudo apt install nginx -y ``` **解释:** - `apt install nginx -y`:安装Nginx Web服务器,并自动确认。 安装完成后,启用并启动Nginx服务: ```bash sudo systemctl enable nginx sudo systemctl start nginx ``` ### 安装PHP及扩展 Laravel 需要PHP及其扩展的支持。以下步骤安装PHP 8.1及常用扩展。 ```bash sudo apt install php8.1 php8.1-fpm php8.1-mysql php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip php8.1-gd -y ``` **解释:** - `php8.1`:安装PHP 8.1主程序。 - `php8.1-fpm`:安装PHP FastCGI Process Manager,用于Nginx。 - 其他扩展如 `php8.1-mysql`(MySQL支持)、`php8.1-xml`(XML支持)等,确保Laravel的各项功能正常运行。 ### 安装数据库(MySQL/MariaDB) Laravel常用的数据库有MySQL和MariaDB。以下以MariaDB为例进行安装。 ```bash sudo apt install mariadb-server mariadb-client -y ``` **解释:** - `mariadb-server`:安装MariaDB服务器。 - `mariadb-client`:安装MariaDB客户端工具。 安装完成后,启动并启用MariaDB服务: ```bash sudo systemctl enable mariadb sudo systemctl start mariadb ``` ### 安装Composer Composer是PHP的依赖管理工具,Laravel依赖Composer来管理其依赖包。 ```bash sudo apt install curl -y curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer sudo chmod +x /usr/local/bin/composer ``` **解释:** - `apt install curl -y`:安装curl工具,用于下载Composer安装脚本。 - `curl -sS https://getcomposer.org/installer | php`:下载并运行Composer安装脚本。 - `mv composer.phar /usr/local/bin/composer`:将Composer移动到全局可执行路径。 - `chmod +x /usr/local/bin/composer`:赋予执行权限。 验证安装: ```bash composer --version ``` ## 配置数据库 配置MariaDB以供Laravel使用。 ```bash sudo mysql_secure_installation ``` **解释:** - `mysql_secure_installation`:运行MariaDB安全安装向导,设置root密码、删除匿名用户、禁止远程root登录及删除测试数据库。 接下来,登录MariaDB并创建数据库和用户: ```bash sudo mysql -u root -p ``` 在MariaDB命令行中执行以下命令: ```sql CREATE DATABASE laravel_db; CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'secure_password'; GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost'; FLUSH PRIVILEGES; EXIT; ``` **解释:** - `CREATE DATABASE laravel_db;`:创建名为 `laravel_db`的数据库。 - `CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'secure_password';`:创建数据库用户 `laravel_user`,密码为 `secure_password`。 - `GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';`:授予该用户对 `laravel_db`数据库的所有权限。 - `FLUSH PRIVILEGES;`:刷新权限,使更改生效。 - `EXIT;`:退出MariaDB命令行。 ## 获取Laravel项目代码 有多种方式获取Laravel项目代码,如通过Git克隆或直接上传代码包。以下以Git克隆为例。 首先,安装Git: ```bash sudo apt install git -y ``` **解释:** - `apt install git -y`:安装Git版本控制工具,并自动确认。 克隆项目代码: ```bash cd /var/www sudo git clone https://github.com/your-repository/laravel-project.git sudo chown -R www-data:www-data laravel-project ``` **解释:** - `cd /var/www`:切换到Web根目录。 - `git clone https://github.com/your-repository/laravel-project.git`:克隆您的Laravel项目代码仓库。 - `chown -R www-data:www-data laravel-project`:将项目目录的所有权更改为 `www-data`用户和组,确保Web服务器有权限访问。 ## 配置环境文件 复制示例环境文件并进行配置。 ```bash cd /var/www/laravel-project sudo cp .env.example .env sudo nano .env ``` **解释:** - `cp .env.example .env`:复制示例环境文件为实际使用的环境文件。 - `nano .env`:使用Nano编辑器打开 `.env`文件进行编辑。 在 `.env`文件中,配置数据库连接信息: ```env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_db DB_USERNAME=laravel_user DB_PASSWORD=secure_password ``` **解释:** - `DB_CONNECTION`:数据库驱动,使用 `mysql`。 - `DB_HOST`:数据库主机,通常为 `127.0.0.1`。 - `DB_PORT`:数据库端口,MySQL默认端口为 `3306`。 - `DB_DATABASE`、`DB_USERNAME`、`DB_PASSWORD`:前面创建的数据库名称、用户名及密码。 ## 安装项目依赖 使用Composer安装Laravel项目的依赖包。 ```bash sudo composer install --optimize-autoloader --no-dev ``` **解释:** - `composer install`:根据 `composer.json`文件安装依赖包。 - `--optimize-autoloader`:优化自动加载,提高性能。 - `--no-dev`:不安装开发环境依赖,适用于生产环境。 ## 生成应用密钥 Laravel需要生成一个应用密钥,用于加密等功能。 ```bash sudo php artisan key:generate ``` **解释:** - `php artisan key:generate`:生成一个新的应用密钥并更新 `.env`文件中的 `APP_KEY`。 ## 配置Web服务器 根据选择的Web服务器,进行相应的配置。 ### Apache配置 启用必要的Apache模块,并配置虚拟主机。 ```bash sudo a2enmod rewrite sudo systemctl restart apache2 ``` **解释:** - `a2enmod rewrite`:启用Apache的 `mod_rewrite`模块,支持URL重写。 - `systemctl restart apache2`:重启Apache服务以应用更改。 创建虚拟主机配置文件: ```bash sudo nano /etc/apache2/sites-available/laravel.conf ``` 在文件中添加以下内容: ```apache <VirtualHost *:80> ServerName yourdomain.com ServerAdmin webmaster@yourdomain.com DocumentRoot /var/www/laravel-project/public <Directory /var/www/laravel-project/public> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/laravel_error.log CustomLog ${APACHE_LOG_DIR}/laravel_access.log combined </VirtualHost> ``` **解释:** - `ServerName`:您的域名。 - `DocumentRoot`:指向Laravel项目的 `public`目录。 - `<Directory>`块中,`AllowOverride All`允许使用 `.htaccess`文件进行配置,`Require all granted`允许所有请求。 启用虚拟主机并禁用默认站点: ```bash sudo a2ensite laravel.conf sudo a2dissite 000-default.conf sudo systemctl reload apache2 ``` **解释:** - `a2ensite laravel.conf`:启用新的虚拟主机配置。 - `a2dissite 000-default.conf`:禁用默认的Apache站点配置。 - `systemctl reload apache2`:重新加载Apache配置。 ### Nginx配置 配置Nginx以服务Laravel应用。 创建虚拟主机配置文件: ```bash sudo nano /etc/nginx/sites-available/laravel ``` 在文件中添加以下内容: ```nginx server { listen 80; server_name yourdomain.com; root /var/www/laravel-project/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; index index.php index.html index.htm; charset utf-8; 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; } error_page 404 /index.php; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } } ``` **解释:** - `server_name`:您的域名。 - `root`:指向Laravel项目的 `public`目录。 - `location /`:处理所有请求,尝试文件存在性,若不存在则转发到 `index.php`。 - `location ~ \.php$`:配置PHP处理,通过 `php-fpm`处理PHP请求。 - `location ~ /\.(?!well-known).*`:禁止访问隐藏文件和目录,除非是 `.well-known`目录。 启用虚拟主机并测试配置: ```bash sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` **解释:** - `ln -s`:创建符号链接,启用站点配置。 - `nginx -t`:测试Nginx配置文件是否有语法错误。 - `systemctl reload nginx`:重新加载Nginx配置。 ## 设置文件权限 Laravel需要对 `storage`和 `bootstrap/cache`目录具有写权限。 ```bash sudo chown -R www-data:www-data /var/www/laravel-project sudo find /var/www/laravel-project -type f -exec chmod 644 {} \; sudo find /var/www/laravel-project -type d -exec chmod 755 {} \; sudo chmod -R 775 /var/www/laravel-project/storage sudo chmod -R 775 /var/www/laravel-project/bootstrap/cache ``` **解释:** - `chown -R www-data:www-data`:将项目目录的所有权更改为 `www-data`用户和组。 - `find ... -type f -exec chmod 644 {}`:将所有文件权限设置为 `644`。 - `find ... -type d -exec chmod 755 {}`:将所有目录权限设置为 `755`。 - `chmod -R 775`:对 `storage`和 `bootstrap/cache`目录赋予写权限。 ## 优化Laravel配置 为了提高性能,执行以下优化命令: ```bash sudo php artisan config:cache sudo php artisan route:cache sudo php artisan view:cache ``` **解释:** - `php artisan config:cache`:缓存配置,提高加载速度。 - `php artisan route:cache`:缓存路由,减少路由解析时间。 - `php artisan view:cache`:缓存视图,提升视图渲染性能。 ## 配置队列和缓存 Laravel支持多种队列和缓存驱动,推荐使用Redis或数据库驱动。以下以数据库驱动为例。 首先,创建队列表: ```bash sudo php artisan queue:table sudo php artisan migrate ``` **解释:** - `queue:table`:生成队列表迁移文件。 - `migrate`:运行迁移,创建队列表。 配置 `.env`文件中的队列和缓存: ```env QUEUE_CONNECTION=database CACHE_DRIVER=file ``` 启动队列监听器: ```bash sudo php artisan queue:work --daemon ``` **解释:** - `queue:work --daemon`:启动队列工作进程,以守护进程模式运行,提高性能。 建议使用Supervisor管理队列进程: 安装Supervisor: ```bash sudo apt install supervisor -y ``` 创建Supervisor配置文件: ```bash sudo nano /etc/supervisor/conf.d/laravel-queue.conf ``` 添加以下内容: ```ini [program:laravel-queue] process_name=%(program_name)s_%(process_num)02d command=php /var/www/laravel-project/artisan queue:work --sleep=3 --tries=3 autostart=true autorestart=true user=www-data numprocs=1 redirect_stderr=true stdout_logfile=/var/www/laravel-project/storage/logs/queue.log ``` **解释:** - `command`:运行队列工作进程的命令。 - `autostart`和 `autorestart`:确保队列进程在系统启动和失败时自动启动。 - `user`:以 `www-data`用户运行队列进程。 - `stdout_logfile`:队列日志文件路径。 更新Supervisor配置并启动队列进程: ```bash sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start laravel-queue:* ``` ## 启用HTTPS 为提高安全性,建议使用Let's Encrypt为您的域名配置SSL证书。 安装Certbot: ```bash sudo apt install certbot python3-certbot-apache -y ``` **解释:** - `certbot`:Let's Encrypt的官方客户端,用于获取和管理SSL证书。 - `python3-certbot-apache`:Certbot的Apache插件。 获取并安装SSL证书: ```bash sudo certbot --apache -d yourdomain.com -d www.yourdomain.com ``` **解释:** - `--apache`:使用Apache插件自动配置SSL。 - `-d`:指定需要保护的域名。 按照提示完成验证和安装。成功后,您的网站将通过HTTPS提供服务。 如果使用Nginx,安装相应插件并执行类似步骤: ```bash sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com ``` ## 常见问题排查 ### 1. 权限错误 **症状:** - 无法写入 `storage`或 `bootstrap/cache`目录。 - 页面显示500内部服务器错误。 **解决方法:** - 确认目录权限正确,确保 `www-data`用户对相关目录有写权限。 - 使用以下命令重新设置权限: ```bash sudo chown -R www-data:www-data /var/www/laravel-project sudo chmod -R 775 /var/www/laravel-project/storage sudo chmod -R 775 /var/www/laravel-project/bootstrap/cache ``` ### 2. 数据库连接失败 **症状:** - Laravel应用无法连接数据库,报错 `SQLSTATE[HY000] [1045] Access denied for user`。 **解决方法:** - 检查 `.env`文件中的数据库配置是否正确。 - 确认数据库用户权限,确保用户有权访问指定的数据库。 - 使用以下命令测试数据库连接: ```bash mysql -u laravel_user -p -h 127.0.0.1 laravel_db ``` ### 3. 依赖安装失败 **症状:** - `composer install`过程中出现错误,提示缺少某些PHP扩展。 **解决方法:** - 根据错误提示安装缺失的PHP扩展。例如,缺少 `openssl`扩展: ```bash sudo apt install php8.1-openssl -y sudo systemctl restart apache2/nginx ``` ## 总结 在Ubuntu系统上部署Laravel项目涉及多个步骤,包括环境配置、依赖安装、数据库设置、Web服务器配置及安全性优化。通过本文提供的详细步骤,您可以系统地完成Laravel应用的部署,确保其在生产环境中稳定运行。 关键步骤包括: 1. **系统更新与软件安装**:确保系统软件包最新,并安装必要的软件如Web服务器、PHP、数据库和Composer。 2. **数据库配置**:创建数据库和用户,配置Laravel的 `.env`文件。 3. **获取与配置项目代码**:通过Git克隆项目,安装依赖,生成应用密钥。 4. **Web服务器配置**:根据使用的Web服务器(Apache或Nginx)进行相应配置,确保请求正确路由到Laravel应用。 5. **权限与优化**:设置适当的文件权限,优化Laravel的配置,提高应用性能。 6. **安全性配置**:启用HTTPS,确保数据传输安全。 7. **问题排查**:了解常见问题及解决方法,确保应用稳定运行。 通过遵循上述步骤,您将能够在Ubuntu服务器上成功部署并运行Laravel项目,满足生产环境的需求。 ## 附录:常用命令汇总表 | 命令 | 功能描述 | 详细说明 | | --------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------- | | `sudo apt update && sudo apt upgrade -y` | 更新系统软件包 | 更新软件包列表并升级所有已安装的软件包。 | | `sudo apt install apache2 -y` | 安装Apache Web服务器 | 使用APT包管理器安装Apache,并自动确认。 | | `sudo apt install nginx -y` | 安装Nginx Web服务器 | 使用APT包管理器安装Nginx,并自动确认。 | | `sudo apt install php8.1 php8.1-fpm php8.1-mysql ... -y` | 安装PHP及扩展 | 安装PHP 8.1及其常用扩展,确保Laravel正常运行。 | | `sudo apt install mariadb-server mariadb-client -y` | 安装MariaDB数据库 | 安装MariaDB服务器和客户端工具。 | | `sudo mysql_secure_installation` | 配置MariaDB安全设置 | 设置MariaDB的root密码,删除匿名用户,禁止远程root登录等。 | | `sudo apt install git -y` | 安装Git版本控制工具 | 使用APT包管理器安装Git,并自动确认。 | | `sudo apt install composer -y` | 安装Composer依赖管理工具 | 安装Composer,以管理PHP依赖包。 | | `sudo php artisan key:generate` | 生成Laravel应用密钥 | 生成并设置Laravel应用的加密密钥。 | | `sudo a2enmod rewrite` | 启用Apache的rewrite模块 | 启用Apache的URL重写模块,支持Laravel的路由功能。 | | `sudo systemctl restart apache2` | 重启Apache服务 | 重启Apache服务以应用新的配置。 | | `sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/` | 启用Nginx虚拟主机 | 创建符号链接,启用Nginx的虚拟主机配置。 | | `sudo nginx -t` | 测试Nginx配置文件 | 检查Nginx配置文件是否存在语法错误。 | | `sudo systemctl reload nginx` | 重新加载Nginx配置 | 重新加载Nginx配置,使更改生效。 | | `sudo chown -R www-data:www-data /var/www/laravel-project` | 设置项目目录所有权 | 将Laravel项目目录的所有权更改为 `www-data`用户和组。 | | `sudo chmod -R 775 /var/www/laravel-project/storage` | 设置存储目录权限 | 赋予 `storage`目录读写权限,确保Laravel可以写入日志和缓存。 | | `sudo php artisan config:cache` | 缓存Laravel配置 | 缓存配置文件,提高应用性能。 | | `sudo php artisan route:cache` | 缓存Laravel路由 | 缓存路由信息,减少路由解析时间。 | | `sudo php artisan view:cache` | 缓存Laravel视图 | 缓存视图文件,提升视图渲染性能。 | | `sudo apt install supervisor -y` | 安装Supervisor进程管理工具 | 安装Supervisor,用于管理Laravel队列进程。 | | `sudo supervisorctl reread` | 重新读取Supervisor配置 | 告知Supervisor配置文件有更新。 | | `sudo supervisorctl update` | 更新Supervisor配置 | 应用新的Supervisor配置。 | | `sudo supervisorctl start laravel-queue:*` | 启动Laravel队列进程 | 启动由Supervisor管理的Laravel队列工作进程。 | | `sudo apt install certbot python3-certbot-apache -y` | 安装Certbot(Apache) | 安装用于获取和管理SSL证书的Certbot工具,适用于Apache服务器。 | | `sudo certbot --apache -d yourdomain.com -d www.yourdomain.com` | 获取并安装SSL证书 | 使用Certbot为指定域名获取并配置SSL证书。 | | `sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com` | 获取并安装SSL证书(Nginx) | 使用Certbot为指定域名获取并配置SSL证书,适用于Nginx服务器。 | | `sudo php artisan queue:table` | 生成队列表迁移文件 | 创建队列表的迁移文件,用于Laravel队列系统。 | | `sudo php artisan migrate` | 运行数据库迁移 | 执行数据库迁移,创建必要的表结构。 | 通过上述命令汇总表,您可以快速查阅和使用在Ubuntu上部署Laravel项目过程中常用的命令,提升操作效率。 最后修改:2024 年 09 月 19 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏