lamp環境應用實踐

LAMP之apache2.4.33

apache工做模式php

apache 經常使用工做模式有2種,區別在於
worker模式
1. 線程模式
2. 佔用資源少
3. 穩定性略差
4. 併發大

prefork模式
1. 進程模式
2. 佔用資源多
3. 穩定
4. 併發通常

默認apache是prefork模式
經過編譯--with-mpm=worker指定worker模式

1. apache2.4.33安裝html

檢查安裝apache所需的軟件mysql

[root@Poppy tools]# yum install pcre pcre-devel openssl openssl-devel zlib zlib-devel -y

報錯區少apr
configure: error: APR not found.  Please read the documentation.
http://archive.apache.org/dist/
[root@Poppy tools]# wget http://archive.apache.org/dist/apr/apr-1.6.3.tar.gz
[root@Poppy tools]# tar -xf apr-1.6.3.tar.gz
[root@Poppy tools]# cd apr-1.6.3
[root@Poppy tools]# ./configure --prefix=/application/apr-1.6.3
make && make install

報錯缺乏apr-util
configure: error: APR-util not found.  Please read the documentation.
[root@Poppy tools]# wget http://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz
[root@Poppy tools]# tar -zxf apr-util-1.6.1.tar.gz
[root@Poppy tools]# cd apr-util-1.6.1
[root@Poppy tools]# ./configure --prefix=/application/apr-util-1.6.1 --with-apr=/application/apr-1.6.3/
[root@Poppy tools]# make && make install

http包下載安裝nginx

www.apache.org   ---   https://mirrors.tuna.tsinghua.edu.cn/apache/
[root@Poppy tools]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.33.tar.gz
[root@Poppy tools]# tar xf httpd-2.4.33.tar.gz 
[root@Poppy tools]# cd httpd-2.4.33
[root@Poppy tools]# ./configure --prefix=/application/apache2.4.33 --enable-deflate --enable-expires --enable-headers --enable-modules=most --enable-so --with-mpm=worker --enable-rewrite --with-apr=/application/apr-1.6.3/ --with-apr-util=/application/apr-util-1.6.1/
[root@Poppy tools]# make & make install
[root@Poppy httpd-2.4.33]# ln -s /application/apache2.4.33/ /application/apache
--enable-deflate   壓縮
--enable-expires   客戶端緩存

apache目錄跟nginx目錄對比程序員

此目錄至關於nginx的html目錄,存放網站文件
[root@Poppy httpd-2.4.33]# ll /application/apache/htdocs/
-rw-r--r-- 1 root root 45 Jun 12  2007 index.html
[root@Poppy htdocs]# mkdir bbs www blog

此目錄至關於nginx的conf目錄,存放配置文件
[root@Poppy conf]# pwd
/application/apache/conf
[root@Poppy conf]# ls
extra  httpd.conf  magic  mime.types  original

2. apache虛擬主機配置算法

[root@Poppy conf]# vi httpd.conf 
# Virtual hosts. 477     打開虛擬主機文件
Include conf/extra/httpd-vhosts.conf 
[root@Poppy extra]# pwd
/application/apache/conf/extra
[root@Poppy extra]# ls httpd-vhosts.conf 
httpd-vhosts.conf
[root@Poppy extra]# cat httpd-vhosts.conf |grep -v "#"    虛擬主機配置

<VirtualHost *:80>
    ServerAdmin 111@qq.com                                郵箱
    DocumentRoot "/application/apache2.4.33/htdocs/www"   存放默認頁的目錄
    ServerName www.joker.com                              好像只能添加一個域名,不能後接多個,能夠寫ip地址
    ServerAlias joker.com                                 別名
    ErrorLog "logs/www-error_log"                         錯誤日誌
    CustomLog "logs/www-access_log" common                訪問日誌 </VirtualHost>

<VirtualHost *:80>
    ServerAdmin 111@qq.com
    DocumentRoot "/application/apache2.4.33/htdocs/blog"
    ServerName blog.joker.com
    ServerAlias blog.com
    ErrorLog "logs/blog-error_log"
    CustomLog "logs/blog-access_log" common
</VirtualHost>

3. 檢查語法和啓動sql

[root@Poppy extra]# /application/apache/bin/apachectl -t      檢查語法
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.0.0.101. Set the 'ServerName' directive globally to suppress this message
Syntax OK
[root@Poppy conf]# vi httpd.conf 
[root@Poppy conf]# cat -n httpd.conf |grep 194
194  ServerName 127.0.0.1:80                     能夠屏蔽上面的信息
[root@Poppy conf]# /application/apache/bin/apachectl -t
Syntax OK
[root@Poppy conf]# /application/apache/bin/apachectl start    啓動
[root@Poppy conf]# /application/apache/bin/apachectl graceful  # reload       優雅的重啓

4. 修改默認訪問是目錄數據庫

由於apache默認是以目錄呈現給用戶訪問的,咱們須要註銷來給用戶顯示頁面apache

[root@Poppy conf]# vi httpd.conf
232 # Options Indexes FollowSymLinks  與nginx autoindex on功能是同樣的
[root@Poppy extra]# echo "apache www" > /application/apache/htdocs/www/index.html
[root@Poppy extra]# echo "apache blog" > /application/apache/htdocs/blog/index.html  

客戶端訪問
[root@joker ~]# curl www.joker.com
apache www
[root@joker ~]# curl blog.joker.com
apache blog

5. 配置優化瀏覽器

在httpd.conf文件裏,打開註釋
Include conf/extra/httpd-mpm.conf

優化模塊參考
[root@Poppy ~]# cat /application/apache/conf/extra/httpd-mpm.conf 

<IfModule mpm_prefork_module>
    StartServers             5  啓動有幾個
    MinSpareServers          5  最小空閒
    MaxSpareServers         10  最大空閒
    MaxRequestWorkers      250  併發有多少
    MaxConnectionsPerChild   0  多少個子進程
</IfModule>

<IfModule mpm_worker_module>
   ServerLimit      1500 後面添加的 StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 1500咱們調1500的時候報SserverLimit錯誤,咱們須要更改這個設置,默認系統會提示你,在你檢查語法或者重啓apache的時候 MaxConnectionsPerChild 0 </IfModule>

6. 更改首頁目錄位置,建議不修改

httpd.conf默認首頁存放目錄就是安裝的目錄
egrep -v "^$|#" httpd.conf
默認站點目錄
<Directory "/application/apache2.4.33/htdocs"> 默認目錄
    AllowOverride None
    Require all granted
</Directory>

Include conf/extra/httpd-vhosts.conf 這個文件裏面是虛擬主機配置

虛擬主機文件
cat httpd-vhosts.conf
<VirtualHost *:80> ServerAdmin 111@qq.com DocumentRoot "/application/apache2.4.33/htdocs/www" ServerName www.joker.com ServerAlias joker.com ErrorLog "logs/www-error_log" CustomLog "logs/www-access_log" common </VirtualHost> 若是要用其餘的目錄就要在httpd.conf下面增長以下標籤 <Directory "/var/share"> AllowOverride None 重寫,打開是on Require all granted </Directory> 虛擬主機 <VirtualHost *:80> ServerAdmin 111@qq.com DocumentRoot "/var/share/www" ServerName www.joker.com ServerAlias joker.com ErrorLog "logs/www-error_log" CustomLog "logs/www-access_log" common </VirtualHost>

LAMP之php5.3.27

1. php5.3.27安裝

檢查安裝PHP所需的lib庫

PHP程序在開發及運行時會調用一些諸如zlib,gd等函數庫,所以須要確認lib庫是否已經安裝

[root@Poppy ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel 
libjpeg-turbo-devel-1.2.90-5.el7.x86_64
zlib-devel-1.2.7-17.el7.x86_64
libxml2-devel-2.9.1-6.el7_2.3.x86_64
libiconv-devel 沒有安裝成功,由於默認yum源沒有此包

[root@Poppy ~]# rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
libcurl-devel-7.29.0-46.el7.x86_64
freetype-devel-2.4.11-15.el7.x86_64
libpng-devel-1.5.13-7.el7_2.x86_64
libxslt-devel-1.1.28-5.el7.x86_64
gd-devel-2.0.35-26.el7.x86_64

其中:libjpeg-turbo-devel是早期的libjpeg-devel的新名字,libcurl-devel是早期curl-devel的新名字
提示:庫文件通常安裝 *-devel包,就會把*安裝,例如安裝gd-devel,就會把gd安裝
     這些lib不是必須安裝,可是目前企業環境下通常都須要安裝的,不然,php程序運行時會出現問題,例如驗證碼

yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel 
yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

咱們經過編譯安裝上面沒有安裝成功的庫libiconv-devel 
[root@Poppy tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
[root@Poppy tools]# tar -zxf libiconv-1.14.tar.gz
[root@Poppy tools]# cd libiconv-1.14
[root@Poppy tools]# ./configure --prefix=/application/libiconv-1.14/
[root@Poppy tools]# make && make install
[root@Poppy tools]# ln -s /application/libiconv-1.14/ /application/libiconv
[root@Poppy tools]# rm -fr libiconv-1.14
報錯:
In file included from progname.c:26:0:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
^
make[2]: *** [progname.o] Error 1
make[2]: Leaving directory `/usr/local/src/zabbix-2.4.7/libiconv-1.14/srclib'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/src/zabbix-2.4.7/libiconv-1.14/srclib'
make: *** [all] Error 2
解決:
[root@Poppy tools]# vi srclib/stdio.in.h
找到698行,_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/
替換成
#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif
#endif
......便可

安裝libmcrypt庫
這是一個使用動態加載模塊化的libmcrypt,libmcrypt對於在程序運行時添加/移除算法是有用的,libmcrypt目前再也不被官方支持,其軟件地址爲http://mcrypt.hellug.gr/lib/,編譯PHP的過程當中,libmcrypt庫不是必需要安裝的包
Centos默認的yum源裏面沒有libmcrypt-devel,所以須要事先配置epel第三方yum源
[root@Poppy ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@Poppy ~]# yum -y install libmcrypt-devel                                               


安裝mhash加密擴展庫
mhash是基於離散數據原理不可逆向的PHP加密方式擴展庫,其在默認狀況下不會開啓。mhash能夠用於建立校驗數值,消息摘要,消息認證碼,以及無需原文的關鍵信息保存(如密碼)等。它爲PHP提供了多種散列算法,如MD5,SHA1,GOST等,能夠經過MHASH_hashname()查看其支持的算法有哪些
須要注意的是:
1. 該擴展不能提供最新的散列算法
2. 該擴展結果原則上運算不可逆
[root@Poppy ~]# yum -y install libmcrypt-devel                                               


安裝mcrypt加密擴展庫
PHP程序員在編寫代碼程序時,除了要保證代碼的高性能以外,還有一點是很是重要的,那就是程序的安全性保障,PHP除了自帶的幾種加密函數外,還有功能更全面的PHP加密擴展庫mcrypt和mhash
其中,mcrypt擴展庫能夠實現加密解密功能,就是既能將明文加密,也能夠將密文還原
能夠說,mcrypt是PHP裏面重要的加密支持擴展庫,該庫默認狀況下不開啓
mcrypt庫支持20多種加密算法和8種加密模式,具體能夠經過函數mcrypt_list_algorithms()和mcrypt_list_modes()來顯示
[root@Poppy ~]# yum install mcrypt
[root@Poppy ~]# rpm -qa libmcrypt-devel mhash mcrypt      
mcrypt-2.6.8-11.el7.x86_64
mhash-0.9.9.9-10.el7.x86_64
libmcrypt-devel-2.5.8-13.el7.x86_64

2. 開始安裝apache經過模塊形式跟php連接

包源 和 下載
http://mirrors.sohu.com/ wget http://mirrors.sohu.com/php/php-5.3.27.tar.gz
[root@Poppy tools]# tar xf php-5.3.27.tar.gz 
[root@Poppy tools]# cd php-5.3.27
[root@Poppy tools]# ./configure --prefix=/application/php-5.3.27/ --with-apxs2=/application/apache/bin/apxs --with-mysql=/application/mysql/ --with-iconv-dir=/application/libiconv/ --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr/ --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-short-tags --enable-zend-multibyte --enable-static --with-xsl --enable-ftp
[root@Poppy tools]# make
[root@Poppy tools]# make install
[root@Poppy php-5.3.27]# ln -s /application/php-5.3.27/ /application/php3
[root@Poppy php-5.3.27]# /application/php3/bin/php -v
PHP 5.3.27 (cli) (built: Jun 13 2018 14:38:39) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
[root@Poppy php-5.3.27]# ls /application/apache/modules/libphp5.so 
/application/apache/modules/libphp5.so      libphp5.so就是這個模塊,控制apache與php的連接
[root@Poppy ~]# cat /application/apache/conf/httpd.conf|grep php
LoadModule php5_module modules/libphp5.so   配置文件已經支持了

3. 配置PHP引擎配置文件php.ini

配置文件存儲在解壓出來的目錄裏面,模版的配置文件有開發模版,生產模版二個版本,開發環境的模版更多的是開啓日誌,調試信息,而生產環境都是關閉狀態
[root@Poppy php-5.3.17]# cp php.ini-production /application/php/lib/php.ini

4. 配置apache的httpd.conf文件讓其支持php

修改配置文件
[root@Poppy php-5.3.27]# cd /application/apache/conf # 配置文件目錄 [root@Poppy conf]# vi httpd.conf # 編輯httpd文件 391 AddType application/x-httpd-php .php .phtml # 添加,會找下面的libphp5.so模塊 392 AddType application/x-httpd-php-source .phps # 添加 交給httpd.conf裏面的libphp5.so模塊 153 LoadModule php5_module modules/libphp5.so 修改默認頁,httpd.conf 252 <IfModule dir_module> 253 DirectoryIndex index.php index.html # 默認頁也須要支持php文件 254 </IfModule> [root@Poppy conf]# ../bin/apachectl -t Syntax OK [root@Poppy conf]# ../bin/apachectl graceful

測試LAMP環境生效的狀況

1. 配置apache支持PHP程序請求訪問,經過apache請求訪問PHP

[root@Poppy htdocs]# cat www/test_info.php 
<?php phpinfo(); ?>
客戶端訪問
[root@joker ~]# curl www.joker.com
apache wwww
[root@joker ~]# curl blog.joker.com/test_info.php

2.  PHP連接MYSQL的狀況進行測試

[root@Poppy blog]# cat test_mysql.php 
<?php
        $link_id=mysql_connect('localhost','root','123456') or mysql_error();
        if($link_id){
                echo "mysql successful by root";
        }else{
                echo mysql_error();
        }

// 這是單行註釋
/* 這是多行註釋 */
?>

客戶端訪問
[root@joker ~]# curl www.joker.com/test_mysql.php
mysql successful by root

利用LAMP部署一個blog程序服務

詳細過程參考LMNP環境應用實踐的搭建過程http://www.javashuo.com/article/p-eboifjrg-e.html

咱們簡化步驟

1. mysql數據庫配置

[root@Poppy blog]# mysql -uroot -p
mysql> drop database test;       # 清除無用的庫
mysql> select user();            # 查看當前用戶
mysql> create database wordpress;# 建立wordpress庫
mysql> select user,host from mysql.user;  # 查看用戶,地址
mysql> grant all on *.* to wordpress@'localhost' identified by '123456'; # 受權帳號權限登陸
mysql> drop user wordpress@'localhost';
mysql> grant all on wordpress.* to wordpress@'localhost' identified by '123456'; 
mysql> show grants for wordpress@'localhost';
mysql> flush privileges;         # 刷新

2. apache配合php,就是httpd.conf文件,上面有說到

3. 獲取wordpress程序

https://cn.wordpress.org/
https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz

4. 開始安裝wordpress程序

[root@Poppy tools]# tar -xf wordpress-4.9.4-zh_CN.tar.gz 
[root@Poppy tools]# cp -a wordpress/* /application/nginx/html/blog/
[root@Poppy tools]# chown -R www.www /application/nginx/html/blog/   


[root@Poppy extra]# mysql -uwordpress -p   
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpress          |
+--------------------+
rows in set (0.00 sec)

mysql> use wordpress;
Database changed
mysql> show tables;
Empty set (0.00 sec)


瀏覽器訪問ip,就會出現一個數據庫鏈接信息,按照以前咱們建立的庫,帳號填寫,點擊繼續,就會多出一個wp-config.php文件,存數據庫鏈接信息,站點目錄必須有權限,www
[root@Poppy blog]# ls wp-config.php 
wp-config.php
[root@Poppy blog]# pwd
/application/nginx/html/blog
[root@Poppy blog]# ls wp-config.php 
wp-config.php


點擊繼續安裝,到歡迎頁面,填寫博客標題,用戶名,密碼等
點擊安裝wordpress,頁面提示成功,此時數據庫就會多了不少表,點擊登陸就會跳轉到博客登陸頁面

LAMP服務分開

咱們將咱們搭建好的博客進行拆分,數據庫使用遠程服務器,編寫文章上傳圖片到nfs

mysql更改和php連接mysql更改以下

原數據庫數據
[root@Poppy tools]# mysqldump -uroot -p123456 wordpress -B|gzip>wordpress.sql.gz
備份wordpress數據庫,若是是-A則表明全部庫
[root@Poppy tools]# scp wordpress.sql.gz root@遠程數據庫服務器:/tmp

遠程數據庫
[root@joker tmp]# gzip -d wordpress.sql.gz
[root@joker tmp]# mysqladmin -uroot -password 123456
[root@joker tmp]# mysql -uroot -p123456 < wordpress.sql
[root@joker tmp]# mysql -uroot -p123456 -e "show databases like 'wordpress'"
[root@joker tmp]# mysql -uroot -p123456 -e "use wordpress;show tables"

數據庫受權登陸權限
mysql> grant all on wordpress.* to wordpress@'%' identified by '123456';
mysql> flush privileges;

更改wp-config.php裏面的數據庫鏈接
[root@Poppy blog]# pwd
/application/apache/htdocs/blog
[root@Poppy blog]# cat wp-config.php 
// ** MySQL 設置 - 具體信息來自您正在使用的主機 ** //
/** WordPress數據庫的名稱 */
define('DB_NAME', 'wordpress');

/** MySQL數據庫用戶名 */
define('DB_USER', 'wordpress');

/** MySQL數據庫密碼 */
define('DB_PASSWORD', '123456');

/** MySQL主機 */
define('DB_HOST', '遠程數據庫ip地址');   # 修改這裏

/** 建立數據表時默認的文字編碼 */
define('DB_CHARSET', 'utf8mb4');

/** 數據庫整理類型。如不肯定請勿更改 */
define('DB_COLLATE', '');

nfs搭建配置

發表文章,插入圖片,咱們點擊圖片的地址是以下這個位置
http://ip/wp-content/uploads/2018/06/111.jpg
咱們能夠經過nfs來替代這個路徑

咱們先安裝nfs服務器
[root@Poppy ~]# yum install rpcbind nfs-utils
[root@joker ~]# cat /etc/exports
# share /nfsbackup by joker for poppy at today
/nfsbackup nfs客戶端ip(rw,sync,all_squash,anonuid=1006,anongid=1006)  # 開啓帳號映射,將遠程連接的用戶映射到本地用戶
[root@joker ~]# id www
uid=1006(www) gid=1006(www) groups=1006(www)
[root@joker ~]# ls -ld /nfsbackup/
drwxr-xr-x 3 www www 4096 Jun 12 18:01 /nfsbackup/
[root@joker ~]# systemctl start nfs.service 
[root@joker ~]# showmount -e 127.0.0.1      
Export list for 127.0.0.1:
/nfsbackup nfs客戶端ip

客戶端,也就是咱們以前lnmp一臺上的
[root@Poppy ~]# yum install rpcbind nfs-utils
[root@Poppy ~]# systemctl start rpcbind.service
[root@Poppy uploads]# pwd
/application/nginx/html/blog/wp-content/uploads
[root@Poppy uploads]# ls -ld /application/apache/htdocs/blog/wp-content/uploads
drwxr-xr-x 3 1006 1006 4096 Jun 12 18:01 /application/apache/htdocs/blog/wp-content/uploads
[root@Poppy uploads]# mv 2018/ /tmp
[root@Poppy uploads]# mount -t nfs nfs服務器ip/nfsbackup /application/apache/htdocs/blog/wp-content/uploads
[root@Poppy uploads]# mv /tmp/2018 ./
[root@Poppy uploads]# 空的也不要緊,當咱們建立文章添加圖片了自動會生成
[root@Poppy uploads]# ls 2018/06/111
111-100x100.jpg  111-150x150.jpg  111-300x93.jpg   111.jpg

要注意,lnmp的靜態化我尚未想到如何在lamp裏面使用,因此文章地址是

http://ip/?p=11

相關文章
相關標籤/搜索