接触 linux 系统有段时间了,最近计划换台配置高点的 vps,今天就最小化安装一个 linux 下的 php 运行环境(php,nginx,mysql,均为最新版),为了将来能更快速度配置机器打下坚实的基础! (文采不行,大家勿喷)
OK,我们开始,第一步:配置网卡
虚拟机的安装就不再赘述了,网络配置如下:
vim /etc/resolv.conf (指定 DNS 服务器)
nameserver 208.67.222.222 nameserver 192.168.1.1
cd 进网络配置目录 ls 查看一下
cd /etc/sysconfig/network-scripts/ ls
本机网卡名称为 ifcfg-enp0s3 (每人可能都不一样,可能为 ifcfg-eth0)
然后 vim 打开
vim ifcfg-enp0s3
我的配置如下
HWADDR="08:00:27:49:97:40" TYPE="Ethernet" BOOTPROTO="static" NAME="enp0s3" UUID="68331808-a004-413a-8682-48cc3487e7b5" ONBOOT="yes" IPADDR=192.168.1.25 GATEWAY=192.168.1.1 NETMASK=255.255.255.0
其中 TYPE 为网卡类型,不需要修改
BOOTPROTO 默认为 dhcp 我们将它修改为 static
IPADDR,GATEWAY,NETMASK 可能没有,我们手工加上
其中 IPADDR 为本机 IP 地址,可以自己填上,其他随意(如果发现其中某项不存在可以不需要管)
然后保存退出,重启网络即可
service network restart
然后我们 ping 下百度
ping www.baidu.com
如果可以 ping 通,即表示网络已配置好了
然后我们可以使用 ssh 工具进行连接,或联网装一些软件进去
第二步,下载 nginx php mysql
网络配置 OK,接下来我们就把需要装的软件下载下来。
首先我们跳转到需要存放下载文件的目录中
cd /usr/local/src
接下来开始下载软件
wget http://nginx.org/download/nginx-1.10.1.tar.gz wget http://cn2.php.net/get/php-7.0.10.tar.gz/from/this/mirror wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz
mysql 文件可能比较大(641MB),这会可以重新开一个窗口,先干其他事情
下载完成后发现没有 Php 文件(其实 mirror 就是 Php 文件)
我们将 php 文件名改过来
mv mirror php-7.0.10.tar.gz
接下来我们安装 nginx
安装 nginx 之前需要下载 pcre 库与 zlib 库
其中 zlib 我们用 yum 就可以了,顺便把 openssl 和 pcre 一起装了
yum install zlib zlib-devel pcre pcre-devel openssl openssl-devel gcc gcc-c++ automake autoconf libtool libevent libevent-devel
接下来我们下载 pcre
wget http://ncu.dl.sourceforge.net/project/pcre/pcre/8.39/pcre-8.39.zip
下载之后解压
unzip pcre-8.39.zip
第三步:正式编译 nginx
cd nginx-1.10.1 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-debug --with-pcre=/usr/local/src/pcre-8.39
如果不报错我们就开始编译
make && make install
1-2 分钟后应该编译完成了,这时候我们启动 nginx
/usr/local/nginx/sbin/nginx
如果不报错就证明启动成功!
然后我们在浏览器里输入我们设置好的 ip 地址(192.168.1.25)敲回车,
能看到如下画面则证明成功安装!
如果显示”无法访问”,可以在服务器上 ping 下自己电脑的 IP,如果可以 ping 通,可能是防火墙的问题
Centos 7 以下关闭防火墙输入以下命令:
service iptables stop
对于 Centos 7 输入以下命令关闭防火墙:
systemctl stop firewalld.service
之后再尝试应该就可以访问了.
第四步:编译安装 PHP
OK,重头戏来了,首先我们先 yum 安装一些”乱七八糟”的东西(yum 真是个好东西)
yum install libjpeg libjpeg-devel libxslt libxslt-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 e2fsprogs e2fsprogs-devel krb5 krb5-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers libaioso.1 libaio
因为 php 的 mcrypt 扩展无法从 yum 安装,我们去下载它的源码进行手动编译安装
cd /usr/local/src wget http://ncu.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8 ./configure --prefix=/usr/local/libmcrypt make && make install
mcrypt 安装完成之后我们 CD 进 PHP 目录中执行以下语句
./configure --prefix=/usr/local/php \ --enable-fpm \ --enable-mbstring \ --with-openssl \ --with-mysqli \ --with-gd \ --with-jpeg-dir \ --with-pdo-mysql=mysqlnd \ --with-curl \ --with-freetype-dir=/usr/share/freetype2 \ --with-mysql=mysqlnd \ --enable-mysqlnd \ --enable-gd-native-ttf \ --enable-sockets \ --with-zlib \ --enable-zip \ --with-bz2 \ --with-png-dir \ --enable-opcache \ --enable-xml \ --enable-libxml \ --enable-bcmath \ --with-xsl \ --with-mcrypt=/usr/local/libmcrypt \ --with-pear \ --enable-pcntl \ --enable-ftp \ --with-iconv
是不是感觉有点多? 可能还不够,PHP 扩展犹如汪洋大海,前期尽量把常用的装全了,免得以后再加(当然有单独编译扩展的方法,后面再说)
运行之后可能会报一些错,如果缺少某些库就随手 yum 安装上,warning 类型的可以不用理睬(比如 WARNING: unrecognized options: –with-mysql)
如果没错就可以进行安装了
make && make install
安装过程可能有点久(20-50 分钟不等,视机器配置决定)
OK,安装完成之后先不要高兴太早,我们得执行以下命令才能把 PHP 运行起来:
cd /usr/local/php cp etc/php-fpm.conf.default etc/php-fpm.conf cp /usr/local/src/php-7.0.10/php.ini-development ./lib/php.ini cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf (php7 专用)
激动人心的时刻到了,我们运行 PHP 试试
./sbin/php-fpm
如果不报错,就是成功了!
现在我们去配置 Nginx,使 PHP 能真正跑的起来
cd /usr/local/nginx/conf vim nginx.conf
找到
location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts/$fastcgi_script_name; include fastcgi_params; }
将
fastcgi_param SCRIPT_FILENAME /scripts/$fastcgi_script_name;
修改为
fastcgi_param SCRIPT_FILENAME $DOCUMENT_ROOT$fastcgi_script_name;
保存退出后 CD 到 nginx 目录中执行
./sbin/nginx -s reload
然后进入 nginx/html 目录中写一个 php 文件测试
cd html vim a.php <?php phpinfo();?>
保存退出,在地址栏输入(192.168.1.25/a.php)
查看 php 信息,发现缺少 zip 扩展(比较重要的一个扩展)
我们只能单独编译安装 zip 扩展
我们 cd 进 php 的源码目录中
cd /usr/local/src/php-7.0.10/ext/ ls
这个目录则是 php 源码包自有扩展库,如果以后需要用到某个库而没有编译可以在这里看有没有
我们 cd 进 zip 目录下执行
cd zip /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install
一切 OK 之后,我们去编辑一下 php.ini
vim /usr/local/php/lib/php.ini
加入以下代码保存退出
extension=zip.so
重启 php 进程
pkill -9 php /usr/local/php/sbin/php-fpm
然后查看(192.168.1.25/a.php)
是否已将 zip 安装完成
到此 PHP 的编译就已经完成了,这会 mysql 应该也已经下载完成了吧
OK,我们正式开始安装 mysql
第五步:编译安装 Mysql(mysql 5.7 与之前版本的安装有很大区别)
首先将 mysql 文件解压放到 /usr/local 下
cd /usr/local/src tar zxvf mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz cd ../ mv /usr/local/src/mysql-5.7.14-linux-glibc2.5-x86_64 ./mysql
5.7 版本 mysql 源码中没有 data 目录,因此我们需要手动给创建上
mkdir /usr/local/mysql/data
新建 mysql 用户组,mysql 用户
groupadd mysql useradd -g mysql mysql cd /usr/local/mysql
将文件全部‘送’给 mysql 用户及 mysql 组(注意此时位置在 mysql 目录下)
chown -R mysql . chgrp -R mysql .
然后开始初始化安装 mysql
bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data
将 my.cnf 复制到 etc 下
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
vim 编辑 my.cnf
vim /etc/my.cnf
修改 basedir,datadir,socket
basedir =/usr/local/mysql datadir =/usr/local/mysql/data socket =/var/lib/mysql/mysql.sock
然后保存退出,启动 mysql
cd /usr/local/mysql/support-files ./mysql.server start
显示 Starting MySQL. SUCCESS! 则表示启动成功
5.7 最新版不许空密码登录,实际上有个初始化密码保存在/root/.mysql_secret 这个文件里面,
我们 cat 查看一下密码
cat /root/.mysql_secret
然后我们进入 mysql
bin/mysql -uroot -p
密码输入以上密码(例:tfLuiBOdV?qe)
登录可能遇到这种情况
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
这是因为 mysql 使用 localhost 登录时需要有个锁文件,该锁文件在 var/lib/mysql/mysql.sock
我们建立一个软连接过去
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
重启启动 mysql
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.14 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
OK,启动成功!
接下来我们把密码改了(不修改则报错)
set password = password('新密码');
5.6 及之前版本修改密码执行
UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ;
5.7 之后为
UPDATE user SET authentication_string = password ( 'new-password' ) WHERE User = 'root' ;
至此我们大功告成!
nginx,php,mysql 皆是最新版本!