轻松部署 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.
本帖由系统于 1年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 13
wanghan

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

1年前 评论

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

1年前 评论

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

1年前 评论
wanghan

我来催更了~

1年前 评论

最后来一发 Homestead 入魂 :yum:

1年前 评论

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

1年前 评论

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

1年前 评论

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

1年前 评论

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

1年前 评论

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

1年前 评论

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

1年前 评论

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

1年前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
未填写
文章
65
粉丝
547
喜欢
1116
收藏
959
排名:13
访问:15.6 万
私信
所有博文