Linux云计算架构-部署LAMP架构

我会带着你远行 2023-02-20 02:11 156阅读 0赞

Linux云计算架构-部署LAMP架构

1. 什么是LAMP架构

LAMP=Linux + Apache + MySQL/MariaDB + PHP/Perl/Python

以上软件都是开源免费的。

LAMP和LNMP是两种网站解决方案,而LAMP注重安全、更强大,对php的运行较为稳定。LNMP注重性能,处理高并发能力强、负载高。

发展方向:Apache和Nginx的结合。

Apache官网:http://httpd.apache.org/

常见网页类型:htm,html,shtml,stm.php,asp,aspx,shtm,jsp 等。

Apache本身只处理静态页面,动态页面由libphp5.so模块处理。

Apache工作原理:Apache 本身只处理 html 静态语言页面,当客户端需要访问 php 页面的时候,Apache 会调用libphp5.so 这个模块去工作,这个模块会把 php 页面转换成 html 静态页面,让 Apache 处理,Apache处理后,会返回给客户端。

在这里插入图片描述

LAMP 相关网站:

Apache:http://httpd.apache.org/ #httpd 主程序包

MySQL:http://dev.mysql.com/downloads/mysql/ #mysql 主程序包

PHP:http://php.net/downloads.php #php 主程序包

apr:http://apr.apache.org/ #apr 是 httpd 的依赖包

apr-util:http://apr.apache.org/ #apr-util 是 httpd 的第二个依赖包

apr 和 apr-util 这两个软件是对后端服务软件进行优化的。apr-util 只是在 apr 的基础上提供了更多的数据结构和操作系统封装接口而已。

pcre 是 httpd 的第三个依赖包 http://pcre.org/

PCRE(Perl Compatible Regular Expressions 中文含义:perl 语言兼容正则表达式) 是一个用 C 语言编写的正则表达式函数库,PCRE 被广泛使用在许多开源软件之中,最著名的莫过于 Apache HTTP 服务器和 PHP 脚本语言、R 脚本语言,此外,正如从其名字所能看到的,PCRE 也是 perl 语言的缺省正则库。

2. 部署LAMP架构

2.1 部署前准备

  1. # 需要安装的源码包
  2. httpd-2.4.37.tar.gz #Apache 主程序包
  3. apr-1.6.2.tar.gz #Apache 依赖包
  4. apr-util-1.6.0.tar.gz #Apache 依赖包
  5. pcre-8.41.tar.gz #Apache 依赖包
  6. php-7.1.24.tar #php 主程序包
  7. mysql-5.7.19.tar.gz #mysql 主程序包
  8. # 下载源码包,我这里已经下好了。
  9. https://mirrors.aliyun.com/apache/httpd/httpd-2.4.37.tar.gz
  10. http://archive.apache.org/dist/apr/apr-1.6.2.tar.gz
  11. http://archive.apache.org/dist/apr/apr-util-1.6.0.tar.gz
  12. ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
  13. [root@master ~]# cd /usr/local/src/
  14. [root@master src]# ls
  15. apr-1.6.2.tar.gz libmcrypt-2.5.8.tar.gz nginx-1.14.1.tar.gz
  16. apr-util-1.6.0.tar.gz mcrypt-2.6.8.tar.gz pcre-8.41
  17. boost_1_59_0 mhash-0.9.9.9.tar.gz pcre-8.41.tar.gz
  18. boost_1_59_0.tar.gz mysql-5.7.19 php-7.1.24
  19. httpd-2.4.37.tar.gz mysql-5.7.19.tar.gz php-7.1.24.tar.gz
  20. libiconv-1.14.tar.gz nginx-1.14.1

2.2 安装Apache

  1. # 环境准备,epel下载比较慢
  2. [root@master ~]# yum -y install make gcc gcc-c++ openssl openssl-devel expat-devel
  3. # 解压、编译前准备、编译、编译安装依赖包apr
  4. [root@master ~]# cd /usr/local/src/
  5. [root@master src]# tar xzvf apr-1.6.2.tar.gz
  6. [root@master src]# cd apr-1.6.2/
  7. [root@master apr-1.6.2]# ./configure --prefix=/usr/local/apr/
  8. [root@master apr-1.6.2]# make && make install
  9. # 解压、编译前准备、编译、编译安装依赖包apr-util
  10. [root@master ~]# cd /usr/local/src/
  11. [root@master src]# tar xzvf apr-util-1.6.0.tar.gz
  12. [root@master apr-util-1.6.0]# cd apr-util-1.6.0/
  13. [root@master apr-util-1.6.0]# ./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr/bin/apr-1-config
  14. [root@master apr-util-1.6.0]# make && make install
  15. # 解压、编译前准备、编译、编译安装依赖包pcre
  16. [root@master ~]# cd /usr/local/src/
  17. [root@master src]# tar xzvf pcre-8.41.tar.gz
  18. [root@master src]# cd pcre-8.41/
  19. [root@master pcre-8.41]# ./configure --prefix=/usr/local/pcre/
  20. [root@master pcre-8.41]# make && make install
  21. # 解压、编译前准备、编译、编译安装Apache
  22. # 解压
  23. [root@master ~]# cd /usr/local/src/
  24. [root@master src]# tar xzvf httpd-2.4.37.tar.gz
  25. # 编译前准备
  26. [root@master src]# cd httpd-2.4.37/
  27. [root@master 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
  28. # --prefix=/usr/local/apache #安装路径
  29. # --enable-so #支持动态加载模块
  30. # --enable-rewrite #支持网站地址重写
  31. # --enable-ssl #支持SSL加密
  32. # --with-pcre=/usr/local/pcre #pcre 路径
  33. # --with-apr=/usr/local/apr #apr路径
  34. # --with-apr-util=/usr/local/apr-util #apr-util路径
  35. # 编译、编译安装
  36. [root@master httpd-2.4.37]# make && make install
  37. # 查看httpd配置文件
  38. [root@master ~]# ll /usr/local/apache/conf/httpd.conf
  39. -rw-r--r--. 1 root root 18535 6 20 21:27 /usr/local/apache/conf/httpd.conf
  40. # 查看httpd网站根目录
  41. [root@master ~]# ls /usr/local/apache/htdocs/
  42. index.html
  43. # 生成启动脚本,即是把启动程序放到/etc/init.d/目录下
  44. [root@master ~]# cp /usr/local/apache/bin/apachectl /etc/init.d/
  45. [root@master ~]# chmod +x /etc/init.d/apachectl
  46. # Apache系统服务脚本,权限为754,以便使用systemctl命令管理服务
  47. [root@master ~]# vim /usr/lib/systemd/system/apache.service
  48. [Unit]
  49. Description=apache
  50. After=network.target
  51. [Service]
  52. Type=forking
  53. ExecStart=/etc/init.d/apachectl start
  54. ExecReload=/etc/init.d/apachectl restart
  55. ExecStop=/etc/init.d/apachectl stop
  56. PrivateTmp=true
  57. [Install]
  58. WantedBy=multi-user.target
  59. [root@master ~]# chmod 754 /usr/lib/systemd/system/apache.service
  60. # 启动apache服务,并设置自启动
  61. [root@master ~]# /etc/init.d/apachectl start
  62. AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::a72:3f13:abf8:1330. Set the 'ServerName' directive globally to suppress this message
  63. (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
  64. (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
  65. no listening sockets available, shutting down
  66. AH00015: Unable to open logs
  67. # 如果启动不了,可以检测下80端口是不是被占用了。我这里之前装了nginx占用了,现在先停了nginx。然后再重新启动
  68. [root@master ~]# netstat -antup | grep 80
  69. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9496/nginx: master
  70. tcp 1 0 192.168.8.116:53780 150.65.7.130:80 CLOSE_WAIT 11497/python
  71. tcp 1 0 192.168.8.116:41980 203.84.157.10:80 CLOSE_WAIT 11497/python
  72. [root@master ~]# /etc/init.d/nginx stop
  73. [root@master ~]# netstat -antup | grep 80
  74. tcp 1 0 192.168.8.116:53780 150.65.7.130:80 CLOSE_WAIT 11497/python
  75. tcp 1 0 192.168.8.116:41980 203.84.157.10:80 CLOSE_WAIT 11497/python
  76. # 启动apache服务,并设置自启动
  77. [root@master ~]# systemctl start apache
  78. [root@master ~]# systemctl enable apache
  79. Created symlink from /etc/systemd/system/multi-user.target.wants/apache.service to /usr/lib/systemd/system/apache.service.
  80. # 创建用户apache,用来运行httpd服务,修改httpd服务的配置文件,设置运行用户名和组名为apache。
  81. [root@master ~]# ps aux | grep apache
  82. root 49122 0.0 0.0 99536 2576 ? Ss 21:40 0:00 /usr/local/apache/bin/httpd -k start
  83. daemon 49129 0.1 0.1 388448 4404 ? Sl 21:40 0:00 /usr/local/apache/bin/httpd -k start
  84. daemon 49130 0.0 0.1 388448 4404 ? Sl 21:40 0:00 /usr/local/apache/bin/httpd -k start
  85. daemon 49131 0.1 0.1 388448 4404 ? Sl 21:40 0:00 /usr/local/apache/bin/httpd -k start
  86. root 49260 0.0 0.0 112724 988 pts/0 S+ 21:42 0:00 grep --color=auto apache
  87. [root@master ~]# useradd -M -s /sbin/nologin apache
  88. [root@master ~]# vim /usr/local/apache/conf/httpd.conf
  89. 166 User apache
  90. 167 Group apache
  91. # 修改源码包安装位置的用户权限,所有者和所属组为apache
  92. [root@master ~]# chown -R apache:apache /usr/local/apache/
  93. # 清空防火墙,用IP地址在浏览器上测试
  94. # 若不清空防火墙,用iptables或者firewall开放http服务的80端口号也是可以的,这里为了方便,直接清空了。
  95. # 出现以下界面,表示httpd服务已经安装成功了。
  96. [root@master ~]# iptables -F

在这里插入图片描述

2.3 安装并配置mysql

  1. # 删除系统自带的boost-*
  2. [root@master ~]# yum -y remove boost-*
  3. # 删除系统自带的mysql和mariadb-*
  4. [root@master ~]# yum -y remove mysql mariadb-*
  5. # 安装mysql依赖包
  6. [root@master ~]# yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel
  7. # 创建mysql组和mysql用户
  8. [root@master ~]# groupadd mysql
  9. [root@master ~]# useradd -M -s /sbin/nologin -g mysql mysql
  10. # 下载mysql源码包
  11. http://www.mysql.com/Downloads/MySQL-5.7/mysql-5.7.19.tar.gz
  12. # 下载boost源码包
  13. http://liquidtelecom.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
  14. # 我这里已经下载好了,直接解压
  15. [root@master ~]# cd /usr/local/src
  16. root@master src]# tar xzvf mysql-5.7.19.tar.gz
  17. root@master src]# tar xzvf boost_1_59_0.tar.gz
  18. [root@master src]# ls
  19. boost_1_59_0 mhash-0.9.9.9.tar.gz pcre-8.41
  20. boost_1_59_0.tar.gz mysql-5.7.19 pcre-8.41.tar.gz
  21. libiconv-1.14.tar.gz mysql-5.7.19.tar.gz php-7.1.24.tar.gz
  22. libmcrypt-2.5.8.tar.gz nginx-1.14.1
  23. mcrypt-2.6.8.tar.gz nginx-1.14.1.tar.gz
  24. # 规划安装目录
  25. # 数据目录最好是一个单独的分区或者RAID或者LVM,便于日后的磁盘维护和扩容
  26. # 对于读写频繁的业务,可采用SSD固态硬盘存储数据
  27. 安装目录: /var/lib/mysql
  28. 数据目录: /var/lib/mysql/data
  29. [root@master ~]# mkdir -p /var/lib/mysql/data
  30. [root@master ~]# chown -R mysql:mysql /var/lib/mysql/
  31. [root@master ~]# ll -d /var/lib/mysql/
  32. drwxr-xr-x. 3 mysql mysql 18 6 20 15:31 /var/lib/mysql/
  33. # 编译前准备
  34. [root@master 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
  35. # -DCMAKE_INSTALL_PREFIX=/var/lib/mysql 指定MySQL程序的安装目录,默认/usr/local/mysql
  36. # -DMYSQL_DATADIR=/var/lib/mysql/data 数据文件目录
  37. # -DSYSCONFDIR=/etc 初始化参数文件目录
  38. # -DWITH_MYISAM_STORAGE_ENGINE=1 指定静态编译到 mysql 的存储引擎,MyISAM,MERGE
  39. # -DWITH_INNOBASE_STORAGE_ENGINE=1
  40. # -DWITH_MEMORY_STORAGE_ENGINE=1
  41. # -DWITH_READLINE=1
  42. # -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock socket文件路径,默认/tmp/mysql.sock
  43. # -DMYSQL_TCP_PORT=3306 服务端口号,默认 3306
  44. # -DENABLED_LOCAL_INFILE=1 指定是否允许本地执行
  45. # -DWITH_PARTITION_STORAGE_ENGINE=1
  46. # -DEXTRA_CHARSETS=all
  47. # -DDEFAULT_CHARSET=utf8 指定服务器默认字符集,默认 latin1
  48. # -DDEFAULT_COLLATION=utf8_general_ci 指定服务器默认的校对规则,默认 latin1_general_ci
  49. # -DDOWNLOAD_BOOST=1
  50. # -DWITH_BOOST=/usr/local/src/boost_1_59_0
  51. # 编译
  52. # -j 用来指定CPU核心数,可加快编译速度。 加 -j 4 用4核心来编译的,可以提高编译速度;要确定CPU有多少核先。
  53. # 查看服务器 CPU 核心数
  54. [root@master mysql-5.7.19]# grep processor /proc/cpuinfo | wc -l
  55. 8
  56. # 编译时估计要等几分钟
  57. # 若是遇到报错,可以删除mysql解压目录下的文件CMakeCache.txt文件,重新进行一次编译前准备(cmake)和编译(make),第二次应该是不会报错的。
  58. # 报错如下:
  59. #make[2]: *** [libmysqld/CMakeFiles/sql_embedded.dir/__/sql/item_geofunc.cc.o] 错误 4
  60. [root@master mysql-5.7.19]# make -j 4
  61. # 编译安装
  62. [root@master mysql-5.7.19]# make install
  63. [root@master ~]# vim /etc/my.cnf
  64. [mysqld]
  65. basedir=/var/lib/mysql
  66. datadir=/var/lib/mysql/data
  67. port=3306
  68. socket=/var/lib/mysql/mysql.sock
  69. character-set-server=utf8
  70. log-error=/var/log/mysqld.log
  71. pid-file=/tmp/mysqld.pid
  72. [mysql]
  73. socket=/var/lib/mysql/mysql.sock
  74. [client]
  75. socket=/var/lib/mysql/mysql.sock
  76. # 添加环境变量
  77. [root@master ~]# vim /etc/profile.d/mysql.sh
  78. export PATH=/var/lib/mysql/bin:$PATH
  79. # 使环境变量生效
  80. root@master ~]# chmod +x /etc/profile.d/mysql.sh
  81. [root@master ~]# /etc/profile.d/mysql.sh
  82. # 生成服务启动脚本
  83. [root@master ~]# cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld
  84. # 初始化数据库
  85. [root@master ~]# /var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
  86. # 启动mysqld服务
  87. [root@master ~]# /etc/init.d/mysqld start
  88. Starting MySQL.. ERROR! The server quit without updating PID file (/tmp/mysqld.pid).
  89. # 若报错,删除数据目录下文件,重新初始化再启动服务
  90. [root@master ~]# cd /var/lib/mysql/data/
  91. [root@master data]# ls
  92. auto.cnf ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1
  93. [root@master data]# rm -f *
  94. [root@master data]# /var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
  95. [root@master data]# /etc/init.d/mysqld start
  96. Starting MySQL. SUCCESS!
  97. # 登录mysql并设置root用户密码
  98. [root@master ~]# mysql
  99. Welcome to the MySQL monitor. Commands end with ; or \g.
  100. Your MySQL connection id is 3
  101. Server version: 5.7.19 Source distribution
  102. Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  103. Oracle is a registered trademark of Oracle Corporation and/or its
  104. affiliates. Other names may be trademarks of their respective
  105. owners.
  106. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  107. mysql> set password for root@localhost = password('123456');
  108. Query OK, 0 rows affected, 1 warning (0.00 sec)
  109. mysql> flush privileges;
  110. Query OK, 0 rows affected (0.00 sec)
  111. mysql> exit
  112. Bye
  113. [root@master ~]#

经历了漫长岁月,mysql也装好了。

2.4 安装并配置php

官网地址:http://php.net/

  1. # 添加epel服务的rpm包
  2. [root@master ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  3. 获取http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  4. 准备中... (10################################# [100%]
  5. 软件包 epel-release-7-12.noarch 已经安装
  6. # epel已安装后,可不运行以下两个命令。
  7. [root@master ~]# yum clean all
  8. [root@master ~]# yum list
  9. # 解决包依赖
  10. [root@master ~]# 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
  11. # 解压php源码包
  12. [root@master ~]# cd /usr/local/src/
  13. [root@master src]# tar xzvf php-7.1.24.tar.gz
  14. # 编译前准备
  15. [root@master src]# cd php-7.1.24/
  16. [root@master 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
  17. # --with-apxs2 #将 php 编译为 Apache 的一个模块进行使用
  18. # --enable-mbstring #多字节字符串的支持
  19. # --with-curl #支持 cURL
  20. # --with-gd #支持 gd 库
  21. # --enable-fpm #支持构建 fpm
  22. # --enable-mysqlnd #启用 mysqlnd
  23. # --with-pdo-mysql #支持 pdo:MySQL 支持
  24. # --with-config-file-path #设置配置文件路径
  25. # --with-mysqli #支持 MySQLi
  26. # --with-mysql-sock #关联 mysql 的 socket 文件
  27. # --enable-maintainer-zts #如果 Apache 是 event 模型,那需要指定 zts
  28. # 编译并安装
  29. [root@master php-7.1.24]# make -j 8 && make install
  30. #生成php自身配置文件
  31. [root@master ~]# cp /usr/local/src/php-7.1.24/php.ini-production /usr/local/php/php.ini
  32. # 编辑Apache的配置文件,以支持php
  33. [root@master ~]# vim /usr/local/apache/conf/httpd.conf
  34. 393 AddType application/x-httpd-php .php
  35. 394 AddType application/x-httpd-php-source .phps
  36. # 重启apache服务
  37. [root@master ~]# systemctl restart apache
  38. #在重启apache服务的时候,若是报错。可以使用命令systemctl status apache看看因为什么报错。
  39. # 我这里是因为nginx占用了80端口号,暂时停掉nginx服务。
  40. [root@master ~]# netstat -antup | grep nginx
  41. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9362/nginx: master
  42. [root@master ~]# /etc/init.d/nginx stop
  43. [root@master ~]# netstat -antup | grep nginx
  44. [root@master ~]# systemctl restart apache
  45. # 创建测试php页面,并清空防火墙。
  46. # 如果不清空防火墙,也可以开放http服务的80端口号。
  47. [root@master ~]# echo "<?php phpinfo(); ?>" > /usr/local/apache/htdocs/index.php
  48. [root@master ~]# iptables -F
  49. # 打开地址,可以看到下图界面,说明LAMP已经安装完毕了。
  50. http://192.168.8.116/index.php

在这里插入图片描述

3. LAMP架构和LNMP架构的区别

这里简单提几点区别:
①Apache和Nginx的工作原理和部署不同
②php部署时,编译前准备时选项不同
③源码安装Apache和Nginx的网站数据目录不同
④处理php页面的方式不同

以上就是LAMP架构的整个部署了,有不懂的可以留言评论,私聊不回。

这个周末就快过去了,学习了LNMP和LAMP架构的部署,加油!!!

发表评论

表情:
评论列表 (有 0 条评论,156人围观)

还没有评论,来说两句吧...

相关阅读

    相关 计算平台架构

    云计算的体系结构由5部分组成,分别为应用层,平台层,资源层,用户访问层和管理层,云计算的本质是通过网络提供服务,所以其体系结构以服务为核心。 如下图: ![20110722