创世神域

Nothing is impossible.

@Puteulanus4年前

09/30
21:49
学习心得

CentOS7编译安装Tengine+PHP过程记录

照着网上的教程编译安装Tengine2.03和PHP5.6,记录一下过程作为备忘。

环境是CentOS 7 64bit,Updated 9 July 2014。使用的IndoVirtue家的512M内存虚拟机。

先更新下系统:

[root@sg ~]# yum update -y

安装必要软件:

[root@sg ~]# yum install gcc automake autoconf libtool make gcc-c++ zlib-devel openssl-devel vim which bzip2 -y

编译安装pcre:

[root@sg ~]# cd /usr/local/src/
[root@sg src]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.35.tar.gz
[root@sg src]# tar zvxf pcre-8.35.tar.gz
[root@sg src]# cd pcre-8.35
[root@sg pcre-8.35]# ./configure
[root@sg pcre-8.35]# make && make install

编译安装openssl:

[root@sg pcre-8.35]# cd /usr/local/src/
[root@sg src]# wget http://www.openssl.org/source/openssl-1.0.1h.tar.gz
[root@sg src]# tar zvxf openssl-1.0.1h.tar.gz
[root@sg src]# cd openssl-1.0.1h
[root@sg openssl-1.0.1h]# ./config
[root@sg openssl-1.0.1h]# make && make install

编译安装zlib

[root@sg openssl-1.0.1h]# cd /usr/local/src/
[root@sg src]# wget http://zlib.net/zlib-1.2.8.tar.gz
[root@sg src]# tar zvxf zlib-1.2.8.tar.gz
[root@sg src]# cd zlib-1.2.8
[root@sg zlib-1.2.8]# ./configure
[root@sg zlib-1.2.8]# make && make install

编译安装jemalloc:

[root@sg zlib-1.2.8]# cd /usr/local/src/
[root@sg src]# wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2
[root@sg src]# tar jxvf jemalloc-3.6.0.tar.bz2
[root@sg src]# cd jemalloc-3.6.0
[root@sg jemalloc-3.6.0]# ./configure
[root@sg jemalloc-3.6.0]# make && make install
[root@sg jemalloc-3.6.0]# echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
[root@sg jemalloc-3.6.0]# ldconfig

建立www用户组和用户,禁止www登陆shell:

[root@sg jemalloc-3.6.0]# groupadd www
[root@sg jemalloc-3.6.0]# useradd -g www www
[root@sg jemalloc-3.6.0]# usermod -s /sbin/nologin www

创建虚拟主机使用目录,并赋予相应权限:

[root@sg jemalloc-3.6.0]# mkdir -p /usr/www/example.com/{public_html,logs}
[root@sg jemalloc-3.6.0]# chmod -R +w /usr/www/
[root@sg jemalloc-3.6.0]# chown -R www:www /usr/www/

编译安装Tengine:

[root@sg jemalloc-3.6.0]# cd /usr/local/src/
[root@sg src]# wget http://tengine.taobao.org/download/tengine-2.0.3.tar.gz
[root@sg src]# tar zvxf tengine-2.0.3.tar.gz
[root@sg src]# cd tengine-2.0.3
[root@sg tengine-2.0.3]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.0.1h --with-zlib=/usr/local/src/zlib-1.2.8 --with-pcre=/usr/local/src/pcre-8.35 --with-jemalloc
[root@sg tengine-2.0.3]# make && make install

修改nginx.conf文件:

[root@sg tengine-2.0.3]# mkdir /usr/local/nginx/conf/domains
[root@sg tengine-2.0.3]# vim /usr/local/nginx/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;
}

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;

:wq保存

测试Nginx:

[root@sg tengine-2.0.3]# cd /usr/local/nginx
[root@sg nginx]# ldconfig
[root@sg nginx]# ./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

测试成功

添加Nginx到开机自动启动:

[root@sg nginx]# vim /usr/lib/systemd/system/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
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]

WantedBy=multi-user.target

:wq保存

[root@sg nginx]# systemctl enable nginx

关闭默认防火墙:

[root@sg nginx]# systemctl stop firewalld.service
[root@sg nginx]# systemctl disable firewalld.service

安装iptables并开启80端口

[root@sg nginx]# yum install iptables-services -y
[root@sg nginx]# vim /etc/sysconfig/iptables

增加

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

因为这台VPS的SSH端口为60000,修改

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 60000 -j ACCEPT

:wq保存

重启iptables并设定开机自动启动:

[root@sg nginx]# systemctl restart iptables.service
[root@sg nginx]# systemctl enable iptables.service

安装MariaDB:

[root@sg nginx]# cd /etc/yum.repos.d/
[root@sg yum.repos.d]# vim MariaDB.repo

输入

# MariaDB 10.0 CentOS repository list - created 2014-09-30 09:33 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

:wq保存

[root@sg yum.repos.d]# yum install MariaDB-server MariaDB-client -y

报错,存在冲突包,删除之

[root@sg yum.repos.d]# rpm -ev net-snmp-1:5.7.2-18.el7.x86_64
[root@sg yum.repos.d]# rpm -ev mariadb-libs-1:5.5.37-1.el7_0.x86_64

再安装

[root@sg yum.repos.d]# yum install MariaDB-server MariaDB-client -y

成功

启动MariaDB服务并添加开机自动启动:

[root@sg yum.repos.d]# service start mysql
[root@sg yum.repos.d]# chkconfig mysql on

安装编译PHP的必要应用:

[root@sg yum.repos.d]# yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libpng libpng-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses curl openssl-devel gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel readline-devel libxslt-devel expat-devel xmlrpc-c xmlrpc-c-devel file

编译安装libmcrypt:

[root@sg yum.repos.d]# cd /usr/local/src/
[root@sg src]# wget https://vps.googlecode.com/files/libmcrypt-2.5.8.tar.gz
[root@sg src]# tar zxvf libmcrypt-2.5.8.tar.gz
[root@sg src]# cd libmcrypt-2.5.8
[root@sg libmcrypt-2.5.8]# ./configure
[root@sg libmcrypt-2.5.8]# make && make install

编译安装PHP:

[root@sg libmcrypt-2.5.8]# cd /usr/local/src/
[root@sg src]# wget http://cn2.php.net/distributions/php-5.6.0.tar.gz
[root@sg src]# tar zxvf php-5.6.0.tar.gz
[root@sg src]# cd php-5.6.0
[root@sg php-5.6.0]# ./configure --prefix=/usr/local/php-5.6.0 --with-mysql --with-mysql-sock --with-mysqli --enable-fpm --enable-soap --with-libxml-dir --with-openssl --with-mcrypt --with-mhash --with-pcre-regex --with-sqlite3 --with-zlib --enable-bcmath --with-iconv --with-bz2 --enable-calendar --with-curl --with-cdb --enable-dom --enable-exif --enable-fileinfo --enable-filter --with-pcre-dir --enable-ftp --with-gd --with-openssl-dir --with-jpeg-dir --with-png-dir --with-zlib-dir  --with-freetype-dir --enable-gd-native-ttf --enable-gd-jis-conv --with-gettext --with-gmp --with-mhash --enable-json --enable-mbstring --disable-mbregex --disable-mbregex-backtrack --with-libmbfl --with-onig --enable-pdo --with-pdo-mysql --with-zlib-dir --with-pdo-sqlite --with-readline --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-libxml-dir  --with-xsl --enable-zip --enable-mysqlnd-compression-support --with-pear --disable-fileinfo

因为只有512M内存所以加了--disable-fileinfo,不然编译会报错

[root@sg php-5.6.0]# make && make install

复制配置文件:

[root@sg php-5.6.0]# cp /usr/local/php-5.6.0/etc/php-fpm.conf.default /usr/local/php-5.6.0/etc/php-fpm.conf
[root@sg php-5.6.0]# cp /usr/local/src/php-5.6.0/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@sg php-5.6.0]# cp /usr/local/src/php-5.6.0/php.ini-production /usr/local/php-5.6.0/lib/php.ini

修改配置文件:

[root@sg php-5.6.0]# vim /usr/local/php-5.6.0/etc/php-fpm.conf

找到这些值修改

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

去掉

;pm.max_requests = 500

的注释,然后

:wq保存

设置php-fpm开机自动启动

[root@sg php-5.6.0]# chmod a+x /etc/init.d/php-fpm
[root@sg php-5.6.0]# chkconfig php-fpm on

将PHP的bin目录加入环境变量:

[root@sg php-5.6.0]# chmod +x /etc/profile
[root@sg php-5.6.0]# vim /etc/profile.d/php.sh

加入

PATH=$PATH:/usr/local/php5.6.0/bin
export PATH

:wq保存

[root@sg php-5.6.0]# chmod +x /etc/profile.d/php.sh
[root@sg php-5.6.0]# source /etc/profile
[root@sg php-5.6.0]# ln -s /usr/local/php-5.6.0/sbin/php-fpm /bin/php-fpm

创建网站配置文件:

[root@sg php-5.6.0]# vim /usr/local/nginx/conf/domains/example.com.conf

输入

server {
server_name example.com;
listen 80;
root /usr/www/example.com/public_html;
access_log /usr/www/example.com/logs/access.log;
error_log /usr/www/example.com/logs/error.log;
index index.php;

location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}

location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
access_log off;
expires max;
}

location ~ /\.ht {
deny  all;
}
location ~ \.php$ {
fastcgi_pass  127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include  /usr/local/nginx/conf/fastcgi_params;
}

}

:wq保存

重启VPS:

[root@sg php-5.6.0]# reboot

CentOS7编译安装Tengine+PHP过程记录