lnmp架构搭建---源码编译(MYSQL,PHP,nginx)

实验环境

  • rhel6.5 selinux and iptables disabled

在上文我已经详细介绍了lnmp架构的组成及其工作模式,现在我们开始搭建lnmp架构。

MYSQL数据库的源码编译安装

  • 源码编译

1 . 得到mysql数据库的源码包,并进行解压
[root@lnmp ~]# tar zxf mysql-boost-5.7.17.tar.gz
2. 创建一个目录(用于将之后编译的的MYSQL,PHP,nginx都放在一起)
[root@lnmp ~]# mkdir /usr/local/lnmp
3. 安装源码编译工具cmake(支持编译C++语言)

cmake跨平台工具是用来预编译mysql源码的,用于设置mysql的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等

下载安装包cmake-2.8.12.2-4.el6.x86_64.rpm
[root@lnmp ~]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y
4. 安装依赖性的包
[root@lnmp ~]# yum install gcc gcc-c++ ncurses-devel bison -y
5. 创建预编译环境,可以定制即加上自己所需的安装条件(比如安装位置等等)

[root@lnmp ~]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \ 指定mysql的安装位置 
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \ 数据库中数据存放的目录 
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock  \ \链接数据库的SOCKET文件 
-DWITH_MYISAM_STORAGE_ENGINE=1 \ 安装MYISAM存储引擎 
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
-DDEFAULT_CHARSET=utf8 \ 使用UTF-8字符编码 
-DDEFAULT_COLLATION=utf8_general_ci \ 校验字符 
-DEXTRA_CHARSETS=all \ 安装所有扩展字符集

6.编译
在这里插入图片描述
7.添加下图划线部分再次编译
在这里插入图片描述
显示成功:在这里插入图片描述

如果未成功 [root@lnmp mysql-5.7.17]# rm -fr CMakeCache.txt 再次尝试

8 make && make install

编译汇编 注意:

mysql编译时间较长 make之前可以把其他虚拟机关掉,然后把内存加大点(加内存时可以在真机free
-m,查看真机内存大小,6g的内存给虚拟机分里g即可) 增加加cpu的核数,修改为2即可

  • 配置mysql

1.将编译完成的mysql启动脚本复制到系统启动服务的默认目录中

[root@lnmp ~]# cd mysql-5.7.17/ 
[root@lnmp mysql-5.7.17]# cd support-files/ 
[root@lnmp support-files]# cp mysql.server /etc/init.d/mysqld 
[root@lnmp support-files]# cd /etc/init.d/ 
[root@lnmp init.d]# chmod +x mysqld ##添加权限 
[root@lnmp init.d]# cd 
[root@lnmp ~]# /etc/init.d/mysqld ##命令可以补齐则成功

2 进入源码编译目录,再进入mysql安装的位置,将编译完成的默认配置文件放在/etc/my.cnf

[root@lnmp ~]# cd /etc 
[root@lnmp etc]# ls my.cnf 
my.cnf 
[root@lnmp etc]# cp my.cnf my.cnf.bakeup 
[root@lnmp etc]# cd 
[root@lnmp ~]# cd mysql-5.7.17/ 
[root@lnmp mysql-5.7.17]# cd support-files/ 
[root@lnmp support-files]# cp my-default.cnf /etc/my.cnf 
cp: overwrite `/etc/my.cnf'? y

3 编辑my.cnf

[root@lnmp support-files]# vim /etc/my.cnf 
basedir = /usr/local/lnmp/mysql # mysql的安装目录  
datadir = /usr/local/lnmp/mysql/data # mysql数据存放位置  
socket = /usr/local/lnmp/mysql/data/mysql.sock # mysql与外界联系的套接字文件位置

4 对mysql服务进行限制(利用mysql用户),将mysql服务的工作空间局限在mysql用户的家目录中,创建mysql组和mysql用户

[root@lnmp ~]# groupadd -g 27 mysql
[root@lnmp ~]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql

5 创建data目录

  • 将mysql目录下的所有文件的所有组都改为mysql,只有data目录的所有人是mysql

  • 因为mysql服务将要往这个目录中写数据,保证其有执行权限

    [root@lnmp ~]# cd /usr/local/lnmp/mysql/
    [root@lnmp mysql]# mkdir data
    [root@lnmp mysql]# chgrp mysql /usr/local/lnmp/mysql -R
    [root@lnmp mysql]# chown mysql data -R
    [root@lnmp mysql]# ll
    total 60
    drwxr-xr-x 2 root mysql 4096 Feb 16 15:37 bin
    -rw-r–r-- 1 root mysql 17987 Nov 28 2016 COPYING
    drwxr-xr-x 2 mysql mysql 4096 Feb 16 16:21 data
    drwxr-xr-x 2 root mysql 4096 Feb 16 15:37 docs
    drwxr-xr-x 3 root mysql 4096 Feb 16 15:37 include
    drwxr-xr-x 4 root mysql 4096 Feb 16 15:37 lib
    drwxr-xr-x 4 root mysql 4096 Feb 16 15:37 man
    drwxr-xr-x 10 root mysql 4096 Feb 16 15:38 mysql-test
    -rw-r–r-- 1 root mysql 2478 Nov 28 2016 README
    drwxr-xr-x 28 root mysql 4096 Feb 16 15:38 share
    drwxr-xr-x 2 root mysql 4096 Feb 16 15:38 support-files

6 将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令

[root@lnmp mysql]# vim ~/.bash_profile 
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin 
[root@lnmp mysql]# source ~/.bash_profile 加载.bash_profile文件 
##也可以在root的path中,使用软链接添加进来。(ln -s /usr/local/lnmp/mysql/bin/* /usr/local/sbin/)

[root@lnmp mysql]# mysql  ##此时mysql命令生成,但是还不能进入

7 执行mysql的配置初始化文件
[root@lnmp data]# mysqld --user=mysql --initialize ##会生成数据库的初始化密码

  • 注意:如果这条命令执行不成功,则进入data目录下,将里面的东西都删掉,再次执行则成功

8 开启mysqld
[root@lnmp data]# /etc/init.d/mysqld start
Starting MySQL.Logging to ‘/usr/local/lnmp/mysql/data/server1.err’.
. SUCCESS! 成功
9 查是否可以登录进入mysql
mysql -uroot -p

注意:如果不能成功进入 显示:ERROR 2002 (HY000): Can’t connect to local MySQL server
through socket ‘/usr/local/lnmpmysql/data/mysql.sock’
(1)可能是mysql.sock目录位置没有写对,可能在编译的时候就编写错误,也可能在 my.conf
文件中的socket:指定位置没有写对 (2)有可能是3306端口被占用了 解决方式: netstat -anp | grep 3306
##查看占用3306端口的pid kill -9 pid(占用) /etc/init.d/mysqld stop ##把mysql服务关掉 然后把data目录下的东西都删掉 :rm -fr * /etc/init.d/mysqld start ##再打开mysql服务
mysqld --user=mysql --initialize ##再次生成初始化密码 mysql -uroot -p新密码
##再次登录则可以成功进入

10 mysql的安全初始化
mysql_secure_installation
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11 登陆mysql数据库测试
[root@lnmp mysql-5.7.17]# /etc/init.d/mysqld start
Starting MySQL… [ OK ]
在这里插入图片描述

PHP源码编译

1 得到PHP的源码包并解压

[root@lnmp ~]# tar jxf php-5.6.35.tar.bz2

2 解决依赖性

[root@lnmp ~]# yum install libmcrypt-devel-2.5.8-9.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm -y   #两个包要从官网上下
[root@lnmp ~]# yum install libxml2-devel -y
[root@lnmp ~]# yum install openssl-devel -y
[root@lnmp ~]# yum install libcurl-devel -y
[root@lnmp ~]# yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64 -y
[root@lnmp ~]# yum install 2:libpng-devel-1.2.49-1.el6_2.x86_64 -y
[root@lnmp ~]# yum install freetype-devel -y
[root@lnmp ~]# yum install gmp-devel-4.3.1-7.el6_2.2.x86_64 -y
[root@lnmp ~]# yum install net-snmp-devel -y

3 进入解压目录创造预编译环境
在这里插入图片描述

 ./configure --prefix=/usr/local/lnmp/php # php安装的位置 
 --with-config-file-path=/usr/local/lnmp/php/etc # php配置文件所在的位置 
 --with-openssl # 支持openssl加密
 --with-snmp 
 --with-gd 
 --with-zlib 
 --with-curl 
 --with-libxml-dir #支持 libxml 函数 
 --with-png-dir 
 --with-jpeg-dir 
 --with-freetype-dir # php处理图片的格式 
 --with-gmp --with-gettext 
 --with-pear --enable-mysqlnd 
 --with-mysql=mysqlnd 
 --with-mysqli=mysqlnd 
 --with-pdo-mysql=mysqlnd # 支持与mysql数据库之间建立联系 
 --enable-inline-optimization 
 --enable-soap 
 --enable-ftp 
 --enable-sockets 
 --enable-mbstring 
 --enable-fpm # 开启fpm模式(nginx等服务用的) 
 --with-fpm-user=nginx # 对PHP服务的限制通过nginx用户来实现 
 --with-fpm-group=nginx # PHP以nginx用户组身份运行 
 --with-mcrypt # 提供了对多种块算法的支持 主要用来实现加密等算法 
 --with-mhash # 加密算法

4 make && make install
5 创建nginx用户
[root@lnmp php-5.6.35]# useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
6 做php服务的简单配置(配置pid和时区)

[root@lnmp php-5.6.35]# cd /usr/local/lnmp/php/etc/
[root@lnmp etc]# ls
pear.conf  php-fpm.conf.default
[root@lnmp etc]# cp php-fpm.conf.default php-fpm.conf
[root@lnmp etc]# vim php-fpm.conf
25 pid = run/php-fpm.pid   ##去掉注释
149 user = nginx     ##保证用户和组都是ngnix
150 group = nginx
[root@lnmp etc]# cd -
/root/php-5.6.35
[root@lnmp php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@lnmp php-5.6.35]# cd -
/usr/local/lnmp/php/etc
[root@lnmp etc]# vim php.ini 
date.timezone =Asia/Shanghai    ##修改时区

7 将php启动的脚本复制到系统启动脚本的默认目录下,并测试php是否可以启动

[root@lnmp etc]# cd -
/root/php-5.6.35
[root@lnmp php-5.6.35]# cd sapi/fpm/
[root@lnmp fpm]# cp init.d.php-fpm /etc/init.d/php-fpm  
#init.d.php-fpm是编译完成的启动脚本
[root@lnmp fpm]# chmod +x /etc/init.d/php-fpm 
#给脚本加上可执行权限
[root@lnmp fpm]# /etc/init.d/php-fpm start
Starting php-fpm  done
[root@lnmp fpm]# netstat -tnlp | grep php
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      18118/php-fpm  

nginx的源码编译

1 得到nginx的源码包并解压
[root@lnmp ~]# tar zxf nginx-1.15.8.tar.gz
2 去掉nginx的版本号

[root@lnmp ~]# tar zxf nginx-1.15.8.tar.gz
[root@lnmp nginx-1.15.8]# vim src/core/nginx.h
14 #define NGINX_VER          "nginx/" 

3 关闭debug日至(因为debug的日志非常多,企业中一般不需要开启)

[root@lnmp nginx-1.14.0]# vim auto/cc/gcc 
171 # debug
172 #CFLAGS="$CFLAGS -g"     ##添加注释

4 解决源编译中的依赖性问题

[root@lnmp nginx-1.15.8]# yum install pcre-devel gcc zlib-devel -y

5 创造预编译环境

[root@lnmp nginx-1.15.8]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx

6 make && make install
7 配置nginx服务

[root@lnmp nginx-1.14.0]# cd /usr/local/lnmp/nginx/conf/
[root@lnmp conf]# vim nginx.conf
 43 location / { 
 44 root html; 
 45 index index.php index.html index.htm; ##添加index.php(放在最前面) 
 46 } 

65 location ~ \.php$ { 
66 root html; 
67 fastcgi_pass 127.0.0.1:9000; 
68 fastcgi_index index.php; 
69 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 
70 include fastcgi.conf; ##修改 71 }

8 创建一个软连接,可以直接调用命令

[root@lnmp conf]# cd /usr/local/sbin/
[root@lnmp sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/

9 检测nginx服务是否可用并打开nginx服务

[root@lnmp sbin]# nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful
[root@lnmp sbin]# nginx 
[root@lnmp sbin]# netstat -tnlp | grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      30483/nginx
  • 测试在这里插入图片描述

  • 访问测试

    [root@lnmp sbin]# cd /usr/local/lnmp/nginx/html/
    [root@lnmp html]# ls
    50x.html index.html
    [root@lnmp html]# vim index.php ##编写默认页面

    <?php phpinfo() ?>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43273168/article/details/89668619