轻松部署 Laravel 应用 | 《08. 手动部署 - 部署应用代码》
:clap: 本系列持续更新中,欢迎关注:https://github.com/wi1dcard/laravel-deploy...。
由于课程上下文关联比较紧密,在开始前请先阅读 本文。
你的支持是我写作的动力;关注我的客官们,请在右上角点个赞,将会让文章在首页展示,帮助更多人。
感谢 :clap: !
在上一节,我们终于安装好了基本运行环境,是时候将代码部署到服务器上了。
使用 Git 拉取项目(HTTPS 协议)
目前几乎所有的 Laravel 开发者都会使用 Git 作为版本控制系统,而常见的 Git 仓库托管平台 GitHub、GitLab、Gitea,以及国内的 Gitee、Coding 等,几乎都支持两种常见的传输协议 —— SSH 和 HTTPS。由于使用 SSH 协议通常需额外配置,本节我们先尝试 HTTPS 协议。
首先,我们需要得到 Git 仓库的地址。以 GitHub 为例,在浏览器内打开仓库页面,点击绿色的 Clone or download 按钮,选择弹出框内的 Use HTTPS:
确保链接为 HTTPS 协议,点击复制:
记住此链接,稍后需要使用。接下来请登录到服务器,执行:
$ cd /var/www/
cd
命令用于切换当前工作目录,/var/www
是 Nginx 默认的站点存放目录。
随后便可以将仓库克隆到本地了:
$ git clone https://github.com/wi1dcard/hello-deployment.git deployment
提示:若仓库包含大量提交历史,以上命令可能耗时较久;你可以尝试使用
--depth
选项来优化,详情请搜索Git 浅克隆
等关键字。
请将命令中的 URL 替换为刚刚从 GitHub 或其它仓库托管平台内复制的链接。末尾的 deployment
参数表示将此仓库克隆至当前工作目录下的 deployment
子目录内。
稍等将会出现以下输出:
Cloning into 'hello-deployment'...
remote: Enumerating objects: 130, done.
remote: Counting objects: 100% (130/130), done.
remote: Compressing objects: 100% (95/95), done.
remote: Total 130 (delta 50), reused 105 (delta 32), pack-reused 0
Receiving objects: 100% (130/130), 2.73 MiB | 850.00 KiB/s, done.
Resolving deltas: 100% (50/50), done.
Checking connectivity... done.
如果你的项目是「私有」的,那么可能需要输入用户名和密码:
Cloning into 'hello-deployment'...
Username for 'https://github.com': <输入你的用户名>
Password for 'https://wi1dcard@github.com': <请输入你的密码>
提示:还记得之前提到的吗?密码输入是不可见的。
使用 Composer 安装依赖
首先,请切换至 deployment
目录内:
$ cd deployment
接着执行:
$ composer install
稍等片刻,你可能会看到这样的警告:
Failed to download foo/bar from dist: The zip extension and unzip command are both missing, skipping.
Now trying to download from source
意为 PHP Zip 扩展和 unzip
命令均找不到,此时 Composer 会尝试从依赖的 Git 仓库内直接克隆源码,这是不推荐的;因此我们使用 Ctrl + C
(macOS 为 Cmd + C
)中止正在运行的命令。
针对该警告信息,可以想到两种解决思路:
- 使用之前小节提到的
apt-cache search
搜索php zip
关键字,查找 Zip 扩展并安装。 - 安装
unzip
命令。
第一种方法本节不再赘述,我们来尝试第二种方法。首先,尝试手动执行 unzip
,确认它的确未安装:
$ unzip
The program 'unzip' is currently not installed. You can install it by typing:
apt install unzip
看样子在当前系统中确实找不到 unzip
。不过,贴心的 APT 帮我们找到了包含 unzip
的软件包,并直接提供了安装命令:
$ apt install unzip
稍等片刻便安装好了。此时再次执行:
$ unzip
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
...
完美。
实际上,不仅是 Composer,其它多数命令都支持使用 Ctrl + C
中止运行;如果 Ctrl + C
无效,你也可以试试 Ctrl + D
;另外,结合 APT 的提示和 apt-cache search
,可以帮助我们很快地解决绝大多数命令缺失的错误,而无需遵从百度来的手动而又复杂的源码编译步骤。
我们回到主题,再次运行 composer install
:
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 72 installs, 0 updates, 0 removals
- Installing dragonmantank/cron-expression (v2.2.0): Downloading (100%)
- Installing erusev/parsedown (1.7.1): Downloading (100%)
- Installing symfony/var-dumper (v4.2.3): Downloading (connecting...)
恭喜,等待安装完毕即可。
配置环境变量
依赖安装完成后,我们还需要将 .env.example
文件复制为 .env
文件,并生成 APP_KEY
密钥:
$ cd /var/www/deployment
$ php -r "file_exists('.env') || copy('.env.example', '.env');"
$ php artisan key:generate --ansi
提示:实际上,以上两条命令都是从部署应用的
composer.json
-scripts
小节内摘抄出来的,这也解释了为何使用laravel new
创建项目后.env
文件就已经存在。有兴趣可深入了解 Composer Scripts。
配置文件所有者
最后,别忘记修改文件所有者:
$ chown -R www-data:www-data .
由于目前所在的工作目录为 /var/www/deployment
,所以可用表示当前工作目录的 .
代替之前的 /var/www/deployment
,它们是等效的。
至此,本小节目标完成。你可以通过 ll
命令来列出当前目录:
$ ll
total 440
drwxr-xr-x 13 www-data www-data 4096 Mar 9 01:26 ./
drwxr-xr-x 5 root root 4096 Mar 9 00:49 ../
drwxr-xr-x 6 www-data www-data 4096 Mar 9 00:45 app/
-rw-r--r-- 1 www-data www-data 1686 Mar 9 00:45 artisan
...
本作品采用《CC 协议》,转载必须注明作者和本文链接
请问例如passport那些,要install的,到服务器部署完后要重新手动install一下吗
@alexxd
composer install
的作用就是安装依赖。@Wi1dcard 安装依赖那个我知道,但是因为有一些插件是需要手动install一下的,例如 php artisan passport:install php artisan admin:install 这些命令。
@alexxd 你可以看一下一些 Composer 包的
composer.json
里面有定义一些 Scripts,其中postInstall
等脚本是会在安装之后自动运行,所以我们无需手动操作。而如果没有定义,那么我们就需要手动执行各个扩展包要求的 Install 命令,不过通常情况下这些都是一次性的工作,它们所进行的操作要么是数据库、要么是没有进入版本管理的文件,所以不必担心。@Wi1dcard 谢谢