源码搭建LAMP环境
需要准备的安装包以及下载地址(只是一个大概地址,版本和下载方式需要自行选择):
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上查看