源码搭建LAMP环境

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

    Apache  Welcome! - The Apache HTTP Server Project   httpd主程序包(http server)

    MySQL  MySQL :: Download MySQL Community Server  mysql主程序包

    PHP  PHP: Downloads  php主程序包

    apr和apr-util  Welcome! - The Apache Portable Runtime Project  apr和apr-util都是httpd的依赖包

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

    boost  Boost Downloads  mysql5.7版本必须的依赖包

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

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

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

(1).准备安装环境

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

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

1

2

3

4

5

6

[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

1

2

3

4

5

6

7

[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

1

2

3

4

5

6

7

[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

1

2

3

4

5

6

7

[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,因为这不是一个本地服务。

1

2

[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服务脚本,让它成为本地服务

1

2

3

4

5

6

7

8

9

10

11

12

[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,并且开机自启

1

2

3

4

5

6

7

8

9

[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的账户启动的,也可以创建一个专用的用户

1

2

3

4

5

[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/  //更改目录权限

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

1

2

3

4

5

6

[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上测试:

1

2

[root@youxi2 ~]# curl 192.168.5.101

<html><body><h1>It works!</h1></body></html>

(5).编译安装mysql

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

1

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

  2)安装依赖包

1

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

  3)添加系统用户mysql

1

[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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

[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:

1

2

3

4

5

6

7

8

9

10

11

12

13

[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)配置环境变量,并刷新

1

2

3

[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)生成启动脚本。

1

2

[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开机自启

1

2

3

4

5

6

7

8

9

10

11

12

[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还需要修改安装目录的所属主和所属组

1

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

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

1

2

3

[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).

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

1

2

3

4

[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安全设置初始化

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

[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)测试

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

[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源

1

[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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

[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)生成配置文件

1

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

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

1

2

3

4

[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)测试

  创建测试界面

1

2

3

4

[root@youxi1 php-7.1.24]# vim /usr/local/apache/htdocs/index.php

<?php

        phpinfo();

?>

  Windows上查看

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值