轻松部署 Laravel 应用 | 《02. 一键脚本》

:clap: 本系列持续更新中,欢迎关注:https://github.com/wi1dcard/laravel-deploy...

由于课程上下文关联比较紧密,在开始前请先阅读 本文

你的支持是我写作的动力;关注我的客官们,请在右上角点个赞,将会让文章在首页展示,帮助更多人。

感谢 :clap: !

书接上回。上篇文章介绍了 Web 管理面板的安装与使用,本节将会介绍使用一键安装脚本。

广义上来讲,Web 管理面板也是一键脚本的一种;只不过安装好之后,Web 面板通过网页管理,而一键脚本则是通过执行命令管理。虽然前者通常具备美观、易操作的 GUI,但相比之下缺点也很明显:

  • 需要单独放行端口(配置安全组),不仅麻烦,还给黑客以可乘之机;无论是面板存在漏洞还是你的密码强度不足,都有可能造成服务器沦陷为肉鸡。
  • 市面上常见的 Web 面板几乎都是由「集中」的组织或公司开发并闭源,而非开源社区维护;这就造成我们不易看到源码,遇到问题无从查起,更别说提交贡献了。

常见的一键脚本

GitHub 搜索 lnmp 关键字,排名靠前的有:

十分出人意料的是,以上项目均由国人开发,但这不是一件值得骄傲的事情 —— 部署技术依旧停留在一键脚本的「上古世纪」。

在众多的一键脚本中,有一款是咱们 Laravel-China 站长 Summer 编写的 summerblue/laravel-ubuntu-init,本篇将基于该脚本进行部署,原因请见文末。

安装运行环境

注意:由于兼容性原因,建议需要使用该脚本的用户采用 Ubuntu 16.04 系统。本小节将基于该系统进行部署。

登录服务器后,输入以下命令:

$ wget -qO- https://raw.githubusercontent.com/summerblue/laravel-ubuntu-init/master/download.sh - | bash

稍等片刻,将会出现以下提示:

===> 开始下载...
===> 下载完毕

安装脚本位于: /root/laravel-ubuntu-init
===> 正在初始化系统...

继续等待。

===> 正在初始化系统...    [DONE]
===> 正在初始化软件源...    [DONE]
===> 正在安装基础软件...    [DONE]
===> 正在安装 PHP...    [DONE]
===> 正在安装 Mysql / Nginx / Redis / Memcached / Beanstalkd / Sqlite3...    [DONE]
===> 正在安装 Nodejs / Yarn...    [DONE]
===> 正在安装 Composer...    [DONE]
安装完毕
Mysql root 密码:gBRCuFTpGaorATvBybAHZYVIlteFsSB1
请手动执行 source ~/.bash_aliases 使 alias 指令生效。

出现以上输出,说明安装成功。注意保存密码,切勿丢失。随后请执行:

$ source ~/.bash_aliases

这样,运行环境就安装完成了。

配置运行环境

首先,我们需要增加 Nginx 站点:

$ ~/laravel-ubuntu-init/16.04/nginx_add_site.sh

根据提示,输入一些信息并回车:

请输入项目名:deployment
请输入站点域名(多个域名用空格隔开):laravel-deployment.wi1dcard.cn

请注意,站点名称(项目名)仅允许英文、数字、-_ 组合。另外,与上文宝塔面板类似,站点域名也可以使用公网 IP 代替。

请注意以下输出:

域名列表:laravel-deployment.wi1dcard.cn
项目名:deployment
项目目录:/var/www/deployment
是否确认? [y/N]

记住此处的项目目录,后续将会使用。检查无误后,输入 y 并回车。

没什么问题的话,将会看到成功提示:

配置文件创建成功
Nginx 重启成功

接下来,请在浏览器内输入服务器的公网 IP(或域名)并打开:

出现 Welcome to Nginx! 字样的提示,说明运行环境配置成功,Nginx 已经开始提供服务了。

部署项目

由于没有 Web 管理页面,所以本小节,我们采用基于 SSH 的 SCP 协议上传项目代码。

注意:在生产环境中这样做很危险!请关注后续章节。

请在 本地 的 Laravel 应用根目录执行以下命令:

$ scp -r . root@laravel-deployment.wi1dcard.cn:/var/www/deployment

其中:

  • scp 是文件传输命令。
  • -r 表示传输整个目录以及其子目录内的文件。
  • . 表示当前目录,该目录位于本地。
  • root@laravel-deployment.wi1dcard.cn 与本课程开篇「登录服务器」类似,请替换为你的服务器公网 IP 或域名。
  • /var/www/deployment 便是上文提到需要你记住的项目目录,该目录位于服务器端。

传输需要一段时间,你会看到一大堆输出,当没有新的文件进度展示时说明已经传输完成。

好了,现在请刷新运行环境配置成功后、包含 Welcome to Nginx! 字样的页面:

出现报错,不要慌。这是一种部署过程中十分常见的错误 —— Permission Denied,意为没有权限。当出现类似字词时,你就需要检查 权限 相关配置了。

由于在服务器端运行 PHP 的并非根用户,而我们刚刚传输文件时使用的是 root,因此需进行修改。

请登录到服务器,执行以下命令:

$ chown -R www-data:www-data /var/www/deployment

其中:

  • chown 命令用于修改文件或目录拥有者。
  • -R 表示整个目录以及其子目录内的文件(与 scp -r 类似)。
  • www-data:www-data 表示分别将拥有者与拥有组设置为 www-data 用户和 www-data 用户组。
  • /var/www/deploymentscp 时使用的目录一致。

稍等几秒钟,虽然没有任何输出,但这是正常现象。许多传统 Unix 命令均为「沉默即成功」;相反,若是出现任何提示或许就是警告或错误。

最终效果

在浏览器内刷新刚刚报错的页面,你将会看到 Laravel 应用的默认主页:

恭喜你,部署成功。

为什么不是 Star 更多的那些?

一键脚本通常使用 Shell 语言编写(与我们输入的命令是同一种语言),其中的逻辑十分复杂,加之 Shell 语言起源于几十年前、可读性较差,鉴于后续文章中将会剖析脚本中做了什么,所以选择讲解专为 Laravel 开发的简易一键脚本,也方便大家自行研究探索。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Former WinForm and PHP engineer. Now prefer Golang and Rust, and mainly working on DevSecOps and Kubernetes.
本帖由系统于 4年前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

能否详细说下 443 https 的配置吗?活着 生成 HTTPS 的证书?

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
67
粉丝
590
喜欢
1235
收藏
1133
排名:13
访问:32.4 万
私信
所有博文
社区赞助商