Quantcast
Channel: 小蓝博客
Viewing all articles
Browse latest Browse all 3155

Ubuntu系统上Laravel项目的部署步骤

$
0
0

Ubuntu系统上Laravel项目的部署步骤

部署Laravel项目到Ubuntu服务器涉及多个步骤,包括环境配置、依赖安装、服务器设置以及安全性优化。以下是一个详尽的指南,帮助您在Ubuntu系统上成功部署Laravel应用。

目录

  1. 前提条件
  2. 更新系统软件包
  3. 安装必要的软件

  4. 配置数据库
  5. 获取Laravel项目代码
  6. 配置环境文件
  7. 安装项目依赖
  8. 生成应用密钥
  9. 配置Web服务器

  10. 设置文件权限
  11. 优化Laravel配置
  12. 配置队列和缓存
  13. 启用HTTPS
  14. 常见问题排查
  15. 总结
  16. 附录:常用命令汇总表

前提条件

在开始部署之前,确保您具备以下条件:

  • 一台运行Ubuntu(推荐20.04 LTS或更新版本)的服务器。
  • 具有sudo权限的用户账户。
  • 基本的Linux命令行操作知识。
  • 已完成Laravel项目的开发,并已在本地环境中测试通过。

更新系统软件包

首先,确保您的系统软件包是最新的,以避免潜在的安全漏洞和兼容性问题。

sudo apt update && sudo apt upgrade -y

解释:

  • sudo:以超级用户权限执行命令。
  • apt update:更新软件包列表。
  • apt upgrade -y:升级所有已安装的软件包,并自动确认。

安装必要的软件

安装Apache/Nginx

Laravel支持多种Web服务器,常用的有Apache和Nginx。以下分别介绍安装步骤。

安装Apache

sudo apt install apache2 -y

解释:

  • apt install apache2 -y:使用APT包管理器安装Apache Web服务器,并自动确认。

安装完成后,启用并启动Apache服务:

sudo systemctl enable apache2
sudo systemctl start apache2

安装Nginx

sudo apt install nginx -y

解释:

  • apt install nginx -y:安装Nginx Web服务器,并自动确认。

安装完成后,启用并启动Nginx服务:

sudo systemctl enable nginx
sudo systemctl start nginx

安装PHP及扩展

Laravel 需要PHP及其扩展的支持。以下步骤安装PHP 8.1及常用扩展。

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为例进行安装。

sudo apt install mariadb-server mariadb-client -y

解释:

  • mariadb-server:安装MariaDB服务器。
  • mariadb-client:安装MariaDB客户端工具。

安装完成后,启动并启用MariaDB服务:

sudo systemctl enable mariadb
sudo systemctl start mariadb

安装Composer

Composer是PHP的依赖管理工具,Laravel依赖Composer来管理其依赖包。

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:赋予执行权限。

验证安装:

composer --version

配置数据库

配置MariaDB以供Laravel使用。

sudo mysql_secure_installation

解释:

  • mysql_secure_installation:运行MariaDB安全安装向导,设置root密码、删除匿名用户、禁止远程root登录及删除测试数据库。

接下来,登录MariaDB并创建数据库和用户:

sudo mysql -u root -p

在MariaDB命令行中执行以下命令:

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:

sudo apt install git -y

解释:

  • apt install git -y:安装Git版本控制工具,并自动确认。

克隆项目代码:

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服务器有权限访问。

配置环境文件

复制示例环境文件并进行配置。

cd /var/www/laravel-project
sudo cp .env.example .env
sudo nano .env

解释:

  • cp .env.example .env:复制示例环境文件为实际使用的环境文件。
  • nano .env:使用Nano编辑器打开 .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_DATABASEDB_USERNAMEDB_PASSWORD:前面创建的数据库名称、用户名及密码。

安装项目依赖

使用Composer安装Laravel项目的依赖包。

sudo composer install --optimize-autoloader --no-dev

解释:

  • composer install:根据 composer.json文件安装依赖包。
  • --optimize-autoloader:优化自动加载,提高性能。
  • --no-dev:不安装开发环境依赖,适用于生产环境。

生成应用密钥

Laravel需要生成一个应用密钥,用于加密等功能。

sudo php artisan key:generate

解释:

  • php artisan key:generate:生成一个新的应用密钥并更新 .env文件中的 APP_KEY

配置Web服务器

根据选择的Web服务器,进行相应的配置。

Apache配置

启用必要的Apache模块,并配置虚拟主机。

sudo a2enmod rewrite
sudo systemctl restart apache2

解释:

  • a2enmod rewrite:启用Apache的 mod_rewrite模块,支持URL重写。
  • systemctl restart apache2:重启Apache服务以应用更改。

创建虚拟主机配置文件:

sudo nano /etc/apache2/sites-available/laravel.conf

在文件中添加以下内容:

<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允许所有请求。

启用虚拟主机并禁用默认站点:

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应用。

创建虚拟主机配置文件:

sudo nano /etc/nginx/sites-available/laravel

在文件中添加以下内容:

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目录。

启用虚拟主机并测试配置:

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需要对 storagebootstrap/cache目录具有写权限。

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:对 storagebootstrap/cache目录赋予写权限。

优化Laravel配置

为了提高性能,执行以下优化命令:

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或数据库驱动。以下以数据库驱动为例。

首先,创建队列表:

sudo php artisan queue:table
sudo php artisan migrate

解释:

  • queue:table:生成队列表迁移文件。
  • migrate:运行迁移,创建队列表。

配置 .env文件中的队列和缓存:

QUEUE_CONNECTION=database
CACHE_DRIVER=file

启动队列监听器:

sudo php artisan queue:work --daemon

解释:

  • queue:work --daemon:启动队列工作进程,以守护进程模式运行,提高性能。

建议使用Supervisor管理队列进程:

安装Supervisor:

sudo apt install supervisor -y

创建Supervisor配置文件:

sudo nano /etc/supervisor/conf.d/laravel-queue.conf

添加以下内容:

[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:运行队列工作进程的命令。
  • autostartautorestart:确保队列进程在系统启动和失败时自动启动。
  • user:以 www-data用户运行队列进程。
  • stdout_logfile:队列日志文件路径。

更新Supervisor配置并启动队列进程:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-queue:*

启用HTTPS

为提高安全性,建议使用Let's Encrypt为您的域名配置SSL证书。

安装Certbot:

sudo apt install certbot python3-certbot-apache -y

解释:

  • certbot:Let's Encrypt的官方客户端,用于获取和管理SSL证书。
  • python3-certbot-apache:Certbot的Apache插件。

获取并安装SSL证书:

sudo certbot --apache -d yourdomain.com -d www.yourdomain.com

解释:

  • --apache:使用Apache插件自动配置SSL。
  • -d:指定需要保护的域名。

按照提示完成验证和安装。成功后,您的网站将通过HTTPS提供服务。

如果使用Nginx,安装相应插件并执行类似步骤:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

常见问题排查

1. 权限错误

症状:

  • 无法写入 storagebootstrap/cache目录。
  • 页面显示500内部服务器错误。

解决方法:

  • 确认目录权限正确,确保 www-data用户对相关目录有写权限。
  • 使用以下命令重新设置权限:

    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文件中的数据库配置是否正确。
  • 确认数据库用户权限,确保用户有权访问指定的数据库。
  • 使用以下命令测试数据库连接:

    mysql -u laravel_user -p -h 127.0.0.1 laravel_db

3. 依赖安装失败

症状:

  • composer install过程中出现错误,提示缺少某些PHP扩展。

解决方法:

  • 根据错误提示安装缺失的PHP扩展。例如,缺少 openssl扩展:

    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项目过程中常用的命令,提升操作效率。


Viewing all articles
Browse latest Browse all 3155

Trending Articles