如何在AWS EC2(LEMP堆栈)上托管Laravel应用
#aws #php #laravel #howto

今天,我将介绍如何在AWS EC2上托管Laravel应用程序。我将介绍从创建EC2实例,配置服务器等等。我会假设您已经拥有一个AWS帐户,并且您已经拥有一个您想托管的Laravel应用程序。如果您不这样做,并且仍然想遵循,则可以在my GitHub上克隆我的项目源代码。

首先,我们需要创建我们的EC2实例。转到AWS的EC2部分,然后按“启动实例”。您现在应该在一个看起来与下面相似的页面上。

Launch Instances page

将实例命名与您的应用程序相关的内容,或者您​​想要的。

对于应用程序图像,选择Ubuntu 22.04(64位x86)。

Make sure to select Ubuntu 22.04

我们将选择T2.Micro以保留在自由层中。

Select t2.micro

创建一个钥匙对并将其存储在易于访问的位置。

Create a key pair

创建一个新的安全组,并允许Internet的SSH和HTTP。

Use these settings

存储和高级详细信息的设置可以空白。仔细检查您的配置,然后按“启动实例”。

现在,要连接到您的实例,请返回EC2部分的“实例”页面,然后找到您刚创建的实例。选择它,然后按“连接”。

Press Connect in the top right

选择“ EC2实例连接”,然后将用户名作为默认,按“连接”。

您现在应该连接,然后查看这样的页面。

We are now connected to our server

现在我们准备开始安装一些东西了。按顺序将下面的命令粘贴到您的终端中。只要您选择了Ubuntu作为您的AMI,他们都应该工作。您可以复制命令,然后右键单击以粘贴到AWS实例连接终端。

安装nginx

  • sudo apt Update

  • sudo apt install nginx

  • systemctl状态nginx(如果看到'active(running)',它可以正常工作)

  • sudo systemctl restart nginx

  • sudo nginx -t

安装php

  • sudo apt Update

  • sudo apt install-no-install-recommends php8.1

  • sudo apt-get安装php8.1-cli php8.1-common php8.1-mysql php8.1-zip php8.1-gd php8.1-gd php8.1-mbstring php8.1-curl php8.1-curl php8.1-1-- XML php8.1-bcmath php8.1-fpm

安装作曲家

- HASH=`curl -sS https://composer.github.io/installer.sig`
  • echo $ hash

  • php -r“ if(hash_file('sha384','/tmp/composer-setup.php')==='$ hash'){echo'installer jearter extracified';损坏'; unlink('composer-setup.php');} echo php_eol;“

  • sudo php/tmp/composer-setup.php -install-dir =/usr/local/local/bin -filename = Composer

  • 作曲家

安装mysql

  • sudo apt Update

  • sudo apt安装mysql-server

  • sudo mysql

  • alter用户'root'@'localhost'用mysql_native_password通过'your password'';

确保将“密码”更改为实际密码,然后安全保存。我们以后需要它。
您可以键入\ q或退出以退出mysql模式。

  • sudo systemctl restart nginx

  • sudo systemctl重新启动php8.1-fpm

设置Web服务器目录的权限

  • sudo mkdir -p/var/www/html/

  • sudo chown -r ubuntu:ubuntu / var / www / < / p> < / li>

好吧!现在,我们准备将项目克隆到服务器上。让我们在主目录中使用:

或克隆您想到的项目的回购

从现在开始,我将通过“ yourappname”引用项目文件夹。用文件夹的名称替换您的应用程序。

  • sudo mv yourappname/var/www/yourappname

  • cd/wer/www/

  • dir

您现在应该看到此(var/www/目录中的'dir'应该返回您的项目文件夹):

Calling 'dir' in the var/www/ directory should return your project folder

现在,我们需要为Web服务器上的某些Laravel特定文件夹设置权限(Cache + Storage)。

  • sudo chown -r www-data.www-data/var/www/yourappname/storage

  • sudo chown -r www-data.www-data/var/www/yourappname/bootstrap/cache

  • sudo chmod -r ugo+rw/var/www/yourappname/storage/logs

(在存储/日志目录中为所有者,组和其他所有文件和目录添加/编写权限)

  • mkdir -p/var/www/yourappname/storage/framework/{sessions,views,cache}

在框架目录中创建三个目录(会话,视图和缓存)

  • sudo chmod -r ugo+rw/var/www/yourappname/storage/framework

在存储/框架中的所有文件和目录

中添加了所有者,组和其他内容的读/写权

服务器配置
现在,我们的项目文件已准备就绪。我们只需要配置NGINX服务器块即可服务我们的文件。我们将在etc/nginx/sites-available目录中创建一个配置文件。
请记住在适当的情况下更改“ yourappname”。

  • sudo nano/etc/etc/nginx/stites-vailable/yourappname

将以下内容粘贴到纳米接口中。可以用EC2实例的公共IPv4地址替换server_domain_or_IP。这很容易在AWS中的实例摘要中找到。

server {
    listen 80;
    server_name server_domain_or_IP;
    root /var/www/YourAppName/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    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$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

粘贴它后,您可以进行Ctrl+S保存,然后Ctrl+X exit。

现在激活我们的配置,只需运行此命令:

  • sudo ln -s/etc/nginx/stites-vailable/yourappname/etc/etc/nginx/stites-enabled/

当我们使用时,让我们删除默认配置:

  • sudo rm -f/etc/nginx/sites -enabled/default

您可以仔细检查所有内容都可以使用并准备好:

  • sudo nginx -t

应用更改:

  • sudo systemctl reload nginx

访问服务器上的项目目录并运行:

  • sudo cp .env.example .env

  • sudo nano .env

在这里您可以对应用程序进行任何必需的设置。如果您已经克隆了LaravelBlogApp,则需要生成一个应用程序密钥:

  • 作曲家更新

  • php工匠钥匙:生成

如果您遇到有关权限的错误,请尝试以下命令:

  • sudo chown -r ubuntu:ubuntu / var / www / yourappname < / li>

创建MySQL数据库

  • sudo mysql -u root -p

  • 创建数据库your_db_name;

创建数据库后,我们需要更新我们的.env

  • sudo nano/var/www/yourappname/.env

用您输入的名称替换DB_DATABASE,然后用安装MySQL时使用的密码替换DB_PASSWORD。之后,运行以下命令:

  • PHP工匠迁移
  • PHP手工DB:种子

  • sudo服务nginx restart

访问您实例的公共IP:
http://YOUR_IP
确保它是HTTP,因为某些浏览器将默认为HTTPS。

之后,如果一切顺利,您的应用程序应该启动并运行!

Woohoo! It's hosted

这是我在撰写本文时经常提到的一些资源。希望如果您被卡住,他们也可以为您提供帮助。

数字海洋-https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-laravel-with-lemp-on-ubuntu-18-04

将Laravel部署到AWS -https://www.linkedin.com/pulse/organized-steps-deploy-laravel-app-ec2-instance-2204-selvanantham/