新手向--在 AWS ec2 实例上部署 Laravel 5.7

最近有计划在laracast 上写学习 laracsts 的新课程 Build A Laravel App With TDD,一直在虚拟机上学习各种laravel的操作的我,突然觉得,为什么不趁这个机会,试试在生产环境上搭建一个laravel 环境,再来学习这个教程?

file

于是一拍大腿说干就干,申请了一个aws号就开始了,结果才发现这个对于不熟悉 lamp 各种设定,只会写代码的人来说简直是一场噩梦,看了很多教程,大部分给新人的感觉就是,你只要做了什么什么事情, duang 就装好了,再加上很多都是好多年前的教程,aws 和 lara 的界面以及操作代码和现在的都不一定一样。从新手的角度看 真是一脸懵逼呀。

本文算是菜鸟写给菜鸟的一篇教程,其实主要还是写给我自己,如果以后再次有这方面的需要可以回来看一眼,很多书写模式都是按照自己看得懂什么意思,要是大家一下没看明白卡在哪了可以给我说。

高手可以不用看了,但是如果不介意指点一二那也自然是不胜感激。

本文参考了

laravel 5.7的文档: https://learnku.com/docs/laravel/5.7/

YouTube上一个并不是明星程序员主播发的 laravel 5.4 aws ec2 部署教程:

file

第一步申请一个aws 账号,lz人在国外,看了一下国内的界面好像不太一样,无法指导,大家想办法弄一个就是了。

第一步, aws ec 2 实例创建:

  1. 来到 AWS 主界面,点击导航栏的 “服务” 找到 ec2

file

  1. 点击 蓝色按钮 “启动实例”

file

  1. 挑选Ubuntu 16.04 服务器(注意每个机器的图标下面都有是否提供免费试用的提醒)

file

  1. 挑选实例类型 就可以启动了,第三个灰色按钮可以设置更多的细节,但是如果只是练手的小项目,我个人觉得是可以忽略的。

file

  1. 在启动前,设置安全组也是很重要的一步。 点击 “编辑安全组”

file

  1. 把端口 22 ssh 和3306 设置成 “我的ip” 把80 端口设置成 所有人。(安全组是aws 中及其重要的一部分,有兴趣的同学也可以看看专门的aws 教程)设置完成就可以启动了。

file

7.正式启动前 aws 会要求用户创建一个钥匙,只有ip符合,并且拥有钥匙的人 才可以远程操作这个实例和以及实例中的数据库。记得下载了以后 妥善保存钥匙文件。下载完钥匙文件,我们就可以启动这个实例了。

file

第二步,SSH远程链接Ubuntu

将第一步生成的钥匙文件妥善保存在一个文件夹里,在terminal(iTerm)中打开该文件夹:

file

  1. 在 aws ec2的主界面,找到刚才创建的实例, 右键,选择“链接” , 跳出来的小窗就有链接ssh 需要的一切linux代码了。文中打码处是Public DNS,这个同样可以在主界面里找到。

file

  1. 继续第1步的terminal ,在terminal 中输入 chmod 400 larakey.pem(larakey是我在第一步里自己取的钥匙名字,以个人钥匙),然后再输入“ssh -i "larakey.pem" ubuntu@ec2-xxxxxxx-xxxx.ap-southeast-2.compute.amazonaws.com”(ubuntu@后面请参考自己的 Public DNS)

file

file

第三步 设置 lamp 环境

首先 , 根据laravel 5.7的官方文档,laravel 5.7 需要php 7.1.3以上的版本,所以要安装php 7.13以上的版本。 在terminal中输入:
sudo add-apt-repository ppa:ondrej/php

sudo apt-get update

sudo apt-get install php7.2

file

file

  1. sudo apt-get install apache2 安装apache服务器

  2. sudo apt-get install mysql-server 安装mysql (中间需要设置root 用户密码)

  3. 测试网站,在aws 界面找到Public DNS (IPv4) 复制到浏览器中就可以看到apache的默认页面了。 这个页面的存放位置是/var/www/html, 这些信息在这个默认界面都有。

file

  1. 使用sequel pro 测试远程数据库,这一步如果有问题,十次有九次是第一步安全组没有设置好,如果链接失败可以看看安全组有没有开放3306端口,并且有没有开放当前使用机器的ip。

file

6.链接成功如图:

file

第四步 部署laravel

  1. cd /var/www/html 定位到公共 html 路径。(其实也可以在别的路径下操作,只是个人习惯而已)

file

  1. 安装composer 分别敲入:

sudo curl -O https://getcomposer.org/composer.phar

sudo mv composer.phar composer

sudo chmod +x composer

sudo mv composer /usr/local/bin

composer 可用
file

  1. 现在可以无视官网上的system requirement 尝试安装一下 (代码: sudo composer create-project --prefer-dist laravel/laravel blog),结果当然失败了。错误是缺少Mbstring 拓展,所以terminal中输入 sudo apt-get install php-mbstring 安装拓展

file

  1. sudo rm -rf blog 删除blog 路径,再次尝试 依然失败,可以 看见 缺少 ext-dom,搜索引擎搜索关键词“requires ext-dom” 找到了一个回答(https://stackoverflow.com/questions/43408604/php7-install-ext-dom-issue)是需要安装 xml 拓展,于是按照stckoverflow 这个回答,输入命令 sudo apt-get install php7.2-xml

同时需要注意黄色高亮的一段警告( Failed to download laravel/laravel from dist: The zip extension and unzip command are both missing,),系统缺少zip unzip 命令,于是顺手就安装一下。sudo apt-get install zip unzip 这个包在laravel 5.7系统需求里并没有提到,我猜大概是因为太基础了,lara 官方认为人人都会有,所以就没写了,值得各位新手们注意。

file

  1. 再一次尝试部署laravel(代码: sudo composer create-project --prefer-dist laravel/laravel blog )成功!

file

*6. 官网上不是提了很多插件(PDO,OpenSSL,Tokenizer等等),为什么只装了两个就完成了呢?我的理解是很多插件,在安装php 7.2 的时候就已经包含进去了,所以就不需要安装了。这个信息可以在phpinfo 里看见(我也不知道我理解的对还是不对,如果错了还请高手指正)。

在terminal中定位到“/var/www/html”输入 sudo vim info.php

键盘上 按 “i”键,输入“<?php phpinfo();?>”, 按“esc”键,按“:wq” 。

在浏览器的地址栏输入 Public DNS (IPv4)(aws ec2 页面可以找到)/info.php

file

OpenSSL:

file

PDO:

file

Tokenizer

file

Ctype

file

JSON

file

并没有找到 BCMath PHP Extension 相关的信息,

或许是这个?

file

为了防止以后项目出问题卡住,我谷歌了一下如何安装BCMath php 插件:sudo apt-get install php7.2-bcmath

再次强调一下这部分只是自己的猜测,也不知道对不对,希望有高手能指点一下。

  1. 回到第5步,可以在浏览器地址拦输入:Public DNS (IPv4)/blog/public, 很明显,是我们熟悉的 laravel 的报错方式,基本上说明,部署已经成功了!

file

报错 "The stream or file "/var/www/html/blog/storage/logs/laravel-2019-02-26.log" could not be opened: failed to open stream: Permission denied"解决这个问题就要感谢 之前的哪位非明星程序员主播了。

在terminal 进入blog(自己创建的laravel 项目文件夹)输入:

sudo chmod 777 -R storage/

sudo chmod 777 -R bootstrap/

回到浏览器刷新,我们熟悉的laravel 起始界面就出现了!

file

  1. terminal 来到 cd /etc/apache2/sites-available/ ,我们需要修改的就是 那个000-default.conf 文件(sudo vim 000-default.conf不熟悉vim 的同学也可以把vim改成nano)。

file

  1. 找到 DocumentRoot /var/www/html 这一行 改成DocumentRoot /var/www/html/blog/public

file

  1. 在 前加入:

<Directory "/var/www/html">

AllowOverride all

Require all granted


file

保存退出

  1. 在terminal输入 sudo service apache2 restart 重启apache服务器,完成后,用Public DNS (IPv4) (不加 blog/public) 就可以直接访问刚才创建的laravel 项目了

file

总结,昨天一整天都在研究如何部署,很多文章就是给了一堆代码让我们自己去输就是了,于是我一个个去试,走了好多弯路,浪费了好多时间,而且这绝对可以算是再发明一次轮子的行为了,但是我自己知道,因为我记性不太好,以后再次需要部署的时候又要从头到尾再来一遍(虽然aws 应该是可以保存模版的),为了避免以后浪费时间, 我就试着再来一遍,并且记录下每一步做了什么。

同时这些步骤会了,迁移项目什么的应该也是没问题的了。

我的微信:qiuxan1989 如果有什么纰漏的地方,或者需要交流的地方可以联系我。

同时 小弟 坐标墨尔本,现有工作特别闲,学习时间很多, 正在考虑跳槽,有初级程序员的位置的雇主们可以联系一下。:)

2019.03.10 补充

首次在aws 执行php artisan migrate 失败:

原因: 没有安装pdo_mysql 拓展

执行

sudo apt-get install php7.2-mysql

php artisan migrate 顺利执行。

第一次在aws 执行\view url 浏览器报错:

The requested URL \view was not found on this server.

在命令行执行sudo a2enmod rewrite 以激活 .htaccess文件中的 mod_rewrite

在 /etc/apache2/sites-available/000-default.conf 中补充
<Directory /var/www/html/blog/public/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

重启服务器

sudo service apache2 restart

浏览器报错消失

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!