CentOS编译安装PHP开发环境


最近在安装服务器开发环境,踩了不少坑,这里总结下来. yum安装虽然简单,却不灵活,版本也比较老旧不合符设计中的选型,因此只使用yum安装一些依赖库,目标软件采用编译安装.

目录

  • 安装PHP
  • 安装PHP扩展
  • 安装Phalcon框架
  • 安装MySQL
  • 安装MongoDB
  • 安装Redis

安装PHP

yum安装依赖库

yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zlib libxml2-devel ncurses-devel bison \
 libtool-ltdl-devel libiconv libmcrypt mhash mcrypt pcre-devel openssl-devel freetype-devel libcurl-devel

安装PHP7.0.9

#先下载PHP
cd /tmp
wget http://cn2.PHP.net/distributions/PHP-7.0.9.tar.gz
tar -zxvf PHP-7.0.9.tar.gz
cd PHP-7.0.9.tar.gz

#我们先配置下PHP的编译参数
./configure --prefix=/usr/local/PHP \ 
--with-MysqL \ 
--with-MysqLi \ 
--with-pdo_MysqL \ 
--with-iconv-dir \ 
--with-zlib \
--with-libxml-dir \
--enable-xml \
--with-curl \
--enable-fpm \
--enable-mbstring \
--with-gd \
--with-openssl \
--with-mhash \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-freetype-dir=/usr/lib64

#编译 
make
make install clean

#复制PHP.ini
cp PHP.ini-development /usr/local/PHP/lib/PHP.ini
cp /usr/local/PHP/etc/PHP-fpm.conf.default /usr/local/PHP/etc/PHP-fpm.conf

#运行PHP-fpm
/usr/local/PHP/sbin/PHP-fpm

#将PHP命令加入到全局
vi /root/.bash_profile 

#将/usr/local/PHP/bin 加到后面,用:隔开
PATH=$PATH:$HOME/bin:/usr/local/MysqL/bin:/usr/local/MysqL/lib:/usr/local/PHP/bin

#重启
source /root/.bash_profile

PHP-fpm的启动脚本

PHP7安装包里自带了启动脚本:

cp /tmp/PHP-7.0.9/sapi/fpm/init.d.PHP-fpm /etc/init.d/PHP-fpm
cd /etc/init.d
chmod +x PHP-fpm

然后就可以启动,停止重启等操作了:

service PHP-fpm restart

安装PHP扩展

PHP扩展的安装都是利用PHPize,这里用redis举例

下载扩展

http://pecl.PHP.net

安装

tar -zxvf redis-3.0.1.tgz  
cd redis-3.0.1  
PHPize   
./configure --with-PHP-config=/usr/local/PHP/bin/PHP-config   
make && make install

修改PHP.ini

extension=redis.so

重启PHP-fpm

kill `cat /var/run/PHP-fpm.pid ` && /usr/local/PHP/sbin/PHP-fpm

安装Phalcon框架

phalcon作为PHP的扩展存在,理应可以使用PHPize安装的,但是试过几次,依赖的小编比较难搞,还是使用官方给出的安装器:

编译安装

git clone git://github.com/phalcon/cphalcon.git
cd cphalcon/build
sudo ./install

其中遇到gcc报错,是因为虚拟机内存太小,后来加了一个swap分区解决了.

修改PHP.ini

extension=phalcon.so

安装Nginx

安装Nginx的依赖包

Nginx 依赖于 zlib pcre ssl 三个模块,安装之前要先安装它们

cd /lamp 
wget http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.7.tar.gz
cd zlib-1.2.7
./configure
make
make install 

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.gz
tar -zxvf pcre-8.21.tar.gz
cd pcre-8.21
./configure
make
make install 

wget http://www.openssl.org/source/openssl-1.0.2.tar.gz
tar zxvf openssl-1.0.2.tar.gz
cd openssl-1.0.2.tar.gz
./config  # 注意是config,不是configure
make
make install

安装Nginx

# 下载
wget http://Nginx.org/download/Nginx-1.11.3.tar.gz
tar -zxvf Nginx-1.11.3.tar.gz
cd Nginx-1.11.3.tar.gz

# 编译
# 这3个扩展的目录是他们的源代码目录,不是安装目录,这点很容易搞错
./configure --prefix=/usr/local/Nginx \
--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=/lamp/pcre-8.32 \
--with-zlib=/lamp/zlib-1.2.7 \
--with-openssl=/lamp/openssl-1.0.2
make && make install

#启动
/usr/local/Nginx/Nginx

#查看端口
netstat -tnl|grep 8080

#访问
curl http://localhost:8080

开机自启动

开机启动的配置文件是:/etc/rc.local ,vi加入 /usr/local/Nginx/Nginx 即可

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/usr/local/apache/bin/apachectl start
/usr/local/bin/redis-server /etc/redis.conf
/usr/local/PHP/sbin/PHP-fpm
/usr/local/Nginx/Nginx

开启Nginx的iptables限制

我们在本地访问127.0.0.1:8080/index.PHP,是可以打开的。 但是如果,在另外一台机子上访问:http://192.168.155.128:8080/index.PHP 不能访问,可能是这个8080端口号没有加入到iptables的白名单,所以需要加一下:

(PS: 如果你的Nginx端口号是80,应该是已经在iptables白名单中了,如果能访问就不需要加了)

iptables的配置文件在这:/etc/sysconfig/iptables

我们vi 打开下,然后在倒数第二行上面加入:-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT然后,重启下 iptables

service iptables restart

安装MysqL

cd /tmp
#先下载MysqL 
http://dev.MysqL.com/Downloads/MysqL/MysqL-5.7.14.tar.gz
tar zxvf MysqL-5.7.14.tar.gz
cd MysqL-5.7.14

#cmake配置下
cmake \ 
-DCMAKE_INSTALL_PREFIX=/usr/local/MysqL \  #安装目录
-DMysqL_DATADIR=/usr/local/MysqL/data \    #数据库存放目录
-DDEFAULT_CHARSET=utf8 \                   #使用utf8字符
-DDEFAULT_COLLATION=utf8_general_ci \      #校验字符
-DEXTRA_CHARSETS=all \                     #安装所有扩展字符集
-DENABLED_LOCAL_INFILE=1                   #允许从本地导入数据

#编译安装
make && make install

#创建MysqL用户和用户组
groupadd MysqL
useradd -r -g MysqL MysqL

#给MysqL目录设置目录权限
chown -R MysqL:MysqL /usr/local/MysqL

#将MysqL的启动服务添加到系统服务中
cd /usr/local/MysqL/
cp support-files/my-default.cnf /etc/my.cnf

#创建系统数据库的表
cd scripts/
./MysqL_install_db --user=MysqL --basedir=/usr/local/MysqL --datadir=/usr/local/MysqL/data/

#复制MysqL管理脚本到系统服务目录
cd /opt/MysqL/support-files
cp MysqL.server /etc/rc.d/init.d/MysqL

#添加MySQL命令到系统服务命令
chkconfig --add MysqL

#加入开机启动策略
chkconfig MysqL on
service MysqL start

#以后就可以调用service 命令来管理MysqL
service MysqL start
service MysqL stop
service MysqL restart

#将MySQL命令加入全局可用
vi /root/.bash_profile
#在PATH=$PATH:$HOME/bin添加参数为:
PATH=$PATH:$HOME/bin:/usr/local/MysqL/bin:/usr/local/MysqL/lib
#重新生效
source /root/.bash_profile

#修改root密码
MysqL -u root MysqL
MysqL>use MysqL;
MysqL>desc user;
MysqL> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";  //为root添加远程连接的能力。
MysqL>update user set Password = password('12346') where User='root';
MysqL>select Host,User,Password  from user where User='root'; 
MysqL>flush privileges;
MysqL>exit
#重新登录:
MysqL -uroot -p123456

安装MongoDB

下载解压

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.4.tgz
tar -zxvf mongodb-linux-x86_64-2.6.4.tgz -C /usr/src
cd mongodb-linux-x86_64-2.6.4

创建数据库和日志的目录

mkdir log
mkdir db

以后台方式启动

./bin/mongod --dbpath=./db --logpath=./log/mongodb.log --fork --auth

设置开机启动

echo "/usr/src/mongodb-linux-x86_64-2.6.4/bin/mongod --dbpath=/usr/src/mongodb-linux-x86_64-2.6.4/db --logpath=/usr/src/mongodb-linux-x86_64-2.6.4/log/mongodb.log --fork --auth" >> /etc/rc.local

查看端口

netstat -nalupt | grep mongo

安装Redis

安装

#下载解压
wget http://download.redis.io/releases/redis-3.0.3.tar.gz
tar xzf redis-3.0.3.tar.gz
cd redis-3.0.3

#编译
make
make install

修改redis.conf

daemonize yes
loglevel notice
logfile /var/log/redis.log
dir ./

设置系统的overcommit_memory,vi /etc/sysctl.conf

vm.overcommit_memory = 1

执行:

sysctl vm.overcommit_memory=1

添加启动脚本

#!/bin/sh
#
# redis Startup script for Redis Server
#
# chkconfig: - 90 10
# description: Redis is an open source,advanced key-value store. 
#
# processname: redis-server
# config: /etc/redis.conf
# pidfile: /var/run/redis.pid
 
REdisPORT=6379
EXEC=/usr/local/bin/redis-server
REdis_CLI=/usr/local/bin/redis-cli
 
PIDFILE=/var/run/redis.pid
CONF="/usr/src/redis-3.0.3/redis.conf"
 
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists,process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ] 
        then 
              echo "Redis is running..."
        fi 
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist,process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $REdis_CLI -p $REdisPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac
chmod +x /etc/init.d/redis
chkconfig --add redis
# 加入开机启动
chkconfig redis on

CentOS编译安装PHP开发环境的更多相关文章

  1. ios – 如何使用Objective C类中的多个参数调用Swift函数?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  2. ios – Swift 4添加手势:覆盖vs @objc

    我想在我的视图中添加一个手势,如下所示:但是,在Swift4中,我的编译器给出了以下错误:建议添加@objc以将此实例方法公开给Objective-C.实现此目的的另一个选项将覆盖touchesBegan()函数并使用它来处理点击.我试图以“Swift”的方式做到这一点,而不必带入Obj-C.有没有纯粹的Swift方式来添加这个轻击手势而不使用@objc?

  3. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  4. ios – 以编程方式在Swift中添加联系人

    我想在Swift中以编程方式添加联系人.我发现了一些Objective-C示例,但我没有让它们工作,甚至在Objective-C中也没有.我不希望这涉及到AddressBookUI,因为我想从我自己的UI中获取值.解决方法这是在Swift中添加联系人的快速方法.我在我的iPhone5iOS7.1上验证了它,因为我发现模拟器并不总是与我的手机对AB的东西相同.您可以添加一个按钮并指向此方法:顺便说一下–它假设你已经分配了一个地址簿var,你可以通过覆盖viewDidAppear来打开视图.它也会执行安全提示

  5. ios – 为目标c中的方法传递未知类型的参数,可能吗?

    是否可以将未知类型的参数传递给objective-C方法?在C#中你可以写实现这一点,但我知道Objective-C没有泛型,所以有没有其他方法可以在Objective-C中实现这一点?我需要这个,因为我想创建一个方法来改变不同对象的文本颜色,如UITextField和UIButton的占位符文本.所以我的计划是创建一个名为textWhite的方法,然后在此方法中检查对象的类型,然后运行匹配的代码以使文本颜色变为白色.解决方法是的,可以传递未知类型的参数.见下面的例子.请参考使用id对象的链接作为参数Us

  6. ios – Swift指针算术和解除引用;将一些类似C的地图代码转换为Swift

    我有一点似乎没有工作的Swift代码……解决方法您正在指定locationPointer指向新位置,但仍在下一行中使用ptr,并且ptr的值尚未更改.将您的最后一行更改为:或者你可以改变指向var的指针并推进它:

  7. ios – “禁用模块时使用’@import’”错误 – 启用模块和链接框架= YES

    我有一个使用CocoaPods并使用’SCLAlertView-Objective-C’窗格的项目.该pod使用@importUIKit;模块样式导入.我在目标和项目设置中将“启用模块(C&Objective-C)”和“自动链接框架”设置为YES.当模块被禁用时,我仍然得到“使用’@import’错误.有没有什么可以阻止Xcode能够启用模块,如使用.pch文件,任何链接器标志,或者我没有提到的任

  8. XCode 6.3立即在抛出的Objective-C异常上引发SIGABRT

    考虑以下目标-C代码在XCode6.2中,它按预期工作(记录“错误消息”).但是,由于我们升级到6.3,抛出行(throwstd::logic_error…)引发SIGABRT(堆栈跟踪仅包含_cxa_throw和_pthread_kill,超出applicationdidFinishLaunchingWithOptions)并导致应用程序崩溃.这只发生在我们的应用程序中–当我将完全相同的代码复制

  9. ios – 在swift框架中使用Bridging Headers时失败

    我正在做一个快速的框架,我想使用旧的目标c类.为此,我使用桥接头方法但是当我尝试构建时出现此错误:我将我的{PROJECT}-Bridging-Header.h添加到Swift编译器中的Objective-C桥接头–代码生成我怎么解决它?

  10. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部