如果您是使用Laravel框架的PHP程序员,那么我可以确定将Web应用程序部署在Linode,Digital Ocean,Vultr等提供程序的云服务器上。 那是因为有了像Laravel这样的框架,并与Git和Composer这样的工具紧密结合,可以从共享托管环境为您的应用程序提供服务的可能性越来越小。
本文将向您展示如何使用RunCloud.io服务器管理工具在Linode云托管上为Laravel应用程序设置Web服务器。
您现在可以注册一个免费的RunCloud帐户 。
我们将结合GitHub的Webhook功能使用Git。 完成所有操作后,我们只需提交并推送到GitHub,您的服务器就会使用最新的源代码进行更新。 RunCloud使您可以轻松地设置服务器来部署这样的应用程序,而今天我将向您展示如何做到这一点。
当然,您可以选择希望实时服务器使用的任何分支。 它可以是您设置的主分支或任何其他分支,这意味着此部署方法非常适合与暂存和生产环境一起合并到工作流中。
另外,我应该提到,这不仅限于GitHub存储库。 只要它们具有Webhook和Deployment的关键功能,它将与GitLab,Bitbucket以及可能的任何其他Git托管服务一起使用。
还值得一提的是RunCloud可与任何云托管提供商一起使用。 仅选择Linode作为合适的云托管提供商的示例。
在我们开始之前,我想让您知道您将安装Nginx Web服务器,该服务器最适合Laravel。 但是,RunCloud也可以选择安装Apache Web服务器,在这种情况下,您可以利用.htaccess配置。
我将跳过有关注册的部分,因为我相信您可以快速而轻松地解决这一问题。
如果您准备好了,那就开始吧。
在Linode上部署Ubuntu 16.04 LTS服务器
当您登录Linode.com上的仪表板时,只需部署一个新的linode(他们称其服务实例为“ linode”)。 在信息中心的右下角,您应该看到一个名为添加Linode的链接。
接下来,选择所需的linode实例以及要在其中部署linode的数据中心,然后单击Add this Linode按钮。
到目前为止,您应该已经有一个linode,显示了正在创建的状态。
完成此操作后,您将拥有一个空服务器。 您仍然需要为此服务器的操作系统部署映像。 为了使其在以后与RunCloud一起使用,您需要部署新的Ubuntu 16.04 LTS操作系统。
单击linode名称。 在上面的示例中,名称为linode4362539 。 这将带您到下一个屏幕截图。 只需单击显示部署映像的链接。
在这里,请确保选择Ubuntu 16.04 LTS作为映像。 至于其余的,您可以选择自己认为合适的任何配置。 对于这20GB的空间和1GB的RAM节点,我将交换磁盘推到最大设置,即512MB。
输入您的root密码并保持安全。 稍后您将再次需要它。 准备就绪后,单击“ 部署”按钮。
现在,单击“ 启动”按钮以打开服务器。
您应该能够看到您的linode服务器未在右侧小部件框中标记为“正在运行 ”。 让我们尝试连接到服务器,看看它是否有效。 单击“ 远程访问”选项卡。
在“ 远程访问”选项卡中,您应该能够看到有关服务器的更多信息,包括IP地址。 复制此信息并确保其安全。 我们很快将再次需要它。
要连接到服务器,您可以使用任何您熟悉的SSH客户端。 或者,如果您像我一样,并且不想离开浏览器,也可以在Linode中使用基于Web的内置SSH客户端。 向下滚动并查找显示启动Lish Console的链接。
单击此链接将执行基于网络的SSH客户端Lish。 只需输入root作为用户名和部署映像时创建的密码即可。
好的! 准备使用PHP,Nginx和MariaDB(和其他工具)配置服务器。 这是您将要使用RunCloud的地方。
如果尚未注册RunCloud帐户,则需要立即执行此操作。 仅针对本教程尝试RunCloud是没有风险的,因为它将为您提供五天的免费试用期,使您可以完全访问所有Pro计划功能,以便对其进行测试。 五天的期限过后,如果您不升级,请不要担心-您只会降级到其免费用户级别。 但是Pro计划帐户每月仅需支付10美元,即可使用无限制的服务器,RunCloud是您开发人员手中拥有的一个非常酷的工具。
因此,从RunCloud,我们希望连接Linode并将其转变为Internet上可正常使用的Web服务器。
在RunCloud上的仪表板上,单击右上方显示“ 连接服务器”的按钮。
将您的Linode服务器连接到RunCloud并开始配置Web服务器
在Linode中输入有关服务器的必需信息。 您可以返回到Linode仪表板进行检出。 但是最重要的部分是您的IP地址。 确保您拥有该权利。 否则,连接过程和安装将失败。
准备就绪后,点击连接此服务器 。
现在,RunCloud将为您提供一些您需要在Linode服务器上运行的代码。 只需复制所有内容,之后我们将在Lish控制台中再次执行它。
如果仍然有Lish窗口处于活动状态,则可以粘贴先前从RunCloud仪表板复制的安装脚本。
粘贴安装脚本代码,然后按Enter键。 片刻之后,当您查看RunCloud仪表板时,您将看到RunCloud正在显示进度栏,并且在RunCloud与服务器同步时会显示安装进度的通知。 这意味着已建立连接。
安装完成后,将为您提供MariaDB数据库的root密码。 确保保持安全。 还有一个使用用户名runcloud创建的MariaDB用户。
一切完成后,您可以返回到RunCloud仪表板并检查服务器列表。 您应该在新服务器上放一个这样的盒子。
您的Web服务器可能尚未启动。 单击该服务器以开始对其进行管理。 下面的屏幕截图是用于管理服务器的主视图。
浏览左侧菜单,然后找到“ 服务” 。
在这里,您可以同时打开Apache和Nginx。 稍后,在创建Web应用程序项目时,您可以选择部署PHP版本以及要运行的Web服务器类型:Apache-Nginx混合或本机Nginx。
现在,让我们打开所需的服务。
此时,我们应该能够启动浏览器并输入该服务器的IP地址。 您应该从RunCloud获取默认的空白网站页面。
使用RunCloud在服务器中创建Web应用程序(虚拟主机)
现在您的服务器已全部设置并连接到RunCloud,您可以使用RunCloud对其进行管理。 使用SSH管理服务器时,创建虚拟主机总是很麻烦。 使用RunCloud,事情变得容易得多。
在部署Laravel项目之前,您需要一个可以放置应用程序的地方。 因此,现在您需要在Web服务器上创建虚拟主机。 在RunCloud术语中,这称为“ Web应用程序 ”。
选择您的服务器后,从RunCloud仪表板中,从左侧栏中找到Web应用程序菜单。
现在单击“ 创建应用程序”按钮。
在下一个屏幕上,您将设置Web应用程序的配置。
这些是我为此选择的设置。 当然,您可以自由设置自己认为合适的值。
Web Application Name : my-laravel-app
Domain Name : fotofaze.me (just a domain I have available)
User : runcloud
Public Path : /public
PHP Version : 7.1
Web Application Stack : Native NGINX
让我解释一下正在设置的值。
您可以为Web应用程序设置任何名称,以作为对项目的引用。 对于域名,设置将用于项目的域名。 以后,您将能够为项目设置其他域名。 通常,您希望您的网站可以使用“ www”子域,也可以不使用。 我们可以稍后再添加。
User
是指服务器中的Linux用户。 如果要将此项目分配给特定用户,则可以创建更多用户。 并且该特定用户将可以通过SSH访问服务器。 但是我只是使用在服务器安装过程中创建的默认runcloud用户。
Public Path
是您的公共Web文件夹所在的位置。 默认情况下,Laravel应用程序会将“ / public ”文件夹用于可公开访问的Web文件夹。 所有其他文件夹都位于该文件夹之外。 这就是为什么我们为此设置“ / public ”。
我正在选择最新的PHP 7.1版本。 最后,对于Web Application Stack
,我选择了本机NGINX。 另一个选项是NGINX + Apache2混合,它使您可以访问.htaccess配置文件。 但是,对于该选项,我将一直使用NGINX。
此时,您的网站仍无法使用您的域。 我们仍然需要使用正确的DNS进行设置。 让我们在下一部分中进行操作。
设置域名,DNS和SSL
在上一节中,我将fotofaze.me设置为域名。 但是我也希望www.fotofaze.me也可以与此Web应用程序一起使用。 因此,在设置DNS之前,让我们在RunCloud中为此服务器再做一个步骤。
创建Web应用程序后,应该会看到Web应用程序仪表板。 在此处,单击“ 域名”选项卡。
我们可以看到我们已经列出了fotofaze.me。 我仍然需要将www.fotofaze.me添加到列表中。 只需输入域名,然后单击“ 附加域名 ”按钮。
我使用Namecheap作为我的域名。 最重要的是,它带有内置的DNS服务器。 否则,您可能需要使用CloudFlare或Linode自己的DNS服务。 我们需要做的是在DNS管理中设置两个DNS记录。 一个是A记录,另一个是CNAME。
从我的Namecheap域名列表中,我只需单击“ 管理”按钮。
在这里,我单击“ 高级DNS”选项卡。
在这里,无论您使用什么DNS服务,我们都需要设置以下DNS记录:
Type : A
Host : @
Value : 139.162.5.220 (your server IP address)
Type : CNAME
Host : www
Value : fotofaze.me (your domain name)
这就是我在Namecheap Advanced DNS中的设置。
在浏览器中测试网站之前,请稍等片刻以解决DNS更改。 一旦更改生效,当您访问站点时,您应该会收到NGINX 403错误。 这是因为/ public文件夹当前为空,但是它使您知道一切正常。
域名的最后一部分是启用SSL。 这使我们可以使用端口443上的https://协议而不是端口80上的http://来访问我们的网站。这样做有很多优点。 除了安全目的之外,它对于SEO也很有用。
让我们回到My-Laravel-App Web应用程序仪表板,然后单击SSL / TLS选项卡。 SSL证书过去要花费数百美元。 但是,借助“让我们加密”,我们现在可以免费为域名部署SSL证书。 如果您要手动添加“让我们加密SSL”证书,这可能是非常技术性的,但是对于RunCloud,这是一键处理的工作。
在这里,您可以选择“ 让我们加密”作为SSL方法 。 然后单击“ 提交”按钮。
您的网站现在应该可以使用https://协议。
创建您的应用程序数据库
因为我们将部署Laravel应用,所以我们将需要一个数据库。 现在让我们完成它。 浏览左侧边栏菜单,然后单击“ 数据库”菜单。
现在单击创建数据库按钮。
只需输入数据库名称,然后单击“ 添加新数据库”按钮。
现在我们需要添加一个数据库用户并将其分配给我们的数据库。 单击添加用户按钮。
现在只需输入用户名和密码。 然后单击添加按钮。
接下来,我们将新创建的用户分配给先前创建的数据库。 单击数据库列表上的小“ 附加用户”图标。
由于您目前只有一个用户,因此请确保已选中该用户,然后单击“ 附加”按钮。
完成后,这就是您所看到的。 laraveluser现在已连接到laravelapp数据库。
现在我们即将准备使用Laravel进行一些PHP编程。 但是在此之前,让我们创建一个GitHub项目存储库,稍后我们可以将其源代码推送到该项目存储库。
设置您的GitHub项目
一个单独的Web开发人员通常会在三个地方保留其源代码:
- 本地计算机进行开发
- 用于协作,版本控制,备份等的Git托管服务(即GitHub)。
- 实时服务器
在本教程的这一部分中,我们将在GitHub上创建项目存储库。 稍后,我们将使用该存储库将工作从本地计算机上的开发环境推送到该特定的GitHub项目存储库。
在GitHub上,如果您已登录,则可以单击顶部栏右侧的小加号( + )图标。 并且您应该看到“ 新建存储库”菜单。 点击那个。
只需使用以下内容输入项目的详细信息。 单击显示创建存储库的绿色按钮。
您现在应该具有如下所示的视图。
用红色框突出显示的区域是项目在GitHub上的存储库地址。 稍后,当我们从本地开发计算机设置项目的远程表示时,我们将需要此功能。
现在,我们准备开始在本地计算机上进行开发,并将代码推送到GitHub。
在本地计算机上设置Laravel项目
在本部分的教程中,我们将使用Laravel项目的开发版本来设置本地计算机。 稍后,我们会将其上传到Git托管服务(我们将使用GitHub)。 之后,我们将使我们的Linode服务器从GitHub中获取一些代码,以便我们的生产服务器将始终部署最新的源代码。
恰如其分,本教程跳过了有关使用公共SSH密钥设置GitHub帐户以进行安全通信的部分。 我们将在SSH的终端屏幕上使用很多。 我通常在Windows上使用Putty。
如果您是GitHub的新手,则可能需要阅读有关使用SSH密钥生成和设置本地计算机以供GitHub使用的教程。
可以使用RunCloud轻松设置管理到实时服务器的Git部署。 一旦完成所有设置,并通过本地计算机上的简单Git推送,您始终可以确保服务器将自动获取这些更新。 没有FTP,没有更多的命令行说明。
启动Laravel项目的最简单方法是使用Composer。 如果您不熟悉Composer,请确保已阅读并安装在本地计算机上。 作曲家不仅仅适合Laravel。 Composer将使对任何PHP项目的库和依赖项的管理更加顺畅,并且其使用被认为是现代PHP应用程序开发所不可或缺的。
打开首选的终端工具,然后运行以下命令来创建Laravel项目。
$ composer create-project --prefer-dist laravel/laravel my-laravel
当Composer在您的计算机上下载并安装Laravel时,可能需要一段时间。 Composer将创建一个名为my-laravel的文件夹,并将所有内容存储在其中。 首先,让我们进入这个文件夹。
$ cd my-laravel
关于.env文件
为了确保您的Laravel应用正常运行,您需要设置数据库连接设置。 您可以通过编辑.env文件来实现。 使用您熟悉的任何文本编辑器并编辑此文件。 这是典型的.env文件所包含的内容。 您可以根据自己的需要进行更新。
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
...
...
回到命令行工具,首先让我们为该laravel应用创建一个密钥。 在终端中输入以下命令。 以下命令将使用密钥哈希更新.env文件。
$ php artisan key:generate
现在,我们将其初始化以进行Git跟踪。
$ git init
$ git add --all
$ git commit -m "first commit"
关于Laravel的默认.gitignore
也许我也应该解释一下Laravel随附的.gitignore文件。 您可以查看此文件,并查看未跟踪的文件。 例如,不会跟踪存储数据库连接详细信息的.env 。 这意味着,假定您将对本地计算机和实时服务器使用不同的.env文件。
在上一节中,我讨论了您在GitHub上的远程Git存储库地址。 使用您自己的地址运行以下命令。
$ git remote add origin [email protected]:kidino/my-laravel.git
接下来,我们将告诉我们本地的Git项目在GitHub上的项目位置。 为此,我们需要添加一个远程存储库表示。
$ git push -u origin master
如果您做对了,那么您在GitHub上的项目应该已经用类似的东西进行了更新。 如果遇到问题,则可能是您的计算机上没有正确设置Git,或者您没有生成本地SSH密钥。
检查GitHub的网站以帮助您 。
现在,我们可以开始使用Web挂钩和触发器来设置自动部署。 一旦有了这些,每次将工作推送到GitHub时,您的代码就会通过RunCloud自动传送到服务器。
在RunCloud中设置Git Web挂钩
为此,首先我们需要通过RunCloud的面板生成一个部署密钥。 在服务器面板的左侧菜单中,您应该能够找到标有Deployment Key的菜单。
您应该已经为用户runcloud设置了一个。 如果您还记得的话,在创建Web应用程序时,我们提到用户是runcloud 。
单击小眼睛图标以显示该用户的SSH密钥。 如果您收到类似的消息,则表示过去从未为该用户创建过SSH密钥。 只需单击“ 确定” ,即可创建一个新的SSH密钥。
确定之后,您将看到这样的布局。 这是您需要在GitHub中输入的SSH密钥。 这样,当服务器希望提取新更新时,GitHub可以识别提取请求。 复制所有内容。
现在让我们转到GitHub。
进入您的项目,然后单击“ 设置”标签。 然后单击左侧栏中的“ 部署密钥”菜单。
由于您可能还没有密钥,因此只需单击添加部署密钥按钮。
只要给它起一个名字,然后您就可以输入我们从RunCloud获得的SSH部署密钥。 单击添加键按钮。
接下来,我们将设置一个Web Hook触发器。 GitHub Web挂钩的工作原理是这样的-每当我们将新更新推送到GitHub时,我们都可以让GitHub通知其他服务或服务器有关该新推送的信息。 在这种情况下,我们将告诉GitHub通知实时服务器。 这可以通过RunCloud轻松完成。
在RunCloud中,打开您先前创建的Web应用程序。 然后单击标签为Git的选项卡。
向下滚动并在GitHub上输入有关您的存储库的详细信息。 这就是我们在本教程中一直在做的项目的样子。 如果您不希望其成为主节点,则可以设置自己的分支进行实时部署。 但是对于这个例子,我们将坚持使用大师。
这意味着当您将master分支推送到GitHub时,实时服务器将以此为标志来更新服务器上的源代码。 然后它将拉动master分支并进行自我更新。
如果您准备好了,请单击标记为Attach Git Repository的按钮。
这是使用Git部署更新Web应用程序时获得的视图。
现在您可以看到您拥有一个Git WebHook URL。 这是我们将复制并放入GitHub的URL。
在此之前,让我们在服务器上自定义我们的部署脚本。
部署脚本是bash脚本,可用于指示服务器在GIT拉动发生之前或之后执行某些操作。 如果您使用的是Laravel,您将知道Laravel在很大程度上取决于artisan命令和作曲者,以简化您的开发和部署。
要更改部署脚本,请在Web应用程序的GIT选项卡中向下滚动到GIT部署脚本。 在这里,您可以添加自己的脚本来运行。 请确保将git pull包括在部署脚本中。 您可以使用Replacer编写脚本,以方便使用。
下面是我使用的脚本。
$ git merge
$ composer dump-autoload -o
$ composer install
$ php artisan migrate --force
$ php artisan clear-compiled
$ php artisan view:clear
$ php artisan config:clear
$ php artisan optimize
$ composer dump-autoload -o
$ php artisan queue:restart
您可以使用相同的脚本。 选中复选框,然后单击“ 保存”按钮。
现在回去。 我们仍然需要将Git Webhook URL放入GitHub。
复制此URL,然后我们将继续进行到GitHub。 在GitHub中,转到您的项目存储库。 然后单击设置选项卡。 然后在侧边栏的Webhooks菜单上。 然后在添加Webhook按钮上。
只需将我们从RunCloud获得的Git WebHook URL粘贴到有效负载URL文本字段中即可。 确保您为Content type选择application / json 。 那应该足够了。 然后单击添加Webhook按钮。
到现在为止,我们应该能够在本地计算机上进行Git推送,实时服务器将自动更新。 但是,我们仍然需要做一件事。
如果您还记得的话,我写了有关.gitignore和.env文件的文章。 由于我们在.gitignore文件中包含了.env文件,因此服务器上的Laravel应用缺少必需的.env文件。 我们需要创造这一点来纠正这种情况。
我们可以使用SSH和终端。 另外,我们也可以在RunCloud中使用文件管理器。 假设您使用像Putty这样的SSH或任何其他终端工具。 如果您还记得的话,此Web应用程序以前是使用runcloud用户创建的。 确保您也使用该用户通过SSH连接。
您需要浏览到Web应用程序文件夹。 然后运行以下命令。
$ cd /home/runcloud/webapps/my-laravel-app
$ cp .example.env .env
$ php artisan key:generate
不要忘记更新您的.env文件。
现在,您应该拥有.env文件,并生成了哈希键。 您仍然需要更新此文件,并使用数据库连接设置对其进行更新,就像在前面的步骤中创建它们一样。
让我们尝试一下Git Push
现在唯一要做的就是在本地计算机上进行更新并将其推送到GitHub。
我对resources / views文件夹中的welcome.blade.php文件进行了简单的编辑。
让我们进行一次提交,然后将其推送到服务器。
$ git add --all
$ git commit -m "updating welcome.blade.php"
$ git push origin master
如果一切按计划进行,您可以在浏览器中启动网站并查看您所做的更改。 恭喜!您只需更新服务器即可,而不必诉诸S / FTP上传。
翻译自: https://code.tutsplus.com/tutorials/rapid-web-deployment-for-laravel-with-github-linode-and-runcloudio--cms-30337