需要准备的安装包以及下载地址(只是一个大概地址,版本和下载方式需要自行选择):

    Apache  http://httpd.apache.org/   httpd主程序包(http server)

    MySQL  https://dev.mysql.com/downloads/mysql/  mysql主程序包

    PHP  https://php.net/downloads.php  php主程序包

    apr和apr-util  http://apr.apache.org/  apr和apr-util都是httpd的依赖包

    pcre  http://pcre.org/  httpd的依赖包

    boost  https://www.boost.org/users/download/  mysql5.7版本必须的依赖包

  其中apr和apr-util是对后端服务软件进行优化的。apr-util只是在apr的基础上提供了更多的数据结构和操作系统封装接口而已。

  而pcre全称Perl Compatible Regular Expressions,是使用C语言编写的正则表达式函数库,被广泛运用到许多开源软件中。

  注意:Apache2.4.7及以上版本需要apr1.5.0或以上版本。

(1).准备安装环境

  安装编译工具和开发包(依赖包)

[root@youxi1 ~]# yum -y install make gcc gcc-c++ openssl openssl-devel expat-devel

  上传下载好的源代码包。我使用的是如下版本:apr-1.6.2.tar.gz、apr-util-1.6.0.tar.gz、boost_1_59_0.tar.gz、httpd-2.4.37.tar.gz、mysql-5.7.19.tar.gz、pcre-8.41.tar.gz、php-7.1.24.tar.gz。

(2).编译安装apr和apr-util

  编译安装apr

[root@youxi1 ~]# tar zxf apr-1.6.2.tar.gz -C /usr/local/src/  //解压地址是约定俗成的,并不是必须解压到这个位置
[root@youxi1 ~]# cd /usr/local/src/apr-1.6.2/
[root@youxi1 apr-1.6.2]# ./configure --prefix=/usr/local/apr  //指定程序存放路径,不存在时会自动创建
[root@youxi1 apr-1.6.2]# make && make install
[root@youxi1 apr-1.6.2]# echo $?  //如果返回0则正确安装
0

  注意:如果没有指定--prefix,那么可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share。

  回到上传压缩包的地址,编译安装apr-util

[root@youxi1 apr-1.6.2]# cd
[root@youxi1 ~]# tar zxf apr-util-1.6.0.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/apr-util-1.6.0/
[root@youxi1 apr-util-1.6.0]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
[root@youxi1 apr-util-1.6.0]# make && make install
[root@youxi1 apr-util-1.6.0]# echo $?
0

  注意:apr-util需要指定apr中的一个配置文件bin/apr-1-config。

(3).编译安装pcre

  回到上传压缩包的地址,编译安装pcre

[root@youxi1 apr-util-1.6.0]#cd
[root@youxi1 ~]# tar zxf pcre-8.41.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/pcre-8.41/
[root@youxi1 pcre-8.41]# ./configure --prefix=/usr/local/pcre
[root@youxi1 pcre-8.41]# !make  //调用最近一次make开头的命令
[root@youxi1 pcre-8.41]# echo $?
0

(4).编译安装Apache

  1)回到上传压缩包的地址,编译安装Apache

[root@youxi1 pcre-8.41]# cd
[root@youxi1 ~]# tar zxf httpd-2.4.37.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/httpd-2.4.37/
[root@youxi1 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
[root@youxi1 httpd-2.4.37]# make && make install
[root@youxi1 httpd-2.4.37]# echo $?
0

  参数说明:

  --prefix=/usr/local/apache  安装路径

  --enable-so  支持动态加载模块

  --enable-rewrite  支持网站地址重写

  --enable-ssl  支持ssl加密

  --with-apr=/usr/local/apr  指定apr路径

  --with-apr-util=/usr/local/apr-util  指定apr-util路径

  --with-pcre=/usr/local/pcre  指定pcre路径

  --enable-modules=most  选择要编译的模块

  --enable-mpms-shared=all  支持当前平台上的动态加载的所有MPM,并将它们构建为DSO模块。

  --with-mpm=event  选择默认的MPM

  参数详细查看:http://httpd.apache.org/docs/2.4/programs/configure.html#configurationoptions

  注意:此时的配置文件是/usr/local/apache/conf/httpd.conf,默认网站根目录是/usr/local/apache/htdocs/。

  说明:MPM,中文多处理模块,可以构建为动态加载的DSO或与服务器静态链接。

  2)生成启动脚本。如果此时重启服务器,那么可以使用systemctl start|stop|restart|status apachectl管理Apache,但是没有办法enable,因为这不是一个本地服务。

[root@youxi1 httpd-2.4.37]# cp /usr/local/apache/bin/apachectl /etc/init.d/
[root@youxi1 httpd-2.4.37]# chmod +x /etc/init.d/apachectl

  3)写一个systemctl可以调用的Apache服务脚本,让它成为本地服务

[root@youxi1 httpd-2.4.37]# 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

  这时候就可以直接使用systemctl启动Apache,并且开机自启

[root@youxi1 httpd-2.4.37]# systemctl start apache  //启动apache
[root@youxi1 httpd-2.4.37]# systemctl enable apache.service  //开机自启apache
Created symlink from /etc/systemd/system/multi-user.target.wants/apache.service to /usr/lib/systemd/system/apache.service.
[root@youxi1 httpd-2.4.37]# ps aux | grep apache
root 41403 0.0 0.2 72808 2288 ? Ss 14:45 0:00 /usr/local/apache/bin/httpd -k start
daemon 41404 0.0 0.4 361772 4200 ? Sl 14:45 0:00 /usr/local/apache/bin/httpd -k start
daemon 41405 0.0 0.4 361772 4200 ? Sl 14:45 0:00 /usr/local/apache/bin/httpd -k start
daemon 41406 0.0 0.4 361772 4200 ? Sl 14:45 0:00 /usr/local/apache/bin/httpd -k start
root 41509 0.0 0.0 112724 984 pts/0 R+ 14:46 0:00 grep --color=auto apache

  不过可以看到Apache使用的是一个叫daemon的账户启动的,也可以创建一个专用的用户

[root@youxi1 httpd-2.4.37]# useradd -M -s /sbin/nologin apache  //-M不自动建立家目录,-s /sbin/nologin不允许登录
[root@youxi1 httpd-2.4.37]# vim /usr/local/apache/conf/httpd.conf  //修改配置文件
User apache  //将166和167行修改
Group apache
[root@youxi1 httpd-2.4.37]# chown -R apache.apache /usr/local/apache/  //更改目录权限

  注意:如果防火墙没有关闭,请将端口号加到规则中

[root@youxi1 httpd-2.4.37]# firewall-cmd --permanent --zone=public --add-port=80/tcp
success
[root@youxi1 httpd-2.4.37]# firewall-cmd --reload
success
[root@youxi1 httpd-2.4.37]# firewall-cmd --permanent --zone=public --list-ports
80/tcp

  4)测试

  Windows上测试:

  Linux上测试:

[root@youxi2 ~]# curl 192.168.5.101
<html><body><h1>It works!</h1></body></html>

(5).编译安装mysql

  1)卸载系统自带的mysql和mariadb,还有boost(这是Mysql5.7版本以后必须的)

[root@youxi1 httpd-2.4.37]# yum -y remove mysql* mariadb* boost-*

  2)安装依赖包

[root@youxi1 httpd-2.4.37]# yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel

  3)添加系统用户mysql

[root@youxi1 httpd-2.4.37]# useradd -M -s /sbin/nologin -r mysql  //-M不创建主目录,-s /sbin/nologin不允许登录,-r创建系统用户

  网上好多都是先groupadd mysql,然后再useradd -M -s /bin/false -r -g mysql mysql,一开始没找到原因,后来发现原来官网是这么写的。

  扩展:/bin/false是最严格的禁止登录。而/sbin/nologin只是不允许系统登录,但是可以使用ftp等其他服务登录。mysql官网使用的就是/bin/false。

  4)回到上传压缩包的地址,编译安装mysql

[root@youxi1 httpd-2.4.37]# cd
[root@youxi1 ~]# tar zxf boost_1_59_0.tar.gz -C /usr/local/src/  //解压boost
[root@youxi1 ~]# tar zxf mysql-5.7.19.tar.gz -C /usr/local/src/  //解压mysql
[root@youxi1 ~]# mkdir -p /var/lib/mysql/data  //准备安装目录/var/lib/mysql和数据目录/var/lib/mysql/data
[root@youxi1 ~]# chown -R mysql.mysql /var/lib/mysql/  //更改目录所属主和所属组
[root@youxi1 ~]# cd /usr/local/src/mysql-5.7.19/
[root@youxi1 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/boost_1_59_0
[root@youxi1 mysql-5.7.19]# make -j 4 && make install  //-j [CPU核心数]多线程编译
[root@youxi1 mysql-5.7.19]# echo $?
0

  注意:编译是相当的慢,所以最好是使用二进制安装Mysql。

  参数说明:

    DCMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
    DMYSQL_DATADIR:指定MySQL程序的数据目录
    DSYSCONFDIR:初始化参数文件目录
    DWITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
    DWITH_READLINE:使用readline功能
    DMYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
    DMYSQL_TCP_PORT:服务端口号,默认3306
    DENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
    DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
    DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
    DWITH_BOOST:指定boost的地址
    DWITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
    DWITH_COMMENT:指定编译备注信息

  5)创建并编辑一个配置文件my.cnf:

[root@youxi1 mysql-5.7.19]# vim /etc/my.cnf
[mysqld]
basedir=/var/lib/mysql
datadir=/var/lib/mysql/data
port=3306
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8
log-error=/var/log/mysqld.log
pid-file=/tmp/mysqld.pid
[mysql]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock

  6)配置环境变量,并刷新

[root@youxi1 mysql-5.7.19]# vim /etc/profile.d/mysql.sh
export PATH=/var/lib/mysql/bin:$PATH
[root@youxi1 mysql-5.7.19]# . /etc/profile.d/mysql.sh  //两种刷新方式,也可以source /etc/profile.d/mysql.sh

  7)生成启动脚本。

[root@youxi1 mysql-5.7.19]# cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@youxi1 mysql-5.7.19]# chmod +x /etc/init.d/mysqld

  由于搜了一圈没找到如何写本地服务,所以用的是官网提供的chkconfig命令,让mysqld开机自启

[root@youxi1 mysql-5.7.19]# chkconfig --add mysqld
[root@youxi1 mysql-5.7.19]# chkconfig --list mysqld
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。 mysqld 0:关 1:关 2:开 3:开 4:开 5:开 6:关
[root@youxi1 mysql-5.7.19]# chkconfig --level 2345 mysqld on  //如果上面显示的2345全是关,使用这个命令就好了

  注意:重新启动服务器或mysqld添加到开机自启,systemctl start|restart|status|stop mysqld都可以使用,但没有办法enbale,因为这不是一个本地服务。

  8)安装完mysql还需要修改安装目录的所属主和所属组

[root@youxi1 mysql-5.7.19]# chown -R mysql:mysql /var/lib/mysql

  9)接着就是初始化数据库,并启动mysql

[root@youxi1 mysql-5.7.19]# /var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
[root@youxi1 mysql-5.7.19]# /etc/init.d/mysqld start  //报错了
Starting MySQL.... ERROR! The server quit without updating PID file (/tmp/mysqld.pid).

  处理这个错误需要删除数据目录,重新初始化

[root@youxi1 mysql-5.7.19]# rm -rf /var/lib/mysql/data/*
[root@youxi1 mysql-5.7.19]# /var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
[root@youxi1 mysql-5.7.19]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

  10)此时的mysql是没有密码直接可以登录的,使用mysql_secure_installation安全设置初始化

[root@youxi1 mysql-5.7.19]# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: y There are three levels of password validation policy: LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0  //设置密码复杂度
Please set the password for root here. New password:   //默认最小密码长度为8 Re-enter new password: Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : ... skipping. Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : ... skipping.
All done!

  11)测试

[root@youxi1 mysql-5.7.19]# mysql -uroot -p12345678
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.19 Source distribution Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

(6).编译安装php

  1)安装依赖包,需要epel源

[root@youxi1 mysql-5.7.19]# yum -y install php-mcrypt libmcrypt libmcrypt-devel  autoconf  freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c php-pear

  2)回到上传压缩包的地址,编译安装php

[root@youxi1 mysql-5.7.19]# cd
[root@youxi1 ~]# tar zxf php-7.1.24.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/php-7.1.24/
[root@youxi1 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=/var/lib/mysql/mysql.sock \
--enable-maintainer-zts
[root@youxi1 php-7.1.24]# make -j 4 && make install
[root@youxi1 php-7.1.24]# echo $?
0

  参数说明:

    --with-apxs2 将php编译为Apache的一个模块进行使用
    --enable-mbstring 多字节字符串的支持
    --with-curl 支持cURL
    --with-gd 支持gd库
    --enable-fpm 支持构建fpm
    --enable-mysqlnd 启用mysqlnd
    --with-pdo-mysql 支持pdo:MySQL支持
    --with-config-file-path 设置配置文件路径
    --with-mysqli 支持MySQLi
    --with-mysql-sock 关联mysql的socket文件
    --enable-maintainer-zts 如果Apache是event模型,那需要指定zts

  3)生成配置文件

[root@youxi1 php-7.1.24]# cp php.ini-production /usr/local/php/etc/php.ini

  4)修改Apache的配置文件,使其支持php,并重启Apache

[root@youxi1 php-7.1.24]# vim /usr/local/apache/conf/httpd.conf
AddType application/x-httpd-php .php  //大概在393行
AddType application/x-httpd-php-source .phps
[root@youxi1 php-7.1.24]# systemctl restart apache.service

  5)测试

  创建测试界面

[root@youxi1 php-7.1.24]# vim /usr/local/apache/htdocs/index.php
<?php
phpinfo();
?>

  Windows上查看

源码搭建LAMP环境的更多相关文章

  1. CentOS 6.5 下源码搭建LAMP环境

    参考网站: http://wenku.baidu.com/link?url=Cvkqss2E9mnxXOZigMWPaCfqwsBxnm0sZ4aKE2oLAgQ888XxeC0DWOChxVqiHz ...

  2. 在CENTOS上源码搭建LNMP环境

    前言 1.操作前提: CentOS Linux release 7.5.1804: sudo用户(需要root权限): 2.需要安装的组件: nginx稳定版:nginx-1.14.0: MariaD ...

  3. CentOS 7 源码搭建LNMP环境

    搭建 LNMP 环境 源码包版本 :  CentOS Linux  7 nginx-1.15.1.tar.gz  mysql-boost-5.7.21.tar.gz  php-7.2.7.tar.gz ...

  4. CentOS 下源码安装LAMP环境

    一.简介 什么是LAMP    LAMP是一种Web网络应用和开发环境,是Linux, Apache, MySQL, Php/Perl的缩写,每一个字母代表了一个组件,每个组件就其本身而言都是在它所代 ...

  5. 用源码搭建LNMP环境+部署WordPress

    首先要做的是就是关闭Centos7.4的防火墙及selinux #systemctl stop firewalld #systemctl disable firewalld #sed -ri 's/^ ...

  6. CentOS6.5下搭建LAMP环境(源码编译方式)

    CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL) 学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP ,WAMP,MAMP等.这里我介 ...

  7. CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境【转载】

    本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/11/28/2778779.h ...

  8. Spring源码分析——(001)环境搭建

    1.官方参考 spring-framework的github链接:https://github.com/spring-projects/spring-framework 源码环境搭建官方参考1:考如何 ...

  9. CentOS下搭建LAMP环境详解

    前言:在这里将介绍如何在CentOS下搭建LAMP环境(全部使用源码编译安装),用于web服务器开发. •LAMP: Linux + Apache + PHP + Mysql. •系统: CentOS ...

随机推荐

  1. 我们什么时候应该在C程序中使用指针?

    回答: 传递大型结构喜欢服务器请求或响应数据包. 实现链表和二叉树. 使用GPIO或硬件寄存器. 从函数中获取地址或更新值(通过引用调用) 创建动态数组. 使用函数指针创建回调函数. 注意:除此之外, ...

  2. 关于前端 jQuery 面试的知识点

    参考一个博主整理的一些前端 jQuery 的一些面试题 参考博客:https://www.cnblogs.com/dashucoding/p/11140325.html 参考博客:https://ww ...

  3. js中event.preventDefault()和 event.stopPropagation( ) 方法详解

    event.preventDefault() 1.首先event.preventDefault()是通知浏览器不要执行与事件关联的默认动作,例如:  这里a标签的默认事件是跳转,这里我们告诉浏览器取消 ...

  4. Copy Books II

    Description Given n books and each book has the same number of pages. There are k persons to copy th ...

  5. Spring Data JPA 提供的各种Repository接口作用

    各种Repository接口继承关系: Repository : public interface UserRepository extends Repository<User, Integer ...

  6. 源码安装mongoDB

    1.安装启动 下载源码包,官方地址: wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.22.tgz 解压 ...

  7. javascript权威指南第12章DOM2 DOM3 示例代码

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> Example XHTML ...

  8. Jedis常用方法API

    一.键操作 二.字符串操作 三.整数和浮点数操作 四.列表(List)操作 五.集合(Set)操作 六.哈希(Hash)操作 七.有序集合(Zsort)操作 八.排序操作

  9. MongoDB-3.2 oplog删除策略优化

    MongoDB oplog是一个capped collection,创建capped collection时,createCollection可以设置size(最大字节数)和max(最大文档数)的参数 ...

  10. Maven Module和Maven Project的区别

    1.maven project和module相当于父子关系.2.当新建的项目中不存在父子关系时使用project.3.当项目中存在父子关系时用project做父工程,module做子工程,module ...