前言
开始一个项目的时候,总想着用最新最牛的技术和前沿框架,例如GO语言、微服务框架等,落地的时候发现用的可能还是那一套LNPM。如果没有技术积累,贸然使用新的语言;没有那么大的业务量,直接上一个Tars之类的微服务框架,那可能会把自己加班到死,把公司或产品拖垮。选择适合自己的就好,我们十分钟搞定一个LNPM环境,开始撸代码吧!
还是以centOS系统开始,如果服务器还没有弄好,可以去腾讯云或者阿里云买一台最便宜的开始练起。不要选已经配置好的镜像,自己配置花不了多少时间,这样能让你更深入的理解自己在做什么。有的时候,走点弯路能看到更多风景,何乐不为呢?
Nginx 安装
centOS上安装nginx非常容易,入门非常简单。
安装现成的
1 | yum install -y nginx |
然后就完事了,你的nginx服务就安装完成了。具体的配置在下面的站点设置里会介绍,到这里后就可以先放一放,去安装PHP和MySQL数据库了。
自己通过nginx源代码编译
一般没这个需要,如果特别感兴趣可以自己尝试编译,加深自己的理解;
配置
暂时无需配置,等安装好php(或nodejs/java/go等其他服务后再配置不迟)
MySQL的安装和配置
首先查看系统版本,然后选择要下载的MySQL版本
1 | cat /etc/redhat-release #查询下核心版本 |
在MySQL官方YUM仓库选择系统对应的源
下载地址:https://dev.mysql.com/downloads/repo/yum/
没有找到centOS,只有如下显示的,选择 Red Hat Enterprise Linux 7的就可以了。
这里的7是和上面查询的Linux版本对应的,如果你的是6或者8,也要选择下载6或者8的。
1 | 下载适合centOS 7.x的MySQL源地址到服务器: |
安装MySQL的源包
1 | sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm |
源包安装完成后会得到两个MySQL的源, mysql-community-source.repo和mysql-community.repo,就可以开始真正安装MySQL啦!
安装MySQL8
1 | sudo yum install mysql-server |
遇到选项按y即可;
下载速度可能有点慢。。。泡杯茶慢慢等就好了。。。
如果要快,可以终止下载,改用国内的镜像下载剩下的rpm文件。
使用国内镜像加速下载
国内镜像:http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/
进入到mysql RPM缓存文件夹,从国内镜像直接wget下载到服务器,可能1分钟就搞定了。
1 | 这个文件400多M,其他无所谓,这个真的要用国内镜像才行。 |
RPM下载完成后再重新执行一次:
1
2
3
4
sudo yum install mysql-server
一系列的安装输出日志后...
Complete!
找到root账号临时密码并设置新的密码
默认会生成一个临时的密码,从输出的日志里找到临时密码,用临时密码登录mysqld服务,修改为你自己记得住的密码;
1
2
3
cat /var/log/mysqld.log #显示日志
#找到这么一行输出:
A temporary password is generated for root@localhost:O&Y8&:h#<0f,
# O&Y8&:h#<0f, 这里就是我的临时密码,每次安装都不同,请看清楚自己的,不要使用我这里的。
使用这个密码登录
1
mysql -uroot -p
修改密码验证规则
1
2set global validate_password_policy=0;
set global validate_password_length=1;
修改root密码, 这里会和8以前的版本有区别,请注意。
1
2 ALTER user 'root'@'localhost' IDENTIFIED BY 'Your_Password'
Query OK, 0 rows affected, 1 warning (0.00 sec)
不要直接使用SQL语句修改ROOT密码,会导致authentication_string错误:
注意: 一定不要采取如下形式该密码:
1
2
3
以下是错误的演示,请不要效仿:
use mysql;
update user set authentication_string="newpassword" where user="root";
如果要用第三方客户端登录,密码可能需要重新设置一次,放上命令:
1
2
3 use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
FLUSH PRIVILEGES;
PHP的安装和配置
yum里可能没有最新的PHP源,但是又很想要,那么可以选择直接从PHP.NET上去下载源代码安装。传送门:PHP.NET官方下载
下载PHP源代码
我选了一个7.4.4的版本,下载到服务器本地:
1 | 可以有一个专门放下载文件的文件夹例如:/home/yourname |
下载完成后,解压,进入解压完成的PHP文件夹
1 | tar -xf php-7.4.4.tar.gz #解压到当前目录 |
编译前先了解下编译配置选项,开启适合自己需要的。建议不要在第三方网站和文章上去看,这里是官方的PHP configure 参数说明页面:
https://www.php.net/manual/zh/configure.about.php
https://www.php.net/manual/zh/extensions.membership.php
编译与安装PHP
安装缺少的源,避免出现错误:No package ‘oniguruma’ found
1 | yum install https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/o/oniguruma-5.9.5-3.el7.x86_64.rpm |
安装PHP扩展需要的软件
1 | yum install gcc \ |
将找不到的so文件做下软链接,避免出现找不到libc-client.a的错误
1 | ln -s /usr/lib64/libc-client.so /usr/lib/libc-client.a |
libzip比较特别,比较新的版本是第三方编译的。可能云服务器上是没有提供。
如果不安装最新0.11.x版本的话,生成配置文件的时候是会提示找不到libzip的。
错误信息:
1 | configure: error: Package requirements (libzip >= 0.11) were not met: Requested 'libzip >= 0.11' but version of libzip is 0.10.1 |
解决方法:
去https://pkgs.org/download/libzip找最新的源,然后安装。
1 | //安装libzip |
生成编译PHP的配置文件,每一现是做什么的,有兴趣的可以去上面给出的链接去了解详细说明。
1 | ./configure \ |
如果你遇到常见错误:
1 | checking for libzip >= 0.11... no |
请确保执行./configure命令和安装libzip库的身份是同一个,例如:如果是用的root安装的,那么就切换到root执行./configure
开始编译,时间根据极其配置而不同
1 | make |
你也可以根据建议来一次测试(测试时间有点长,不止十分钟)
1 | make test |
也可以直接开始安装
1 | make install |
安装完成,修改配置文件
1 | cd /usr/local/php7/etc |
去掉上面php-fpm.conf中;pid = run/php-fpm.pid的分号,然后保存;
1 | sudo vim /usr/local/php7/etc/php-fpm.conf |
添加PHP-FPM到全局的环境变量,在/etc/profile.d新建一个php.sh脚本
1 | sudo vim /etc/profile.d/php.sh |
在php.sh里添加环境变量,并保存
1 | export PHP7_HOME=/usr/local/php7 |
关掉命令窗口,再打开连上服务器,查看是否生效
1 | echo $PATH |
创建随服务器启动的服务
1 | sudo vim /usr/lib/systemd/system/php-fpm.service |
如果按照上面的操作过来的,直接复制粘贴保存一下脚本到php-fpm.service即可
1 | [Unit] |
启用开机自动启动
1 | systemctl enable php-fpm.service |
手动打开
1 | systemctl start php-fpm.service |
没有出错的话,就完成啦。当然如果你需要有更多自定义的配置和优化,就需要根据自己项目的情况,去深入了解php的各种配置选项的含义了。如果要全部熟悉一遍,可能要花掉好几天的时间去了解.
安装缺少的扩展
正式开始做项目的时候,可能会遇到缺少某些扩展的问题。不用着急,事后是可以继续安装的。
先把扩展下载到服务器,地址按照你的习惯放就可以了。
生成编译扩展库的配置文件
这里推荐使用绝对路径,如果安装了多个PHP的话。
1
/usr/local/php7/bin/phpize ./configure --with-php-config=/usr/local/php7/bin/php-config
安装可能缺少的autoconf
如果遇到错误如下:
1
2Cannot find autoconf. Please check your autoconf installation and the
PHP_AUTOCONF environment variable. Then, rerun this script.就需要先安装autoconf。
1
sudo yum install autoconf
安装完毕后,再重新执行配置文件生成的代码。
编译和安装
1
2./configure
make & make install
1.复制php.ini
1 | sudo cp ../php.ini-production /usr/local/php7/lib/php/php.ini |
1.编辑php.ini 打开zip模块
1 | zlib.output_compression = On |
添加要动态加载的zip模块
1 | extension=zip.so |
保存,重启php-fpm服务,你以为马上就能看到zip模块,其实并没有,其他模块都能比较正常的编译好,这个不生效。。
zip扩展的安装还需要继续:
下载libzip并使用cmake3编译。
如果没有cmake3,则需要先安装。
1
2yum install cmake3
ln -s /usr/lib/cmake3 /usr/lib/cmake安装cmake3,并软链接到/usr/lib/cmake,不然有些软件会出错。
使用yum安装编译好的zip模块文件
1
yum install php74-php-pecl-zip
重启php-fpm,这回真的好了。。
配置一个站点
一个服务器可以添加N个站点,只要域名指向正确都没问题;下面添加一个最简单的PHP站点:
新建一个文件夹放网站的文件
例如:/mnt/www/myblog
新建一个index.php文件,内容:
1 |
|
在nginx的配置文件中增加一个虚拟主机的配置文件
1 | vim /etc/nginx.d/vhost/myblog.conf |
编辑该配置文件
1 | server { |
重启ningx服务或者reload配置文件
1 | sudo systemctl reload nginx.service |
在浏览器里查看是否生效
在浏览器里输入你绑定的网址,就能看到php的配置信息了。
看完后记得删掉这个文件,避免泄露服务器的信息。
写在最后
算算时间,从一个全新的服务器开始,一步步操作演示和编写,我至少花了8个小时;希望我消耗的时间,能够为大家节约更多时间;十分钟手动完成所有配置好像有点难,不过熟练了的话半个小时内完成,还是没问题的。
做好之后,可以备份为一个镜像,下次可以直接从镜像生成,就真的不到十分钟就可以完成了!
如果想要更深入的对php和nginx进行配置,那么就需要对照文档仔细阅读理解了。不管如何,千里之行始于足下。可以从比较直观感受到的写hellworld代码开始,在遇到问题的时候,针对性实际的问题,来修改配置会更容易记忆深刻和理解。
一开始了解太多是件很残酷的事情哈!