环境: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文件中自己添加的域名与***的域名一样才能区分多个站点的域名解析