基于 CentOS 7源码编译搭建 LAMP 架构

什么是 LAMP?
LAMP=Linux Apache Mysql/MariaDB PHP/Perl/Python 这些软件都是开源免费的软件,几个 程序各自是独立的,经常为了达到我们需要的效果而协同工作,组成了我们常见的 LAMP 架构平台! LAMP 是世界上最流行的组合,当然同时也有 Nginx,也就是 LNMP: LAMP 相对于 Nginx 来说较为安 全,但是 Nginx 处理高并发比 Apache 要强,Nginx 相对于 LAMP 来说安全较为差一点,同样的配制 环境负载远远高于 LAMP 向国内的一些大公司,淘宝、新浪都在用这一些 Nginx,像那么大的公司网站 需要用到服务器群用 LAMP 搭建环境成本远远大于 Nginx。打个比方本来 1000000W 访问量需要 10 台 LAMP 环境服务器才能完成,但是使用 NGINX 也许只需要 5、6 台,这样一来对于这样的公司来说就大 大的节约了成本。

从网站的流量上来说,70%以上的访问流量是 LAMP 来提供的,LAMP 是最强大的网站解决方案, 在以前这句话没有错,但是在现在,这句话有待证实!!!因为在以后的过程中,会发现我们会使用的架 构是 Nginx 和 Apache 结合使用:使用 Nginx 可以做集群等相关配置,可以和 Apache 一起使用,有的 会用 Apache 去跑 php,然后用 Nginx 做反向代理,比如 Apache 运行在 8080 端口,nginx 在 80 端 口,访问 php 文件时,反向代理到 Apache,静态页通过 Nginx 处理。Nginx 支持高并发,Apache 对 php 的运行比较稳定。

常见的网页类型:htm,html,shtml,stm.php,asp,aspx,shtm,jsp 等等 Apache 本事只处理静态页 面,处理动态页面需要使用 libphp5.so 这个模块去工作,编译 php 也其实是将一个至关重要的模块打入 到 Apache 内部,然后 Apache 收到 php 请求,将请求交给这个模块来处理!

Apache httpd工作原理:
Apache 本身只处理 html 静态语言页面,当客户端需要访问 php 页面的时候,Apache 会调用 libphp5.so 这个模块去工作,这个模块会把 php 页面转换成 html 静态页面,让 Apache 处理,Apache 处理过,会返回给客户端

LAMP 相关网站 Apache=http://httpd.apache.org/ #httpd 主程序包 MySQL=http://dev.mysql.com/downloads/mysql/ #mysql 主程序包 PHP=http://php.net/downloads.php #php 主程序包
apr=http://apr.apache.org/ #apr 是 httpd 的依赖包
apr-util=http://apr.apache.org/ #apr-util 是 httpd 的第二个依赖包 apr 和apr-util 这个两个软件是对后端服务软件进行优化的.

apr-util 只是在 apr 的基础上提供了更多的数据结构和操作系统封装接口而已。
pcre 是 httpd 的第三个依赖包 http://pcre.org/

开始安装和配置 LAMP
httpd-2.4.41.tar.gz #Apache 主程序包
apr-1.6.2.tar.gz #Apache 依赖包
apr-util-1.6.0.tar.gz #Apache 依赖包
pcre-8.41.tar.gz #Apache 依赖包
php-7.1.24.tar #php 主程序包
mysql-5.7.28.tar.gz #mysql 主程序包

我百度云给你准备好了你也可以官网下载
链接:https://pan.baidu.com/s/1YApxmJmaaEMDKsfmv6KT5g
提取码:9jbe

首先准备环境一台centos7的主机,xshell连接软件。
[root@huaxinfeng01 ~]# yum -y install make gcc gcc-c++ openssl openssl-devel expat-devel # 安装 make、gcc、openssl 等编译工具和开发包(yum没配置的话自己去配置阿里云的)

编译安装依赖包 apr
[root@huaxinfeng01 ~]# tar xf apr-1.6.2.tar.gz -C /usr/local/src/
[root@huaxinfeng01 ~]# cd /usr/local/src/apr-1.6.2/
[root@huaxinfeng01 apr-1.6.2]# ./configure --prefix=/usr/local/apr
[root@huaxinfeng01 apr-1.6.2]# make && make install
[root@huaxinfeng01 apr-1.6.2]# cd

编译安装依赖包 apr-util
[root@huaxinfeng01 ~]# tar xf apr-util-1.6.0.tar.gz -C /usr/local/src/
[root@huaxinfeng01 ~]# cd /usr/local/src/apr-util-1.6.0/
[root@huaxinfeng01 apr-util-1.6.0]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
[root@huaxinfeng01 apr-util-1.6.0]# make -j 8 && make install
[root@huaxinfeng01 apr-util-1.6.0]# cd

注意:如果执行 make 报错:
xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory

解决:
[root@huaxinfeng01 ~]# yum install expat-devel

编译安装依赖包 pcre
[root@huaxinfeng01 ~]# tar xf pcre-8.41.tar.gz -C /usr/local/src/
[root@huaxinfeng01 ~]#cd /usr/local/src/pcre-8.41/
[root@huaxinfeng01 pcre-8.41]# ./configure --prefix=/usr/local/pcre
[root@huaxinfeng01 pcre-8.41]# make && make install
[root@huaxinfeng01 pcre-8.41]# cd

编译安装 Apache
把我给你的zip包rz到root的家目录下面解压了(用unzip解压,如果上传不会自行百度)
[root@huaxinfeng01 ~]# tar zxvf httpd-2.4.37.tar.gz -C /usr/local/src/
[root@huaxinfeng01 ~]# cd /usr/local/src/httpd-2.4.37/
[root@huaxinfeng01 httpd-2.4.37]#./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-ssl --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-modules=most --enable-mpms-shared=all --with-mpm=event

选项说明:
–prefix=/usr/local/apache #安装路径
–enable-so #支持动态加载模块
–enable-rewrite #支持网站地址重写
–enable-ssl #支持 SSL 加密
–with-pcre=/usr/local/pcre #pcre 路径
–with-apr=/usr/local/apr #apr 路径
–with-apr-util=/usr/local/apr-util #apr-util 路径

一共有三种稳定的 MPM(Multi-Processing Module,多进程处理模块)模式。它们分别是 prefork, worker 和 event,它们同时也代表这 Apache 的演变和发展。

[root@huaxinfeng01 httpd-2.4.37]# make && make install
[root@huaxinfeng01 httpd-2.4.37]# cd

  1. 配置文件
    [root@huaxinfeng01 ~]# ls /usr/local/apache/conf/httpd.conf

  2. 网站根目录
    [root@huaxinfeng01 ~]# ls /usr/local/apache/htdocs/

  3. 生成启动脚本
    [root@huaxinfeng01 ~]# cp /usr/local/apache/bin/apachectl /etc/init.d/
    [root@huaxinfeng01 ~]# chmod +x /etc/init.d/apachectl

  4. 写个 apache 系统服务脚本, 以 754 的权限保存此文件
    [root@huaxinfeng01 ~]# vim /usr/lib/systemd/system/apache.service

[Unit] 
Description=apache 
After=network.target 
[Service] 
Type=forking 
ExecStart=/etc/init.d/apachectl start 
ExecReload=/etc/init.d/apachectl restart 
ExecStop=/etc/init.d/apachectl stop 
PrivateTmp=true 
[Install] 
WantedBy=multi-user.target
  1. 启动服务
    [root@huaxinfeng01 ~]# systemctl enable apache
    [root@huaxinfeng01 ~]# systemctl start apache.service

  2. 修改 Apache 的运行用户:
    默认是 daemon 用户运行的进程

[root@huaxinfeng01 ~]# useradd -M -s /sbin/nologin apache #创建一个用户 用来运行 apache
[root@huaxinfeng01 ~]# vim /usr/local/apache/conf/httpd.conf #修改配置文件改变 apache 运行身份
改:166 User daemon #运行用户
为:166 User apache

改:167 Group daemon #运行组,创建 apache 的时候已经即时创建了 apache 这个组
为:167 Group apache

[root@huaxinfeng01 ~]# chown -R apache:apache /usr/local/apache/ #默认是 root,改为 apache
测试访问
在这里插入图片描述

源码编译 mysql源码编译 mysql
这个可能有点卡,如果是虚拟机一定要配置成高性能
MySQL 从 5.7 版本之后,boost 是必须的,建议把系统自带的 boost 库卸载,源码编译安装高版本
[root@huaxinfeng01 ~]# yum -y remove boost-[root@xuegod63 ~]# yum -y remove boost-
卸载系统自带的 MySQL
[root@huaxinfeng01 ~]# yum -y remove mysql mariadb-*
[root@huaxinfeng01 ~]# rm -rf /var/lib/mysql/* #删除旧数据文件

安装源码编译必要的资源包
[root@huaxinfeng01 ~]# yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel
[root@huaxinfeng01 ~]# groupadd mysql
[root@huaxinfeng01 ~]# useradd -M -s /sbin/nologin -r -g mysql mysql

注:mysql-5.7.28.tar.gz 安装时占用空间比较大,虚拟机环境下建议新添加一块硬盘进行安装,真 实服务器磁盘空间一般比较大
[root@huaxinfeng01 ~]# tar xf mysql-boost-5.7.28.tar.gz -C /usr/local/src/
[root@huaxinfeng01 ~]# cd /usr/local/src/mysql-5.7.28

在生产环境中,安装数据库之前,需要规划好数据存储的目录 这个目录最好是一块单独的分区或者磁盘,做成 raid 或者 LVM,编译日后磁盘的维护和扩容 对于读写比较频繁的业务,可以采用 SSD 等转速高的磁盘

规划安装目录:
安装目录: /var/lib/mysql
数据目录: /var/lib/mysql/data
[root@huaxinfeng01 mysql-5.7.19]# mkdir -p /var/lib/mysql/data
[root@huaxinfeng01 mysql-5.7.19]# chown -R mysql:mysql /var/lib/mysql

编译安装 MySQL
[root@huaxinfeng01 mysql-5.7.19]# cmake -DCMAKE_INSTALL_PREFIX=/var/lib/mysql
-DMYSQL_DATADIR=/var/lib/mysql/data
-DSYSCONFDIR=/etc
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_MEMORY_STORAGE_ENGINE=1
-DWITH_READLINE=1
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock
-DMYSQL_TCP_PORT=3306
-DENABLED_LOCAL_INFILE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DDOWNLOAD_BOOST=1
-DWITH_BOOST=/usr/local/src/mysql-5.7.28/boost/boost_1_59_0/

参数注释:
DCMAKE_INSTALL_PREFIX:指定 MySQL 程序的安装目录,默认/usr/local/mysql
DEFAULT_CHARSET:指定服务器默认字符集,默认 latin1
DEFAULT_COLLATION:指定服务器默认的校对规则,默认 latin1_general_ci
ENABLED_LOCAL_INFILE:指定是否允许本地执行 LOAD DATA INFILE,默认 OFF
WITH_COMMENT:指定编译备注信息
WITH_xxx_STORAGE_ENGINE:指定静态编译到 mysql 的存储引擎,MyISAM,MERGE,
MEMBER 以及 CSV 四种引擎默认即被编译至服务器,不需要特别指定。
WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
SYSCONFDIR:初始化参数文件目录
MYSQL_DATADIR:数据文件目录
MYSQL_TCP_PORT:服务端口号,默认 3306
MYSQL_UNIX_ADDR:socket 文件路径,默认/tmp/mysql.sock

[root@huaxinfeng01 mysql-5.7.19]# make -j 4 #编译估计 30 分钟
[root@huaxinfeng01 mysql-5.7.19]# make install
[root@huaxinfeng01 mysql-5.7.19]# cd

编辑配置文件
[root@huaxinfeng01 ~]# vim /etc/my.cnf
[mysqld] port=3306 user=mysql basedir=/var/lib/mysql datadir=/var/lib/mysql/data socket=/tmp/mysql.sock character-set-server=utf8 log-error=/var/log/mysqld.log [mysql] socket=/tmp/mysql.sock

添加 path 路径,让系统能读到 mysql 的命令:
[root@huaxinfeng01 ~]# vim /etc/profile.d/mysql.sh
PATH=/var/lib/mysql/bin:$PATH

使环境变量修改生效
[root@huaxinfeng01 ~]# source /etc/profile.d/mysql.sh

生成服务启动脚本 [root@huaxinfeng01 ~]# cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld

[root@huaxinfeng01~]# chmod +x /etc/init.d/mysqld
修改权限:
[root@huaxinfeng01~]# chown -R mysql:mysql /var/lib/mysqlv
初始化数据库 :
[root@huaxinfeng01~]# mysqld --defaults-file=/etc/my.cnf --initialize-insecure
#初始化数据库, --initialize 表示默认生成一个安全的密码,–initialize-insecure 表示不生成密码

启动服务
[root@huaxinfeng01~]# /etc/init.d/mysqld start
Starting MySQL… SUCCESS!

如果报错
Starting MySQL… ERROR! The server quit without updating PID file (/tmp/mysqld.pid)
解决方法: 把数据目录删除,重新初始化:
[root@huaxinfeng01 ~]# cd /var/lib/mysql/data/
[root@huaxinfeng01 data]# rm -rf ./*
[root@huaxinfeng01 data]# mysqld --defaults-file=/etc/my.cnf --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data

[root@huaxinfeng01~]# /etc/init.d/mysqld start
登陆 mysql 数据库,因初始化无密码,直接输入 mysql 可登陆:
[root@huaxinfeng01~]# mysql
mysql> set password for root@localhost = password(‘123456’);
mysql> flush privileges;

源码编译安装 php7.1.24
[root@huaxinfeng01~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@huaxinfeng01~]# yum clean all
[root@huaxinfeng01~]# yum list
注:RHEL 光盘和 CentOS 源缺少很多软件包,建议使用扩展源进行安装依赖包 如果扩展源不能用,用本地 yum 源
[root@huaxinfeng01~]# yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype freetype-devel gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel libjpeg-devel freetype-devel libmcrypt-devel

[root@huaxinfeng01~]# tar xf php-7.1.24.tar.gz -C /usr/local/src
[root@huaxinfeng01~]# cd /usr/local/src/php-7.1.24/

配置相关参数
[root@huaxinfeng01 php-7.1.24]# ./configure --prefix=/usr/local/php/
–with-apxs2=/usr/local/apache/bin/apxs
–enable-mbstring
–with-curl
–with-gd
–enable-fpm
–enable-mysqlnd
–with-pdo-mysql=mysqlnd
–with-config-file-path=/usr/local/php/etc/
–with-mysqli=mysqlnd
–with-mysql-sock=/tmp/mysql.sock
–enable-maintainer-zts

编译
[root@huaxinfeng01 php-7.1.24]# make -j 4
安装
[root@huaxinfeng01 php-7.1.24]# make install
生成配置文件
[root@huaxinfeng01 php-7.1.24]# cp php.ini-production /usr/local/php/etc/php.ini
编辑 Apache 的配置文件,支持 php 的文件:
[root@huaxinfeng01 php-7.1.24]# vim /usr/local/apache/conf/httpd.conf
在 393 行下面添加:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

创建测试页面
[root@huaxinfeng01 php-7.1.24]# cd /usr/local/apache/htdocs/
[root@huaxinfeng01 htdocs]# vim index.php

<?php     
phpinfo();    
 ?>

测试 http://192.168.1.63/index.php
在这里插入图片描述
测试连接 MySQL 是否成功

<?php    
 $mysqli = new mysqli("localhost", "root", "123456");     
if(!$mysqli)      { echo"database error"; }     
else{ echo"php 连接 mysql successful"; }      
$mysqli->close();     phpinfo();    

 ?>

ok安装完毕记得给我点赞哦谢谢

发布了7 篇原创文章 · 获赞 89 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/BryantJamesHua/article/details/104546738