博客列表 >centos7源码编译安装lamp

centos7源码编译安装lamp

会飞的码蚁的博客
会飞的码蚁的博客原创
2018年10月16日 10:47:451937浏览

环境:LAMP(centos7.4,Apache2.4.25,MySQL5.7,PHP5.6)


经过多日的探索,经过多次的尝试,经过不懈的努力


通过各种的抓瞎,通过各样的报错,通过N次的重装


终于!成功了!!!

这篇文章有些乱,请看整理后的,点这里


centso7源码安装apache,centso7源码安装httpd,centso7源码安装php,centso7源码安装mysql,centso7源码安装lamp


环境:LAMP(centos7.4,Apache2.4.25,MySQL5.7,PHP5.6)


经过多日的探索,经过多次的尝试,经过不懈的努力


通过各种的抓瞎,通过各样的报错,通过N次的重装


终于!成功了!!!


----------------- 编译安装httpd ----------------------

1、前期准备 需要下载的东西

下载httpd-2.4.25   apr-1.5.2  apr-util-1.5.4  pcre-8.40(如果该版本没有,就到下面链接里去找别的版本,也可以下载下来再上传至服务器)

wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.35.tar.gz

wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.6.5.tar.gz

wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.gz

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


2、查询是否安装了Apache服务器httpd

# rpm -qa|grep httpd

卸载系统自动装的Apache服务器httpd

# httpd -k stop     #停止httpd服务器

# yum remove httpd    #卸载httpd服务器


3、检查系统是否安装了GCC

# gcc

bash: gcc: 未找到命令...      #出现未找到命令提示,说明没有安装GCC(最好使用别的命令进行检查,排除安装低版本的gcc的可能)


4、安装GCC 和 gcc-c++

# yum -y install gcc

# yum -y install gcc-c++ [注意:如果没有安装gcc-c++,那么在 执行./configure  -prefix=/usr/local/pcre 时会报 configure: error: You need a C++ compiler for C++ support. 错误]


5、编译安装apr

# tar -zxvf apr-1.5.2.tar.gz

# cd apr-1.5.2

# ./configure -prefix=/usr/local/apr(指定apr的安装目录为/usr/local/apr 配置)

# make && make install


安装apr出现的问题

# tar -zxvf apr-1.6.5.tar.gz

# cd apr-1.6.5

# ./configure --prefix=/usr/local/apr/(配置安装目录)

# make && make install(在指定地址生成目录和文件)


6、编译安装apr-util

# tar -zxvf  apr-util-1.6.1.tar.gz

# cd apr-util-1.6.1

# ./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr/(./configure --prefix=/usr/local/apr-util/ 直接这样会报错的)

# make && make install(在指定地址生成目录和文件)


安装apr-util出现的问题

安装失败 : "apr_xml.c:35:19: fatal error: expat.h: No such file or directory"

解决办法:yum install expat-devel (一般这类错误都是缺少依赖,问题是怎么找出来。)

*** PS: 对于此错误,一般习惯性先去更新一下yum仓库:#yum -y update 

*** 再次运行安装,发现错误依旧,看来这种猜包名的方法不适用;所以接下来可以通过yum的查找参数来列出expat-devel相关的包名:

*** yum search expat-devel

*** yum -y install expat-devel



7、编译安装httpd

# tar -zxvf httpd-2.4.25.tar.gz

# ./configure --prefix=/usr/local/apache --sysconf=/etc/httpd --enable-so --enable-cgi --enable-ssl --enable-rewrite --with-ssl=/usr/local/openssl --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-ssl=/usr/local/openssl --enable-modules=most --enable-mpms-shared=all --with-mpm=event

// 还会出现下面的错误    原因是:还是缺少环境 PCRE

[checking for pcre-config... false

configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/]

# tar -zxvf pcre-8.39.tar.gz

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

# make && make install

继续安装Apache

# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-cgi --enable-ssl --enable-rewrite --with-ssl=/usr/local/openssl --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-ssl=/usr/local/openssl --enable-modules=most --enable-mpms-shared=all --with-mpm=event


// 编译httpd出现configure: error: ... Error, zlib was missing or unusable 的问题

使用:# yum install zlib-devel


重新编译httpd

出现问题:checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures

使用:# yum install openssl-devel

重新编译httpd,成功!!!(如有再次报错,就按照报错信息进行操作)

使用:# make && make install  在指定地址生成目录和文件


8、测试 Apache

centos7使用systemctl代替chkconfig管理服务,防火墙也由iptables更换成了firewalld

首先用systemctl关闭防火墙:

# systemctl stop firewalld.service

# systemctl disable firewalld.service

开启 Apache 服务

# /usr/local/apache/bin/apachectl start


在***端浏览器输入自己的 IP 地址,看看能够成功访问 Apache

成功显示 It Works!就代表 服务器已成功启动~\(≧▽≦)/~啦啦啦

【PS:项目放在:/usr/local/apache/htdocs/ 下,配置文件在/etc/httpd/ 下】



-------------------- 配置https协议 ---------------

[这里提示一下,如果使用的xsell工具就安装一个上传工具:yum install  lrzsz -y,命令( # rz ),如果覆盖原文件( # rz -y )]

1、申请证书

我使用的是阿里云免费的证书


( 1 ) 在Apache的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为1535603823155.key;

( 2 ) 打开 Apache 安装目录下 conf 目录中的 httpd.conf 文件,找到以下内容并去掉“#”:

# LoadModule ssl_module modules/mod_ssl.so (如果找不到请确认是否编译过 openssl 插件)

# Include conf/extra/httpd-ssl.conf

( 3 ) 打开 Apache 安装目录下 conf/extra/httpd-ssl.conf 文件 (也可能是conf.d/ssl.conf,与操作系统及安装方式有关), 在配置文件中查找以下配置语句:

# 添加 SSL 协议支持协议,去掉不安全的协议

SSLProtocol all -SSLv2 -SSLv3

# 修改加密套件如下

SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM

SSLHonorCipherOrder on

# 证书公钥配置

SSLCertificateFile cert/public.pem

# 证书私钥配置

SSLCertificateKeyFile cert/1535603823155.key

# 证书链配置,如果该属性开头有 '#'字符,请删除掉

SSLCertificateChainFile cert/chain.pem

( 4 ) 重启 Apache。

报错:AH00526: Syntax error on line 94 of /etc/httpd/extra/httpd-ssl.conf:

SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

解决方案:

需要shmcb支持(俺也不清楚是个啥,总之是要支持就对了),于是,翻开httpd.conf,找到如下一行

# LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

把前面的#去掉,重启Apache,OK了

( 5 ) 通过 https 方式访问您的站点,测试站点证书的安装配置

配置完成!!!啦啦啦!(~ ̄▽ ̄)~



------------------编译安装 PHP ------------------

1、准备工作,下载php源码包

# wget http://cn2.php.net/distributions/php-5.6.30.tar.gz

# tar -zxvf php-5.6.30.tar.gz

# cd php-5.6.3


**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**

*注意:第一个编译是个坑,亲测,第二个也是坑,都没有mysql扩展,正确的请往下面找 *

* 区别是第一个少了一个 ( --with-apxs2=/usr/local/apache/bin/apxs ) *

* 路径:/usr/local/apache/ 是我安装Apache的路径 *

**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**


# ./configure  --prefix=/usr/local/php  --with-config-file-path=/usr/local/php/etc  --with-png-dir=/usr/local/libpng  --with-jpeg-dir=/usr/local/jpeg  --with-freetype-dir=/usr/local/freetype  --with-zlib-dir=/usr/local/zlib  --with-mcrypt=/usr/local/libmcrypt  --with-libxml-dir=/usr/local/libxml2/  --with-iconv-dir=/usr/local/libiconv  --enable-libxml  --enable-xml  --enable-bcmath  --enable-shmop  --enable-sysvsem  --enable-inline-optimization  --enable-opcache  --enable-mbregex  --enable-fpm  --enable-mbstring=all  --enable-gd-native-ttf  --with-openssl  --enable-pcntl  --enable-sockets  --with-xmlrpc  --enable-zip  --enable-soap  --without-pear  --with-gettext  --enable-session  --with-curl  --enable-ctype  --enable-shared  --with-gd


# ./configure  --prefix=/usr/local/php  --with-config-file-path=/usr/local/php/etc  --with-apxs2=/usr/local/apache/bin/apxs  --with-png-dir=/usr/local/libpng  --with-jpeg-dir=/usr/local/jpeg  --with-freetype-dir=/usr/local/freetype  --with-zlib-dir=/usr/local/zlib  --with-mcrypt=/usr/local/libmcrypt  --with-libxml-dir=/usr/local/libxml2/  --with-iconv-dir=/usr/local/libiconv  --enable-libxml  --enable-xml  --enable-bcmath  --enable-shmop  --enable-sysvsem  --enable-inline-optimization  --enable-opcache  --enable-mbregex  --enable-fpm  --enable-mbstring=all  --enable-gd-native-ttf  --with-openssl  --enable-pcntl  --enable-sockets  --with-xmlrpc  --enable-zip  --enable-soap  --without-pear  --with-gettext  --enable-session  --with-curl  --enable-ctype  --enable-shared  --with-gd


报错:[error: xml2-config not found. Please check your libxml2 installation.]

注意:开始我以为是我没有安装 libxml2 插件,但是我 yum install libxml2 后,发现我已经安装了

再次编译PHP,还是报这个错,发现是 libxml2-devel 没有安装,然后

# yum install libxml2-devel -y

# find / -name "xml2-config"(显示 /usr/bin/xml2-config 表示安装成功)

好了,继续编译PHP

报错:[error: Please reinstall the libcurl distribution -

easy.h should be in <curl-dir>/include/curl/]

这是缺少 libcurl 插件,那就继续安装

# yum -y install curl-devel

继续编译 (-"-怒)

报错:[If configure fails try --with-vpx-dir=<DIR>

configure: error: jpeglib.h not found.]

这是GD库未安装,我们继续安装GD库

# yum install libjpeg libpng freetype libjpeg-devel libpng-devel freetype-devel -y

不要着急,要什么就给他装什么,继续编译走起

报错:[error: mcrypt.h not found. Please reinstall libmcrypt.]

缺失插件 libmcrypt,centos尝试用yum安装libmcrypt不成功,只能采用编译安装:

(注意:要先切换出php编译目录)

# wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz

# tar -zxvf libmcrypt-2.5.7.tar.gz

# cd libmcrypt-2.5.7

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

# make && make install

返回PHP编译目录,继续编译,我这边编译成功!!!ヾ(✿゚▽゚)ノ

完成最后一步

# make && make install


【配置服务】

#配置文件

# cp php.ini-development /usr/local/php/etc/php.ini

 

php-fpm 服务

# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

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

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

 

# chkconfig --add php-fpm

# chkconfig on php-fpm

# service php-fpm start (启动 fpm 服务)

查看 fpm 端口

# netstat -ntlp | grep 9000

如需结束php-tpm进程:

# killall php-fpm


添加PHP环境变量,PATH末尾加 : 添加上php的bin目录,sbin目录(php-fpm)

# vim /etc/profile

在文件最后添加上这两行,保存退出

PATH=$PATH:/usr/local/php/bin:/usr/local/php/sbin

export PATH

添加Apache环境变量,末尾加 : 添加上Apache的bin目录

PATH=$PATH:/usr/local/php/bin:/usr/local/php/sbin:/usr/local/apache/bin

export PATH

执行刚才修改的文件

# source /etc/profile

可以通过如下命令查看所有的环境变量信息

# echo $PATH


**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**

注意:此时我发现,/usr/local/apache/modules 中缺少libphp5.so文件,

查过资料,最后定位为编译PHP时没有 --with-apxs2=/usr/local/apache/bin/apxs ,在上面有写注意

所以要重新编译PHP,然后再make && make install,

这时候有出现一个报错:(collect2: error: ld returned 1 exit status make: *** [sapi/cli/php] Error 1),

我试着使用(没解决)

# vim Makefile

大约77行左右的地方: EXTRA_LIBS = ..... -lcrypt 在最后加上 -liconv(ps:反正我还是报错)

我又重新编译一次后,使用

# make clean (清除编译结果)

# make

# make install (成功!!!)

**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**


编辑httpd.conf,可以找到:

LoadModule php5_module modules/libphp5.so


在<IfModule mime_module></IfModule>之间加入:

AddType application/x-httpd-php .php .phtml

AddType application/x-httpd-php-source .phps

AddHandler application/x-httpd-php .php

重启Apache

# Apachectl restart(restart:重启;stop:终止;start:开启)




**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**

搞笑的人生,搞笑的我啊,居然编译PHP时没有编译MySQL扩展,我真是......悬崖勒马吧,经过多次试验,修改了编译内容,增加了MySQL扩展


./configure  --prefix=/usr/local/php  --with-config-file-path=/usr/local/php/etc  --with-mysqli --with-pdo-mysql --with-mysql-sock=/usr/local/mysql/mysql.sock  --with-apxs2=/usr/local/apache/bin/apxs  --with-png-dir=/usr/local/libpng  --with-jpeg-dir=/usr/local/jpeg  --with-freetype-dir=/usr/local/freetype  --with-zlib-dir=/usr/local/zlib  --with-mcrypt=/usr/local/libmcrypt  --with-libxml-dir=/usr/local/libxml2/  --with-iconv-dir=/usr/local/libiconv  --enable-libxml  --enable-xml  --enable-bcmath  --enable-shmop  --enable-sysvsem  --enable-inline-optimization  --enable-opcache  --enable-mbregex  --enable-fpm  --enable-mbstring=all  --enable-gd-native-ttf  --with-openssl  --enable-pcntl  --enable-sockets  --with-xmlrpc  --enable-zip  --enable-soap  --without-pear  --with-gettext  --enable-session  --with-curl  --enable-ctype  --enable-shared  --with-gd --enable-mysqlnd 


我的服务器被我搞的糟透了,等我完成了环境搭建就重头来一遍,安装了好多多余的插件啥的,逼死强迫症的我啊,之后我会重新整理这个笔记

**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**--**



--------------------- 编译安装MySQL ---------------------------

1、老样子,先找源码包

# cd ~

# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.23.tar.gz


2、检查系统中是否存在使用rpm安装的mysql或者mariadb,如果有需要先删除后再编译安装。

# rpm -qa | grep mysql #由下至上依次卸载

# rpm -qa | grep mariadb

# rpm -e xxx #一般使用此命令即可卸载成功

# rpm -e --nodeps xxx #卸载不成功时使用此命令强制卸载

卸载完以后再用 rpm -qa|grep mariadb 或者 rpm -qa|grep mysql 查看结果

3、安装MySQL的编译工具和插件

# yum -y install ncurses ncurses-devel bison cmake


4、建立MySQL组和用户,并将MySQL用户添加到MySQL组

# groupadd mysql

# useradd -g mysql -s /sbin/nologin mysql


5、解压源码包,编译,安装

# tar -xzvf mysql-boost-5.7.23.tar.gz

// 编译时出现N多个问题,各种编译失败,找到了一个解决方法,安装boots

// 查询资料得出boost1.6版本不行,是否真实未得出

在/usr/local下创建一个名为boost的文件夹

# mkdir -p /usr/local/boost

# wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

# tar -xvzf boost_1_59_0.tar.gz

继续切换到解压出的 MySQL 目录进行 cmake,添加上 -DWITH_BOOST=/usr/local/boost


# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DSYSCONFDIR=/etc -DSYSTEMD_PID_DIR=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_BOOST=boost -DWITH_SYSTEMD=1

注意!!!

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

# cmake \

# -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ //定义安装目录

# -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ //连接数据库socket路径

# -DSYSCONFDIR=/etc \ //指定初始化参数文件目录(my.cnf)

# -DSYSTEMD_PID_DIR=/usr/local/mysql \ //数据库目录

# -DDEFAULT_CHARSET=utf8 \ //指定默认使用的字符集编码

# -DDEFAULT_COLLATION=utf8_general_ci \ //指定默认使用的字符集校对规则,utf8_general_ci是适用于UTF-8字符集的通用规则

# -DWITH_INNOBASE_STORAGE_ENGINE=1 \ //支持InnoDB引擎

# -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ 

# -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

# -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ //安装支持数据库分区

# -DMYSQL_DATADIR=/usr/local/mysql/data \

# -DWITH_BOOST=boost \

# -DWITH_SYSTEMD=1

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


# make

# make install

//对数据库目录进行权限设置

# chown -R mysql.mysql /usr/local/mysql/


编辑mysql主配置文件

# vi /etc/my.cnf(里面内容全部删除,替换成以下内容)

[client]

port = 3306 

default-character-set=utf8

socket = /usr/local/mysql/mysql.sock


[mysql]

port = 3306

default-character-set=utf8

socket = /usr/local/mysql/mysql.sock


[mysqld]

user = mysql

basedir = /usr/local/mysql

datadir = /usr/local/mysql/data

port = 3306

character_set_server=utf8

pid-file = /usr/local/mysql/mysqld.pid

socket = /usr/local/mysql/mysql.sock

server-id = 1


sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

然后在进行

# chown mysql:mysql /etc/my.cnf


设置环境变量

# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile

//把这两个路径添加到环境变量中,并放到profile文件中使之开机自运行,否则不生效

# echo 'export PATH' >> /etc/profile

# source /etc/profile //立即生效


初始化数据库

# cd /usr/local/mysql/

# bin/mysqld \

--initialize-insecure \

--user=mysql \

--basedir=/usr/local/mysql \

--datadir=/usr/local/mysql/data


添加系统服务

# cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

# systemctl daemon-reload


开启mysql服务

# systemctl start mysqld

# netstat -anpt | grep 3306 //查看服务运行状态

# systemctl enable mysqld //设为开机启动


访问数据库操作

# mysqladmin -u root -p password "abc123" //给root账号设置密码为abc123

注意:提示输入的是原始密码(原始没有密码,直接回车)


# mysql -u root –p //登录数据库

注意:有密码的加“-p”,如果没有密码不用加“-p”



【配置多域名】

I.第一种方法

1、进入到 /etc/httpd/extra目录下,名为httpd-vhosts-conf的文件(当然,文件也可以自己创建、命名)

删除文件中的内容,添加:

<VirtualHost *:80>

    ServerName codeants.top

    ServerAlias codeants.top www.codeants.top

    DocumentRoot /usr/local/apache/htdocs

    DirectoryIndex index.html index.php

</VirtualHost>

<Directory "/usr/local/apache/htdocs">

    Options +Includes -Indexes

    AllowOverride All

    Order Deny,Allow

    Allow from All

</Directory>

2、在httpd.conf文件末尾加上include httpd-vhosts-conf (将文件夹下的所有.conf配置文件导入进来)

3、重启Apache


II.第二种方法

1、配置站点对应的host

打开hosts文件编辑: vim etc/hosts

添加:127.0.0.1  www.codeants.top


2、进入到 /etc/httpd目录下,创建一个名为vhost-conf.d的文件夹(当然,文件夹可以自己命名)

进入vhost-conf.d文件夹,为每个站点创建配置文件,命名随意(也就是一个站点一个配置文件)


3、每个站点的配置信息,创建一个站点的配置文件之后,其它站点拷贝做相应的修改就好了。

<VirtualHost *:80>

    ServerName codeants.top

    ServerAlias codeants.top www.codeants.top

    DocumentRoot /usr/local/apache/htdocs

    DirectoryIndex index.html index.php

</VirtualHost>

<Directory "/usr/local/apache/htdocs">

    Options +Includes -Indexes

    AllowOverride All

    Order Deny,Allow

    Allow from All

</Directory>


4、在httpd.conf文件末尾加上include vhost-conf.d/*.conf (将文件夹下的所有.conf配置文件导入进来)


5、重启httpd服务就可以了。***域名之后,域名映射到服务器IP就行了,但是要在/etc/hosts文件中自己添加的域名与***的域名一样才能区分多个站点的域名解析


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议