手记

mysql+nginx+php编译过程

1、mysql 5.5.16编译安装

安装所需要系统库相关文件

yum install -y gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel*

创建mysql安装目录和数据存放目录

mkdir -p /usr/local/mysql

mkdir -p /data/mysql/

创建用户和用户组与赋予数据存放目录权限

useradd mysql -s /sbin/nologin

chown mysql.mysql -R /data/mysql/

安装cmake

下载cmake http://download.chinaunix.net/download.php?id=31928&ResourceID=1605

tar zxf cmake-2.8.5.tar.gz

cd cmake-2.8.5

./configure

make && make install

安装mysql 5.5.16

tar fzx mysql-5.5.16.tar.gz

cd mysql-5.5.16

/usr/local/bin/cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock

-DDEFAULT_CHARSET=utf8

-DDEFAULT_COLLATION=utf8_general_ci

-DWITH_EXTRA_CHARSETS:STRING=all

-DWITH_MYISAM_STORAGE_ENGINE=1

-DWITH_INNOBASE_STORAGE_ENGINE=1

-DWITH_READLINE=1

-DENABLED_LOCAL_INFILE=1

-DMYSQL_DATADIR=data/mysql

make && make install

复制配置文件

mv /etc/my.cnf /etc/my.cnf-`date +%F`

mkdir -p /usr/local/mysql/etc

cp support-files/my-medium.cnf /usr/local/mysql/etc/my.cnf

cd /usr/local/mysql/

mkdir log run tmp data

chown mysql.mysql -R *

vim /usr/local/mysql/etc/my.cnf

innodb_log_files_in_group=2

innodb_data_home_dir = /opt/data/mysql/

innodb_data_file_path = ibdata1:2000M;ibdata2:2000M;ibdata3:20M:autoextend

innodb_log_group_home_dir = /opt/data/mysql/

# 4G RAM

innodb_buffer_pool_size = 1G

innodb_log_file_size = 256M

innodb_log_buffer_size = 8M

innodb_flush_log_at_trx_commit=0

innodb_thread_concurrency=8

innodb_flush_method=O_DIRECT

# perform

tmp_table_size = 512M

max_heap_table_size=128M

初始化数据库(执行前 需要chmod 755 scripts/mysql_install_db 赋给文件执行权限)

./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql

#basedir mysql安装路径 datadir 数据库文件储存路径

设置mysqld的开机启动:

cp support-files/mysql.server /etc/init.d/mysqld

chmod 755 /etc/init.d/mysqld

chkconfig mysqld on

chkconfig --list mysqld

设置环境变量

vim /etc/profile

PATH=$PATH:/usr/local/mysql/bin

PATH=/usr/local/mysql/bin:$PATH

启动mysql服务

/etc/init.d/mysqld start

启动完成之后用ps -ef |grep mysql 命令查看是否启动

2、mysql安全设置

设置root帐户的密码

mysqladmin -u root password '123456'

删除本机匿名连接的空密码帐号

本机登录mysql

mysql -uroot -p

然后输入上面设置的密码,登录后在mysql的命令行中执行:

use mysql;

//update user set password='123456' where host = '127.0.0.1';

delete from user where user="";

delete from user where password="";

flush privileges;

quit

3、安装nginx

一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。

cd /home

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.gz

tar fzx pcre-8.32.tar.gz

cd pcre-8.32

./configure --prefix=/usr/local/pcre

wget http://zlib.net/zlib-1.2.8.tar.gz

tar -zxvf zlib-1.2.8.tar.gz

cd zlib-1.2.8

./configure

make

make install

安装ssl(有些没有)

cd /home

wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz

tar -zxvf openssl-1.0.1c.tar.gz

useradd nginx -s /sbin/nologin

./configure

--user=nginx \

--group=nginx \

--prefix=/usr/local/nginx \

--sbin-path=/usr/sbin/nginx \

--conf-path=/usr/local/nginx/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/log/run/nginx.pid \

--lock-path=/var/log/lock/subsys/nginx \

--with-http_ssl_module \

--with-http_realip_module \

--with-http_addition_module \

--with-http_sub_module \

--with-http_dav_module \

--with-http_flv_module \

--with-http_gzip_static_module \

--with-http_stub_status_module \

--with-http_perl_module \

--with-mail \

--with-mail_ssl_module \

--with-pcre=/home/pcre-8.32 \

--with-zlib=/home/zlib-1.2.8 \

--with-openssl=/home/openssl-1.0.1c

或,

./configure

--sbin-path=/usr/local/nginx/nginx

--conf-path=/usr/local/nginx/nginx.conf

--pid-path=/usr/local/nginx/nginx.pid

--with-http_ssl_module

--with-pcre=/home/pcre-8.32

--with-zlib=/home/zlib-1.2.8

make && make install

启动nginx

nginx

etstat -ano|grep 80

4、php安装

wget http://cn.php.net/get/php-5.4.8.tar.gz/from/this/mirror

wget http://pecl.php.net/get/memcache-2.2.7.tgz

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

wget https://github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gz

wget https://memcached.googlecode.com/files/memcached-1.4.15.tar.gz

wget "http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&big_mirror=0"

wget "http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz?modtime=1194463373&big_mirror=0"

wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick.tar.gz

wget "http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1175740843&big_mirror=0"

wget http://pecl.php.net/get/imagick-3.1.0RC2.tgz

yum install ncurses-devel libxml2-devel bzip2-devel libcurl-devel

curl-devel libjpeg-devel libpng-devel freetype-devel net-snmp-devel -y

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/ (假定mysql已经安装。不加这个的话后面编译的时候可能会出错)

编译一些php需要用到的支持库

tar fzx libiconv-1.14.tar.gz

cd libiconv-1.14

./configure --prefix=/usr/local/

make && make install

cd ..

tar fzx libmcrypt-2.5.8.tar.gz

cd libmcrypt-2.5.8

./configure

make && make install

cd libltdl/

# pwd

/home/libmcrypt-2.5.8/libltdl

./configure --enable-ltdl-install

make && make install

cd ../../

tar zxvf mhash-0.9.9.9.tar.gz

cd mhash-0.9.9.9/

./configure

make

make install

cd ../


ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la

ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so

ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4

ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8

ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a

ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la

ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so

ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config


tar zxvf mcrypt-2.6.8.tar.gz

cd mcrypt-2.6.8/

/sbin/ldconfig

./configure

make

make install

cd ../

开始编译php

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc \

--with-mysql=/usr/local/mysql/ --with-mysqli=/usr/local/mysql/bin/mysql_config \

--with-pdo-mysql=/usr/local/mysql/ --with-iconv-dir=/usr/local --enable-fpm \

--disable-phar --with-fpm-user=nginx --with-fpm-group=nginx --with-pcre-regex \

--with-zlib --with-bz2 --enable-calendar --with-curl --enable-dba --with-libxml-dir --with-xmlrpc --enable-exif \

--enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir \

--enable-gd-native-ttf --enable-gd-jis-conv --with-mhash --enable-mbstring --with-mcrypt --with-openssl \

--enable-pcntl --enable-xml --disable-rpath --enable-shmop --enable-sockets --enable-zip \

--enable-bcmath --with-snmp --disable-ipv6


########################################

--enable-fastcgi启动fast-cgi "

---enable-fpm"是激活对FastCGI模式的fpm支持,

"--enable-discard-path" 打开这个选项,用户就不能透过浏览器读取类似.htaccess 的系统安全相关的文件。

"--enable-force-cgi-redirect" 若使用 CGI VERSION 模式来执行 PHP 的设,打开本选项会增加安全性。

例如用户读 http://my.host/cgi-bin/php/secret/doc.html

遇到比较了解 PHP 系统的黑客级用户可能会自已输入以下网址 http://my.host/secret/doc.html 来读取相关信息。

若 PHP 和 Apache 编译在一起,让 PHP 变成 Apache 的一部份,则不需要加入本选项。

--with-config-file-path在指定php主配置文件的路径

--with-mysql和--with-mysqli在指定你的mysql的位置和它的相关工具

--with-iconv-dir,--with-freetype-dir,-with-jpeg-dir,--with-png-dir,--withgd,--with-zlib,--with-libxml-dir

这些都是在启用对某种文件的支持

--with-curl和--with-curlwrappers是用于支持curl函数,此函数允许你用不同的协议连接和沟通不同的服务器

--with-openssl,--with-mhash,--with-mcrypt这都是和加密有关的参数,启用它们是为了让php可以更好的支持各种加密。

"--enable-bcmath" 高精度数学运算组件。

"--enable-shmop" 和 "--enable-sysvsem" 使得你的PHP系统可以处理相关的IPC函数 。IPC是一个Unix标准通讯机制,

它提供了使得在同一台主机不同进程之间可以互相通讯的方法。

"--enable-inline-optimization" 栈堆指针和优化线程。

"--enable-pcntl" 多线程优化。

make ZEND_EXTRA_LIBS='-liconv' 手工指定将iconv加到php额外库中,一般来说这些库的增加php可以自动完成,

只是iconv貌似不太合群,需要手工操作。



# make    // 如果报错“make: *** [sapi/cli/php] Error 1” 使用命令“make ZEND_EXTRA_LIBS='-liconv' ”进行编译

make ZEND_EXTRA_LIBS='-liconv‘

make test

make install

提供php主配置文件:

cp php.ini-production /usr/local/php/etc/php.ini

为php-fpm提供启动脚本,添加至服务列表并开机启动:

cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

chmod +x /etc/init.d/php-fpm

chkconfig --add php-fpm

chkconfig php-fpm on

启用fastcgi:

fastcgi比较重要,这里介绍一下:fastcgi是http server和动态脚本语言间通信的接口,nginx支持fastcgi;

同时fastcgi也被许多脚本语言支持,包括php。传统的cgi接口性能很差,每次http server遇到动态程序时,都需要重启脚本解释器来执行解析,

然后将结果返回给http server。fastcgi采用C/S架构,将http server和脚本解析器分开,同时在脚本解析器上启动一个或多个脚本解析守护进程,

当httt server遇到动态程序时,可以直接交付给fastcgi进程执行,然后将得到的结果返回给浏览器,

这样http server只处理静态请求或将动态服务器的结果返回给客户端,从而提高性能。

nginx通过fastcgi来调用php,而php-fpm是fastcgi的进程管理器。fastcgi的主要作用就是将动态语言和http server分离开来,

所以nginx和php/php-fpm经常配置在不同服务器上,各司其职,从而提高性能。


nginx通过fastcgi来调用php,而php-fpm是fastcgi的进程管理器。fastcgi的主要作用就是将动态语言和http server分离开来,

所以nginx和php/php-fpm经常配置在不同服务器上,各司其职,从而提高性能。

cd /usr/local/php/etc

cp php-fpm.conf.default php-fpm.conf

vi php-fpm.conf  //一般配置的依据如下

内存小于4G服务器(值可逐级递减):

修改如下参数:

pm=dynamic

pm.max_children=40

pm.start_servers=10

pm.min_spare_servers=10

pm.max_spare_servers=40

******************************

内存大于4G服务器(值可逐级递增):

修改如下参数:

pm=static

pm.max_children=100



编译安装php的一些扩展模块

tar zxvf memcache-*.tgz

cd memcache-*/

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make

make install

cd ../


tar xzvf libevent*

cd libevent*

./configure --prefix=/usr/local

make

make install

cd ..


tar xvzf memcached-*.gz

cd memcached-*

./configure --with-libevent=/usr/local --prefix=/usr/local/memcached

make

make install

cd ../


tar zxvf ImageMagick.tar.gz

cd ImageMagick-*/

./configure

make

make install

cd ../


tar zxvf imagick-*.tgz

cd imagick-*/

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make

make install

cd ../


安装php加速器(支持php5.4)

Accelerator加速引擎是基于mmcache开发的PHP加速优化软件。通过编译和缓存来增加PHP脚本的性能,

使得PHP脚本在编译的状态下降低服务器负载,对服务器的开销几乎完全消除。它还对脚本起优化作用,能加快其执行效率,

提高PHP应用执行速度最高达10倍。

unzip eaccelerator-0.9.6.1.zip

cd eaccelerator-0.9.6.1

/usr/local/php/bin/phpize

./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config

make && make install



vi /usr/local/php/etc/php.ini

增加这些:


extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/

extension = "memcache.so"

extension = "imagick.so"

修改这些:


cgi.fix_pathinfo=0


disable_functions = exec,system,phpinfo,eval,passthru,chroot,scandir,chgrp,chown,shell_exec,

proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,fsocket,fsockopen,openlog,syslog,

readlink,symlink,popepassthru,stream_socket_server(有关禁用函数的说明,参看上一篇日志:一些比较危险的php函数)



配置ngin支持php:

vim /usr/local/nginx/nginx.conf

location / {

root  html;

index index.html index.htm index.php;  //添加index.php

}

//启用下面的配置

location ~ \.php$ {

root      html;

fastcgi_pass  127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include    fastcgi_params;

}

启动php-fpm,重启nginx

service php-fpm start

kill -TERM 主进程号 或 kill -QUIT 主进程号

/usr/nginx/sbin/nginx -t 判断nginx的配置文件是否正确

nginx (nginx -c ...nginx.conf)

关于php的扩展模块后续...






0人推荐
随时随地看视频
慕课网APP