LNMP环境搭建(CentOS+meiupic)
背景
CentOS上搭建meiupic图床(一个PHP写的开源相册),之前也搭建过PHP的LNMP环境,但是那是很长时间的事了,并且当时使用的是Ubuntu Server版本服务器。本以为很快就搭建OK,却还是折腾了一晚上,真是惭愧…
一、CentOS配置网络
本是一件多简单的事,不就是在配置文件/etc/sysconfig/network-scripts/ifcfg-eth0
里写入下面这几行配置嘛。
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
ipaddr=192.168.1.123
netmask=255.255.255.0
gateway=192.168.1.1
可是还真是奇了怪了,一重启,IP就自动变了,随机分配了。明明配置的是静态IP啊。耗了我老长时间找原因了,最后照着书上一个一个校对,最后发现把ipaddr
、netmask
、gateway
都改成大写的就行了。。(PS. 记得在Ubuntu上没有区分啊,难道我记错了~郁闷)
二、Nginx
1、安装
教程很多,贴一条备用,没准哪天又忘了怎么编译安装了。以前在Ubuntu上都是直接sudo apt-get install nginx
,可是在CentOS里貌似默认没有,学会编译安装nginx还有必要的。而且编译安装的版本使用起来有一些差异。
注意点:
- pcre不要选择最新版pcre2,选择pcre2会报错,有能力解决者可以自行选择;
- 源码全部下载在
/usr/local/src/
目录下,便于管理。
2、使用
重新启动service nginx restart
?No,No,No,别被自动安装的软件惯坏了,nginx应该这么用。
/usr/local/nginx/nginx
启动主程序,安装目录下运行nginx,我的版本是1.7,其他版本nginx执行文件也许不在nginx目录下/usr/local/nginx/nginx -s reload
重新加载/usr/local/nginx/nginx -s stop
停止
当然不想输入那么长的路径也行,创建一个快捷方式,如果还是想使用service命令也行,在/etc/init.d目录下创建快捷方式。命令如下:
cp -s /usr/local/nginx/nginx /etc/init.d/
三、MySQL设置root密码
安装MySQL的方法倒是跟之前没两样,偷懒的方法就这样yum install -y mysql*
,OK,一股脑全装上了,装完设置root密码方法如下:
方法1: 用SET PASSWORD命令
mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
方法2:用mysqladmin
|
|
方法3: 用UPDATE直接编辑user表
mysql -u root
mysql> use mysql;
mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';
mysql> FLUSH PRIVILEGES;
在丢失root密码的时候,可以这样
mysqld_safe --skip-grant-tables&
mysql -u root mysql
mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='root';
mysql> FLUSH PRIVILEGES;
瞅一眼密码啥样…
四、php+nginx配置
这次花费最长的时间就是这块了,之前基本没怎么接触过PHP开发,php的开发环境更是半知不解。其实这次搭建完也是半知不解。
想要nginx解析php文件,那么需要安装php-fpm,它是个啥?
FastCGI Process Manager:FastCGI进程管理器,fpm能根据访问的压力动态的唤起cgi进程和销毁以到达动态的调整cgi数量,这样可以有效的使用内存。
跟着yum install php*
命令,全安装上了。
接下来就是配置nginx了,使其能够解析并转发meiupic开源相册,我将相册源代码解压到了/usr/www/
目录下了,然后就是配置nginx了,打开nginx配置文件,vim /usr/local/nginx/nginx.conf
,找到http下的server区域,改成如下:
...此处省略
http {
....
server{
listen 8080;
server_name 192.168.1.123;
location / {
root /usr/www;
index index.php;
}
location ~ \.php$ {
root /usr/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
}
}
...省略若干
listen端口,我将默认的80改成了8080,server_name改成本机的IP,root改成php开源项目的源代码目录,然后最重要的那段php的配置当然不是我写的,只是将默认对PHP的配置注释给去掉了,改一下root就完事了。
好了,迫不及待的想试一试了。依次检查各种服务是否正常,nginx、mysql、php-fpm….启动了的重启一下,没有启动的启动一下。
service mysqld restart
service php-fpm restart
/usr/local/nginx/nginx -s reload
OK ~浏览器运行http://192.168.1.123:8080
,第一次嘛,必然是没有反应的。出现问题并不可怕,主要是要知道怎么找原因。
- 首先想到的就是网络是否通,主机
ping 192.168.1.123
,OK! - 然后测试页面是否从服务器返回了,很显然在主机上测试是没有返回页面,而不是返回404。那么测试一下在虚拟机中是否返回页面了,没有浏览器怎么玩?没事,
curl 192.168.1.123:8080
,抓取页面代码。返回了。
好了,原因找到了,网络是通的,而页面无法访问,可是本地可以访问,这么一讲,就知道是防火墙的问题了。
五、设置防火墙
防火墙的配置是Linux运维的重点内容,CentOS默认只开通了22端口的访问配置。这里我们需要开启端口8080,亦或是关闭了它(当然不建议这么做)。
教程很多,或是直接看man iptables
,你会学到很多。关于防火墙的配置文件是/etc/sysconfig/iptables
,学习就靠自己了。
关闭的方法:service iptables stop
。
OK,设置好防火墙后,又是一系列重启服务操作,然后浏览器访问,这次不报错了,可是File Not Find
,what’s the fuck!
六、fastcgi_params
最后找到就是fastcgi_params配置的问题,中间寻找答案的艰辛就不多说了,这里记下,给自己提个醒,同时给新人指路。我也是从前人那里找到的答案。
nginx调用php-fpm出错解决方法和nginx配置详解
问题就在上面nginx配置文件中的的这两句:
|
|
解决方法有两种(其实是一个意思):
- 把第一句改成如下:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- 或者把第二句改成如下:
include fastcgi.conf
为什么说一样,可以自行查看一下,nginx安装目录下,fastcgi_param
以及fastcgi.conf
这两个文件的内容差异。
vim -O /usr/local/nginx/fastcgi_params /usr/local/nginx/fastcgi.conf
解决完这个问题后,又是一堆服务的重启,然后浏览器打开http://192.168.1.123:8080
,OK,运行安装程序了。
七、安装meiupic
目录权限问题,到/usr/www
目录下,设置一下,各个文件目录的访问权限。如果嫌麻烦,直接chmod 777 /usr/www/*
,到这里基本就完成了。