运维小白部署网站踩坑全过程
作为一名一个星期之前还是个运维小白的我,经过一番摸爬滚打终于把我的小网站部署上去了
一、服务器环境
OK,一开始我得到的是一台centos的服务器,没有装apache/nginx、mysql和php环境,一开始我是使用lnmp一键安装包,结果发现php好多扩展和依赖缺失,重装了php后才解决了问题,mysql也遇到一些问题,所以建议大家在装环境时除非一键lamp/lnmp安装包经历过实践的考验,不然还是老老实实地一个一个组件安装,php、mysql、nginx。
lnmp/lamp安装成功的标志:
PHP:在终端敲php -v,可以看到php的版本信息,并且没有报错信息
Mysql: 在终端敲mysql -uroot -p,接下来会让你输入密码,输入正确的密码后可以看到mysql的一下版本信息、
Nginx: 进入/usr/local/nginx/sbin目录,使用nginx -v查询
二、踩坑之路
在说遇到的各种坑之前,提醒大家要熟悉php、nginx的配置文件,因为在很多情况下遇到的坑源于默认的配置不符合我们的需要,我们只有了解配置代表什么了,遇到问题才能去修改相应的配置。
由于我这里使用的是lnmp环境,推荐大家以下几篇博客讲配置详情的:
(1)nginx: http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html
(2)php:http://www.cnblogs.com/hbl/archive/2008/02/15/1069367.html
接下来说说我遇到的坑,这些坑也是新手非常常见的,由于服务器的系统环境版本不一样,我遇到的坑可能只是所有坑中的一小部分。
1、Mysql启动不了
ps -aux|grep mysql // 查看正在运行的mysql进程pid
kill pid // 杀死所有的进程
/etc/init.d/mysql start // 重启mysql
2、Mysql安装完的默认密码不是root
这时候就需要我们手动修改密码了,方法有以下几种:
方法1: 用SET PASSWORD命令
MySQL -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
方法2:用mysqladmin
mysqladmin -u root password "newpass"
如果root已经设置过密码,采用如下方法
mysqladmin -u root password oldpass "newpass"
方法3: 用UPDATE直接编辑user表
mysql -u root
mysql> use mysql;
mysql> UPDATE user SET Pass
word = 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;
3、安装完PHP环境后用php -v查询PHP环境报错
(1)扩展的报错
进入/etc/php.ini中关闭对扩展的引用
(2)其他配置的报错,在未来的PHP版本可能不再适用的
进入/etc/php.ini将配置设置为Off即可
4、成功访问了nginx下的index.htm,但访问.php文件报错502 Bad Gateway
这是因为装的php环境和nginx服务器没有挂钩上,导致php脚本没有经过php的解析。
我们需要安装php-fpm,这是用来监听对php文件访问的东东,当用户向服务器发出的请求需要访问php文件时,php-fpm必须将对应的php文件给服务器的php环境解析,完成后再返回结果。为了使php环境与nginx服务器挂上钩,需要做以下准备工作:
(1)安装php-fpm(如已经安装则跳过此步)
yum install php-fpm
(2)配置nginx.conf文件
如果不清楚nginx.conf配置文件在哪里,使用
Whereis nginx.conf查找目录,如图:
查询结果显示我的nginx配置文件在/usr/local/nginx目录下,OK,我们跟进去
跟进去以后发现有一个conf的目录,应该是配置文件所在位置,继续跟进去
这时候终于发现了nginx.conf,进入vim编辑模式,在80端口配置下增加几行配置,就完成了php-fpm与nginx的挂钩
注意还要对nginx进行重新加载
/etc/init.d/nginx reload
这时候发现访问.php文件不报错了
5、为了隐藏访问目录的index.php,需要在nginx.conf添加重写规则
6、访问web应用报错系统不支持mysql或mysqli(高版本的php只支持mysqli)
一般这种情况发生的原因是搭建php环境时,依赖没有装全,解决方法要么补装php-mysql,但由于依赖的缺失,往往又要装其他依赖很麻烦;所以采取第二种方法,重装php环境,把依赖补全。
7、上传文件到服务器后无法显示图片的问题
图片文件的权限不对,用户没有可读权限,导致浏览器无法显示图片
要避免上传上去的图片用户没有可读权限,需要将php-fpm的用户和ngixn的用户设置成一致。
先进入nginx.conf查看nginx服务器设置的用户是什么
可以查到,设置的user是www www,将其改为www,保存,接下来我们找一找php-fpm的配置文件
可以找到配置文件是在/etc/php-fpm.conf,vim进入配置文件中
进行关键字user字符串搜索没有找到对user的设置,但是在php-fpm.conf我们看到对其他配置文件的引入(假如找到的话直接修改就好了),顺蔓摸瓜进入/etc/php-fpm.d目录
我们发现只有一个www.conf文件,进入编辑模式进入
没有发现user的设置,很可能是有一个默认值,如下图,我屏蔽了用户组是apache的配置,设置为group = www,另外增加一个user = www因为我们不知道默认值是多少需要覆盖一下
OK,保存退出后重新加载php-fpm,执行/etc/init.d/php-fpm reload
PS.修改了配置文件的组件一般要让修改完的配置生效的命令一般都是reload
Question: 设置完我们怎么确定配置有没有生效呢?
Answer: 查看session文件所有者。
在查看之前,我们需要对session文件保存的目录所有者进行设置,那么session文件的保存目录在哪里呢?
还是看php-fpm配置文件,很明显我的配置文件里说在/var/lib/php/session
执行:chown -v www:www /var/lib/php/session,再看看文件属性,修改成功。
清空原有的session,当网站产生新的session时,我们发现文件所有者和用户组是我们设置的www:www,前者是用户也就是配置文件里的user,后者是用户组也就是配置文件里的 group。
我们总算把php-fpm和nginx的用户设置一致了,这时php-fpm上传的文件nginx可以读取了,测试了一下上传成功23333。
8、关于防火墙端口设置问题
很多时候在一台服务器上我们想部署多个应用,通过不同的端口来访问,然而centos的防火墙只默认开放几个常用端口例如80、22端口,这个时候就需要我们自己配置防火墙配置文件,新增开放一些端口。
参考文献:
(1)iptables配置文件/etc/sysconfig/iptables内容详解:
http://www.server110.com/linux/201308/523.html
(2)CentOS防火墙iptables的配置方法详解
http://www.111cn.net/sys/CentOS/53293.htm
配置文件位置: /etc/sysconfig/iptables
通过添加-A INPUT -p tcp --dport 8000 -j ACCEPT
实现了新增对8000端口的访问开放,然后我们在nginx服务器里设置端口目录就可以访问不同的应用了。
PS.修改完一定要reload防火墙, service iptables restart
PS.欢迎关注SCAU码农之家公众号,希望能跟大家多多交流
我们总算把php-fpm和nginx的用户设置一致了,这时php-fpm上传的文件nginx可以读取了,测试了一下上传成功23333。
8、关于防火墙端口设置问题
很多时候在一台服务器上我们想部署多个应用,通过不同的端口来访问,然而centos的防火墙只默认开放几个常用端口例如80、22端口,这个时候就需要我们自己配置防火墙配置文件,新增开放一些端口。
参考文献:
(1)iptables配置文件/etc/sysconfig/iptables内容详解:
http://www.server110.com/linux/201308/523.html
(2)CentOS防火墙iptables的配置方法详解
http://www.111cn.net/sys/CentOS/53293.htm
配置文件位置: /etc/sysconfig/iptables
通过添加-A INPUT -p tcp --dport 8000 -j ACCEPT
实现了新增对8000端口的访问开放,然后我们在nginx服务器里设置端口目录就可以访问不同的应用了。
PS.修改完一定要reload防火墙, service iptables restart