Laravel 生产环境部署之难之感慨

昨天在论坛里面请教“Homestead 环境下的项目要怎样迁移到 Ubuntu 下的生产环境“,见帖子 问答:Homestead 环境下的项目要怎样迁移到 Ubuntu 下的生产环境?, 无一回复,唉本来因为是小白所以花了钱买了教程学着用Hoemstead来建了自己的Laravel项目,可是可是,部署竟然成了个大问题,更郁闷的是,竟然打死找不到一个系统地介绍部署的帖子,我觉得这是Laravel China社区做得不好的地方,推荐新手使用Homestead做开发,也得说说开发完了怎么移到生产环境上去吧,移到自建的服务器上到底还有多少坑要踩啊?

这两天边琢磨边部署边踩坑,过程中随手记了一下自己部署过程中遇到的一些问题和解决办法,记在博客里面希望对后来的小白有所帮助吧,记的时候真的是只求内容没怎么管格式了。

Laravel从Homestead开发环境移到Ubuntu生产环境(1) - Ubuntu16.04 生产环境安装
https://blog.csdn.net/hitcompass1/article/...

Laravel从Homestead开发环境移到Ubuntu生产环境(2) - 修改Laravel为生产环境
https://blog.csdn.net/hitcompass1/article/...

记了这么多,最后到现在部署也没有成功,元旦节加了一天班也没成功,希望有看到贴的好心人大神帮忙提点一下,感激不尽。
管理员大大,能不能指点一下

本帖已被设为精华帖!
附言 1  ·  5年前

谢谢各位热心的大神,我最后终于找到原因了,最后就是因为bootstrap和storage两个目录没有改权限,一路走过来不容易,我把我遇到的问题都纪录在这篇帖子里面的两个博客地址里面了,希望对后来的小白有所启发。

另外,谢谢回思恋莹 ,如果再早点看到你的帖子就好了,能减少我的好多摸索时间,我最后就是少做了一步改权限的操作,在回思恋莹的帖子里最后一步就是改权限,还是谢谢你。

本帖由系统于 4年前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 19

虽说授人以鱼不如授人以渔,但是授人以渔不是一蹴而就,还是先授人以鱼让你能看到成效吧。请照着做:
假定你能熟练使用 apt install 命令安装软件

安装

  • 安装 nginx
    sudo apt install nginx
  • 安装 mysql
    sudo apt install mysql-server mysql-client mysql-common
  • 安装 php
    sudo apt install php7.2-fpm php7.2-mysqli php7.2-gd php7.2-curl php7.2-mbstring php7.2-pdo-mysql
  • 安装 redis 杂项
    sudo apt install redis-server

    配置

  • nginx 配置
    1. cd /etc/nginx/sites-enabled/
    2. 建立你的域名文件
      touch www.yourdomain.com
    3. vim www.yourdomain.com
      把laravel文档里的部署的内容拷贝进去,里面有几个注意的地方,需要修改
      server_name  example.com;     // 改成你的域名
      root  /example.com/public;         // 改成你代码文件夹对应的位置
      fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;  // 改成你php的sock文件位置
  • php 配置
    1. cd /etc/php/7.1/fpm/pool.d/
    2. vim www.conf 修改几个选项,以下是核心配置,还有一些日志之类的你就用默认的吧
      user = www-data
      group = www-data
      listen = /run/php/php7.1-fpm.sock     // 这里位置要跟上面 nginx 监听位置对应
      listen.owner = www-data
      listen.group = www-data
      listen.mode = 0666
      pm.max_children = 你的cpu核心数 * 2 或 * 4
      pm.start_servers = 你的 cpu 核心数
      pm.min_spare_servers = 你的 cpu 核心数
      pm.max_spare_servers = 你的 cpu 核心数 * 2

      启动服务

  • nginx
    sudo service nginx start
  • php-fpm
    sudo service php-fpm start
  • mysql
    sudo service mysql start
    注意你的代码的文件夹最好把它所有者设置为 www-data, 然后上级目录 www-data 要有搜索权限,还有记得解析你的域名到你的服务器上。
    然后应该没什么问题,有的话再问
5年前 评论

@天上白玉京 谢谢你的回复,这个贴子里面的脚本早已过期,也没有更新,最新的脚本在GITHubhttps://github.com/summerblue/laravel-ubuntu-init放着。
并且我也按照这个脚本完成了最初的环境搭建,可这离最后的完全部署还差得远啦,光是Homestead下代码移到非Hoemstead环境下就还有好多事情要做,比如Nginx里面一些配置文件的定制,数据库的迁移等等,详情请看我的博客帖子。
可能对老手这些事情都不算什么,问题是对一个新手,很多东西都只能自己摸索,和去网上找一些东拼西凑的文章,Laravel China应该有一个教程详细讲讲Hoemstead开发完成之后怎么移到非Homestead上面去,不然太虎头蛇尾了。

5年前 评论

虽说授人以鱼不如授人以渔,但是授人以渔不是一蹴而就,还是先授人以鱼让你能看到成效吧。请照着做:
假定你能熟练使用 apt install 命令安装软件

安装

  • 安装 nginx
    sudo apt install nginx
  • 安装 mysql
    sudo apt install mysql-server mysql-client mysql-common
  • 安装 php
    sudo apt install php7.2-fpm php7.2-mysqli php7.2-gd php7.2-curl php7.2-mbstring php7.2-pdo-mysql
  • 安装 redis 杂项
    sudo apt install redis-server

    配置

  • nginx 配置
    1. cd /etc/nginx/sites-enabled/
    2. 建立你的域名文件
      touch www.yourdomain.com
    3. vim www.yourdomain.com
      把laravel文档里的部署的内容拷贝进去,里面有几个注意的地方,需要修改
      server_name  example.com;     // 改成你的域名
      root  /example.com/public;         // 改成你代码文件夹对应的位置
      fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;  // 改成你php的sock文件位置
  • php 配置
    1. cd /etc/php/7.1/fpm/pool.d/
    2. vim www.conf 修改几个选项,以下是核心配置,还有一些日志之类的你就用默认的吧
      user = www-data
      group = www-data
      listen = /run/php/php7.1-fpm.sock     // 这里位置要跟上面 nginx 监听位置对应
      listen.owner = www-data
      listen.group = www-data
      listen.mode = 0666
      pm.max_children = 你的cpu核心数 * 2 或 * 4
      pm.start_servers = 你的 cpu 核心数
      pm.min_spare_servers = 你的 cpu 核心数
      pm.max_spare_servers = 你的 cpu 核心数 * 2

      启动服务

  • nginx
    sudo service nginx start
  • php-fpm
    sudo service php-fpm start
  • mysql
    sudo service mysql start
    注意你的代码的文件夹最好把它所有者设置为 www-data, 然后上级目录 www-data 要有搜索权限,还有记得解析你的域名到你的服务器上。
    然后应该没什么问题,有的话再问
5年前 评论

@天上白玉京 谢谢你的回复,这个贴子里面的脚本早已过期,也没有更新,最新的脚本在GITHubhttps://github.com/summerblue/laravel-ubuntu-init放着。
并且我也按照这个脚本完成了最初的环境搭建,可这离最后的完全部署还差得远啦,光是Homestead下代码移到非Hoemstead环境下就还有好多事情要做,比如Nginx里面一些配置文件的定制,数据库的迁移等等,详情请看我的博客帖子。
可能对老手这些事情都不算什么,问题是对一个新手,很多东西都只能自己摸索,和去网上找一些东拼西凑的文章,Laravel China应该有一个教程详细讲讲Hoemstead开发完成之后怎么移到非Homestead上面去,不然太虎头蛇尾了。

5年前 评论

所以最终问题还是自己没有认真阅读文档吧:https://learnku.com/docs/laravel/5.7#installing-la...

file

5年前 评论
Shuyi

那个……https://nginxconfig.io/ , 这个是好东西, 我生产环境的设置都是用这个生成的

5年前 评论
天上白玉京

两年前的帖子 Ubuntu 14/16 下的 Laravel LNMP 线上环境自动部署脚本,你竟然说你找不到

5年前 评论
你看我吊吗啊

@天上白玉京 我也用这个部署的。。

5年前 评论

nginx php composer mysql 然后git clone composer install就可以了 部署已经很简单了

5年前 评论

哈哈哈,我以前也是觉得一直要用homesteat,后来自己在服务器上搭建lnmp环境,也是可以运行的~

5年前 评论

既然有服务器,那干嘛还用homestead,直接部署到 lnmp 上啊

5年前 评论

@pipiba

socket 全名「unix domain socket」,是 *nix 系統的行程間通訊(IPC)的方式之一。

如果用 socket 基本上你可以視為直接對本機的 RAM 做存取(詳細的存取方式可以自己補一下 Linux/Unix 相關的知識);如果用 TCP socket 它還需要經過本地的 loopback interface、建立 TCP 相關的資源(如三方交握、申請 port 等)

結論而言,如果不做 load balance 、而且不用負載高併發的話,用 socket 相對節省資源、效率高(前提是你的機器資源要足夠),但是如果要做 load balance(例如一台 nginx 擁有很多台 php-fpm 的資源可利用),只有 TCP 的方法可以使用

5年前 评论

@夜晚的雨 确实是在部署一台服务器,LNMP都在同一台服务器,使用socket更快这个是个什么说法呢?该去查看哪一块的资料呢?

5年前 评论

@lovecn 我猜测他是部署一台服务器,nginx 和 php 在同一台服务器的话,使用 socket 更快

5年前 评论

@夜晚的雨 listen = /run/php/php7.1-fpm.sock为什么不用端口呢

5年前 评论

谢谢各位热心的大神,我最后终于找到原因了,最后就是因为bootstrap和storage两个目录没有改权限,一路走过来不容易,我把我遇到的问题都纪录在这篇帖子里面的两个博客地址里面了,希望对后来的小白有所启发。

另外,谢谢回思恋莹 ,如果再早点看到你的帖子就好了,能减少我的好多摸索时间,我最后就是少做了一步改权限的操作,在回思恋莹的帖子里最后一步就是改权限,还是谢谢你。

5年前 评论
JaguarJack

不踩坑就不会进步。该踩还得踩,不会的就 google 查找资料,LC 的价值不在论坛的帖子,在文档

5年前 评论

ubuntu16.04做开发的路过,不会用Git你就不是好程序员,单机运行的话直接搭LAMP然后GIT下来Composer安装一下就可以运行了。有这么难吗?

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!