”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 在 Ubuntu 上轻松部署 Laravel:LEMP Stack 初学者指南

在 Ubuntu 上轻松部署 Laravel:LEMP Stack 初学者指南

发布于2024-11-01
浏览:793

Easy Laravel Deployment on Ubuntu: A Beginner

使用 LEMP 堆栈(Linux、Nginx、MySQL、PHP)在 Ubuntu 上部署 Laravel 应用程序似乎令人畏惧,但逐步分解使其易于管理。本指南将引导您完成从服务器设置到部署 Laravel 应用程序的过程。

先决条件:

  • 您应该有一个Ubuntu 服务器(本地或云,例如 AWS、DigitalOcean)。
  • 对终端有基本的熟悉。
  • A 域名(可选,但推荐)。

第 1 部分:设置 LEMP 堆栈

第 1 步:更新系统

首先确保您的服务器是最新的。

sudo apt update && sudo apt upgrade -y

第2步:安装Nginx

Nginx 将为您的应用程序提供服务。

sudo apt install nginx -y

安装后,您可以启动并启用 Nginx 开机运行:

sudo systemctl start nginx
sudo systemctl enable nginx

您可以通过在浏览器中访问服务器的 IP 地址来验证 Nginx 是否正在运行。

第三步:安装MySQL

接下来,我们将安装MySQL数据库服务器。

sudo apt install mysql-server -y

保护 MySQL 安装:

sudo mysql_secure_installation

这将提示您设置 root 密码并删除不安全的默认值。

第四步:安装PHP

Laravel 需要 PHP,所以让我们安装它以及一些必要的扩展:

sudo apt install php-fpm php-mysql php-cli php-xml php-mbstring php-curl php-zip -y

验证 PHP 安装:

php -v

您应该看到类似以下内容:

PHP 7.x.x (cli) (built: ...)

第 2 部分:为 Laravel 配置 MySQL

第1步:登录MySQL

以root用户登录MySQL控制台:

sudo mysql

第 2 步:创建数据库

为 Laravel 应用程序创建新的数据库和用户:

CREATE DATABASE laravel_app;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON laravel_app.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

第 3 步:测试数据库

确保新的数据库用户可以连接:

mysql -u laravel_user -p

系统将提示您输入密码,然后输入:

SHOW DATABASES;

您应该在列表中看到 laravel_app。


第 3 部分:安装 Laravel

第 1 步:安装 Composer

Laravel 使用 Composer 作为其依赖管理器。安装作曲家:

sudo apt install composer -y

第 2 步:创建 Laravel 项目

导航到要安装 Laravel 的目录(例如 /var/www/):

cd /var/www/
composer create-project --prefer-dist laravel/laravel laravel_app

步骤3:设置目录权限

Laravel 要求 Web 服务器可写某些目录:

sudo chown -R www-data:www-data /var/www/laravel_app
sudo chmod -R 775 /var/www/laravel_app/storage
sudo chmod -R 775 /var/www/laravel_app/bootstrap/cache

步骤 4:配置 .env 文件

在 Laravel 项目根目录中,打开 .env 文件并配置数据库设置:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_app
DB_USERNAME=laravel_user
DB_PASSWORD=strong_password

第 4 部分:为 Laravel 配置 Nginx

第 1 步:创建新的 Nginx 服务器块

我们将为 Laravel 项目创建一个 Nginx 配置文件。

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

在文件中添加以下配置:

server {
    listen 80;
    server_name your_domain_or_ip;

    root /var/www/laravel_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:/var/run/php/php7.x-fpm.sock; # Change this to the correct PHP version.
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

将your_domain_or_ip替换为您的实际域名或服务器IP地址。

第2步:启用Nginx配置

通过创建指向启用站点的符号链接来启用新的 Nginx 配置:

sudo ln -s /etc/nginx/sites-available/laravel_app /etc/nginx/sites-enabled/

第 3 步:测试并重新加载 Nginx

测试 Nginx 配置以确保没有语法错误:

sudo nginx -t

如果一切正常,重启Nginx:

sudo systemctl reload nginx

第 5 部分:最后步骤

第 1 步:运行 Laravel 迁移

运行 Laravel 迁移来设置数据库:

cd /var/www/laravel_app
php artisan migrate

第 2 步:访问应用程序

您现在应该能够通过在浏览器中导航到服务器的 IP 或域来访问 Laravel 应用程序。您将看到默认的 Laravel 欢迎页面。

步骤 3:启用 HTTPS(可选但推荐)

如果您有域名,请使用 Let's Encrypt 保护您的网站:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain

按照说明安装 SSL 证书。 Certbot 将自动配置 Nginx 将 HTTP 流量重定向到 HTTPS。


第 6 部分:可选:设置 Laravel 队列和调度程序

Laravel 队列:

队列处理诸如发送电子邮件或在后台处理作业等任务。

  1. 设置队列驱动程序(例如,Redis 或数据库)。
  2. 运行 Laravel 队列工作程序:
   php artisan queue:work

Laravel 调度程序:

使用 Laravel 的任务调度功能来执行清除缓存、发送每日电子邮件等任务。

  1. 将 Laravel cron 条目添加到您的 crontab 中:
   sudo crontab -e

添加以下行:

   * * * * * php /var/www/laravel_app/artisan schedule:run >> /dev/null 2>&1

结论:

您已使用 LEMP 堆栈在 Ubuntu 服务器上成功部署了 Laravel 应用程序。从这里,您可以继续开发您的应用程序、保护它并监控它的性能。

如果遇到任何问题,请检查位于 /var/log/nginx/error.log 的 Nginx 错误日志或位于 /var/www/laravel_app/storage/logs/laravel.log 的 Laravel 日志。

通过这些步骤,您已经完成了完整的 Laravel 实际部署!

版本声明 本文转载于:https://dev.to/mdarifulhaque/easy-laravel-deployment-on-ubuntu-a-beginners-guide-with-lemp-stack-155a?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-07-16
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-07-16
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-07-16
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-07-16
  • 如何解决AppEngine中“无法猜测文件类型,使用application/octet-stream...”错误?
    如何解决AppEngine中“无法猜测文件类型,使用application/octet-stream...”错误?
    appEngine静态文件mime type override ,静态文件处理程序有时可以覆盖正确的mime类型,在错误消息中导致错误消息:“无法猜测mimeType for for file for file for [File]。 application/application/octet...
    编程 发布于2025-07-16
  • FastAPI自定义404页面创建指南
    FastAPI自定义404页面创建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    编程 发布于2025-07-16
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-07-16
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-07-16
  • 用户本地时间格式及时区偏移显示指南
    用户本地时间格式及时区偏移显示指南
    在用户的语言环境格式中显示日期/时间,并使用时间偏移在向最终用户展示日期和时间时,以其localzone and格式显示它们至关重要。这确保了不同地理位置的清晰度和无缝用户体验。以下是使用JavaScript实现此目的的方法。方法:推荐方法是处理客户端的Javascript中的日期/时间格式化和时...
    编程 发布于2025-07-16
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-07-16
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:((-215)!empty()in Function Multultiscale中的“ openCV 要解决此问题,必须确保提供给HAAR CASCADE XML文件的路径有效。在提供的代码片段中,级联分类器装有硬编码路径,这可能对您的系统不准确。相反,OPENCV提...
    编程 发布于2025-07-16
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能显示图像时未能显示图像时遇到了一个问题。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-07-16
  • Go语言如何动态发现导出包类型?
    Go语言如何动态发现导出包类型?
    与反射软件包中的有限类型的发现能力相反,本文探讨了在运行时发现所有包装类型(尤其是struntime go import( “ FMT” “去/进口商” ) func main(){ pkg,err:= incorter.default()。导入(“ time”) ...
    编程 发布于2025-07-16
  • 为什么在我的Linux服务器上安装Archive_Zip后,我找不到“ class \” class \'ziparchive \'错误?
    为什么在我的Linux服务器上安装Archive_Zip后,我找不到“ class \” class \'ziparchive \'错误?
    Class 'ZipArchive' Not Found Error While Installing Archive_Zip on Linux ServerSymptom:When attempting to run a script that utilizes the ZipAr...
    编程 发布于2025-07-16
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] 剩余_size- = buf_size lines = buffer.split('\ n'....
    编程 发布于2025-07-16

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3