Linux 筆記 - 第十四章 LAMP 之(一) 環境搭建

博客地址:http://www.moonxy.comphp

1、前言html

LAMP 是 Linux Apache MySQL PHP 的簡寫,即把 Apache、MySQL 以及 PHP 安裝在 Linux 系統上,組成一個環境來運行 PHP 腳本語言,一般是 PHP 的網站。其中的 Apache 是主流的 Web 服務器軟件,MySQL 是小型的關係型數據庫軟件。mysql

咱們能夠把 Apache+PHP 安裝在一臺機器上,再把 MySQL 安裝在另一臺機器上,也能夠將其所有安裝在同一臺機器上。可是 Apache 和 PHP 須要安裝在同一臺機器上,這是由於 PHP 是做爲 Apache 的一個模塊存在的。linux

下面依次安裝 MySQL、Apache 和 PHP。c++

2、安裝 MySQLweb

因爲經過源碼包安裝 MySQL 時須要比較長的編譯時間,因此建議安裝二進制的免編譯包。能夠到 MySQL 官網下載,https://dev.mysql.com/downloads此處選擇 64 位 5.7.22 版本。Linux-Generic 表示 Linux 的二進制免編譯包。正則表達式

首先查看系統是多少位,以下:sql

[root@ryan ~]# uname -i
x86_64

顯示系統是 64 位的,若是返回 i386 則表示系統是 32 位的。數據庫

點擊右側的 "Download" 進入以下頁面:express

複製 "No thanks, just start my downl" 的鏈接地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

在 Linux 中下載,建議將軟件安裝包統一放在 /usr/local/src 目錄下,便於統一管理,以下:

[root@ryan ~]# cd /usr/local/src
[root@ryan src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

2.1 解壓並移動

[root@ryan src]# tar zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
[root@ryan src]# mv mysql-5.7.22-linux-glibc2.12-x86_64 /usr/local/mysql

2.2 添加系統用戶

[root@ryan src]# groupadd mysql
[root@ryan src]# useradd -r -g mysql mysql
[root@ryan src]# grep mysql /etc/passwd
mysql:x:496:502::/home/mysql:/bin/bash

2.3 建立數據庫文件存放目錄

[root@ryan src]# mkdir -p /data/mysql
[root@ryan src]# chown -R mysql:mysql /data/mysql

2.4 安裝數據庫

[root@ryan src]# cd /usr/local/mysql

[root@ryan mysql]# ./bin/mysqld --initialize --user=mysql --datadir=/data/mysql
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
[root@ryan mysql]# yum install -y libaio

[root@ryan mysql]# ./bin/mysqld --initialize --user=mysql --datadir=/data/mysql
./bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
[root@ryan mysql]# yum -y install numactl

當安裝時出現如上的錯誤時,須要分別安裝 libaio 和 numactl 依賴,直到安裝成功。若是是 MySQL5.7之前的版本,使用 ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql 命令安裝。

2.5 配置 /etc/my.cnf

[root@ryan mysql]# vim /etc/my.cnf
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
lower_case_table_names=1
log-error=/var/log/mysqld.log
pid-file=/data/mysql/mysqld.pid

2.6 複製啓動腳本

[root@ryan mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@ryan mysql]# chmod 755 /etc/init.d/mysqld

編輯 vim /etc/init.d/mysqld,修改第46和47行,以下:

修改成:

2.7 啓動 MySQL

[root@ryan mysql]# service mysqld start
Starting MySQL. SUCCESS!
[root@ryan mysql]# ps aux |grep mysqld
root       2347  0.0  0.0  11436  1540 pts/0    S    23:40   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysqld.pid
mysql      2561  0.5  9.5 1167520 181608 pts/0  Sl   23:40   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/data/mysql/mysqld.pid --socket=/tmp/mysql.sock
root       2594  0.0  0.0 103308   876 pts/0    S+   23:41   0:00 grep mysqld

2.8 設置 root 密碼

[root@ryan mysql]# service mysqld stop
Shutting down MySQL.. SUCCESS!
[root@ryan mysql]# ./bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
[root@ryan mysql]# ./bin/mysql -u root mysql
mysql> update user set authentication_string=PASSWORD("123456")where user="root";
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1
mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)
[root@ryan mysql]# service mysqld start
Starting MySQL SUCCESS!

密碼不要設置的太簡單,如此處演示的 123456,不然再次登陸時會提示必須重置密碼:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

而且注意此處 5.7 版本的修改密碼的的語法爲:

update user set authentication_string=PASSWORD("123456")where user="root";

5.7 如下版本的語法爲:

update user set password=PASSWORD("123456")where user="root";

注意:

Mysql 5.7 在自動初始化數據庫的時候,會生成 root 用戶的默認密碼。

經過 grep "temporary password" /var/log/mysqld.log 命令,返回結果最後冒號後面的字符串就是root的默認密碼。

使用此密碼登陸後,Mysql 會要求第一件作的事就是改root密碼,並且是要求強密碼。

若是是其餘版本,在剛安裝好MySQL後,超級用戶 root 是沒有密碼的。

3、安裝 Apache

Apache 是目前主流的 Web 服務器,後來更名稱爲 httpd 了。目前最新版爲 2.4,此處選擇 2.4.34。官方下載頁面爲:http://httpd.apache.org/download.cgi,可下載 gzip 或 bzip2 格式的源碼包。

 

此處下載地址爲:http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.34.tar.gz

3.1 下載

[root@ryan src]# cd /usr/local/src
[root@ryan src]# wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.34.tar.gz

注意,2.4 版本還須要下載 apr 和 apr-util 包,能夠將這兩個包理解爲通用函數庫,主要爲上層應用提供支持。Apache 2.4 之後的版本再也不自帶 APR 庫(Apache Portable Runtime,Apache 可移植運行庫),因此在安裝 Apache 以前須要手動下載安裝 APR 庫。完整的 APR 實際上包含了三個依賴包:apr、apr-util 以及 apr-iconv。目前只下載前面兩個安裝就行,即 apr 和 apr-util。

[root@ryan src]# wget http://mirror.bit.edu.cn/apache//apr/apr-1.6.3.tar.gz
[root@ryan src]# wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.6.1.tar.gz

3.2 解壓

[root@ryan src]# tar zxvf httpd-2.4.34.tar.gz^C
[root@ryan src]# ll httpd-2.4.34.tar.gz
-rw-r--r-- 1 root root 9098780 Jul 14 04:45 httpd-2.4.34.tar.gz

解壓 apr 和 apr-util 包

[root@ryan src]# tar zxvf apr-1.6.3.tar.gz
[root@ryan src]# tar zxvf apr-util-1.6.1.tar.gz

3.3 安裝

首先安裝 apr

[root@ryan apr-1.6.3]# cd /usr/local/src/apr-1.6.3
[root@ryan apr-1.6.3]# ./configure --prefix=/usr/local/apr
[root@ryan apr-1.6.3]# echo $?
0
[root@ryan apr-1.6.3]# make
[root@ryan apr-1.6.3]# echo $?
0
[root@ryan apr-1.6.3]# make install
[root@ryan apr-1.6.3]# echo $?
0

若是在安裝中出現以下錯誤:

configure: error: no acceptable C compiler found in $PATH

說明沒有找到可用的C語言編譯器,須要安裝 gcc,以下:

[root@ryan apr-1.6.3]# yum install -y gcc

而後安裝 apr-util

[root@ryan apr-util-1.6.1]# /usr/local/src/apr-util-1.6.1
[root@ryan apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@ryan apr-util-1.6.1]# echo $?
0
[root@ryan apr-util-1.6.1]# make
[root@ryan apr-util-1.6.1]# echo $?
0
[root@ryan apr-util-1.6.1]# make install
[root@ryan apr-util-1.6.1]# echo $?
0

若是在編譯時出現以下錯誤:

[root@ryan apr-util-1.6.1]# make
make[1]: *** [xml/apr_xml.lo] Error 1
make[1]: Leaving directory `/usr/local/src/apr-util-1.6.1'
make: *** [all-recursive] Error 1
[root@ryan apr-util-1.6.1]# echo $?
2

則須要安裝 expat-devel 包:

[root@ryan apr-util-1.6.1]# yum -y install expat-devel

到這裏是否是終於能夠正式安裝 apache 了,其實不是的,還有依賴的軟件沒有安裝,缺乏 pcre 程序,這是關於正則表達式 regular expression 的依賴包。

訪問:http://pcre.org/,進入以下界面:

找到以下連接:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

下載:

[root@ryan ~]# cd /usr/local/src
[root@ryan src]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz

配置編譯參數:

[root@ryan src]# tar zxvf pcre-8.42.tar.gz
[root@ryan src]# cd pcre-8.42
[root@ryan pcre-8.42]# ./configure --prefix=/usr/local/pcre
[root@ryan pcre-8.42]# echo $?
0

若是在預編譯時出現以下錯誤:

configure: error: Invalid C++ compiler or C++ compiler flags

說明缺乏 C++ 編譯器,可使用 yum 安裝:

[root@ryan pcre-8.42]# yum -y install gcc-c++

編譯並安裝:

[root@ryan pcre-8.42]# make && make install
[root@ryan pcre-8.42]# echo $?
0

到如今爲止,Apache 安裝前的依賴庫終於安裝完畢,能夠安裝 Apache 了。

設置編譯參數:

[root@ryan httpd-2.4.34]# /usr/local/src/httpd-2.4.34
[root@ryan httpd-2.4.34]# ./configure --prefix=/usr/local/apache24 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-so --enable-mods-shared=most
[root@ryan httpd-2.4.34]# echo $?
0

若是出現以下錯誤:

make[2]: *** [htpasswd] Error 1

make[2]: Leaving directory `/usr/local/src/httpd-2.4.34/support'

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory `/usr/local/src/httpd-2.4.34/support'

則先將 apr 和 apr-util 複製到 httpd的srclib目錄下:

# cp -r apr-1.6.3 httpd-2.4.34/srclib/apr

# cp -r apr-util-1.6.1 httpd-2.4.34/srclib/apr-util

而後再從新預編譯,添加 --with-included-apr 選項:

# ./configure --prefix=/usr/local/apache24 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-so --enable-mods-shared=most --with-included-apr

而後再編譯和安裝:

[root@ryan httpd-2.4.34]# make
[root@ryan httpd-2.4.34]# echo $?
0
[root@ryan httpd-2.4.34]# make install
[root@ryan httpd-2.4.34]# echo $?
0

4、安裝 PHP

PHP7 已經出來很長時間了,此處選擇 PHP7,固然也能夠選擇 PHP5。官方下載地址爲:http://www.php.net/downloads.php

此處下載目前最新版 7.2.8,進入上面連接後,選擇鏡像下載地址:http://cn2.php.net/get/php-7.2.8.tar.gz/from/this/mirror,因爲這個下載地址比較特殊,使用 wget 可能下載不下來,建議先下載到 Windows 上,再sftp上傳到Linux 服務器上。

執行預編譯:

[root@ryan src]# cd /usr/local/src
[root@ryan src]# tar zxvf php-7.2.8.tar.gz
[root@ryan src]# cd php-7.2.8
[root@ryan src]# ./configure --prefix=/usr/local/php7 \
 --with-apxs2=/usr/local/apache24/bin/apxs \
 --with-config-file-path=/usr/local/php7/etc \
 --with-curl \
 --with-freetype-dir \
 --with-gd \
 --with-gettext \
 --with-iconv-dir \
 --with-kerberos \
 --with-libdir=lib64 \
 --with-libxml-dir \
 --with-mysqli \
 --with-openssl \
 --with-pcre-regex \
 --with-pdo-mysql \
 --with-pdo-sqlite \
 --with-pear \
 --with-png-dir \
 --with-xmlrpc \
 --with-xsl \
 --with-zlib \
 --enable-fpm \
 --enable-bcmath \
 --enable-libxml \
 --enable-inline-optimization \
 --enable-mbregex \
 --enable-mbstring \
 --enable-opcache \
 --enable-pcntl \
 --enable-shmop \
 --enable-soap \
 --enable-sockets \
 --enable-sysvsem \
 --enable-xml \
 --enable-zip

若是上面執行出錯,須要安裝一些依賴的組件:

[root@ryan php-7.2.8]# yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel MySQL pcre-devel openssl openssl-devel curl-devel libxslt-devel

編譯:

[root@ryan php-7.2.8]# make
[root@ryan php-7.2.8]# echo $?
0

因爲 with 指定須要的模塊不同,編譯的時間也會不同,此處 make 編譯的時間可能須要5分鐘以上。

安裝:

[root@ryan php-7.2.8]# make install
[root@ryan php-7.2.8]# echo $?
0

最後複製配置文件:

[root@ryan php-7.2.8]# cp php.ini-production /usr/local/php7/etc/php.ini

php.ini-development 適合開發程式使用(測試用);

php.ini-production 擁有較高的安全性設定,則適合上線當產品使用;

通常將 php.ini-production 修改成 php.ini,確保測試環境(本地)與正式環境(線上)一致。PHP 配置文件:/usr/local/php7/etc/php.ini

配置 Apache(httpd)支持 PHP

編輯 httpd 的主配置文件:/usr/local/apache24/conf/httpd.conf

[root@ryan ~]# vim /usr/local/apache24/conf/httpd.conf

將 ServerName www.example.com:80 前的 # 去掉。

找到以下配置:

<Directory />
AllowOverride none
Require all denied
</Directory>

將 denied 修改成 granted:

<Directory />
AllowOverride none
Require all granted
</Directory>

修改這個的目的是,容許全部請求,不然,咱們訪問到的時候會報 403 錯誤。

找到以下內容

AddType application/x-gzip .gz .tgz

在該行的下面添加:

AddType application/x-httpd-php .php

找到以下內容:

<IfModule dir_module>
DirectoryIndex index.html
</IfModule>

修改成:

<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>

5、測試 LAMP 是否成功

MySQL、httpd 和 PHP 安裝以後,須要先檢查 httpd 的配置文件是否正確,只有正確的配置文件才能夠正常解析 PHP 文件。

測試配置文件語法是否正確

[root@ryan ~]# /usr/local/apache24/bin/apachectl -t
Syntax OK

若是有錯誤,則須要修改,Syntax OK 表示配置文件的語法結構正確。

啓動 httpd,並查看是否啓動:

[root@ryan ~]# /usr/local/apache24/bin/apachectl start
[root@ryan ~]# netstat -lnp |grep httpd
tcp        0      0 :::80                       :::*                        LISTEN      83571/httpd

說明 httpd 已經正常啓動了。

啓動 httpd 服務命令:/usr/local/apache24/bin/apachectl start

中止 httpd 服務命令:/usr/local/apache24/bin/apachectl stop

也可使用 curl 命令來進行簡單的測試,以下:

[root@ryan ~]# curl localhost
<html><body><h1>It works!</h1></body></html>

可以正常返回結果,說明已經正常啓動了。

測試是否正確解析 PHP

首先編寫一個測試腳本,其中 htdocs 是 Apache 的默認網站根目錄。以下:

[root@ryan ~]# vim /usr/local/apache24/htdocs/test.php
<?php
        echo "個人LAMP";
?>

而後執行以下測試:

[root@ryan ~]# curl localhost/test.php
個人LAMP

說明 httpd 已經能夠正確解析 PHP 了。

此時經過其餘機器來訪問本服務器時顯示:

應該是 Linux 服務器沒有開啓 80 端口致使的,CentOS 6 須要在 iptables 放行 80 端口。

放行 80 端口

[root@ryan ~]# /etc/init.d/iptables status
[root@ryan ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@ryan ~]# /etc/init.d/iptables save
[root@ryan ~]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
3    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

注意,重啓系統或者重啓 iptables 服務後還會加載已經保存的規則,因此須要使用 "/etc/init.d/iptables save" 保存一下規則。

而後再次訪問:

發現均已經能夠正常訪問了。

設置環境變量

[root@ryan conf]# vim /etc/profile.d/app.sh
#MySQL
export PATH=$PATH:/usr/local/mysql/bin
#Apache
export PATH=$PATH:/usr/local/apache24/bin
[root@ryan conf]# source /etc/profile

能夠將 MySQL 和 Apache 的路徑配置到 /etc/profile 或者 /etc/profile.d/app.sh 中,方便使用它們的命令時,不用再添加絕對路徑。

附錄

注意:

若是make中出現錯誤,必須執行 make clean 清除全部緩存文件後繼續,若是是在 make install 過程當中出現錯誤,必須執行 make clean 而且刪除生成了安裝目錄,而後從新執行 make 和 make install。以上步驟執行後,都可以使用命令 echo $? 來檢查是否執行成功。

安裝完成以後刪除原來釋放出來的那些目錄便可,若是之後要卸載,只要不忘記安裝目錄,直接刪除安裝目錄就能夠,也不會出現任何殘留垃圾文件。

apachectl 經常使用命令參數

# apachectl configtest:檢查設置文件中的語法是否正確;

# apachectl fullstatus:顯示服務器完整的狀態信息;

# apachectl graceful:從新啓動Apache服務器,但不會中斷原有的鏈接;

# apachectl help:顯示幫助信息;

# apachectl restart:從新啓動Apache服務器;

# apachectl start:啓動Apache服務器;

# apachectl status:顯示服務器摘要的狀態信息;

# apachectl stop:中止Apache服務器;

# apachectl -M:輸出一個已經啓用的模塊列表,包括靜態編譯在服務器中的模塊和做爲DSO動態加載的模塊。即同時列出已經啓用的靜態模塊(static)和動態模塊(shared)。

# apachectl -l:輸出一個靜態編譯在服務器中的模塊的列表。它不會列出使用LoadModule指令動態加載的模塊。即只列出已經啓用的靜態模塊(static)。

PHP 其實就是做爲 apache 的一個動態模塊被調用的,以下:

[root@ryan httpd-2.4.34]# grep php /usr/local/apache24/conf/httpd.conf
LoadModule php7_module        modules/libphp7.so
[root@ryan httpd-2.4.34]# apachectl -M |grep php
 php7_module (shared)

在安裝 PHP 時,指定的 --with-apxs2 選項其實就是將 PHP 做爲一個模塊安裝到 apache 中的。

經過查看 httpd.conf 中的 LoadModule 對應的模塊都是動態的(shared),以下:

[root@ryan httpd-2.4.34]# grep -i LoadModule /usr/local/apache24/conf/httpd.conf
# have to place corresponding `LoadModule' lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
……

關於 MPM

能夠在安裝 apache 時,使用 --with-mpm=MPM 來指定 MPM 模式,以下:

[root@ryan httpd-2.4.34]# /usr/local/src/httpd-2.4.34/configure --help |grep mpm -A2
  --enable-mpms-shared=MPM-LIST
                          Space-separated list of MPM modules to enable for
                          dynamic loading. MPM-LIST=list | "all"
--
  --with-mpm=MPM          Choose the process model for Apache to use by
                          default. MPM={event|worker|prefork|winnt} This will
                          be statically linked as the only available MPM
                          unless --enable-mpms-shared is also specified.
  --with-module=module-type:module-file
                          Enable module-file in the modules/<module-type>

MPM 常見的三種模式爲:prefork、worker 和 event。

MySQL 主配置文件:/etc/my.cnf

Apache 主配置文件:/usr/local/apache24/conf/httpd.conf,虛擬主機配置文件:/usr/local/apache24/conf/extra/httpd-vhosts.conf

PHP 主配置文件:/usr/local/php7/etc/php.ini

參考文檔:

MySQL:

http://www.javashuo.com/article/p-qtvnjkoy-bc.html

http://www.javashuo.com/article/p-dbqtncjm-k.html

http://www.cnblogs.com/jxrichar/p/9248480.html

http://www.javashuo.com/article/p-higpkzkj-bc.html

https://blog.csdn.net/keepd/article/details/77151006

Apache:

http://www.javashuo.com/article/p-upqvjwgr-ba.html

安裝 apache2.4 make 報錯

多處理模塊(MPM):http://httpd.apache.org/docs/2.2/mpm.html

PHP:

https://blog.csdn.net/u010647316/article/details/56489795/

相關文章
相關標籤/搜索