🦄 2024 独立开发者训练营,一起创业!(早鸟优惠在7天后结束)查看介绍 / 立即报名 →

在本地搭建一个 LEMP 开发环境

在本地快速用虚拟机搭建一个 LEMP 环境

你想在本地开发 PHP 网站应用,学习 PHP 语言,或者学习使用 SQL 语言操作数据库,你需要准备一个开发环境。请放弃 WAMP,MAMP,XAMPP 或者类似的开发环境,没有任何好处。现在唯一推荐使用 Vagrant + Virtualbox 的方法在本地搭建一个 LEMP 开发环境。

LEMP 是运行 PHP 应用的环境,L 是 Linux ,比如 CentOS,Ubuntu 等等。 E 是 NGINX ,它是一款 Web 服务器。 M 表示 Mariadb 或者 MySQL,是数据服务,P 指的就是 PHP 。

虚拟机

打开命令行工具,创建一个目录,进入到这个目录的下面,然后初始化一下,让这个项目的虚拟机使用一个 CentOS 7 系统的 Box。使用的 Vagrant 还有使用的 Box 我提前已经安装好了。

mkdir ninghao-lemp
cd ninghao-lemp
vagrant init chef/centos-7.0

编辑一下虚拟机的配置文件,给它设置一个私有的内网 IP, 保存配置文件,再启动一下虚拟机。

vagrant up

然后连接到虚拟机。

vagrant ssh

IUS 仓库

先去安装一个适合在 CentOS 7 上面使用的 ius 仓库,这样我们就可以使用 yum 去安装比较新的软件包了。

sudo yum install https://centos7.iuscommunity.org/ius-release.rpm -y

NGINX

再去安装一下 NGINX:

sudo yum install nginx -y

启动一下它:

sudo systemctl start nginx

然后让它开机自启动:

sudo systemctl enable nginx

MariaDB

下面再安装一下 MariaDB,我想安装 ius 仓库上的新版的 mariadb ,先删除掉系统自带的 mariadb:

sudo yum remove mariadb-libs -y

再安装一下新的 MariaDB:

sudo yum install mariadb101u-server -y

启动一下它,再让它开机自启动:

sudo systemctl start mariadb
 sudo systemctl enable mariadb

执行一安全配置:

mysql_secure_installation

回答一些问题,设置一下数据库管理系统的 root 用户的密码。

PHP 7

下面再去安装一下 PHP 还有一些比较常用的扩展:

sudo yum install php70u-fpm php70u-cli php70u-xml php70u-gd php70u-mysqlnd php70u-pdo php70u-mcrypt php70u-mbstring php70u-json -y

启动一下 php-fpm,再让它开机自启动:

sudo systemctl start php-fpm
sudo systemctl enable php-fpm

配置

下面去创建一个虚拟主机,让它可以执行 PHP,我们需要创建一个可以执行 PHP 的 NGINX 配置文件。先去创建一个 PHP 文件:

mkdir -p /vagrant/www/default
vi /vagrant/www/default/phpinfo.php

在里面添加一个 phpinfo 函数,保存一下文件。

再去创建一个 NGINX 配置文件:

sudo vi /etc/nginx/conf.d/php.basic.conf

添加下面内容:

server {
  listen        80;
  server_name   192.168.33.191;
  root          /vagrant/www/default;
  index         index.php index.html;

 location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
  }
}

保存一下,重新加载一下 NGINX:

sudo systemctl reload nginx

测试

打开浏览器,输入服务器的 IP 地址,后面加上一个 phpinfo.php,在页面上会显示一些跟 php 相关的信息 , 说明我们成功的配置了一个 LEMP 环境。

权限

Vagrant 会给我们在虚拟机与本地电脑之间设置一个共享的目录,默认这个目录在本地电脑就是项目的根目录,在虚拟机上这个共享的目录是 /vagrant ,这个目录的拥有者与用户组都会是 vagrant。注意我们不能在虚拟机上修改这个目录的权限,所以,如果你的网站应用放在这个目录的下面或者它下面的某个子目录里面,你需要把运行 PHP-FPM 这个服务的用户修改成 vagrant。
编辑一下 php-fpm 的配置文件:
sudo  vi /etc/php-fpm.d/www.conf
搜索一下 user,等号右边的值就是运行 PHP-FPM 这个服务的用户,默认应该是 php-fpm,我们需要把它改成 vagrant :
user = vagrant

保存配置文件,重新启动一下 PHP-FPM:

sudo systemctl restart php-fpm

评论

皓哥,现在 Atlas 上已经没有 chef 这个账号了好像……改名了还是咋地。推荐一下其他的 box?

我下载下来了,上传到百度云上了:http://yun.baidu.com/share/link?shareid=1270399558&uk=1998298367#path=%2...

改名叫bento,
你可以到这个地址查看。
https://atlas.hashicorp.com/bento/

收到 :)

这个视频在iPad上可以播放啊,这个视频和课程上的新课程录制上有什么不同吗?好久不能在iPad上上课了……期待解决啊

嗯。呵呵。可能因为最近的视频尺寸太大了。

已发布的尺寸太大的视频还会重新修改更新视频文件吗?我每次来这个网站都要点一下新视频看看修复没有哈~

嘿嘿 ~ 我到是在本地更新了这些视频。暂时新发布的视频恢复到原来的 1280 尺寸,以前的大视频我慢慢再更新吧,到时候跟您说一下。

另外发现老师打字超快 :)

快进了吧,哈哈。

有个地方好像错了,sudo yum systemctl start nginx 应该是:sudo systemctl start nginx!:)

嘿嘿,已修正。

我也一直在这里无法开启nginx是什么原因呢?难道是要加!:) ?

皓兄,昨天续费了,但是好像赠送时间没对,麻烦看一下呢。

现在是不是可以了?

非常感谢,嘿嘿。

好了 谢谢

:)

老师,根据这个教程,一步不少的安装,nginx老是安装不上,请问什么原因

执行后 提示
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Cannot open: https://centos7.iuscommunity.org/ius-release.rpm. Skipping.
Error: Nothing to do

网络问题,可能是因为国内网络连接国外的东西会遇到点问题。想想办法 :)

比如用那个 V 什么来 ?

老师 比如我安装ius一直提示
No such command: serch. Please use /usr/bin/yum --help

咦 ~ 这个不应该呀,您在哪里都应该可以执行 yum 命令的。用的是 CentOS 7 吗?

LNMP 这个真的第一次看到 叫 LEMP...

E 取的是 NGINX 的发音(Engine X)

对于一个刚接触的虚拟机和linux环境的新手,跟着步骤走了好多步。最大的困惑。安装软件包时,这些名字和网址怎么来的?例如:sudo yum install mariadb101u-server -y中, mariadb101u-server 的来由。不然只会拷贝复制。谢谢。

一点点经验与多次实践。一开始我也不知道有 mariadb 这个东西,后来搜索知道它跟 mysql 基本上是一个东西,但是社区推荐用 mariadb。centos 自带的仓库里面,软件的版本都比较低,所以需要第三方仓库,比如你需要新版的 php,或者 mariadb,你需要在这些第三方仓库里面找到。通过搜索,我找到了 ius 这个仓库。在安装的时候,你不确定要安装的包的名字,可以使用 yum search 去搜索相关的关键词,然后仓库查看结果,上面有包的名字与介绍,通过这些信息你会知道这个包到底是干什么的。*u 这个只是 ius 仓库为软件包加的一个后缀,为了区分其它仓库提供的同样的软件包。

谢谢指点,稍微清楚一些了。以前只玩windows,换过来很痛苦。

(mariadb)好像是mysql被oracle收购后,原来那帮人搞的吧,centos 7内置mariaDB

终于成功打开phpinfo.php页面。好累啊!:)
再请教个问题,这个文件在我的系统里(不是虚拟机上),怎么直接找到呢?

自己找到了。

请教另一个问题。NGINX 配置文件,可以在本机(非SSH到服务器上)直接打开编辑么?

可以,你可以在虚拟机与主机之间配置一个共享目录,这个目录用来存储 NGINX 的配置文件。

想装一个phpmyadmin, 提示Error: php70u-common conflicts with php-common-5.4.16-36.1.el7_2.1.x86_64
Error: php70u-json conflicts with php-common-5.4.16-36.1.el7_2.1.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
该怎么办呢?请教王老师。

提示 php 的扩展有冲突。不要使用 yum 安装 phpmyadmin,手工下载并安装它吧。

谢谢

config.vm.synced_folder "/localfile", "/vagrant", :mount_options => ["dmode=755","fmode=644"]; 在vagrantfile里面这样写共享目录的设置就能设置vagrant共享目录在centOS虚拟机中的权限;其它类型的linux虚拟机暂时没测试过;

应该没有必要这样做。因为那个共享目录的拥有者是 vagrant 。

可能是我基础不充足,但是默认vagrant目录的目录权限是777,这样的话,phpmyadmin,drupal网站在这个目录,不是也涉及到权限问题吗?那不改权限,是不是会有问题?

权限问题的解决方法有多种。首页你的共享目录的拥有者是 vagrant 这个用户,假设你不能修改这个目录的拥有者,那么,让 php 对这个目录有写入权限,你就需要修改运行 php-fpm 的用户为 vagrant 这个用户。

我先试试修改VAGRANT目录权限的方法会对程序环境造成什么影响吧!您说的方法是可行的,等我用修改权限的方法试过了,如果有问题,我再反馈到这里来!

再有一个问题,使用宁皓网的box,vagrant up后,虚拟机内的系统网络没有私有网络地址,进入到虚拟机后,sudo service network restart;才能让私有网址生效;而且不能在虚拟机使用reboot命令;一旦命令后,共享目录就又没有挂载了;这点实在没有研究透;升级box内的guest additions到与VirtualBox版本匹配也解决不了这个问题;是box的问题,还是vagrant的问题?

嗯,重启你要使用 vagrant 命令:vagrant reload

vagrant reload 以后,进入虚拟机又要sudo service network restart!

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点