从零开始搭建一个完整且全面的 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步。
服务器初始化
语言设置
为了解决中文显示乱码。而进执行了如下操作,使服务器语言中文化,以及软件中文化
-
$ locale -a
查看所有的语言没有发现zh开头的语言,所以接下来安装中文语言包 -
$ sudo apt-get install language-pack-zh-hant language-pack-zh-hans
再次使用locale -a查看应该可以看到zh_CN.utf8的语言包 -
$ 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 后面看到文件中含有该名字的请自行脑补替换为自己添加的普通用户名
-
$ adduser newusername
添加新用户, 下面是我在网上找来的中文翻译 -
给新用户添加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远程连接
- 注释掉在
$ vim /etc/mysql/mysql.conf.d/mysqld.cnf
里面的bind-address = 127.0.0.1By default we only accept connections from localhost #bind-address = 127.0.0.1
-
终端输入命令登入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 协议》,转载必须注明作者和本文链接
也可以试试看这个自动部署脚本 Ubuntu 14/16 下的 Laravel LNMP 线上环境自动部署脚本
好多细节~ 学到东西了赞赞赞
安装 5.4 laravel , 居然有得包居然要php7.1 了.
7.1 要怎么解决?
@lazyou sudo > add-apt-repository ppa:ondrej/php 增加php安装源, 然后 sudo apt update, 最后把所有的7.0换成7.1即可
@魏文豪 谢谢, 解决了. 再问个问题, 没看见装 php 的 redis 扩展, 怎么 predis 怎么能操作redis.
1.安装完mysql修改mysqld.cnf后需要执行service mysql restart,不然修改不生效,外网访问不了数据库
2.部署laravel项目到服务器后需要执行php artisan key:generate,重新生成key,才能访问
@ivanlin 好的, 已更新
服务器初始化 > 语言设置 第
3
点,配置示例单双引号有问题,没有区分中英文 :hammer:@Nick 谢谢~已改正
有没有centos 编译安装的教程?
@zhanghaidi 参考一下我发布的那篇,应该对你会有帮助 :blush:
又安装了zip扩展才可以。
命令:
也可以参考 github.com/shunhua/dnmp