歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> CentOS下搭建LAMP環境

CentOS下搭建LAMP環境

日期:2017/3/1 12:24:23   编辑:關於Linux

CentOS下搭建LAMP環境

前言:在這裡將介紹如何在CentOS下搭建LAMP環境(全部使用源碼編譯安裝),用於web服務器開發。

LAMP: Linux + Apache + PHP + Mysql。 系統: CentOS 7,64位。

CentOS安裝

我選取了64位的CentOS 7這個Linux系統,安裝過程也很簡單,不再過多敘述,只稍微介紹一下我的分區情況:

分區名 大小 /boot 200MB /swap 8GB(不大於物理分區即可) / 20GB /home 剩余空間

Apache編譯安裝

我選擇了httpd 2.2這個版本,可以參考官方說明文檔。

安裝依賴:

安裝依賴需要用到的gcc、g++編譯器:

########gcc、g++

sudo yum install gcc 
sudo yum install gcc-c++

下面兩個是apache的優化工具:

########apr

wget http://labfile.oss.aliyuncs.com/apr-1.5.1.tar.gz
tar -zxvf apr-1.5.1.tar.gz
cd apr-1.5.1/
./configure --prefix=/opt/apr
sudo make && make install
########apr-util

cd Downloads/
wget http://labfile.oss.aliyuncs.com/apr-util-1.5.4.tar.gz
tar -zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/opt/apr-util --with-apr=/opt/apr
sudo make && make install

Perl庫,兼容正則表達式庫:

cd Downloads/
wget  http://labfile.oss.aliyuncs.com/pcre-8.36.tar.gz
tar -zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure --prefix=/opt/pcre
sudo make && make install

安裝apache:

cd Downloads/
wget http://labfile.oss.aliyuncs.com/httpd-2.2.29.tar.gz
tar -zxvf httpd-2.2.29.tar.gz
cd httpd-2.2.29
./configure --prefix=/opt/apache --with-apr=/opt/apr --with-apr-util=/opt/apr-util --with-pcre=/opt/pcre
sudo make && make install
sudo sed -i 's/^#ServerName.*/ServerName localhost/' /opt/apache/conf/httpd.conf

測試:

啟動:

sudo /opt/apache/bin/apachectl start

獲取服務器回應(安裝apache最後一步已經將服務器設為localhost):

curl -I 127.0.0.1

若安裝成功則如下:
這裡寫圖片描述

關閉:

sudo /opt/apache/bin/apachectl stop

MySQL編譯安裝

安裝依賴:

注意: MySQL5.5之後的版本使用cmake進行編譯。

########若先前編譯過,則需要刪除剛才編譯生成的CMakeCache.txt文件

rm -f CMakeCache.txt

sudo yum -y install gcc gcc-c++ autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* cmake cmake-gui libaio-devel bison-devel make

編譯安裝(時間較長):

cd Downloads/
wget http://labfile.oss.aliyuncs.com/mysql-5.6.24.tar.gz
tar -zxvf mysql-5.6.24.tar.gz
cd mysql-5.6.24
cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DMYSQL_DATADIR=/opt/mysql/data -DWITH_INNOBASE_STORAGE_ENGINE=1
sudo make 
sudo make install

創建mysql用戶:

id mysql > /dev/null 2>&1 || sudo useradd -r -s /sbin/nologin -M -d /opt/mysql/data mysql

初始化數據目錄:

sudo chown -R mysql:mysql /opt/mysql/data
sudo /opt/mysql/scripts/mysql_install_db --basedir=/opt/mysql --datadir=/opt/mysql/data --user=mysql --defaults-file=/opt/mysql/support-files/my-default.cnf

修改配置文件:

sudo sh -c 'cat >> /opt/mysql/my.cnf <<EOF
basedir = /opt/mysql
datadir = /opt/mysql/data
log-error = /opt/mysql/data/error.log
pid-file = /opt/mysql/data/mysql.pid
port = 3306
EOF'

清除殘留文件:

sudo sh -c 'for file in /etc/mysql/my.cnf /etc/my.cnf ; do [ -f $file ] && rm -f $file ; done'

啟動:

sudo /opt/mysql/support-files/mysql.server start

成功則顯示:
這裡寫圖片描述

測試:

/opt/mysql/bin/mysqladmin ping

成功則顯示:
這裡寫圖片描述

查看數據庫:

/opt/mysql/bin/mysql -u root -e 'show databases;'

關閉:

sudo /opt/mysql/support-files/mysql.server stop

成功則顯示:
這裡寫圖片描述

PHP編譯安裝

安裝依賴:

最後三個文件可以從這裡下載。

cd Downloads/
sudo yum install zlib1g-dev libbz2-dev libcurl4-gnutls-dev  libjpeg-dev libpng12-dev  libfreetype6-dev  libmcrypt-dev libxml2-dev
sudo yum install bzip2-devel.x86_64 -y
sudo yum -y install curl-devel
sudo yum install openssl.x86_64 openssl-devel.x86_64 -y
sudo yum install libjpeg.x86_64 libpng.x86_64 freetype.x86_64 libjpeg-devel.x86_64 libpng-devel.x86_64 freetype-devel.x86_64 -y
sudo yum install libjpeg libjpeg-devel libpng libpng-devel

########安裝Libmcrypt
tar -zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
sudo make
sudo make install 說明:libmcript默認安裝在/usr/local 

########安裝mhash
cd ..
tar -zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
sudo make
sudo make install

#########安裝mcrypt
cd ..
tar -zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
LD_LIBRARY_PATH=/usr/local/lib ./configure
sudo make
sudo make install

編譯安裝:

cd Downloads/
wget http://labfile.oss.aliyuncs.com/php-5.5.21.tar.gz
tar -zxvf php-5.5.21.tar.gz
cd php-5.5.21
./configure --prefix=/opt/php --with-bz2 --with-curl --with-jpeg-dir --with-gd --enable-shared --enable-mbstring --with-mcrypt --with-mysql=/opt/mysql --with-pdo-mysql=/opt/mysql --with-mysqli=/opt/mysql/bin/mysql_config --enable-fpm --enable-phar --enable-bcmath --with-zlib --enable-zip --enable-ftp --with-gettext --enable-sockets --with-freetype-dir  --with-config-file-path=/opt/php/etc/php.ini --with-config-file-scan-dir=/opt/php/etc/conf.d --with-apxs2=/opt/apache/bin/apxs
sudo make
sudo make install
sudo cp php.ini-production /opt/php/etc/php.ini

檢查php是否支持mysql:

/opt/php/bin/php -m | grep mysql

若支持則顯示:
這裡寫圖片描述

修改apache配置文件,添加php的支持配置:

sudo sh -c 'cat >> /opt/apache/conf/httpd.conf <<EOF
<IfModule mime_module>
AddType application/x-httpd-php .php
</IfModule>
EOF'

若關閉則開啟apache,否則重新啟動apache:

sudo /opt/apache/bin/apachectl -k restart

測試:

sudo sh -c 'echo "<?php echo phpinfo(); ?>" > /opt/apache/htdocs/test.php'

在浏覽器輸入:

http://localhost/test.php

配置成功則顯示php信息:
這裡寫圖片描述

添加第三方模塊

使用apxs手動編譯Apache模塊:

關於apxs的一些介紹及參數詳見這裡。
這裡以metadata模塊為例:

cd ~/Downloads/httpd-2.2.29/modules/metadata
sudo /opt/apache/bin/apxs -i -a -c mod_headers.c
###########################################################
-c:此選項表示需要執行編譯操作。 它首先會編譯C源程序(.c)files為對應的目標代碼文件(.o), 然後,連接這些目標代碼和files中其余的目標代碼文件(.o and .a), 以生成動態共享對象dsofile。如果沒有指定-o選項, 則此輸出文件名由files中的第一個文件名推測得到, 所以,缺省時,它一般會是mod_name.so
-i:此選項表示需要執行安裝操作, 以安裝一個或多個動態共享對象到服務器的modules目錄中。
-a:此選項自動在httpd.conf文件中增加一個LoadModule行,以激活此模## 標題 ##塊,或者,如果此行已經存在,則啟用之。
###########################################################

使用phpize手動編譯PHP模塊:

cd ~/Downloads/php-5.5.21/ext/ftp
/opt/php/bin/phpize
./configure --with-php-config=/opt/php/bin/php-config
sudo make
sudo make install

在php.ini中加載模塊:

sudo sh -c 'echo "extension=ftp.so" >> /opt/php/etc/php.ini'

LAMP配置

php配置:

配置文件/opt/php/etc/php.ini:

###常規配置
    engine = On
    short_open_tag = Off  #tags識別
    asp_tags = Off #asp tags識別
    precision = 14  #浮點類型數顯示時的有效位數
    output_buffering = 4096   #輸出緩存允許你在輸出正文內容之後發送 header
    implicit_flush = Off   #告訴輸出層在每個輸出塊之後自動刷新自身數據
    disable_functions =    #關閉特定函數
    display_errors = Off   #顯示錯誤信息
    log_errors = On        #在日志文件裡記錄錯誤
    request_order = "GP"   #GET POST
    register_argc_argv = On #是否聲明 argv和argc 變量
    post_max_size = 8M     #最大POST大小
    file_uploads = On      #是否允許HTTP方式文件上載 
    upload_tmp_dir =       #用於HTTP上載的文件的臨時目錄
    upload_max_filesize = 2M   #上載文件的最大大小
    max_file_uploads = 20      #每次最大上傳文件個數
    allow_url_fopen = On   #是否允許把URLs當作http:.. 或把文件當作ftp:...
    default_socket_timeout = 60  #默認socker超時時間

    #MySQL相關
    mysql.allow_persistent = On #允許持久連接
    mysql.cache_size = 2000  #緩存大小
    mysql.max_persistent = -1  #持久連接的最大數目 -1不限制
    mysql.max_links = -1  #最大鏈接 
    mysql.connect_timeout = 60  #連接超時時間

    #session相關
    session.save_handler = files #用於保存/取回數據的控制方式
    session.use_cookies = 1 #是否使用cookies
    session.name = PHPSESSID  #設置cookies名
    session.use_only_cookies = 1  #強制SESSION ID必須以COOKIE傳遞
    session.auto_start = 0  #在請求啟動時初始化session 
    session.cookie_lifetime = 0  #cookies保持時間

    #session垃圾回收參數
    session.gc_probability = 1 #按百分比整理
    session.gc_divisor = 1000  #每次請求時有1/1000的機會啟動"垃圾回收"進程

    #Session ID傳遞參數
    session.use_trans_sid = 0 #使用URL的方式傳遞session id
    session.hash_function = 0 #生成SID MD5算法
    session.hash_bits_per_character = 5  #指定在SID字符串中的每個字符內保存多少bit

    #常用配置參數
    max_execution_time 30   #一個腳本可使用多少 CPU 秒
    max_input_time 60       #一個腳本等待輸入數據的時間有多長(秒)
    memory_limit  32M       #在被取消之前,一個腳本可使用多少內存(字節)
    output_buffering  4096  #數據發送給客戶機之前,有多少數據(字節)需要緩存

apache配置:

apache主配置文件/opt/apache/conf/httpd.conf:

#apache服務根目錄
ServerRoot "/opt/apache"
#服務管理員
ServerAdmin [email protected]
#監聽端口
Listen 80
#默認首頁
DirectoryIndex index.php
#加載php模塊
LoadModule php5_module        modules/libphp5.so
#解析php
AddType application/x-httpd-php .php
#目錄權限參數
DocumentRoot "/opt/apache/htdocs"   #WEB文件根目錄
<Directory "/opt/apache/htdocs">
    # 官方文檔鏈接 http://httpd.apache.org/docs/2.2/mod/core.html
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all #允許所有請求
</Directory>

AllowOverride參數詳解:

none 不允許.htaccess使用任何指令。 AuthConfig 允許使用所有的權限指令,包括 AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAuthUserFile 和 Require。 FileInfo 允許使用文件控制類型的指令。包括 AddEncoding AddLanguage AddType DEfaultType ErrorDocument LanguagePriority。 Indexes 允許使用目錄控制類型的指令。包括 AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon DirectoryIndex FancyIndexing HeaderName IndexIgnore IndexOptions ReadmeName。 Limit 允許使用權限控制指令。包括Allow Deny和Order。 Options 允許使用控制目錄特征的指令,包括Options 和XBitHack。

Options參數詳解:

All 表示除MultiViews之外的所有特性。這也是Options指令的默認設置。 None 表示不啟用任何的服務器特性。 FollowSymLinks 服務器允許在此目錄中使用符號連接。如果該配置選項位於配置段中,將會被忽略。 Indexes 如果輸入的網址對應服務器上的一個文件目錄,而此目錄中又沒有DirectoryIndex指令 MultiViews 允許使用mod_negotiation模塊提供內容協商的”多重視圖”。如果客戶端請求的路徑可能對應多種類型的文件,那麼服務器將根據客戶端請求的具體情況自動選擇一個最匹配客戶端要求的文件。 SymLinksIfOwnerMatch 服務器僅在符號連接與目標文件或目錄的所有者具有相同的用戶ID時才使用它。只有當符號連接和符號連接指向的目標文件或目錄的所有者是同一用戶時,才會使用符號連接。 ExecCGI 允許使用mod_cgi模塊執行CGI腳本。 Includes 允許使用mod_include模塊提供的服務器端包含功能 IncludesNOEXEC 允許服務器端包含,但禁用”#exec cmd”和”#exec cgi”。但仍可以從ScriptAlias目錄使用”#include virtual”虛擬CGI腳本。
#日志配置參數
ErrorLog "logs/error_log"
LogLevel warn  #錯誤日志記錄等級

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common  #自定義日志 名為common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" common   #日志路徑  使用名為common的自定義格式
</IfModule>

LogLevel記錄日志等級:

error 錯誤情況。 warn 警告情況。 info 普通信息。 debug 出錯級別信息。

日志格式:
1. %h - 客戶端的ip地址或主機名。
2. %l - The 這是由客戶端 identd 判斷的RFC 1413身份,輸出中的符號 “-” 表示此處信息無效。
3. %u - 由HTTP認證系統得到的訪問該網頁的客戶名。有認證時才有效,輸出中的符號 “-” 表示此處信息無效。
4. %t - 服務器完成對請求的處理時的時間。
5. “%r” - 引號中是客戶發出的包含了許多有用信息的請求內容。
6. %>s - 這個是服務器返回給客戶端的狀態碼。
7. %b - 最後這項是返回給客戶端的不包括響應頭的字節數。
8. “%{Referer}i” - 此項指明了該請求是從被哪個網頁提交過來的。
9. “%{User-Agent}i” - 此項是客戶浏覽器提供的浏覽器識別信息。

#實際訪問日志
192.168.1.166 - - [04/Feb/2015:12:52:35 +0800] "GET / HTTP/1.1" 200 25
#基於域名的虛擬主機
<VirtualHost *:80>
    DocumentRoot /web1
    ServerName web1.com
    ErrorLog /app/apache/logs/error_log
    CustomLog /app/apache/logs/access_log combined
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /web2
    ServerName web2.com
</VirtualHost>

#基於IP的虛擬主機
<VirtualHost 210.20.30.40>
    DocumentRoot /web1
    ServerName web1.com
</VirtualHost>

<VirtualHost 210.20.30.50>
    DocumentRoot web2
    ServerName web2.com
</VirtualHost>

#基於端口的虛擬主機
Listen 172.20.30.40:80
Listen 172.20.30.40:8080

<VirtualHost 172.20.30.40:80>
    DocumentRoot /web1
    ServerName web1.com
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
    DocumentRoot /web2
    ServerName web2.com
</VirtualHost>
#perfork工作模式參數
    StartServers       50   #預創建50個進程
    MinSpareServers   15    #保持最小空閒進程
    MaxSpareServers   30    #保持最大空閒進程
    MaxClients       225    #最大進程數
    MaxRequestsPerChild  4000   #用來控制每個進程在處理了多少次請求之後自動銷毀

注意:設置perfork工作模式參數時,需要使用 ps aux 查看進程占用內存數,以此調整實際環境中的參數,防止此消耗所有的資源。

反饋與建議

微博:@AnSwEr不是答案 github:AnSwErYWJ 博客:AnSwEr不是答案的專欄

參考列表:

https://www.shiyanlou.com/courses/running/600 https://www.shiyanlou.com/courses/running/601

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

Copyright © Linux教程網 All Rights Reserved