說明
寫本文的初衷是,在部署LAMP時,遇到各種問題。
看了很多博客,帖子,有些講的不夠通透,有些寫的細節都是錯的。
基於此,記錄一下部署時踩過的坑。
make說明
configure xxxx //生成makefile文件
make //生成 .o 可執行文件
make install //安裝
make clean //刪除有make生成的 .o 文件
make distclean //刪除有configure生成的makefile文件
以下流程若 make 或 make install 出錯,則需要使用 make clean
安裝包
apache官網軟件列表:https://www.apache.org/dist/
apr鏈接:https://www.apache.org/dist/apr/apr-1.7.0.tar.gz
apr-util鏈接:https://www.apache.org/dist/apr/apr-util-1.6.1.tar.gz
pcre鏈接:https://sourceforge.net/projects/pcre/files/pcre/8.43/pcre-8.43.tar.gz/download
apache鏈接:http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.41.tar.gz
php版本:https://www.php.net/distributions/php-7.2.26.tar.gz
mysql版本:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
一:安裝apr
./configure --prefix=/usr/local/apr
make && make install
報錯:rm: cannot remove ‘libtoolT’: No such file or directory
解決:找到RM=‘RM -f’
二:安裝apr-util
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
報錯:xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory
解決:yum install expat-devel
三:安裝pcre
./configure --prefix=/usr/local/pcre
make && make install
報錯:configure: error: Invalid C++ compiler or C++ compiler flags
解決:yum -y install gcc-c++
四:安裝httpd
./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
make && make install
1.將腳本控制文件拷貝到/etc/init.d/下並命名爲httpd,一般我們可以通過/etc/init.d/httpd restart/start/stop來控制httpd服務的重啓等
# 複製目錄後其文件屬性會發生變化想要使得複製之後的目錄和原目錄完全一樣包括文件權限,使用 cp -a
cp -a /usr/local/httpd/bin/apachectl /etc/init.d/httpd
2.修改apache主配置文件/usr/local/httpd/conf/httpd.conf
將ServerName 處的域名替換成自己的主機域名
# 原來的ServerName是被註釋的,取消註釋(去掉前面的#)
ServerName www.juzheng.top:80
3.開啓服務
/etc/init.d/httpd restart
五:安裝mysql
1.先卸載centos自帶的mariadb
rpm -qa | grep mariadb
yum remove mariadb-libs-5.5.56-2.el7.x86_64 # 同時,配置文件在/etc/my.cnf 也已經刪除
rpm -qa | grep mariadb
2.新建mysql用戶組和mysql用戶
# 因mysql程序需要用mysql賬戶運行,所以新建mysql用戶組和mysql用戶
groupadd mysql
# 新建mysql用戶,創建用戶時指定-r,指創建系統用戶。系統用戶是用來派生服務的,本身就不需要登錄。功能主要就是設定某
# 個程序的運行權限,避免去使用root登錄。系統用戶id範圍1-499,很容易識別。在有些書裏面成爲派生用戶/派生用戶組。
# -r 指創建系統用戶
# -s /bin/false是最嚴格的禁止login選項,一切服務都不能用
useradd -r -g mysql -s /bin/false mysql
3.解壓文件到/usr/local/mysql
4.在mysql目錄中創建data文件夾,並給data目錄賦予755權限(也可以增加寫權限)
cd /usr/local/mysql
mkdir data
chmod a+w data //或者 chmod 755 data
5.修改mysql目錄及子目錄(文件)文件所有者和用戶組
chown -R mysql:mysql /usr/local/mysql # chmod -R 所有者:組,-R 遞歸修改
6.初始化展開mysql
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
產生錯誤:
error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
# 檢查系統是否安裝libaio庫
rpm -qa|grep libaio
# 用yum安裝libaio-devel.x86_64
yum install libaio-devel.x86_64
7.添加mysql主配置文件
注:
pid-file 和 log-error 是中劃線。
pid-file和log-error屬於[mysqld]。有些博客此處設置有誤,將其放在了[mysqld_safe]下。若將其放置在[mysqld_safe]下則設置無效,雖然mysql也能啓動服務,但是pid-file和log-error文件是在data中的文件名就變成了:iZbp17ytqh359vcnlft30yZ.err 和 iZbp17ytqh359vcnlft30yZ.pid 。
可使用ps -aux | grep mysql 查看
vim /etc/my.cnf
[client]
port=3306
socket=/usr/local/mysql/mysql.sock
[mysqld]
port=3306
socket=/usr/local/mysql/mysql.sock
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/data/mysqld.pid
log-error=/usr/local/mysql/data/mysqld.err
#設置此項登錄mysql不需要密碼,爲了安全:僅限初次安裝數據庫時使用
skip-grant-tables
8.將啓動文件添加到/etc/init.d中,並啓動服務
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
service mysqld start
9.登入數據庫修改root用戶密碼
cd /usr/local/mysql/bin
./mysql -urooot -p
update mysql.user set authentication_string=password('123456') where user='root';
flush privileges;
exit;
10.將/etc/my.cnf文件的skip-grant-tables關閉(在前面用#號註釋)
vim /etc/my.cnf
#skip-grant-tables
六:安裝php
yum安裝所需的擴展
yum install \
libxml2-devel \
openssl-devel \
curl-devel \
1.新建www用戶組和www用戶
groupadd www
useradd -g www -s /bin/false www
2.編譯安裝php
注:此處選擇php-fpm安裝模式,這種模式性能是最好的。(還可以安裝成apache模塊,需要制定 --with-apxs2)
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc/ \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mbstring \
--with-openssl \
--with-curl \
--with-iconv \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd
make && make install
3.定義php.ini,php-fpm,www.conf配置文件,放置php-fpm文件
# 將解壓目錄下的php.ini-production文件複製到安裝目錄的etc目錄下。php.ini-development爲開發環境配置文件,php.ini-production爲生產環境配置文件。(生產環境的報錯部分比較嚴謹,開發環境會將錯誤顯示的呈現出來)
cp php.ini-development /usr/local/php/etc/php.ini
# 設置php-fpm配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# 設置www.conf設置文件
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
# 將開啓php-fpm的文件放到 /etc/init.d 目錄下
cp /usr/local/php/sbin/php-fpm /etc/init.d/php-fpm
修改httpd的配置文件
# 取消下面兩行的註釋
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
# 修改主頁文件
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
# php跳轉。在 <IfModule mime_module> 中添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .php5
# 創建虛擬主機配置。(不設置這個,靠 ip 訪問也可)
<VirtualHost *:80>
ServerName blog.ysu.com
DocumentRoot "/usr/local/httpd24/htdocs"
<Directory "/usr/local/httpd24/htdocs">
Options None
AllowOverride None
Require all granted
</Directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/httpd24/htdocs/$1
</VirtualHost>
4.開啓php-fpm服務
第一種:(一般是沒有生成php-fpm.pid文件時使用)
php 5.3.3 以後的php-fpm 不再支持 php-fpm 以前具有的 /Data/apps/php7/sbin/php-fpm(start|stop|reload)等命令,所以不要再看這種老掉牙的命令了,需要使用信號控制:
master進程可以理解以下信號
INT, TERM 立刻終止
QUIT 平滑終止
USR1 重新打開日誌文件
USR2 平滑重載所有worker進程並重新載入配置和二進制模塊
# 查看php-fpm的進程號
ps aux|grep php-fpm
root 42891 0.0 0.1 182796 1220 ? Ss 4月18 0:19 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 42892 0.0 0.6 183000 6516 ? S 4月18 0:07 php-fpm: pool www
www 42893 0.0 0.6 183000 6508 ? S 4月18 0:17 php-fpm: pool www
# 重啓php-fpm
kill -USR2 42891
第二種:(已生成php-fpm.pid文件時使用)
上面master進程可以看到,matster使用的是/usr/local/php/etc/php-fpm.conf這個配置文件,cat /usr/local/php/etc/php-fpm.conf 發現:
[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
;pid = run/php-fpm.pid
id文件路徑應該位於/usr/local/php/var/run/php-fpm.pid,由於註釋掉,所以沒有生成,我們把註釋去除,再kill -USR2 42891 重啓php-fpm,便會生成pid文件,下次就可以使用以下命令重啓,關閉php-fpm了:
php-fpm 關閉:
kill -INT 'cat /usr/local/php/var/run/php-fpm.pid'
php-fpm 重啓:
kill -USR2 'cat /usr/local/php/var/run/php-fpm.pid'
5.測試LAMP
<?php
$mysqli=new mysqli("127.0.0.1","root","123456");
if(mysqli_connect_errno()){
echo "連接失敗";
}
echo "恭喜,連接成功";
$mysqli->close();
?>
結餘:
LAMP環境編譯安裝,是會出現很多錯誤。需要多次嘗試。若對編譯時的參數有疑問,請利用./configure --help >> xxx_configure.txt 仔細閱讀其中的選項參數。