RedHat5.7+ice3.4.2+php5.2.17+nginx1.8.1环境配置

ICE的通讯结构:

ICE有分为提供服务的一方Server和寻求服务的一方Client,两台机子上都需要安装ICE组件,他们的通信结构如上图

Client端应该事先知道Server端能提供的服务是什么,有什么格式?这就是图中的Proxy Code,在Proxy Code中定义好了类和接口。Server端中接口定义的就是

Skeleton,具体实现接口的是Server Application,Server Application可以是C++,java,C#等写的,但是ICE不提供PHP写Server端。

ICE安装方式:

1.redhat5:(ice3.4.2) yum源安装

        01.download: cd /etc/yum.repos.d/ wget https://zeroc.com/download/Ice/3.4/rhel5/zeroc-ice.repo

                如果无法下载以上地址,可能使被墙了,试试:wget http://www.zeroc.com/download/Ice/3.4/rhel5/zeroc-ice.repo

                zeroc-ice.repo的内容为:

                            [zeroc-ice]

                            name=Ice 3.4 for RHEL $releasever - $basearch

                            baseurl=http://www.zeroc.com/download/Ice/3.4/rhel$releasever/$basearch

                            enabled=1

                            gpgcheck=1

                            gpgkey=http://www.zeroc.com/download/RPM-GPG-KEY-zeroc-release

        02.编辑zeroc-ice.repo:

                            [zeroc-ice]

                            name=Ice 3.4 for RHEL $releasever - $basearch

                            baseurl=http://www.zeroc.com/download/Ice/3.4/rhel5/$basearch

                            enabled=1

                            gpgcheck=1

                            gpgkey=http://www.zeroc.com/download/RPM-GPG-KEY-zeroc-release

        03.查看 yum list ice* db46* mcpp-devel 或 yum list ice* db48* mcpp-devel(官方)

        04.安装 yum install ice* db46* mcpp-devel 或 yum list ice* db48* mcpp-devel(官方)

        05.emacs /etc/php.d/ice.ini 内容:extension=IcePHP.so

        06.修改php.ini extension=IcePHP.so 并把IcePHP.so复制到extentsion_dir中

         注意:这种方法的IcePHP.so module是官方编译的,只能适合官方指定的php版本:这里是php5.1.6

 

2.redhat5:(ice3.4.2) 编译安装64位(注意我的是64位操作系统,32位安装没有什么特别的地方)

    附上官方安装说明:

This source distribution only supports building Ice for PHP as a dynamic PHP extension; the product of the build is a shared library

that you must configure PHP to load. Follow the steps below to build Ice for PHP:

1. Change to Ice for PHP source subdirectory.

> cd Ice-3.4.2/php

 

2. Edit config/Make.rules and review the build settings. For example, you may want to enable OPTIMIZE. If your PHP installation resides

                     in a non-standard location, modify the PHP_HOME setting to contain the installation directory. If you are using PHP 5.3 or later and

                    wish to use PHP namespaces, set USE_NAMESPACES=yes.

 

3. If you have not built Ice for C++ from the cpp subdirectory, then set the ICE_HOME environment variable to the directory containing

                     your Ice installation. For example, if Ice is installed in /opt/Ice-3.4.2, set ICE_HOME as follows: $ export ICE_HOME=/opt/Ice-3.4.2

If you installed Ice using RPMs, set ICE_HOME as shown below:

$ export ICE_HOME=/usr

3. Run make.

    说明:如果按照官方来安装是不可能安装成功的,从安装步骤编号1233就可以看出官方安装说明写得有多草率!

我的安装记录:

下载源码安装包Ice-3.4.2.tar.gz和第三方依赖包ThirdParty-Sources-3.4.2.tar.gz(官网有下载连接,这里就不贴了,一定要求去官网下载)

    先解压ThirdParty-Sources-3.4.2.tar.gz : tar –xvf ThirdParty-Sources-3.4.2.tar.gz

    Cd ThirdParty-Sources-3.4.2

        安装 mcpp-2.7.2:

        tar -xvf mcpp-2.7.2.tar.gz

        cd mcpp-2.7.2

        ./configure --prefix=/usr/local/ICE-3.4.2/mcpp-2.7.2/ CFLAGS=-fPIC --enable-mcpplib --disable-shared

        make

        make install

        ...On 64-bit platforms, after installation it is necessary to rename the

library installation directory from $(prefix)/lib to $(prefix>/lib64.(这句话是说把安装的mcpp目录中的lib目录名改成lib64,32位无需改动)

 

        安装Berkeley DB:

        tar -xvf db-4.8.30.NC.tar.gz

        cd db-4.8.30.NC/build_unix/

         ../dist/configure --prefix=/usr/local/ICE-3.4.2/BerkeleyDB.4.6/ --enable-cxx

        make

        make install

        ...On 64-bit platforms, after installation it is necessary to rename the

library installation directory from $(prefix)/lib to $(prefix>/lib64.(这里也要把lib—> lib64)

 

        安装bzip2:

        cd ../../

        tar -xvf bzip2-1.0.6.tar.gz

        cd bzip2-1.0.6

        //32位机器:Makefile PREFIX=/usr/local/ICE-3.4.2/bzip2-1.06

        //64位机器:make -f Makefile-libbz2_so

        make

        make install PREFIX=/usr/local/ICE-3.4.2/bzip2-1.06

        ...On 64-bit platforms, after installation it is necessary to rename the

library installation directory from $(prefix)/lib to $(prefix>/lib64. (这里也要把lib—> lib64)

 

        安装expat:

        cd ..

        tar -xvf expat-2.0.1.tar.gz

        cd expat-2.0.1

        ./configure --prefix=/usr/local/ICE-3.4.2/expat-2.0.1/

        make

        make install

        ...On 64-bit platforms, after installation it is necessary to rename the

library installation directory from $(prefix)/lib to $(prefix>/lib64. (这里也要把lib—> lib64)

 

        安装oppenssl:

        cd ..

        tar -xvf openssl-0.9.8r.tar.gz

        cd openssl-0.9.8r

        ./config --prefix=/usr/local/ICE-3.4.2/openssl

        make

        make install

        //好像不需要改成lib64,(这里我没改lib64就安装成功了,注意每次重新安装的时候记得先清理一下:make clean)

        redhat5.7在默认情况下会在usr/lib中搜索*.so,但在64位系统中*.so在usr/lib64和usr/local/lib64中,故要将包含对应xx.so文件拷贝到usr/lib中,更简单的做法是加入到LD_LIBRARY_PATH变量中,如下面/etc/profile的修改

安装Ice3.4.2

    tar -xvf Ice3.4.2.tar.gz

    cd Ice3.4.2/cpp

    emacs(or vim) conf/Make.rules  

    将刚刚安装的所有的第三方依赖包的路劲填入

        如: BZIP2_HOME              ?= /usr/local/ICE-3.4.2/bzip2-1.0.6

    填完后保存   make ; make install

    没有报错安装完成Ice3.4.2

 

    修改/etc/profile:在尾部加上

        export PHPPATH=/wdxy/ICE-3.4.2/Ice-3.4.2/php/:

        export ICE_HOME=/wdxy/ICE-3.4.2/Ice-3.4.2

        export PATH=$PATH:$ICE_HOME/bin

        export LD_LIBRARY_PATH=$ICE_HOME/lib64:/usr/local/ICE-3.4.2/expat-2.0.1/lib64:$LD_LIBRARY_PATH

        export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC ICE_HOME

 

 source /etc/profile

运行: icegridnode -v

3.4.2  (安装成功)

    编译生成动态库IcePHP.so

        cd ../php

        emacs config/Make.rule.php四处:

            prefix ?= /wdxy/ICE-3.3.0/Ice-$(VERSION)

            embedded_runpath_prefix ?= /wdxy/ICE-3.3.0/Ice-$(VERSION_MAJOR).$(VERSION_MINOR)

            PHP_HOME ?= /home/ap/php5.2 //注意是PHP_HOME目录,不是bin/php 或php执行文件的路径(我在这里坑了半天,报unkown php version ) 后面会附上php5.2.17 php-fpm的安装

            LP64 := yes

        make

        make install

        将会在/wdxy/ICE-3.3.0/Ice-$(VERSION)目录下生成php文件夹,内有IcePHP.so文件,拷贝到对应php的extension_dir下

            php -i | grep extension_dir 查看extension_dir

 

    修改php.ini文件:

        [Ice]

        include_path = "/home/ap/php5.2/lib/php:/wdxy/ICE-3.4.2/Ice-3.4.2/php"

        extension=IcePHP.so

 

    php -m 可以看到ice模块的存在表示安装成功

    Icephp安装配置完成

 

 

Nginx + php5.2.17 + php-fpm的安装(php-fpm在php5.3以后才是php的内置模块)

http://us.php.net/distributions/php-5.2.17.tar.gz
http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
http://nginx.org/download/nginx-1.8.1.tar.gz

 

tar -xvzf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | sudo patch -d php-5.2.17 -p1
cd php-5.2.17

./configure --prefix=/home/ap/php5.2 -enable-fastcgi -with-config-file-path=/home/ap/php5.2/etc -with-openssl -enable-fpm -enable-mbstring -with-freetype-dir -with-jpeg-dir -with-png-dir -with-zlib-dir -with-libxml-dir -enable-xml -with-mhash -enable-pcntl -enable-sockets -with-bz2 -with-curl -with-curlwrappers -enable-mbregex -with-gd -enable-gd-native-ttf -enable-zip -enable-soap -with-iconv -enable-bcmath -enable-shmop -enable-sysvsem -enable-inline-optimization -with-ldap -with-ldap-sasl -enable-pdo

注:这里我没有安装mysql模块,你可以选择的加上mysql模块

 

可能用到的依赖:

yum install openldap openldap-devel -y

cp -frp /usr/lib64/libldap* /usr/lib/

yum install libmcrypt libmcrypt-devel

yum install mhash-devel

 

make

make install

安装php成功

    查看php.ini的路径 php –i | grep php.ini

    从源码中拷贝一份到对应的目录中

 

cp sapi/cgi/fpm/php-fpm /etc/init.d/
chmod +x /etc/init.d/php-fpm

cp /usr/src/php-5.2.17/php.ini-recommended /usr/local/lib/php.ini
mkdir /etc/php/
ln -s /usr/local/lib/php.ini /etc/php/php.ini
ln -s /usr/local/etc/php-fpm.conf /etc/php/php-fpm.conf

 

安装php5.2 + php-pmp成功

 

 

/etc/init.d/php-fpm5.2.17 start

/etc/init.d/php0fpmt.3.17 stop

ps -ef|grep php

 

 

安装nginx

 

tar -xvf nginx-1.8.1.tar.gz

cd nginx-1.8.1

./configure --prefix=/wdxy/nginx --user=nobody --group=nobody --with-http_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_stub_status_module --with-pcre

 

yum install pcre

yum install pcre-devel

 

cd sbin

./ngix启动

./nginx -s reload重新加载

ps -ef|grep nginx

 

最后附上nginx.conf:

 

 

#user nobody;

#worker_processes 1;

worker_processes 4;

 

#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;

}

 

 

http {

include mime.types;

default_type application/octet-stream;

 

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

# '$status $body_bytes_sent "$http_referer" '

# '"$http_user_agent" "$http_x_forwarded_for"';

 

#access_log logs/access.log main;

 

sendfile on;

#tcp_nopush on;

 

#keepalive_timeout 0;

keepalive_timeout 65;

 

#gzip on;

 

server {

        #listen 80

listen 8054 default backlog=1024;

server_name localhost;

        #server_name webim.whwdxy.com;

 

#charset koi8-r;

 

#access_log logs/host.access.log main;

 

location / {

root html;

index index.html index.htm index.php index.jsp;

}

 

#error_page 404 /404.html;

 

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

            #root html/webim.whwdxy.com;

}

 

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

#location ~ \.php$ {

# proxy_pass http://127.0.0.1;

#}

 

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

#location ~ \.php$ {

# root html;

# fastcgi_pass 127.0.0.1:9000;

# fastcgi_index index.php;

# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

# include fastcgi_params;

#}

        

        location ~ \.php(.*)$ {

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param PATH_INFO $fastcgi_path_info;

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;

include fastcgi_params;

            # add 7 line

            fastcgi_read_timeout 300;

            fastcgi_buffers 8 128k;

            fastcgi_connect_timeout 300;

            fastcgi_send_timeout 300;

            fastcgi_buffer_size 64k;

            fastcgi_busy_buffers_size 128k;

            fastcgi_temp_file_write_size 128k;

}

          

# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

#location ~ /\.ht {

# deny all;

#}

}

 

 

# another virtual host using mix of IP-, name-, and port-based configuration

#

#server {

# listen 8000;

# listen somename:8080;

# server_name somename alias another.alias;

 

# location / {

# root html;

# index index.html index.htm;

# }

#}

 

 

# HTTPS server

#

#server {

# listen 443 ssl;

# server_name localhost;

 

# ssl_certificate cert.pem;

# ssl_certificate_key cert.key;

 

# ssl_session_cache shared:SSL:1m;

# ssl_session_timeout 5m;

 

# ssl_ciphers HIGH:!aNULL:!MD5;

# ssl_prefer_server_ciphers on;

 

# location / {

# root html;

# index index.html index.htm;

# }

#}

    

}

 

 

php-fpm.conf:

 

<?xml version="1.0" ?>

<configuration>

 

    All relative paths in this config are relative to php's install prefix

 

    <section name="global_options">

 

        Pid file

        <value name="pid_file">/home/ap/php5.2/logs/php-fpm.pid</value>

 

        Error log file

        <value name="error_log">/home/ap/php5.2/logs/php-fpm.log</value>

 

        Log level

        <value name="log_level">notice</value>

 

        When this amount of php processes exited with SIGSEGV or SIGBUS ...

        <value name="emergency_restart_threshold">10</value>

 

        ... in a less than this interval of time, a graceful restart will be initiated.

        Useful to work around accidental curruptions in accelerator's shared memory.

        <value name="emergency_restart_interval">1m</value>

 

        Time limit on waiting child's reaction on signals from master

        <value name="process_control_timeout">5s</value>

 

        Set to 'no' to debug fpm

        <value name="daemonize">yes</value>

 

    </section>

 

    <workers>

 

        <section name="pool">

 

            Name of pool. Used in logs and stats.

            <value name="name">default</value>

 

            Address to accept fastcgi requests on.

            Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'

            <value name="listen_address">127.0.0.1:9000</value>

 

            <value name="listen_options">

 

                Set listen(2) backlog

                <!-- <value name="backlog">-1</value> -->

                <value name="backlog">1024</value>

 

                Set permissions for unix socket, if one used.

                In Linux read/write permissions must be set in order to allow connections from web server.

                Many BSD-derrived systems allow connections regardless of permissions.

                <value name="owner"></value>

                <value name="group"></value>

                <value name="mode">0666</value>

            </value>

 

            Additional php.ini defines, specific to this pool of workers.

            <value name="php_defines">

        <!--        <value name="sendmail_path">/usr/sbin/sendmail -t -i</value>        -->

        <!--        <value name="display_errors">0</value>                                -->

            </value>

 

            Unix user of processes

            <value name="user">nobody</value>            

 

            Unix group of processes

            <value name="group">nobody</value>

 

            Process manager settings

            <value name="pm">

 

                Sets style of controling worker process count.

                Valid values are 'static' and 'apache-like'

                <value name="style">static</value>

 

                Sets the limit on the number of simultaneous requests that will be served.

                Equivalent to Apache MaxClients directive.

                Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi

                Used with any pm_style.

                <value name="max_children">500</value>

 

                Settings group for 'apache-like' pm style

                <value name="apache_like">

 

                    Sets the number of server processes created on startup.

                    Used only when 'apache-like' pm_style is selected

                    <value name="StartServers">20</value>

 

                    Sets the desired minimum number of idle server processes.

                    Used only when 'apache-like' pm_style is selected

                    <value name="MinSpareServers">5</value>

 

                    Sets the desired maximum number of idle server processes.

                    Used only when 'apache-like' pm_style is selected

                    <value name="MaxSpareServers">35</value>

 

                </value>

 

            </value>

 

            The timeout (in seconds) for serving a single request after which the worker process will be terminated

            Should be used when 'max_execution_time' ini option does not stop script execution for some reason

            '0s' means 'off'

            <value name="request_terminate_timeout">0s</value>

 

            The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file

            '0s' means 'off'

            <value name="request_slowlog_timeout">0s</value>

 

            The log file for slow requests

            <value name="slowlog">logs/slow.log</value>

 

            Set open file desc rlimit

            <value name="rlimit_files">1024</value>

 

            Set max core size rlimit

            <value name="rlimit_core">0</value>

 

            Chroot to this directory at the start, absolute path

            <value name="chroot"></value>

 

            Chdir to this directory at the start, absolute path

            <value name="chdir"></value>

 

            Redirect workers' stdout and stderr into main error log.

            If not set, they will be redirected to /dev/null, according to FastCGI specs

            <value name="catch_workers_output">yes</value>

 

            How much requests each process should execute before respawn.

            Useful to work around memory leaks in 3rd party libraries.

            For endless request processing please specify 0

            Equivalent to PHP_FCGI_MAX_REQUESTS

            <value name="max_requests">1500</value>

 

            Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.

            Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)

            Makes sense only with AF_INET listening socket.

            <value name="allowed_clients">127.0.0.1</value>

 

            Pass environment variables like LD_LIBRARY_PATH

            All $VARIABLEs are taken from current environment

            <value name="environment">

                <value name="HOSTNAME">$HOSTNAME</value>

                <value name="PATH">/usr/local/bin:/usr/bin:/bin</value>

                <value name="TMP">/tmp</value>

                <value name="TMPDIR">/tmp</value>

                <value name="TEMP">/tmp</value>

                <value name="OSTYPE">$OSTYPE</value>

                <value name="MACHTYPE">$MACHTYPE</value>

                <value name="MALLOC_CHECK_">2</value>

            </value>

 

        </section>

 

    </workers>

 

</configuration>

 

 

上面两个配置文件仅供参考。Nginx可以同时配置多版本的php同时运行,满足不同项目的需求:可参考http://blog.csdn.net/21aspnet/article/details/47658127

耗费了我两天时间,呼呼

posted @ 2016-02-20 23:53  livend  阅读(615)  评论(0编辑  收藏  举报