centos 7.6编译安装tengine2.2.3+php7.3.2+Mariadb

建议首先安装数据库,因为最好安装了(先安装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

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容