轻松部署 Laravel 应用 | 《09. 手动部署 - 配置 Nginx 站点》
:clap: 本系列持续更新中,欢迎关注:https://github.com/wi1dcard/laravel-deploy...。
由于课程上下文关联比较紧密,在开始前请先阅读 本文。
你的支持是我写作的动力;关注我的客官们,请在右上角点个赞,将会让文章在首页展示,帮助更多人。
感谢 :clap: !
在先前的小节中,我们已经成功地完成了手动部署中所需要的「安装运行环境」、「部署应用代码」,还差最后临门一脚「配置运行环境」。
Nginx 站点配置
根据 Laravel 5.8 部署文档 的说明,我们可直接拿到一份现成的 Nginx 配置文件,稍作调整即可:
server {
listen 80;
server_name laravel-deployment.wi1dcard.cn; # 此为必修改项,请替换为服务器公网 IP 或域名
root /var/www/deployment/public; # 此为必修改项,请注意指向站点根目录的 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/php7.2-fpm.sock; # 请注意核对 PHP 版本
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
提示:关于以上 Nginx 配置项的解析,可参见 这篇博客。
通常我们仅需修改 server_name
、root
和 fastcgi_pass
;请注意阅读 #
后的注释。
我们将以上内容保存到本地文件(例如 deployment.conf
)内,使用 SCP 即可上传至服务器:
$ scp ~/deployment.conf root@laravel-deployment.wi1dcard.cn:/etc/nginx/sites-enabled/
提示:如果你熟悉
vi
等文本编辑器,也可以直接在服务器上操作,此处不再展开。
其中:
~/deployment.conf
请替换为配置文件的实际保存路径,该路径位于本地。/etc/nginx/sites-enabled/
为存放 Nginx 站点配置的目录,该目录位于服务器。
重载 Nginx
配置完成后,请务必重启(Restart)或重载(Reload)Nginx。
什么是 重载?实际上,直接重启 Nginx 是不安全的。原因有二:
- 在 Nginx 进程结束再重新运行的过程中,将造成极短时间的闪断。虽然这一时间通常很短(一般来说在秒级别),但倘若面对大量并发,还是极易造成一部分请求无法访问,即服务中断。
- 在重启的过程中,若此时 Nginx 恰好正在处理请求,与客户端的 TCP 连接将会断开,客户端无法收到正确响应,造成前后端信息不一致。
在之前的小节中,已经提到重启 Nginx 的方法;
$ service nginx restart
同样地,亦可使用 service
命令重载 Nginx:
$ service nginx reload
另一种等效的方法是:
$ nginx -s reload
最终效果
在浏览器内输入服务器公网 IP 或域名并访问,你将会看到 Laravel 应用的默认主页:
恭喜你,部署成功。
本作品采用《CC 协议》,转载必须注明作者和本文链接
提个小建议,从第一篇开始追到第九篇,感觉后面的章节不是很具体了,nginx的配置项要能稍微展开讲一讲就好啦
@wanghan 非常感谢建议。为了让大家能够快速地体验到结果,并不断地用成就感驱动学习,所以这里没有详细展开。我将在后续章节中(Ansible、Deployer 阶段)细致讲解各个配置项,以及我们需要进行什么调整、为何需要调整。
感谢分享 :+1: :+1: :+1:
我来催更了~
最后来一发
Homestead
入魂 :yum:@largezhou Homestead 更适合作为开发环境,不适合作为生产环境长期运行。
@wanghan 哈哈,感谢关注,最近由于租房问题在搬家,所以细碎的事情比较多,下一期如果没问题的话将在明天更新。
@Wi1dcard 我觉得,可以把
MySQL
的安装和配置也弄进系列中去。。这样lnmp
就搞起来了@largezhou 主要是考虑到 MySQL 涉及的知识树比较广而深,如果只讲安装不足以在生产环境使用,讲详细配置又偏离主题太远,所以暂时没有在本系列详细说明 MySQL 的打算,不过这个可以作为下一步的规划。
这个系列貌似没有讲到
Envoy
deployer
等自动部署流程 也少了laravel
项目前端文件编译的流程啊 :grin: :grin:@Flourishing 麻烦看下目录。
@Wi1dcard 项目部署好了,讲讲 MySQL 吧,包括服务起安装 PHPMyAdmin,添加用户并配置权限等,先来个基础版本的。
@lianglunzhong phpMyAdmin 已经是上个时代的产品了,个人不推荐使用。另外近期比较忙,所以更新暂停了些时日,后续会考虑加入 MySQL 部分的配置。