从零开始搭建一个完整且全面的 lnmp(Laravel)运行环境

搭建的环境介绍
阿里云 ubuntu 16.04
php7.0
nginx 1.10
mysql 5.7
redis、cron、 composer、 git等~

前言

2017年09月02日18:07:16更新 工作了一段时间, 公司存在多台代码服务器. 感觉到这里手动一步一步的安装在真实的生产环境中用的并不多,尤其是在负载均衡环境下. 所以下面的教程更加适合学习和体验一下安装的过程.

在生产环境中使用自动部署脚本 来达到更加高的效率,更少的问题. 以及一致的安装环境. 或者使用宝塔等集成环境,带来更多的安装便利,在公司没有运维的情况下是个不错的选择.


这是我在已经搭建完成后编写的一篇文章,有些细节没有记录到请见谅。
其中最开始的语言配置是我记得最乱的一个地方,我进行了可能6步才达成目标。但达成后回过头发现可能有些步骤是无效的,有些步骤是重复的。因此我选择了我认为起了主要作用的4步。

服务器初始化

语言设置

为了解决中文显示乱码。而进执行了如下操作,使服务器语言中文化,以及软件中文化

  1. $ locale -a 查看所有的语言没有发现zh开头的语言,所以接下来安装中文语言包

  2. $ sudo apt-get install language-pack-zh-hant language-pack-zh-hans 再次使用locale -a查看应该可以看到zh_CN.utf8的语言包

  3. $ sudo vim /etc/default/locale 打开语言设置,将 LANG和LANGUAGE设置为zh_CN.UTF-8 我的配置如下图所示

    #  File generated by update-locale
    LANG="zh_CN.UTF-8"
    LANGUAGE="zh_CN.UTF-8"

4.使用 $ sudo dpkg-reconfigure locales进行区域语言设置(全都选择zh_CN.UTF-8)。
该操作设置不需要重启服务器就能使语言配置生效。(但是好像这里已经做了第三步做的事情,我也不知道需不需要去掉第三步。不过不去肯定没有问题~)。
另外一定要使用一个支持utf8字符的终端。

语言设置参考文章: http://www.4wei.cn/archives/1001458

添加普通用户

首先为什么要添加一个普通用户呢,其一呢自然是可以预防如rm -rf /之类的毁灭性操作。 其二 多一个用户也多一个保障,毕竟linux不同于windows。linux是可以根据用户把系统玩炸的~(我就玩炸过我自己的服务器)。

我添加的普通用户名为 weiwenhao 后面看到文件中含有该名字的请自行脑补替换为自己添加的普通用户名

  1. $ adduser newusername 添加新用户, 下面是我在网上找来的中文翻译

  2. 给新用户添加root的权限。 该步骤可以使普通用户使用如 sudo service ...类似的命令。

    • $ chmod g+w /etc/sudoers 给该文件写权限

    • $ vim /etc/sudoers 打开添加如图所示后保存退出

    • $ chmod g-w /etc/sudoers 去除该文件的写权限

暂时先不切换为普通用户。接下来继续使用root进行环境的搭建。


相关软件安装

安装PHP

  • 安装命令
$ apt install php-common php7.0 php7.0-cli php7.0-fpm php7.0-common php7.0-opcache php7.0-readline php7.0-curl php7.0-xml php7.0-mcrypt php7.0-json php7.0-gd php7.0-mbstring php7.0-mysql

//如果你尝试使用apt install php  该命令会自动为你安装Apache,因此采用上面的细化安装
  • 配置php.ini

$ vim /etc/php/7.0/fpm/php.ini 我们安装的软件的相关配置文件都在etc目录下

/*
定位到 ;cgi.fix_pathinfo=0 这行
去掉其前面的‘;’注释,并将  cgi.fix_pathinfo=1 改为 cgi.fix_pathinfo=0
*/

; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0

; if cgi.discard_path is enabled, the PHP CGI binary can safely be placed outside
  • 重启php

$ service php7.0-fpm restart

安装mysql

  • 安装命令 $ apt install mysql-server 默认安装的版本是5.7

  • 配置mysql远程连接

    1. 注释掉在$ vim /etc/mysql/mysql.conf.d/mysqld.cnf里面的bind-address = 127.0.0.1
      By default we only accept connections from localhost
      #bind-address   = 127.0.0.1
    2. 终端输入命令登入mysql$ mysql mysql -uroot -p

      • > use mysql;

      • > Grant all on *.* to 'root'@'%' identified by 'root用户的密码' with grant option; 该命令相当于mysql5.6之前的 update user set host = '%' where user = 'root';这条命令做的事情

      • > flush privileges;刷新权限

  • 重启你的mysql,使第一步中的配置生效 $ service mysql restart

安装nginx

  • 安装命令 $ apt install nginx

  • 配置nginx支持php (并配置了laravel优雅连接的支持)

    • $ vim /etc/nginx/sites-available/default 打开配置文件,配置成如下所示
        #default打开后已经有了一个被注释的基础配置模板,修改删减后得到如下配置
        server {
            listen 80 default_server;
            listen [::]:80 default_server;
            root /home/weiwenhao/www/blog/public; #网站根目录,既index.php入口文件所在目录,结尾不加 /
            index   index.php index.html;
            server_name www.weiwenao.xyz;  # 域名或者ip地址
            location / {
                    try_files $uri $uri/ /index.php?$query_string; #larvel优雅连接。请根据实际配置
            }
            location ~ \.php$ { # 支持php, 下面的配置是默认的,我只是删掉了没用的,并接触了注释。
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock; # 这里对应着上面安装的php7.0
            }
        }
    
    • 这里一个server{}为一个站点,所以多站点自行复制一份server{}并配置即可
  • 修改nginx限制post表单上传大小 vim /etc/nginx/nginx.conf打开nginx配置,在http{}中添加下面标注的一行

  • $ service nginx restart重启nginx

安装redis $ apt install redis-server

安装composer

  • $ su weiwenhao切换为普通用户,使用普通用户安装composer得到的composer文件的用户和用户组也是普通用户,省去了更改文件权限的麻烦。因为后面我们执行的composer命令都是在普通用户下执行的
  • $ php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
  • $ php composer-setup.php
  • $ php -r "unlink('composer-setup.php');"
  • $ sudo mv composer.phar /usr/local/bin/composer
  • $ composer 查看composer安装是否成功

安装git

  • 安装命令 $ sudo apt install git 记得带sudo 你现在已经是普通用户了啦

  • 创建ssh-key, 方便后面使用git拉取代码$ ssh-keygen -t rsa -C "你的邮箱@qq.com" 然后一路回车即可

  • $ cat ~/.ssh/id_rsa.pub复制公钥到你的github或者coding等git服务器上

然后就可以clone你的代码啦, clone推荐使用 ssh协议,因为ssh协议在push的时候不需要输用户名和密码(虽然在服务器端很少需要push代码)。
另外代码呢放在普通用户的家目录中即可。比如我的

  • $ cd /home/weiwenhao/www/ weiwenhao是上面创建普通用户的时候自动创建的。 www是我创建的一个用来放置项目代码的文件夹
    $ git clone git@github.com:weiwenhao/blog.git 改命令会在www目录下得到一个 blog的目录

接下来进行十分重要的1步

  • $ sudo chown -R :www-data blog/ 在www目录下执行这一步。
    这一步是将blog文件的用户更改为 www-data,www-data为ubuntu下nginx,php的默认用户。 因为在服务器运行期间读取项目文件的并不是你,而是 nginx和php(这样说好矛盾,我也不是十分的理解~)。

    但是使用ls -la 查看blog文件会发现用户组依旧为 你刚刚创建的普通用户。因为考虑到你以后可能会远程直接修改调试该项目,所以用户组没有变~让你也有修改的权限 (你指的是普通用户而非root用户。)

至此服务器的环境搭建完毕,但是通过域名访问该项目时80%还是无法访问的。依旧是权限问题,下面通过laravel项目介绍更加具体的权限设置。

laravel中的相关配置

  • 进入上面通过git克隆的blog目录中。执行$ sudo chmod -R 774 storage/ bootstrap/ 设置权限。

  • $ cp .env.example .env 生成一份.env文件并进行配置。主要是数据库的配置

  • $php artisan key:generate 刷新.env中的key才能访问laravel项目

  • $ composer install 安装相关包

  • $ php artisan migrate 安装数据库迁移

  • 再次通过 $php artisan查看相关命令,主要是查看有哪些命令需要安装,如使用了jwt扩展还需要$ php artisan jwt:secret

    配置cron

  • $ sudo vim /etc/crontab

  • $ sudo service cron restart重启cron

后记

通过上面的配置就可以得到一个完整全面的laravel或则说lnmp服务器环境啦,快去访问看看吧~。

如果都没有问题,请打开你的阿里云将配置好的实例保存出一个镜像,并根据实际业务进行快照策略的配置

如果有问题,请留言你的问题,或者进行百度orGoogle,我也是一点点百度配置来的。
网站访问有问题首先需要考虑的就是权限问题了,比如无法上传图片?那就看看是不是public/uploads 的权限不足等~。 其次则是大小写问题,毕竟windows开发不区分大小写(我这里运行明明没有问题的~)。所以推荐使用 homestead进行本地开发。

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 13
Summer

也可以试试看这个自动部署脚本 Ubuntu 14/16 下的 Laravel LNMP 线上环境自动部署脚本

6年前 评论

好多细节~ 学到东西了赞赞赞

6年前 评论

安装 5.4 laravel , 居然有得包居然要php7.1 了.
7.1 要怎么解决?

6年前 评论

@lazyou sudo > add-apt-repository ppa:ondrej/php 增加php安装源, 然后 sudo apt update, 最后把所有的7.0换成7.1即可

6年前 评论

@魏文豪 谢谢, 解决了. 再问个问题, 没看见装 php 的 redis 扩展, 怎么 predis 怎么能操作redis.

6年前 评论

1.安装完mysql修改mysqld.cnf后需要执行service mysql restart,不然修改不生效,外网访问不了数据库
2.部署laravel项目到服务器后需要执行php artisan key:generate,重新生成key,才能访问

6年前 评论

@ivanlin 好的, 已更新

6年前 评论

服务器初始化 > 语言设置 第 3 点,配置示例单双引号有问题,没有区分中英文 :hammer:

6年前 评论

@Nick 谢谢~已改正

6年前 评论
zhanghaidi

有没有centos 编译安装的教程?

5年前 评论

@zhanghaidi 参考一下我发布的那篇,应该对你会有帮助 :blush:

5年前 评论
xiaopi
  • Ubuntu 18.04.1 LTS, 安装的7.1,在composer的时候出现:The zip extension and unzip command are both missing, skipping.
    又安装了zip扩展才可以。
    命令:
    apt install zip unzip php7.1-zip
4年前 评论
playmaker

也可以参考 github.com/shunhua/dnmp

2年前 评论

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