建议首先安装数据库,因为最好安装了(先安装tengine页可以)
wget下载命令 设置:
yum install? wget
wget指定下载文件存放路径:-P? ?一定要大写,小写不生效;后面是指定的存放路径;下载链接
例如:wget -P??/usr/local/src ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.43.tar.gz
防火墙的相关设置
firewall-cmd --list-ports??查看已经开放的端口
开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
命令含义:
–zone #作用域
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
修改完配置之后,需要重启firewall服务
firewall-cmd --reload
更多防火墙设置相关命令:https://www.cnblogs.com/leoxuan/p/8275343.html (实际生产环境下firewalld 与 iptables配合使用效果更好)
再安装好tengine之后,创建网站目录的时候,就需要注意文件夹的权限问题,权限不对可能会不能正常输出
一、数据库MariaDB的安装
1、安装MariaDB
安装命令
yum -y install mariadb mariadb-server
安装完成MariaDB,首先启动MariaDB
systemctl start mariadb
设置开机启动
systemctl enable mariadb
接下来进行MariaDB的相关简单配置
mysql_secure_installation
首先是设置密码,会提示先输入密码
Enter current password for root (enter for none):<–初次运行直接回车
设置密码
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
其他配置
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
初始化MariaDB完成,接下来测试登录
mysql -uroot -ppassword? ?<– root是账户名? password是密码
2、配置MariaDB的字符集
文件/etc/my.cnf
vi /etc/my.cnf
在[mysqld]标签下添加
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
文件/etc/my.cnf.d/client.cnf
vi /etc/my.cnf.d/client.cnf
在[client]中添加
default-character-set=utf8
文件/etc/my.cnf.d/mysql-clients.cnf
vi /etc/my.cnf.d/mysql-clients.cnf
在[mysql]中添加
default-character-set=utf8
全部配置完成,重启mariadb
systemctl restart mariadb
重启完成之后,登录进入MariaDB查看字符集
show variables like "%character%";show variables like "%collation%";
显示为
字符集配置完成。
3、添加用户,设置权限
创建用户命令
create user username@localhost identified by 'password';
直接创建用户并授权的命令
grant all on *.* to username@localhost indentified by 'password';
授予外网登陆权限
grant all privileges on *.* to username@'%' identified by 'password';
授予权限并且可以授权
grant all privileges on *.* to username@'hostname' identified by 'password' with grant option;
简单的用户和权限配置基本就这样了。(centos默认本机地址为127.0.0.1,php链接数据的时候使用localhost有可能会连接不上)
其中只授予部分权限把 其中 all privileges或者all改为select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file其中一部分。
(本部分操作记录整理,并依据实际情况修正原文中的错误 https://www.centos.bz/2018/01/centos7%E5%AE%89%E8%A3%85mariadb/)
二、淘宝服务器程序Tengine2.2.3安装
1、安装必要的编译环境好
由于Tengine安装需要使用源代码自行编译,所以在安装前需要安装必要的编译工具:
yum?-y install gcc gcc-c++?bzip2?perl?curl curl-devel expat-devel gettext-devel openssl-devel?libxml2 libxml2-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel autoconf
yum -y install epel-release? //扩展包更新包? (等下安装php的时候也要用)
yum -y update?//更新yum源
yum -y install libmcrypt libmcrypt-devel mcrypt mhash
2、安装需要的组件
A、PCRE的安装
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx rewrite依赖于PCRE库,所以在安装Tengine前一定要先安装PCRE
cd /usr/local/src && wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.43.tar.gz && tar zxvf pcre-8.43.tar.gz && cd pcre-8.43 && ./configure --prefix=/usr/local/pcre && make && make install
B、Zlib?的安装
Zlib是提供资料压缩之用的函式库,当Tengine想启用GZIP压缩的时候就需要使用到Zlib(http://www.zlib.net/)。
cd /usr/local/src && wget http://zlib.net/zlib-1.2.11.tar.gz && tar zxvf zlib-1.2.11.tar.gz && cd zlib-1.2.11 && ./configure --prefix=/usr/local/zlib && make && make install
C、jemalloc?的安装
jemalloc(https://github.com/jemalloc/jemalloc/releases/)是一个更好的内存管理工具,使用jemalloc可以更好的优化Tengine的内存管理。
cd /usr/local/src && wget https://github.com/jemalloc/jemalloc/releases/download/5.2.0/jemalloc-5.2.0.tar.bz2 && tar xvf jemalloc-5.2.0.tar.bz2 && cd jemalloc-5.2.0 && ./configure --prefix=/usr/local/jemalloc && make && make install
提示: 当前目录下没有.configure文件时,需要先执行.autogen.sh后再执行.configure
D、OpenSSL?的安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。,安装OpenSSL(http://www.openssl.org/source/)主要是为了让tengine支持Https的访问请求。
cd /usr/local/src && wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar zxvf openssl-1.1.1c.tar.gz && cd openssl-1.1.1c && ./config --prefix=/usr/local/openssl && make && make install
3、安装Tengine
在主要核心的组件安装完毕以后就可以安装Tegine了,最新版本的Tegine可从官网(http://tengine.taobao.org/)获取。
最新版为:http://tengine.taobao.org/download/tengine-2.3.0.tar.gz
在编译安装前还需要做的一件事是添加一个专门的用户来执行Tengine。当然你也可以用root(不建议)。
groupadd www &&?useradd -s /sbin/nologin -g www www
(有时候添加不上用户www导致启动warn www警告,重新添加useradd -s /sbin/nologin -g www www?)
接下来才是进行安装:
cd /usr/local/src && wget http://tengine.taobao.org/download/tengine-2.2.3.tar.gz && tar -zxvf tengine-2.2.3.tar.gz && cd tengine-2.2.3
./configure --prefix=/usr/local/nginx --user=www --group=www --with-pcre=/usr/local/src/pcre-8.43 --with-openssl=/usr/local/src/openssl-1.1.1c --with-jemalloc=/usr/local/src/jemalloc-5.2.0 --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module --with-http_concat_module --with-zlib=/usr/local/src/zlib-1.2.11 --with-http_random_index_module?--with-http_dav_module?--with-http_addition_module
make && make install
注意配置的时候 –with-pcre 、–with-openssl、–with-jemalloc、–with-zlib的路径为源文件的路径,不是安装后的路径。
提示: tengine 在2.3中去除了动态加载??椋缘贾?-with-http_concat_module不能使用了,所以可以安装tengine2.3之前的是可以正常使用
4、配置Tengine,设置tengine自动启动
系统用户登录系统后启动的服务 的目录 /usr/lib/systemd/system
如需要开机没有登陆情况下就能运行的程序在系统目录内/lib/systemd/system
我希望系统开机就启动目录,所以我把文件放在系统目录内。
cd?/lib/systemd/system
vi nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
修改nginx.conf文件: 这里修改是在为配置多个网站做准备
mkdir /usr/local/tengine-2.1.2/conf/domains
vim /usr/local/tengine-2.1.2/conf/nginx.conf
修改:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
????worker_connections 1024;
}
修改为:?worker_processes 4;? 建议根据cpu核心数定,双核就填2,单核就填1,
user www www;
worker_processes 4;
error_log logs/error.log crit;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
????use epoll;
????worker_connections 65535;
}
修改:
http {
include mime.types;
default_type application/octet-stream;
修改为:
http {
include mime.types;
include domains/*.conf;
default_type application/octet-stream;
测试tengine:
cd /usr/local/tengine-2.1.2
ldconfig
./sbin/nginx -t
//有以下输出信息则为测试成功
the configuration?file?/usr/local/nginx/conf/nginx.conf syntax is ok
configuration?file?/usr/local/nginx/conf/nginx.conf?test?is successful
对tengine的配置文件进行修改之后,一定要记得重新启动一下服务,不然不生效。
修改文件权限?? chmod 745 nginx.service
设置为开机启动? systemctl enable nginx.service
启动nginx服务??? systemctl start nginx.service
设置开机自启动?? systemctl enable nginx.service
停止开机自启动?? systemctl disable nginx.service
查看服务当前状态 systemctl status nginx.service
重新启动服务???? systemctl restart nginx.service
查看所有已启动的服务? systemctl list-units --type=service
tengine的安装主要参考:https://blog.csdn.net/u010856284/article/details/84973323
三、编译PHP7.3.2安装
首先,安装依赖包(没有安装的会自动安装,已经安装过的会跳过或是更新)
yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel libzip?
然后就下载PHP7.3.2的安装压缩包
wget?"https://downloads.php.net/~cmb/php-7.3.2.tar.gz"
tar xzvf php-7.3.2.tar.gz
cd? php-7.3.2
准备编译PHP
--with-fpm-user=www --with-fpm-group=www
这里使用www www 用户、用户组(这个www用户和用户组在安装tengine的时候已经创建)
编译出来的程序启动,就是归属这个用户、用户组
./configure --prefix=/usr/local/php --with-fpm-user=www --with-fpm-group=www --with-curl --with-freetype-dir --with-gd --with-gettext?--with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip --enable-fpm
编译错误,解决依赖
configure: error: libxml2 not found. Please check your libxml2 installation.
yum install -y? libxml2-devel
configure: error: Please reinstall the BZip2 distribution
yum install -y? bzip2-devel
configure: error: cURL version 7.15.5 or later is required to compile php with cURL support
yum install -y? curl-devel
configure: error: jpeglib.h not found.
yum install -y? libjpeg-devel
configure: error: png.h not found.
yum install -y libpng-devel
configure: error: freetype-config not found.
yum install -y freetype-devel
configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
yum install -y libxslt-devel
configure: error: Please reinstall the libzip distribution
yum install -y libzip-devel
checking for libzip... configure: error: system libzip must be upgraded to version >= 0.11
#先删除旧版本
yum remove -y libzip
#下载编译安装
wget https://nih.at/libzip/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make && make install
off_t undefined 报错? (如下面这个代码块)
checking libzip... yes
checking?for?the location of zlib... /usr
checking?for?pkg-config... (cached) /usr/bin/pkg-config
checking?for?libzip... in?default?path: found in /usr/local
checking?for?zip_open in -lzip... yes
checking?for?zip_file_set_encryption in -lzip... yes
checking?for?zip_libzip_version in -lzip... no
checking stdbool.h usability... yes
checking stdbool.h presence... yes
checking?for?stdbool.h... yes
checking fts.h usability... yes
checking fts.h presence... yes
checking?for?fts.h... yes
checking?for?int8_t... (cached) yes
checking?for?int16_t... (cached) yes
checking?for?int32_t... (cached) yes
checking?for?int64_t... (cached) yes
checking?for?uint8_t... (cached) yes
checking?for?uint16_t... (cached) yes
checking?for?uint32_t... (cached) yes
checking?for?uint64_t... (cached) yes
checking?for?ssize_t... yes
checking size of short... (cached) 2
checking size of int... (cached) 4
checking size of long... (cached) 8
checking size of long long... (cached) 8
checking size of off_t... 0
configure: error: off_t undefined; check your library configuration
off_t 类型是在 头文件 unistd.h中定义的,
在32位系统 编程成 long int ,64位系统则编译成 long long int ,
在进行编译的时候 是默认查找64位的动态链接库,
但是默认情况下 centos 的动态链接库配置文件/etc/ld.so.conf里并没有加入搜索路径,
这个时候需要将 /usr/local/lib64 /usr/lib64 这些针对64位的库文件路径加进去。
#添加搜索路径到配置文件
echo?'/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf
#然后 更新配置
ldconfig -v
通过之后进行安装
make && make install
报错 usr/local/include/zip.h:59:21: fatal error: zipconf.h: No such file or directory
cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
成功输出
Installing shared extensions:???? /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/
Installing PHP CLI binary:??????? /usr/local/php/bin/
Installing PHP CLI man page:????? /usr/local/php/php/man/man1/
Installing PHP FPM binary:??????? /usr/local/php/sbin/
Installing PHP FPM defconfig:???? /usr/local/php/etc/
Installing PHP FPM man page:????? /usr/local/php/php/man/man8/
Installing PHP FPM status page:?? /usr/local/php/php/php/fpm/
Installing phpdbg binary:???????? /usr/local/php/bin/
Installing phpdbg man page:?????? /usr/local/php/php/man/man1/
Installing PHP CGI binary:??????? /usr/local/php/bin/
Installing PHP CGI man page:????? /usr/local/php/php/man/man1/
Installing build environment:???? /usr/local/php/lib/php/build/
Installing header files:????????? /usr/local/php/include/php/
Installing helper programs:?????? /usr/local/php/bin/
??program: phpize
??program: php-config
Installing man pages:???????????? /usr/local/php/php/man/man1/
??page: phpize.1
??page: php-config.1
Installing PEAR environment:????? /usr/local/php/lib/php/
Warning:?"continue"?targeting?switch?is equivalent to?"break". Did you mean to?use?"continue 2"? in phar:///home/flame/software/php-7.3.0/pear/install-pear-nozlib.phar/PEAR/PackageFile/v2/Validator.php on line 1933
[PEAR] Archive_Tar??? - installed: 1.4.3
[PEAR] Console_Getopt - installed: 1.4.1
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util?????? - installed: 1.4.2
[PEAR] PEAR?????????? - installed: 1.10.5
Wrote PEAR system config file at: /usr/local/php/etc/pear.conf
You may want to add: /usr/local/php/lib/php to your php.ini include_path
/home/flame/software/php-7.3.0/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin
ln -s -f phar.phar /usr/local/php/bin/phar
Installing PDO headers:?????????? /usr/local/php/include/php/ext/pdo/
配置,建立目录(终端定位:解压后的php-7.3.2文件夹下,若是下面第一个出错,多半是终端定位不对)
cp php.ini-production /usr/local/php/lib/php.ini
cp /usr/local/php/etc/php-fpm.conf.default?/usr/local/php/etc/php-fpm.conf
ln -s /usr/local/php/sbin/php-fpm /usr/local/bin
cd /usr/local/php/etc/php-fpm.d
cp /usr/local/php/etc/php-fpm.d/www.conf.default??/usr/local/php/etc/php-fpm.d/www.conf
vi www.conf
主要是确认一下文件中的用户信息,保持与下面所示的一致就好。
user = www? #php代码目录权限 需要跟这个一致,
group = www #php代码目录权限 需要跟这个一致
加入 systemtl 服务
将php-fpm加入启动服务
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/php-fpm.service
启动php-fpm
systemctl start php-fpm.service
查看状态
systemctl status php-fpm
为了以后方便,可以编辑 /etc/profile 添加环境变量 ,添加到最后面
PATH=$PATH:/usr/local/php/bin
export PATH
然后更新环境变量。
source /etc/profile
查看环境变量
echo $PATH
查看php版本
php -v
测试
mkdir-p /home/www/webroot/php
cd /home/www/webroot/php
vim test.php
输入
<?php
? ? phpinfo();
?>
若是不能正常访问页面:建议检查下面几项
1.防火墙端口是否放开
2.tengine的配置是否正确,tengine的服务是否启动,修改配置文件之后记得要重启
3.tengine中的nginx.conf文件中网站路径配置是否正确及监听端口
4.网站目录文件夹权限是否正确,有可能是没有运行脚本的权限或是用户和用户组不对,不是上文中创建的www
5.使用php连接MariaDB时,需要修改php.ini中(大概1182行),修改之后mysqli可以正常使用
mysqli.default_socket =
修改为
mysqli.default_socket =/var/lib/mysql/mysql.sock
在我摸索的时候遇到最多的问题:文件夹权限? 防火墙端口? ?tengine配置php解析,有很多次都配置成功了,因为文件夹权限或是防火墙认为是失败了,耽误了不少时间。谨以此文记录。
附加:安装多个版本的PHP
过程同上面的安装是一样,不过需要注意的是,安装路径要与其它版本分开,
并且要注意修改/php-fpm.d/文件夹下面的php-fpm.conf? 中的用户组和用户AND? 监听端口也要与其它版本的区分开。
更详细的参考:https://blog.csdn.net/daily886/article/details/79758160