編譯安裝nginx-php-mysql

樑東昇發表於2018-04-10
nginx
安裝前準備
安裝編譯環境 
yum -y install gcc gcc-c++ wget yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
yum -y install automake autoconf libtool libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed
# 建立 nginx 使用者useradd nginx -s /sbin/nologin -M
#下載安裝包
wget http://nginx.org/download/nginx-1.10.3.tar.gz
#解壓tar -zxf nginx-1.10.3.tar.gz cd nginx-1.10.3
#配置安裝引數
./configure
–prefix=/usr/local/nginx
–sbin-path=/usr/local/sbin/nginx
–error-log-path=/var/log/nginx/error.log
–http-log-path=/var/log/nginx/access.log
–pid-path=/var/run/nginx.pid
–lock-path=/var/run/nginx.lock
–http-client-body-temp-path=/var/cache/nginx/client_temp
–http-proxy-temp-path=/var/cache/nginx/proxy_temp
–http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
–http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
–http-scgi-temp-path=/var/cache/nginx/scgi_temp
–user=nginx
–group=nginx
–with-pcre
–with-http_v2_module
–with-http_ssl_module
–with-http_realip_module
–with-http_addition_module
–with-http_sub_module
–with-http_dav_module
–with-http_flv_module
–with-http_mp4_module
–with-http_gunzip_module
–with-http_gzip_static_module
–with-http_random_index_module
–with-http_secure_link_module
–with-http_stub_status_module
–with-http_auth_request_module
–with-mail
–with-mail_ssl_module
–with-file-aio
–with-ipv6
–with-http_v2_module
–with-threads
–with-stream
–with-stream_ssl_module
#安裝make
make install
ln -s /usr/local/nginx /etc/nginx
# 使用 nginx -V 可以檢視編譯是的引數[root@crazy-acong ~]# /etc/nginx/sbin/nginx -Vnginx version: nginx/1.10.3built by gcc 4.4.7 20120313 (Red Hat 4.4.711) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013TLS SNI support enabled# 檢查配置檔案語法,可以防止因配置錯誤導致網站重啟或重新載入配置等對使用者的影響[root@crazy-acong nginx-1.10.3]# nginx -tnginx: the configuration file /etc/nginx/conf/nginx.conf syntax is oknginx: configuration file /etc/nginx/conf/nginx.conf test is successful
啟動nginx
/usr/local/sbin/nginx
用ps aux來檢視nginx是否啟動
ps aux|grep nginx
然後配置服務
vim /usr/lib/systemd/system/nginx.service
按i輸入以下內容
[Unit]
Description=nginx – high performance web server 
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/sbin/nginx -t -c /etc/nginx/conf/nginx.conf
ExecStart=/usr/local/sbin/nginx -c /etc/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=trusys
[Install]
WantedBy=multi-user.target
編輯好後儲存
然後開啟開機啟動
systemctl enable nginx.service
用命令關掉nginx
pkill -9 nginx
後面可以用systemctl來操作nginx.service
systemctl start nginx.service
然後php裝好後更改配置 編輯/etc/nginx/nginx.conf
安裝php
下載對應的版本
yum -y install libxml2yum -y install libxml2-devel
yum -y install opensslyum -y install openssl-develyum -y install curlyum -y install curl-develyum -y install libjpegyum -y install libjpeg-develyum -y install libpngyum -y install libpng-develyum -y install freetypeyum -y install freetype-develyum -y install pcreyum -y install pcre-develyum -y install libxsltyum -y install libxslt-develyum -y install bzip2yum -y install bzip2-devel
./configure
–prefix=/usr/local/php
–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-jpeg-dir
–with-xmlrpc
–with-xsl
–with-zlib
–with-bz2
–with-mhash
–enable-fpm
–enable-bcmath
–enable-libxml
–enable-inline-optimization
–enable-gd-native-ttf
–enable-mbregex
-enable-mbstring
–enable-pcntl
–enable-shmop
–enable-soap
–enable-sockets
–enable-sysvsem
–enable-sysvshm
–enable-xml
–enable-zip
–enable-opcache #5.5 以上版本
  實際上這裡的配置項比上述還多,可以使用 ./configure –help 命令檢視所有選項,這裡注意在php7中–with-mysql原生支援已經不存在了,操作都變成mysqli或者pdo了;以上這些選項在正常的php開發中完全夠用了,後期如果需要,可以選擇手動開啟相應的模組
  然後執行編譯:
make
  編譯時間可能會有點長,編譯完成之後,執行安裝:
make install
  php的預設安裝位置上面已經指定為/usr/local/php,接下來配置相應的檔案:
cp php.ini-development /usr/local/php/lib/php.inicp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.confcp sapi/fpm/php-fpm /usr/local/bin
  然後設定php.ini,使用: vim /usr/local/php/lib/php.ini 開啟php配置檔案找到cgi.fix_pathinfo配置項,這一項預設被註釋並且值為1,根據官方文件的說明,這裡為了當檔案不存在時,阻止Nginx將請求傳送到後端的PHP-FPM模組,從而避免惡意指令碼注入的攻擊,所以此項應該去掉註釋並設定為0
  
  設定完畢儲存並退出
  另外注意一個地方就是php.ini配置檔案的位置可以在編譯前配置引數中設定,編譯引數可以寫成:–with-config-file-path=/usr/local/php 這樣的話php就回去指定的目錄下讀取php.ini配置檔案,如果不加這個引數預設位置就是php安裝目錄下的lib目錄,具體也可以在phpinfo()輸出介面檢視,如果php.ini放到其他位置,php讀取不到,那麼所有的配置修改後都是不生效的,這點要注意
 如果此時隨便在一個位置新增,那麼接下來啟動php-fpm的時候,會報目錄找不到的錯誤,所以不要在php-fpm.conf中新增使用者和組,這個時候翻到php-fpm.conf最後一行會發現如下內容(如果編譯時新增–prefix選項以下位置會自動補全,預設是下面是空的,要注意):
  
  這裡引入了php-fpm.d目錄下所有的conf配置檔案,但是NONE需要修改為我們的實際目錄:/usr/local
  
  預設情況下etc/php-fpm.d/下有一個名為www.conf.defalut的配置使用者的檔案,執行下面命令複製一個新檔案並且開啟:
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.confvim /usr/local/php/etc/php-fpm.d/www.conf
  預設user和group的設定為nobody,將其改為www-data
  
  修改完成之後,儲存並退出,然後執行以下命令啟動php-fpm服務:
/usr/local/bin/php-fpm
 修改完成之後,儲存並退出,然後執行以下命令啟動php-fpm服務:
/usr/local/bin/php-fpm
  啟動完畢之後,php-fpm服務預設使用9000埠,使用 netstat -tln | grep 9000 可以檢視埠使用情況:
  
  9000埠正常使用,說明php-fpm服務啟動成功
  然後執行 vim /usr/local/nginx/conf/nginx.conf 編輯nginx配置檔案,具體路徑根據實際的nginx.conf配置檔案位置編輯,下面主要修改nginx的server {}配置塊中的內容,修改location塊,追加index.php讓nginx伺服器預設支援index.php為首頁:
  
  然後配置.php請求被傳送到後端的php-fpm模組,預設情況下php配置塊是被註釋的,此時去掉註釋並修改為以下內容:
  
  這裡面很多都是預設的,root是配置php程式放置的根目錄,主要修改的就是fastcgi_param中的/scripts為$document_root
  修改完上面的,回到nginx.conf第一行,預設是#user nobody;  這裡要去掉註釋改為user nginx;或者user nginx nginx;表示nginx伺服器的許可權為nginx
  修改完這些儲存並退出,然後重啟nginx:
/usr/local/nginx/nginx -s stop/usr/local/nginx/nginx
安裝mysql
http://mirrors.sohu.com/這也可以下載
 yum -y install perl-Module-Install.noarch
:http://www.mysql.com/downloads/,頁面最上面是企業版,一般個人或者企業使用社群版就足夠了,頁面拉到最下方可以看到下載入口:
  
  點選連結進入,然後選擇第一項進入:
  
  這裡預設是5.7.11的版本,我們選擇5.6的下載連結進入:
  
  進入後,預設版本就是5.6.19,對於版本這裡選擇Linux – Generic,也就是通用的二進位制版本
  
  然後上面都是RPM的包,我們拉到頁面最下方根據作業系統位數選擇.tar.gz的包,這裡選擇64位的mysql-5.6.29-linux-glibc2.5-x86_64.tar.gz
  
 釋放歸檔檔案: tar -xvzf mysql-5.6.29-linux-glibc2.5-x86_64.tar.gz  
  建立mysql目錄並移動至安裝目錄:
mkdir /usr/local/mysqlmv mysql-5.6.29-linux-glibc2.5-x86_64/* /usr/local/mysql/cd /usr/local/mysql/要注意,因為系統可能預設存在/etc/my.cnf
所以一般需要執行 
cp support-files/my-small.cnf /etc/my.cnf
 覆蓋原有的my.cnf,並且在裡面[mysqld]下面新增basedir為我們要安裝的mysql目錄
vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
接下來建立mysql使用者和使用者組:
groupadd mysqluseradd -r -g mysql -s /sbin/nologin -M mysql
  修改當前目錄許可權為mysql許可權:
chown -R mysql:mysql .
  執行安裝: ./scripts/mysql_install_db –user=mysql 
上一步安裝失敗,提示FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:Data::Dumper的話,那麼原因是缺少perl-module,那麼執行命令: yum -y install perl-Module-Install.noarch 安裝perl-module模組,需要下載安裝98個包,這個要耐心等待一會,等待perl-module安裝成功之後,再繼續執行上一步安裝
然後建立mariadb的日誌目錄,否則下一步會報錯,使用命令: mkdir /var/log/mysql 
  然後執行mysql安全啟動指令碼: bin/mysqld_safe –user=mysql & 執行後,再按一下回車回到命令列,沒報錯則啟動成功
  最後將mysql新增到系統服務:
1、將服務檔案拷貝到init.d下,並重新命名為mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
2、賦予可執行許可權
chmod +x /etc/init.d/mysqld
3、新增服務
chkconfig –add mysqld
4、顯示服務列表
chkconfig –list
如果看到mysql的服務,並且3,4,5都是on的話則成功,如果是off,則鍵入
chkconfig –level 345 mysql on
service mysqld start #就可以啟動mysql
ln -s /usr/local/mysql/bin/mysql /usr/local/sbin
mysql -uroot -p
進入mysql互動介面,如果這裡出現mysql.sock錯誤的提示,繼續編輯/etc/my.cnf檔案,修改其中的socket屬性為:/tmp/mysql.sock即可,或者註釋預設即可,儲存並退出;另一種方法推薦在/tmp下做軟連結,將my.cnf配置檔案中配置的socket位置鏈到提示錯誤的mysql.sock位置,命令是: ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock ;解決之後再次進入mysql互動介面就可以了
  
  輸入 quit 可以退出互動介面,mysql初始密碼為空,可以使用mysqladmin為mysql伺服器設定一個密碼:
bin/mysqladmin -u root password `Aa7410852`
  
  mysql -uroot -p 回車後繼續輸入密碼即可登入mysql
  如果後續需要修改密碼,因為mysql資料庫密碼是存放在mysql的一個資料庫中的user表中,那麼可以通過SQL語句實現,首先登入mysql資料庫在mysql提示符中進行如下操作即可修改密碼:
mysql> USE mysql;mysql> UPDATE user SET Password=PASSWORD(`newpass`) WHERE User = `root`;mysql> FLUSH PRIVILEGES;
  通過以上3步即可修改為你想要的密碼,並且下次立即生效,現在資料庫在本地就可以正常使用了,
  後來可以把mysql新增至環境變數中,便於直接輸入mysql進入,不用加路徑了,這個是可選的,根據自己的需要即可
  現在還要注意一個問題,雖然通過命令列可以進入了,但是我們從其他主機編寫的程式是無法連線到這臺伺服器的,在生產環境中這樣肯定是不行的,所以我們要對所有主機開放授權,這樣才可以正常訪問,首先我們登入mysql,然後執行下面命令可以給所有主機開放root使用者的授權:
mysql> GRANT ALL PRIVILEGES ON *.* TO `root`@`%` IDENTIFIED BY `setpassword` WITH GRANT OPTION;mysql> FLUSH PRIVILEGES;
  第一行指令的%代表所有主機來源,setpassword可以設定和本地mysql不同的密碼,當然一般情況下相同即可,執行完上面的指令後mysql就可以從外網立即連線了,到這裡mysql基本的安裝配置就完成了


相關文章