企业集群架构----LAMP
前言:
-
Linux操作系统之所以能够在十余年的时间里发展壮大以至于风靡全球,其开放源代码的特性是很重要的原因之一,及Linux操作系统中包括内核在内的所有软件都可以获得源代码,并且可以经过定制修改后编译安装。
-
虽然现代的Linux发行版本大部分采用包管理机制对软件进行打包安装,可以省去软件的编译安装过程,但是还有些情况需要使用源代码编译的方式为系统安装新的应用程序。
一: LAMP架构与编译安装
1.1: Apache起源
- 源于A Patchy Server,著名的开源Web服务软件
1995年时,发布Apache服务程序的1.0版本
由Apache软件基金会(ASF) 负责维护
最新的名称为“Apache HTTP Server”
官方站点: htp://ttpd.apache.org/
1.2: Apache 版本与特点
- 主要特点
开放源代码、跨平台应用
支持多种网页编程语言
模块化设计、运行稳定、良好的安全性 - 软件版本
1.X
目前最高版本是1.3,运行稳定
向下兼容性较好, 但缺乏一些较新的功能
2.X
目前最高版本是2.4
具有更多的功能特性
与1.X相比, 配置管理风格存在较大差异
1.3:构建LAMP平台顺序
-
在构建LAMP平台时,各组件的安装顺序依次为Linux,Apache,MySQL,PHP
-
其中Apache和MySQL的安装并没有严格的顺序要求,而PHP环境的安装一般放到最后,负责沟通web服务器和数据库系统以协同工作
1.4:编译安装的优点
- 具有较大的自由度,功能可定制
可及时获得最新的软件版本
普遍适用于大多数Linux版本,便于一直使用
二: Apache编译安装
2.1: 环境准备
- VMware软件
centos7操作系统
准备Apache服务的源码包
Apache跨平台组件包准备
2.2: 源码编译安装过程理论
2.2.1: 解决依赖关系
- 忽略软件包依赖性
卸载httpd及相关依赖包
[root@promote ~]# rpm -e httpd --nodeps '忽略软件包依赖性'
[root@promote ~]# yum install -y apr-util-devel pcre-devel
'apr-util-devel 支持跨平台应用'
'pcre-devel 支持正则表达式'
-
安装编译器
[root@promote opt]# yum -y install \ > gcc \ '//编译器' > gcc-c++ \ '//编译器' > make \ '//make工具' > pcre-devel \ '//支持正则表达式的工具' > expat-devel \ '//使网站能解析标签语言的工具' > perl '//Perl语言工具' > ...省略内容
2.2.2: 源码编译及安装
-
解压,编译
-
[root@promote ~]# tar zxf httpd-2.4.25.tar.gz -C /usr/src [root@promote ~]# cd /usr/src/ttpd-2.4.25/ [root@promote httpd-2.4. 25]# ./configure --prefix=/usr/local/httpd --enable- So --enable-rewrite. --enable-charset-lite --enable-cgi [root@promote httpd-2.4.25]# make && make install '--prefix= 指定安装路径' 'enable-so 开启核心功能模块' 'enable-rewrite 开启重写功能,一般用于防盗链' 'enable-charset-lite 指定字符集' 'enable=cgi 底层网关的通用接口'
2.2.3: 确认安装结果
[root@promote ~]# ls /usr/local/httpd
bin cgi-bin error icons logs manual
build conf htdocs include man modules
2.2.4: 优化执行路径
[root@promote ~]# ln -S /usr/local/httpd/bin/* /usr/local/bin
[root@promote ~]# ls -l /usr/local/bin/httpd /usr/local/bin/apachectl
lrwxrwxrwx 1 root root 30 5月10 06:20 /usr/local/bin/apachectl ->
/usr/local/httpd/bin/apachectl
lrwxrwxrwx 1 root root 26 5月10 06:20 /usr/local/bin/httpd ->
/usr/local/httpd/bin/httpd
2.2.5: 添加httpd系统服务
- 通过systemctl 进行管理系统服务
[root@promote system]# vim /lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart=/usr/local/bin/apachectl $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RetartSec=42s
[Install]
WantedBy=graphical.target
2.2.6: web站点部署过程
-
确定网站名字、IP地址
-
配置并启动httpd服务
[root@promote ~]# vim /usr/local/httpd/conf/httpd.conf ServerName www.kgc.com Listen 80 [root@promote ~]# /usr/local/httpd/bin/apachectl -t Syntax OK L[root@promote ~ # systemctl restart httpd
2.3: HTTP服务文件
2.3.1: httpd服务文件
-
主要目录和文件
- 服务目录: /usr/local/httpd/
- 主配置文件: /usr/local/httpd/conf/httpd.conf
- 网页目录: /usr/local/httpd/htpdocs/
- 服务脚本: /usr/local/httpd/bin/apachectl
- 执行程序: /usr/local/httpd/bin/httpd
- 访问日志: /usr/local/httpd/log/access_log
- 错误日志: /usr/local/httpd/log/err_log
-
httpd.conf 配置文件
全局配置项: 决定httpd服务器的全局运行参数
ServerRoot "/usr/local/httpd" Listen 80 //修改项 User daemon Group daemon ServerAdmin webmaster@kgc.com ServerName www.kgc.com //修改项 DocumentRoot "/usr/local/httpd/htdocs" DirectoryIndex index.html index.php ErrorLog logs/error_ log LogLevel warn CustomLog logs/access_log common PidFile logs/httpd.pid CharsetDefault UTF-8 Include conf/extra/httpd-default.conf ......
-
httpd.conf常用的全局配置参数 (用于优化)
- ServerRoot:服务目录
- Listen:监听的IP地址、端口号
- User:运行服务的用户身份
- Group:运行服务的组身份
- ServerAdmin:管理员邮箱
- ServerName:网站服务器的域名
- DocumentRoot:网页文档的根目录
- DirectoryIndex:默认的索引页文件
- ErrorLog:设置错误日志文件的路径
- LogLevel:记录日志的级别,默认为warn
- CustomLog:访问日志文件的位置
- PidFile: 保存httpd进程PID号的文件
- AddDefaultCharset:设置站点中网页默认的字符集编码
- Timeout:网络连接超时,默认为300秒
- KeepAlive:是否保持连接,可选On或Off
- MaxKeepAliveRequests:每次连接最多请求文件数
- KeepAlive Timeout:保持连接状态时的超时时间
- Include:需要包含进来的其他配置文件
2.3.2: 区域配置项
-
使用一对组合标记,限定了配置项的作用范围
<Directory /> //标记起点 Options FollowSymLinks AllowOverride none Require all denied </Directory> //标记终点
2.4: HTTP编译安装实战演示
//关闭防火墙及核心防护;上传压缩包
[root@promote ~]# iptables -F
[root@promote ~]# setenforce 0
[root@promote opt]# mkdir apache mysql php
[root@promote opt]# cd apache
[root@promote apache]# rz -E
rz waiting to receive.
[root@promote apache]# ls
apr-1.6.2.tar.gz httpd-2.4.29.tar.bz2
apr-util-1.6.0.tar.gz
//解压压缩包
[root@promote apache]# tar zxvf apr-1.6.2.tar.gz
...省略内容
[root@promote apache]# tar zxvf apr-util-1.6.0.tar.gz
...省略内容
[root@promote apache]# tar jxvf httpd-2.4.29.tar.bz2
...省略内容
[root@promote apache]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[root@promote apache]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
//安装编译环境
[root@promote apache]# yum -y install gcc gcc-c++ make pcre-devel
//找到configure所在位置,配置
[root@promote yum.repos.d]# cd /opt
[root@promote opt]# ls
apache mysql php rh
[root@promote apache]# ls
apr-1.6.2.tar.gz httpd-2.4.29
apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
[root@promote apache]# cd httpd-2.4.29/
[root@promote httpd-2.4.29]# ls
ABOUT_APACHE docs Makefile.win
acinclude.m4 emacs-style modules
Apache-apr2.dsw httpd.dep NOTICE
Apache.dsw httpd.dsp NWGNUmakefile
apache_probes.d httpd.mak os
ap.d httpd.spec README
build include README.cmake
BuildAll.dsp INSTALL README.platforms
BuildBin.dsp InstallBin.dsp ROADMAP
buildconf LAYOUT server
CHANGES libhttpd.dep srclib
CMakeLists.txt libhttpd.dsp support
config.layout libhttpd.mak test
configure LICENSE VERSIONING
configure.in Makefile.in
[root@promote httpd-2.4.29]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
//编译安装
[root@promote httpd-2.4.29]# make '//编译'
[root@promote httpd-2.4.29]# make install '//安装'
//添加启动脚本到service管理
[root@promote httpd-2.4.29]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@promote httpd-2.4.29]# vim /etc/init.d/httpd
....
# chkconfig: 35 85 21
# description: Apache is a world wide web server
[root@promote httpd-2.4.29]# chkconfig --add httpd
[root@promote httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf
//修改配置文件
[root@promote httpd-2.4.29]# vim /etc/httpd.conf
'//搜索ServerName,修改#ServerName www.example.com:80,若使用域名,则必须修改'
...省略内容
ServerName www.abc.com:80
...省略内容
'//搜索Listen,修改#Listen 12.34.56.78:80 Listen 80'
...省略内容
Listen 192.168.100.120:80 '//开启IPv4并监听自己的IP地址'
#Listen 80 '//关闭IPv6监听'
...省略内容
//添加启动脚本到systemctl管理
[root@promote httpd-2.4.29]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
[root@promote httpd-2.4.29]# ls /usr/local/httpd/bin/
ab apxs envvars-std htdigest logresolve
apachectl checkgid fcgistarter htpasswd rotatelogs
apr-1-config dbmmanage htcacheclean httpd
apu-1-config envvars htdbm httxt2dbm
[root@promote httpd-2.4.29]# httpd -t
Syntax OK
[root@promote httpd-2.4.29]# systemctl start httpd
[root@promote httpd-2.4.29]# netstat -ntap | grep 80
tcp 0 0 192.168.100.120:80 0.0.0.0:* LISTEN 98525/httpd
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 65809/sshd: root@pt
tcp 0 0 192.168.100.120:22 192.168.100.1:58742 ESTABLISHED 65809/sshd: root@pt
tcp6 0 0 ::1:6010 :::* LISTEN 65809/sshd: root@pt
登陆检验页面访问
三:MySQL服务源码编译安装
3.1:MySQL概述
- MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。
- MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。
- MySQL是一个真正的多线程,多用户的SQL数据库服务,凭借其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
3.2:源码编译安装过程
3.2.1:环境准备
[root@prompt opt]# yum install ncurses-devel autoconf cmake -y
'//ncurses-devel是字符终端下屏幕控制的基本库'
'//autoconf生成可以自动配置软件源代码'
'//cmake跨平台编译安装工具'
[root@promote ~]# cd /opt
[root@promote opt]# ls
apache mysql php rh
[root@promote opt]# cd mysql
[root@promote mysql]# ls
[root@promote mysql]# rz -E
rz waiting to receive.
[root@promote mysql]# ls
mysql-5.6.26.tar.gz
[root@promote mysql]# tar zxvf mysql-5.6.26.tar.gz
[root@promote mysql]# ls
mysql-5.6.26 mysql-5.6.26.tar.gz
3.2.2:cmake配置
[root@prompt mysql-5.6.26]# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ '//指定路径'
> -DDEFAULT_CHARSET=utf8 \ '//指定字符集'
> -DDEFAULT_COLLATION=utf8_general_ci \ '//指定字符集'
> -DEXTRA_CHARSETS=all \ '//指定字符集'
> -DSYSCONFIDIR=/etc \ '//指定配置文件目录'
> -DMYSQL_DATADIR=/home/mysql/ \ '//指定数据文件目录,由mysql用户管理'
> -DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock '//指定通信文件,连接数据库的必要文件'
> ...省略内容
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock
3.2.3:make编译和make install
[root@promote mysql-5.6.26]# make && make install
3.2.4:复制配置文件和脚本文件
[root@promote mysql-5.6.26]# cp support-files/my-default.cnf /etc/my.cnf
cp: overwrite ‘/etc/my.cnf’? y
[root@promote mysql-5.6.26]# cp support-files/mysql.server /etc/init.d/mysqld
3.2.5:配置脚本文件和命令环境
[root@promote mysql-5.6.26]# cd /etc/init.d/
[root@prompt init.d]# ls
functions httpd mysqld netconsole network README
[root@promote init.d]# ls -l
total 56 '//发现mysqld文件没有执行权限'
-rw-r--r--. 1 root root 18281 8月 24 2018 functions
-rwxr-xr-x. 1 root root 3503 8月 3 15:49 httpd
-rw-r--r--. 1 root root 10870 8月 3 20:12 mysqld
-rwxr-xr-x. 1 root root 4569 8月 24 2018 netconsole
-rwxr-xr-x. 1 root root 7923 8月 24 2018 network
-rw-r--r--. 1 root root 1160 10月 31 2018 README
[root@promote init.d]# chmod 755 mysqld
[root@promote init.d]# ls
functions httpd mysqld netconsole network README
[root@promote init.d]# chkconfig --add /etc/init.d/mysqld '//将mysqld添加到service服务管理'
[root@promote init.d]# chkconfig --level 35 mysqld on '//设置mysqld在运行级别3和5都是开启的'
[root@promote init.d]# echo "PATH=$PATH:/usr/local/mysql/bin">> /etc/profile '//设置mysql命令到/etc/profile中寻找'
[root@promote init.d]# source /etc/profile '//使命令不需重启立即生效'
[root@promote init.d]# echo $PATH '//查看环境'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin
3.2.6:添加用户
[root@localhost init.d]# useradd -s /sbin/nologin mysql '//添加用户,指定shell,禁止用户登录系统'
[root@localhost init.d]# id mysql
uid=1001(mysql) gid=1001(mysql) groups=1001(mysql)
[root@localhost init.d]# chown -R mysql.mysql /usr/local/mysql '//设置属主和数组'
[root@localhost local]# cd /usr/local/mysql/
[root@localhost mysql]# ls -l
总用量 152
drwxr-xr-x. 2 mysql mysql 4096 8月 3 20:07 bin
-rw-r--r--. 1 mysql mysql 17987 7月 15 2015 COPYING
drwxr-xr-x. 3 mysql mysql 18 8月 3 20:07 data
drwxr-xr-x. 2 mysql mysql 55 8月 3 20:07 docs
drwxr-xr-x. 3 mysql mysql 4096 8月 3 20:07 include
-rw-r--r--. 1 mysql mysql 104897 7月 15 2015 INSTALL-BINARY
drwxr-xr-x. 3 mysql mysql 4096 8月 3 20:07 lib
drwxr-xr-x. 4 mysql mysql 30 8月 3 20:07 man
drwxr-xr-x. 10 mysql mysql 4096 8月 3 20:08 mysql-test
-rw-r--r--. 1 mysql mysql 2496 7月 15 2015 README
drwxr-xr-x. 2 mysql mysql 30 8月 3 20:07 scripts
drwxr-xr-x. 28 mysql mysql 4096 8月 3 20:08 share
drwxr-xr-x. 4 mysql mysql 4096 8月 3 20:08 sql-bench
drwxr-xr-x. 2 mysql mysql 136 8月 3 20:08 support-files
3.2.7:初始化数据库
[root@localhost mysql]# /usr/local/mysql/scripts/mysql_install_db \
> --user=mysql \
> --ldata=/var/lib/mysql \ ''
> --basedir=/usr/local/mysql \
> --datadir=/home/mysql
> ...省略内容
3.2.8:编辑启动脚本
[root@prompt mysql]# vim /etc/init.d/mysqld
'//搜索basedir'
...省略内容
'//修改这两段内容'
basedir=/usr/local/mysql '//添加工作路径'
datadir=/home/mysql '//添加数据路径'
...省略内容
3.2.9:启动服务并设置用户密码
[root@promote mysql]# service mysqld start
Starting MySQL.. SUCCESS!
[root@promote mysql]# netstat -ntap|grep 3306
tcp6 0 0 :::3306 :::* LISTEN 87565/mysqld
[root@promote mysql]# mysqladmin -u root -p password "abc123" '//给root用户设置密码'
'//mysqladmin -u用户名 -p旧密码 password 新密码'
Enter password: '//原本密码为空,直接回车即可'
Warning: Using a password on the command line interface can be insecure.
[root@promote mysql]# mysql -u root -p
Enter password: '//输入刚设置的密码abc123'
...省略内容
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye
四:PHP代码源码编译安装
4.1:PHP概述
- PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域
- PHP支持绝大多数流行的数据库,在数据库层面的操作功能十分强大,而且能够支持Unix,Windows,Linux等多种操作系统
4.2:源码编译过程
4.2.1:配置环境
[root@promote mysql]# yum -y install \
> gd \ '//安装GD库环境'
> libpng \
> libpng-devel \
> pcre \
> pcre-devel \
> libxml2-devel \
> libjpeg-devel
> ...省略内容
[root@promote mysql]# cd /opt
[root@promote opt]# ls
apr-1.6.2.tar.gz Discuz_X2.5_SC_UTF8.zip LAMP-php5.6.txt php-5.6.11.tar.bz2 apache mysql php rh
apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2 mysql-5.6.26.tar.gz
[root@localhost opt]# tar jxvf php-5.6.11.tar.bz2 -C /opt/php
4.2.2:configure配置
[root@promote opt]# cd php-5.6.11/
[root@promote php-5.6.11]# ls
...省略内容
[root@promote php-5.6.11]# ./configure \
> --prefix=/usr/local/php5 \ '//指定安装路径'
> --with-gd \ '//指定GD库'
> --with-zlib \ '//支持数据压缩函数库'
> --with-apxs2=/usr/local/httpd/bin/apxs \ '//设置Apache服务提供的apxs模块支持程序的文件位置'
> --with-mysql=/usr/local/mysql \ '//设置MySQL数据库服务程序的安装位置'
> --with-config-file-path=/usr/local/php5 \ '//设置PHP配置文件存放的位置'
> --enable-mbstring '//启用多字节字符串功能,以便支持中文等代码'
> ...省略内容
4.2.3:make编译和make install
[root@promote php-5.6.11]# make && make install
4.2.4:编辑配置文件
[root@promote php-5.6.11]# cp php.ini-development /usr/local/php5/php.ini '复制启动脚本方便管理'
[root@promote php-5.6.11]# ln -s /usr/local/php5/bin/* /usr/local/bin/ '//创建命令软链接'
[root@promote php-5.6.11]# vim /etc/httpd.conf
...省略内容 '//编辑php的默认首页'
<IfModule dir_module>
DirectoryIndex index.html index.php '//在此段文字后添加index.php'
</IfModule>
...省略内容
'//搜索php5,查看是否有下面文字,若没有,之前配置有问题,需要重新配置LAMP'
LoadModule php5_module modules/libphp5.so
'//搜索AddType,在下段文字后添加两行文字'
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php '//添加此行'
AddType application/x-httpd-php-source .phps '//添加此行'
4.2.5:重启Apache服务,配置PHP首页
[root@promote php-5.6.11]# service httpd stop
[root@promote php-5.6.11]# service httpd start
[root@promote php-5.6.11]# cd /usr/local/httpd/htdocs/
[root@promote htdocs]# ls
index.html
[root@promote htdocs]# vim index.html
'//原本内容可以删除,添加以下字段'
<?php
phpinfo();
?>
[root@promote htdocs]# mv index.html index.php
[root@promote htdocs]# ls
index.php
[root@promote htdocs]#
4.3:检查PHP是否搭建成功
五:LAMP架构搭建论坛
5.1:创建MySQL数据库并添加用户
[root@promote htdocs]# mysql -u root -p
...省略内容
mysql> create database bbs; '//创建数据库'
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bbs |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> grant all on bbs.* to 'bbsuser '@'%' identified by 'admin123'; '//给用户bbquser设置密码admin123并设置所有权限,所有终端都可登录'
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges; '//刷新数据库'
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
5.2:解压论坛压缩包,设置权限
上传论坛压缩包到/opt
[root@promote opt]# unzip Discuz_X2.5_SC_UTF8.zip
[root@promote opt]# ls
apache mysql readme upload
Discuz_X2.5_SC_UTF8.zip php rh utility
[root@promote opt]# cp -r upload/ /usr/local/httpd/htdocs/bbs '//将upload复制到Apache服务站点中'
[root@promote opt]# cd /usr/local/httpd/htdocs/
[root@promote htdocs]# ls
bbs index.php
[root@promote htdocs]# ls bbs
admin.php cp.php home.php portal.php uc_client
api crossdomain.xml index.php robots.txt uc_server
api.php data install search.php upload
archiver favicon.ico member.php source userapp.php
config forum.php misc.php static
connect.php group.php plugin.php template
[root@promote bbs]# chown -R daemon ./config
[root@promote bbs]# chown -R daemon ./data
[root@promote bbs]# chown -R daemon ./uc_client/
[root@promote bbs]# chown -R daemon ./uc_server/data/
5.3:论坛搭建网页设置
- 1.网址输入bbs后缀,点击我同意
2.点击下一步
3.选择全新安装,点击下一步
4.根据要求输入内容,设置密码123123
5.以上论坛安装成功,重新输入192.168.100.120 /bbs
6.进入后台,网址后缀重新输入/bbs/admin.php,用户名admin 密码123123
7.退出,注册普通用户
5.4:查看MySQL数据库
[root@promote htdocs]# mysql -uroot -p
Enter password: //abc123
mysql> use bbs
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------------------------+
| Tables_in_bbs |
+-----------------------------------+
| pre_common_admincp_cmenu |
| pre_common_admincp_group |
| pre_common_admincp_member |
| pre_common_admincp_perm |
| pre_common_admincp_session |
| pre_common_admingroup |
| pre_common_adminnote |
| pre_common_advertisement |
......