Blog.049 LNMP 架构与源码编译安装
本章目录
1. LNMP 架构
1.1 LNMP 架构的优点
2. 编译安装 Nginx 服务
2.1 操作步骤
2.2 操作流程
3. 编译安装 MySQL 服务
3.1 操作步骤
3.2 操作流程
4. 编译安装 PHP 解析环境
4.1 操作步骤
4.2 操作流程
LNMP 代表的就是:Linux 系统下 Nginx+MySQL+PHP 这种网站服务器架构。
- Linux 是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
- Nginx 是一个高性能的HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
- MySQL 是一个小型关系型数据库管理系统。
- PHP 是一种在服务器端执行的嵌入 HTML 文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
- 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
- 作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP 代理服务器对外进行服务。Nginx 用C编写,不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
- 作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm 描述了成功并且美妙的使用经验。
- Nginx 安装非常的简单,配置文件非常简洁(还能够支持 perl 语法)。Nginx 支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。
(1)安装依赖包
1 systemctl stop firewalld 2 systemctl disable firewalld 3 setenforce 0
1 yum -y install pcre-devel zlib-devel gcc gcc-c++ make
(2)创建运行用户
1 useradd -M -s /sbin/nologin nginx
(3)编译安装
1 cd /opt 2 tar zxvf nginx-1.12.0.tar.gz -C /opt/ 3 4 cd nginx-1.12.0/ 5 6 ./configure \ 7 --prefix=/usr/local/nginx \ 8 --user=nginx \ 9 --group=nginx \ 10 --with-http_stub_status_module 11 12 make && make install
(4)优化路径
1 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
(5)添加 Nginx 系统服务
1 vim /lib/systemd/system/nginx.service 2 3 [Unit] 4 Description=nginx 5 After=network.target 6 [Service] 7 Type=forking 8 PIDFile=/usr/local/nginx/logs/nginx.pid 9 ExecStart=/usr/local/nginx/sbin/nginx 10 ExecReload=/bin/kill -s HUP $MAINPID 11 ExecStop=/bin/kill -s QUIT $MAINPID 12 PrivateTmp=true 13 [Install] 14 WantedBy=multi-user.target 15 16 chmod 754 /lib/systemd/system/nginx.service 17 systemctl start nginx.service 18 systemctl enable nginx.service
(1)安装依赖包
(2)创建运行用户
(3)编译安装
(4)优化路径
(5)添加 Nginx 系统服务
(1)安装 MySQL 环境依赖包
1 yum -y install \ 2 ncurses \ 3 ncurses-devel \ 4 bison \ 5 cmake
(2)创建运行用户
1 useradd -M -s /sbin/nologin mysql
(3)编译安装
1 cd /opt 2 tar xzvf mysql-boost-5.7.20.tar.gz 3 4 cd /opt/mysql-5.7.20/ 5 6 cmake \ 7 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ 8 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ 9 -DSYSCONFDIR=/etc \ 10 -DSYSTEMD_PID_DIR=/usr/local/mysql \ 11 -DDEFAULT_CHARSET=utf8 \ 12 -DDEFAULT_COLLATION=utf8_general_ci \ 13 -DWITH_EXTRA_CHARSETS=all \ 14 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 15 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ 16 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 17 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ 18 -DMYSQL_DATADIR=/usr/local/mysql/data \ 19 -DWITH_BOOST=boost \ 20 -DWITH_SYSTEMD=1 21 22 make && make install
(4)修改 MySQL 配置文件
1 vim /etc/my.cnf 2 3 [client] 4 port = 3306 5 socket=/usr/local/mysql/mysql.sock 6 7 [mysqld] 8 user = mysql 9 basedir=/usr/local/mysql 10 datadir=/usr/local/mysql/data 11 port = 3306 12 character-set-server=utf8 13 pid-file = /usr/local/mysql/mysqld.pid 14 socket=/usr/local/mysql/mysql.sock 15 bind-address = 0.0.0.0 16 skip-name-resolve 17 max_connections=2048 18 default-storage-engine=INNODB 19 max_allowed_packet=16M 20 server-id = 1 21 22 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
(5)更改 MySQL 安装目录和配置文件的属主属组
1 chown -R mysql:mysql /usr/local/mysql/ 2 chown mysql:mysql /etc/my.cnf
(6)设置路径环境变量
1 echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile 2 source /etc/profile
(7)初始化数据库
1 cd /usr/local/mysql/bin/ 2 3 mysqld \ 4 --initialize-insecure \ 5 --user=mysql \ 6 --basedir=/usr/local/mysql \ 7 --datadir=/usr/local/mysql/data
(8)添加 MySQL 系统服务
1 cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ 2 systemctl daemon-reload 3 systemctl start mysqld.service 4 systemctl enable mysqld
(9)修改 MySQL 的登录密码
1 mysqladmin -u root -p password "abc123"
(10)授权远程登录
1 mysql -u root -p
(1)安装 MySQL 环境依赖包
(2)创建运行用户
(3)编译安装
(4)修改 MySQL 配置文件
(5)更改 MySQL 安装目录和配置文件的属主属组
(6)设置路径环境变量
(7)初始化数据库
(8)添加 MySQL 系统服务
(9)授权远程登录
(1)安装环境依赖包
1 yum -y install gd \ 2 libjpeg libjpeg-devel \ 3 libpng libpng-devel \ 4 freetype freetype-devel \ 5 libxml2 libxml2-devel \ 6 zlib zlib-devel \ 7 curl curl-devel \ 8 openssl openssl-devel
(2)编译安装
1 cd /opt 2 tar xjvf php-7.1.10.tar.bz2 3 4 cd php-7.1.10 5 6 ./configure \ 7 --prefix=/usr/local/php \ 8 --with-mysql-sock=/usr/local/mysql/mysql.sock \ 9 --with-mysqli \ 10 --with-zlib \ 11 --with-curl \ 12 --with-gd \ 13 --with-jpeg-dir \ 14 --with-png-dir \ 15 --with-freetype-dir \ 16 --with-openssl \ 17 --enable-fpm \ 18 --enable-mbstring \ 19 --enable-xml \ 20 --enable-session \ 21 --enable-ftp \ 22 --enable-pdo \ 23 --enable-tokenizer \ 24 --enable-zip 25 26 make && make install
(3)路径优化
1 ln -s /usr/local/php/bin/* /usr/local/bin/
(4)调整 PHP 配置文件
php 有三个配置文件:
- php.ini 主配置文件
- php-fpm.conf 进程服务配置文件
- www.conf 扩展配置文件
1 调整主配置文件: 2 3 cp /opt/php-7.1.10/php.ini-development /usr/local/php/php.ini 4 vim /usr/local/php/php.ini 5 --1170行--修改 6 mysqli.default_socket = /usr/local/mysql/mysql.sock 7 --939行--取消注释,修改 8 date.timezone = Asia/Shanghai 9 10 php -m #验证安装的模块
1 调整进程服务配置文件: 2 3 cd /usr/local/php/etc/ 4 cp php-fpm.conf.default php-fpm.conf 5 vim php-fpm.conf 6 --17行--去掉";"注释 7 pid = run/php-fpm.pid
1 调整扩展配置文件: 2 3 cd /usr/local/php/etc/php-fpm.d/ 4 cp www.conf.default www.conf
(5)启动 php-fpm
1 /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini 2 netstat -anpt | grep 9000
PHP-FPM (FastCGI Process Manager:FastCGI 进程管理器) 是一个 PHPFastCGI 管理器, 由于Nginx服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 进程进行解析。
(6)配置 Nginx 支持 PHP 解析
1 vi /usr/local/nginx/conf/nginx.conf 2 3 --65行--取消注释,修改 4 location ~ \.php$ { 5 root html; 6 fastcgi_pass 127.0.0.1:9000; 7 fastcgi_index index.php; 8 fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #将/scripts修改为nginx的工作目录 9 include fastcgi_params; 10 } 11 12 systemctl restart nginx.service
(7)验证 PHP 测试页
1 vim /usr/local/nginx/html/index.php 2 3 <?php 4 phpinfo(); 5 ?>
(8)验证数据库工作是否正常
1 mysql -u root -p 2 CREATE DATABASE bbs; 3 GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123'; 4 GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123'; 5 flush privileges; 6 7 vim /usr/local/nginx/html/index.php #替换原来的测试页内容 8 9 <?php 10 $link=mysqli_connect('192.168.195.128','bbsuser','admin123'); 11 if($link) echo "<h1>Success!!</h1>"; 12 else echo "Fail!!"; 13 ?>
(1)安装环境依赖包
(2)编译安装
(3)路径优化
(4)调整 PHP 配置文件
(5)启动 php-fpm
(6)配置 Nginx 支持 PHP 解析
(7)验证 PHP 测试页
(8)验证数据库工作是否正常
-