Centos上安装Nginx、PHP、MySQL
前言
最近,购买了一个阿里云服务器,然后就想着搭建一个web环境,用于平时学习使用,但是想象很美好,现实很骨感,在搭建环境过程中遇到了一大堆的问题,但查阅了一些资料把问题解决了,最后终于成功搭建好了环境,现在和大家分享一下如何在Centos服务器上安装Nginx、PHP、MySQL。希望以下的笔记能帮助大家避开这些问题。
一、编译安装Nginx
-
安装 GCC 环境
sudo yum -y install gcc gcc-c++ # nginx编译时依赖gcc环境
-
安装 pcre
sudo yum -y install pcre pcre-devel # 让nginx支持重写功能
-
安装 zlib
sudo yum -y install zlib zlib-devel # zlib库提供了很多压缩和解压缩的方式,nginx使用zlib对http包内容进行gzip压缩
-
安装 openssl
sudo yum -y install openssl openssl-devel # 安全套接字层密码库,用于通信加密
-
nginx 源码包下载
cd /usr/local/src #进入src文件夹 wget http://nginx.org/download/nginx-1.16.0.tar.gz #下载nginx源码包 tar -zxvf nginx-1.16.0.tar.gz # 解压缩 cd nginx-1.16.0
-
对源码编译安装
./configure
make #编译 make install #安装
-
nginx服务操作命令
/usr/local/nginx/sbin/nginx #启动服务 /usr/local/nginx/sbin/nginx -s reload #重新加载服务 /usr/local/nginx/sbin/nginx -s stop #停止服务 ps -ef | grep nginx #查看服务进程
-
修改配置文件(无公网IP可不改)
vi /usr/local/nginx/conf/nginx.conf
将
server_name
中的localhost
更改为个人 IP ,而后保存并退出。 -
设置Nginx开机启动
vi /usr/lib/systemd/system/nginx.service
在文件中写入以下脚本:
[Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecStop=/usr/local/nginx/sbin/nginx -s stop ExecReload=/usr/local/nginx/sbin/nginx -s reload PrivateTmp=true [Install] WantedBy=multi-user.target
保存并执行如下命令,完成设置:
systemctl enable nginx.service
-
验证是否安装成功:
http://localhost #若更改了IP,将localhost改为自己的公网IP
二、安装PHP 7.2
-
PHP 7.2 源码安装包下载
cd /usr/local/src wget https://www.php.net/distributions/php-7.2.20.tar.gz # 下载 tar -zxvf php-7.2.20.tar.gz # 解压缩
-
源码编译并安装 PHP 7.2
cd php-7.2.20 yum install -y gcc gcc-c++ make automake autoconf gd file bison patch mlocate flex diffutils zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel libcurl libcurl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers openldap-devellibxslt-devel kernel-devel libtool-libs readline-devel gettext-devel libcap-devel php-mcrypt libmcrypt libmcrypt-devel recode-devel gmp-devel icu libxslt libxslt-devel php-devel
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql-sock --with-mysqli --with-libxml-dir --with-openssl --with-mhash --with-pcre-regex --with-zlib --with-iconv --with-bz2 --with-curl --with-cdb --with-pcre-dir --with-gd --with-openssl-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --with-gettext --with-gmp --with-mhash --with-libmbfl --with-onig --with-pdo-mysql --with-zlib-dir --with-readline --with-libxml-dir --with-xsl --with-pear --enable-fpm --enable-soap --enable-bcmath --enable-calendar --enable-dom --enable-exif --enable-fileinfo --enable-filter --enable-ftp --enable-gd-jis-conv --enable-json --enable-mbstring --enable-mbregex --enable-mbregex-backtrack --enable-pdo --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --enable-zip --enable-mysqlnd-compression-support
make #编译 make install #安装
-
创建php-fpm.conf、www.conf配置文件:
cd /usr/local/php/etc cp php-fpm.conf.default php-fpm.conf cd /usr/local/php/etc/php-fpm.d cp www.conf.default www.conf
-
创建php.ini配置文件:
find /usr/local/src/php-7.2.20 -name php.ini* cp /usr/local/src/php-7.2.20/php.ini-production /usr/local/php/etc/php.ini
-
编辑编辑PHP配置文件
vim /usr/local/php/etc/php.ini
将
;cgi.fix_pathinfo=1
改为cgi.fix_pathinfo=0
vim /usr/local/php/etc/php-fpm.d/www.conf
将
user = nobody group = nobody
改为
user = root group = root
-
手动启动和关闭php:
/usr/local/php/sbin/php-fpm -R # 这里后面带个 -R 表示用root 用户启动 /usr/bin/pkill -9 php-fpm pstree -p | grep php
-
设置php-fpm开机启动:
关闭 php-fpm 进程:/usr/bin/pkill -9 php-fpm
创建php-fpm.service文件:
vi /usr/lib/systemd/system/php-fpm.service
在文件中写入启动脚本:
[Unit] Description=php-fpm After=network.target [Service] Type=forking PIDFile=/run/php-fpm.pid ExecStart=/usr/local/php/sbin/php-fpm ExecStop=/usr/bin/pkill -9 php-fpm PrivateTmp=true [Install] WantedBy=multi-user.target
保存上述脚本文件,并执行如下命令,完成php-fpm开机启动设置:
systemctl enable php-fpm.service
可以使用systemctl命令管理php-fpm:
systemctl start php-fpm.service #启动 systemctl stop php-fpm.service #停止 service php-fpm start service php-fpm stop service php-fpm restart service php-fpm reload
-
Nginx + PHP
配置 Nginx :vi /usr/local/nginx/conf/nginx.conf
修改 server{} :
server { listen 80; server_name localhost; # 服务器改成自己的公网IP #charset koi8-r; #access_log logs/host.access.log main; # 默认网站根目录(www目录) root /usr/share/nginx/html; location / { root html; index index.php 1.php index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
修改完保存文件并重启Nginx服务器:
nginx -s reload
在
/usr/share/nginx/html/
目录下创建phpinfo.php
<?php phpinfo();?>
最后在浏览器中输入
http://ip/phpinfo.php
-
可能出现的错误:
Job for php-fpm.service failed because a timeout was exceeded. See "systemctl status php-fpm.service" and "journalctl -xe" for details.
输入
systemctl status php-fpm.service
之后出现:ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98) ERROR: FPM initialization fa
出现此问题的原因为9000端口被占用:
killall php-fpm #关掉所有php-fpm进程 /usr/local/php/sbin/php-fpm -R #手动启动
也可以使用systemctl命令启动php-fpm
-
卸载 PHP
查看php版本命令:php -v
下面的命令是删除不干净的:
yum remove php
必须强制删除,使用下面命令查看全部php软件包
rpm -qa|grep php
结果如下:
php-json-7.2.29-1.el7.remi.x86_64 php-pecl-mcrypt-1.0.3-1.el7.remi.7.2.x86_64 php-common-7.2.29-1.el7.remi.x86_64 php-cli-7.2.29-1.el7.remi.x86_64 php-devel-7.2.29-1.el7.remi.x86_64
注意卸载要先卸载没有依赖的
pdo是mysql的依赖项;common是gd的依赖项;
如果不按顺序来会报错:
error: Failed dependencies:
php-pdo is needed by (installed) php-common-7.2.29-1.el7.remi.x86_64卸载命令:
rpm -e php-json-7.2.29-1.el7.remi.x86_64
不过可以进行强制删除:
rpm -e php-json-7.2.29-1.el7.remi.x86_64 --nodeps
三、安装MySQL 5.7
-
先检查系统是否装有mysql
rpm -qa | grep mysql
-
下载MySQL的repo源
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
如果报错: -bash: wget: 未找到命令
安装插件 yum -y install wget -
安装mysql源
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
-
检查mysql源是否安装成功
yum repolist enabled | grep "mysql.*-community.*"
-
安装MySQL
yum install mysql-community-server
-
启动MySQL服务
systemctl start mysqld
-
查看MySQL的启动状态
systemctl status mysqld
-
重置MySQL密码
登录MySQL:mysql -uroot -p #初始密码为空
修改密码:
set password for 'root'@'localhost'=password('修改的密码');
退出:
quit;
-
设置开机自启动
systemctl enable mysqld systemctl daemon-reload