100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > LNMP架构的搭建——源码编译(PHP nginx Mysql)

LNMP架构的搭建——源码编译(PHP nginx Mysql)

时间:2021-11-30 17:50:54

相关推荐

LNMP架构的搭建——源码编译(PHP nginx Mysql)

一.源码编译

在企业中,我们常常是需要什么模块才会添加什么模块,而源码编译就可以让我们按需安装。

yum安装的优缺点:

yum安装的优点:安装东西,方便快捷,特别是不用考虑包依赖。yum安装的缺点:安装过程,人为无法干预,不能按需安装。源里面有什么就安装什么,安装的版本也比较低。

源码安装的优缺点

源码安装的优点,编译安装过程,可以设定参数,按照需求,进行安装,并且安装的版本,可以自己选择,灵活性比较大。源码安装的缺点,由于安装包过新或者是其他问题,导致依赖的包没有,或者版本过低。这个时候就要解决包的依赖问题,linux系统中有的包,一个依赖一个,可能装一个小东西,就要解决一堆包的依赖问题,花很多时间解决包的依赖问题,得不尝失。源码安装的多了,不敢升级系统,升级系统,可能会导致以前手动装的东西,不能用。

二.源码编译PHP

第一步:编译三部曲

物理机里:将所需要的安装包发送给hang1

[root@foundation11 Desktop]# scp -r libmcrypt-2.5.8-9.el6.x86_64.rpm libmcrypt-devel-2.5.8-9.el6.x86_64.rpm php-5.6.35.tar.bz2 root@172.25.11.1:/mnt

在hang1将得到的php源码包进行解压(#加强系统对支持字符编码转换的功能)

root@hang1 ~]# cd /mnt[root@hang1 mnt]# ls[root@hang1 mnt]# tar jxf php-5.6.35.tar.bz2[root@hang1 mnt]# ls[root@hang1 ~]# mkdir /usr/local/lnmp [root@hang1 mnt]# cd php-5.6.35[root@hang1 php-5.6.35]# yum install gcc -y

没图,记得创建文件夹哟……

./configure --prefix=/usr/local/lnmp/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\ --with-png-dir \#php处理图片的格式--with-jpeg-dir \--with-freetype-dir \ --with-gmp\--with-gettext\--with-pear\--enable-mysqlnd \ #支持mysql数据库之间建立联系--with-mysql=mysqlnd\ --with-mysqli=mysqlnd\ --with-pdo-mysql=mysqlnd\--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 #加密算法

会发现要解决依赖性(很多,这里我就只举个例子):

去解决依赖性,然后继续预编译,一般是解决一个依赖性,在去试着预编译,直到不出错。

所要解决的依赖性安装包如下:

73 yum install xml2-config-devel -y75 yum install openssl-devel -y77 yum install libcurl-devel -y79 yum whatprovides */jpeglib.h80 yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64 -y82 yum whatprovides */png.h83 yum install -y libpng-devel-1.2.49-1.el6_2.x86_6486 yum install freetype-devel -y88 yum whatprovides */gmp.h89 yum install gmp-devel-4.3.1-7.el6_2.2.x86_64 -y91 cd /mnt93 yum install libmcrypt-*#因为这个我传过来的包在/mnt下95 cd -96 yum install net-snmp-devel -y

成功预编译完成的界面如下:

在这里教大家一个小窍门,在源码编译的时候,遇到以.h结尾的依赖性,可以用yum whatprovides去寻找这个文件属于那个包,然后安装符合自己版本的安装包。如果不是以.h结尾,我们可以在这个依赖性名称后面加上-devel,然后去安装这个包。比如现在告诉你你的依赖性是freetype,我们就可以yum install freetype-devel -y。一般来说,这种方法可以解决百分之七八十的依赖性。

[root@hang1 php-5.6.35]# make && make install

第二步:配置php

[root@hang1 php-5.6.35]# useradd nginx#创建nginx用户[root@hang1 php-5.6.35]# cd /usr/local/lnmp/php/#进入安装目录查看[root@hang1 php]# lsbin etc include lib php sbin var

[root@hang1 php]# cd etc[root@hang1 etc]# lspear.conf php-fpm.conf.default[root@hang1 etc]# cp php-fpm.conf.default php-fpm.conf[root@hang1 etc]# vim php-fpm.conf在里面搜寻/user,保证user=nginx和group=nginx搜寻/php-fpm ,将pid = run/php-fpm.pid接口打开

[root@hang1 ~]# cd /mnt[root@hang1 mnt]# cd php-5.6.35[root@hang1 php-5.6.35]# cp php.ini-php.ini-development php.ini-production [root@hang1 php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini

[root@hang1 php-5.6.35]# cd /usr/local/lnmp/php/etc/[root@hang1 etc]# lspear.conf php-fpm.conf php-fpm.conf.default php.ini[root@hang1 etc]# vim php.ini将时区修改为上海date.timezone = Asia/Shanghai

第三步:将php启动的脚本复制到系统启动脚本的默认目录下并测试php是否可以成功启动

root@hang1 etc]# cd -/mnt/php-5.6.35[root@hang1 php-5.6.35]# cd sapi/[root@hang1 sapi]# ls[root@hang1 sapi]# cd fpm/[root@hang1 fpm]# ls[root@hang1 fpm]# vim init.d.php-fpm #证明这是脚本启动文件

启动脚步内容

[root@hang1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm[root@hang1 fpm]# chmod +x /etc/init.d/php-fpm[root@hang1 fpm]# /etc/init.d/php-fpm start #启动phpStarting php-fpm done[root@hang1 fpm]# netstat -tnlpphp的端口号是9000

php源码编译成功的结果主要看php服务是否可以开启且端口是否是9000

三.源码编译nginx

第一步:编译三部曲

物理机:

scp -r nginx-1.16.0.tar.gz root@172.25.11.1:/mnt

hang1虚拟机:

[root@hang1 fpm]# cd /mnt[root@hang1 mnt]# ls[root@hang1 mnt]# tar zxf nginx-1.16.0.tar.gz [root@hang1 mnt]# cd nginx-1.16.0

[root@hang1 nginx-1.16.0]# ./configure --prefix=/usr/local/lnmp/nginx \ #表示编译到的路径--with-http_ssl_module \ #ssl模块,加密--with-http_stub_status_module \ #状态监控--with-threads \ #会有线程值--with-file-aio \ #文件io--user=nginx --group=nginx

出现错误:

解决依赖性:

[root@hang1 conf]# yum install pcre-devel -y

在去编译,成功,界面如下:

[root@hang1 nginx-1.16.0]# make && make install

第二步:配置nginx

root@hang1 nginx-1.16.0]# cd /usr/local/lnmp/nginx/[root@hang1 nginx]# ls[root@hang1 nginx]# cd conf/[root@hang1 conf]# ls[root@hang1 conf]# vim nginx.conf

user nginx nginx;location / {root html;index index.php index.html index.htm;}location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include fastcgi_conf;}

第三步:开启nginx并编辑nginx的默认发布文件

[root@hang1 conf]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/[root@hang1 conf]# nginx[root@hang1 conf]# nginx -tnginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

[root@hang1 conf]# pwd/usr/local/lnmp/nginx/conf[root@hang1 conf]# cd ../html/[root@hang1 html]# ls50x.html index.html[root@hang1 html]# vim index.html[root@hang1 html]# cat index.html<?phpphpinfo()?>[root@hang1 html]# nginx -s reload

查看端口:

ps aux查看进程:

浏览器能查看php页面,证明成功:

四.源码编译mysql

注意:mysql的源码编译需要借助cmake。

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。

第一步:编译三部曲

安装mysql,虚拟机的磁盘最少是20G,不够20G需要添加磁盘(本机够了),为了加快编译速度,我们将cpu增加到2个,内存提高到2048(原来是1024)

物理机:

scp -r cmake-2.8.12.2-4.el6.x86_64.rpm mysqloost-5.7.17.tar.gz root@172.25.11.1:/mnt

262 cd /mnt263 tar zxf mysql-boost-5.7.17.tar.gz270 yum install cmake-2.8.12.2-4.el6.x86_64.rpm 271 cd mysql-5.7.17/

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \#安装目录-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \ #数据库存放目录-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \ #Unix socket 文件路径-DWITH_MYISAM_STORAGE_ENGINE=1\ #安装 myisam 存储引擎-DWITH_INNOBASE_STORAGE_ENGINE=1 \#安装 innodb 存储引擎-DDEFAULT_CHARSET=utf8 \ 使用 utf8 字符-DDEFAULT_COLLATION=utf8_general_ci\ #校验字符-DEXTRA_CHARSETS=all #安装所有扩展字符集

出错:

加上之后的编译模块如下所示:

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all-DWITH_BOOST=boost/boost_1_59_0/

报错:

281 yum install ncurses-devel -y282 yum install gcc gcc-c++283 rm -fr CMakeCache.txt

报错:

286 yum install -y bison287 rm -fr CMakeCache.txt

此时再去编译成功。

这一步时间略长:

290 make && make install

完成界面如下所示:

第二步:将编译完成的mysql启动脚本复制到系统启动服务的默认目录中

[root@hang1 mysql-5.7.17]# cd support-files/[root@hang1 support-files]# ls[root@hang1 support-files]#cp mysql.server /etc/init.d/mysqld[root@hang1 support-files]#chmod +x /etc/init.d/mysqld[root@hang1 support-files]#/etc/init.d/mysqld start

第三步:将编译完成的默认配置文件放在/etc/f

[root@hang1 support-files]# cp /etc/f /etc/f.back#备份原本的文件[root@hang1 support-files]# cp my-f /etc/fcp: overwrite `/etc/f'? y

第四步:编辑f

[root@hang1 support-files]# vim /etc/f18 basedir = /usr/local/lnmp/mysql 19 datadir = /usr/local/lnmp/mysql/data22 socket = /usr/local/lnmp/mysql/data/mysql.sock

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

[root@hang1 support-files]# groupadd -g 27 mysql[root@hang1 support-files]# useradd -u 27 -g 27 mysql[root@hang1 support-files]# id mysqluid=27(mysql) gid=27(mysql) groups=27(mysql)

修改权限

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

[root@hang1 support-files]# chown mysql.mysql /usr/local/lnmp/mysql -R

[root@hang1 support-files]# cd /usr/local/lnmp/mysql

[root@hang1 mysql]# ll

第六步:编辑环境变量,查看mysql初始密码以及修改权限

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

[root@hang1 mysql]# vim ~/.bash_profilPATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin [root@hang1 mysql]# source ~/.bash_profile

[root@hang1 mysql]# mysqld --user=mysql --initialize#查看库mysql的初始化密码wEfHkhry6f+f

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

修改权限

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

第七步:mysql安全初始化

[root@hang1 support-files]# /etc/init.d/mysqld start[root@hang1 support-files]# 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端口被占用了

安全初始化:

[root@hang1 support-files]#mysql_secure_installation[root@hang1 support-files]# mysql -uroot -p[root@hang1 support-files]# netstst -tnlp

这张图是我后面截的,所以还有memcached的端口,总之,不必在意~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。