轻松部署 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_namerootfastcgi_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 应用的默认主页:

是的,跟之前一毛一样,我也是复制过来的截图 :P

恭喜你,部署成功。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Former WinForm and PHP engineer. Now prefer Golang and Rust, and mainly working on DevSecOps and Kubernetes.
本帖由系统于 4年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 13
wanghan

提个小建议,从第一篇开始追到第九篇,感觉后面的章节不是很具体了,nginx的配置项要能稍微展开讲一讲就好啦

5年前 评论

@wanghan 非常感谢建议。为了让大家能够快速地体验到结果,并不断地用成就感驱动学习,所以这里没有详细展开。我将在后续章节中(Ansible、Deployer 阶段)细致讲解各个配置项,以及我们需要进行什么调整、为何需要调整。

5年前 评论
two_steps

感谢分享 :+1: :+1: :+1:

5年前 评论
wanghan

我来催更了~

5年前 评论

最后来一发 Homestead 入魂 :yum:

5年前 评论

@largezhou Homestead 更适合作为开发环境,不适合作为生产环境长期运行。

5年前 评论

@wanghan 哈哈,感谢关注,最近由于租房问题在搬家,所以细碎的事情比较多,下一期如果没问题的话将在明天更新。

5年前 评论

@Wi1dcard 我觉得,可以把 MySQL 的安装和配置也弄进系列中去。。这样 lnmp 就搞起来了

5年前 评论

@largezhou 主要是考虑到 MySQL 涉及的知识树比较广而深,如果只讲安装不足以在生产环境使用,讲详细配置又偏离主题太远,所以暂时没有在本系列详细说明 MySQL 的打算,不过这个可以作为下一步的规划。

5年前 评论

这个系列貌似没有讲到Envoy deployer 等自动部署流程 也少了laravel项目前端文件编译的流程啊 :grin: :grin:

5年前 评论

@Wi1dcard 项目部署好了,讲讲 MySQL 吧,包括服务起安装 PHPMyAdmin,添加用户并配置权限等,先来个基础版本的。

5年前 评论

@lianglunzhong phpMyAdmin 已经是上个时代的产品了,个人不推荐使用。另外近期比较忙,所以更新暂停了些时日,后续会考虑加入 MySQL 部分的配置。

5年前 评论

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