目錄
- 前言
- 要準備的工具
- nginx的安裝
- nginx介紹
- 反向代理
- 負載均衡
- 動靜分離
- 安裝nginx前的準備
- 安裝make
- 安裝g++
- 安裝其他擴展
- 安裝pcre
- 安裝zlib
- 安裝openssl
- 安裝nginx
- nginx介紹
- PHP安裝
- PHP介紹
- nginx如何運行PHP專案
- PHP安裝前的準備
- 基礎運行環境安裝
- 安裝oniguruma
- PHP安裝
- PHP常用擴展的安裝
- 安裝bz2擴展
- 安裝關于mysql資料庫的擴展時的操作注意
- PHP介紹
- mysql安裝
- php如何連接mysql
- redis安裝
- redis遠程連接
- php如何連接redis
- PHP專案部署
- 網站加速
- 原因
- 解決辦法
- 安裝部署中的問題
- 出現could not find driver錯誤
- 網站加速
- 參考資料
前言
我之前在構建PHP專案運行環境,直接采用寶塔或者PHPstduy等一鍵集成安裝工具,雖然操作簡單,運營維護起來也方便.但是總覺得不自己手動安裝一次,總感覺少點啥一樣;
所以今天,我們進行一次手動安裝PHP運行環境并部署專案運行.
要準備的工具
硬體 : 云服務器/虛擬機
作業系統 : Alibaba-Cloud-Linux-2.1903-LTS-64位/centos7
連接[云服務器/虛擬機]的遠程工具 : xshell/MobaXterm_Personal等
nginx的安裝
nginx介紹
Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,Nginx是一款輕量級的Web 服務器/反向代理服 務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行,
其特點是占有記憶體少,并發能力強,事實上nginx的并發能力在同型別的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等,
反向代理
反向代理服務器位于用戶與目標服務器之間,但是對于用戶而言,反向代理服務器就相當于目標服務器,即用戶直接訪問反向代理服務器就可以獲得目標服務器的資源,
同時,用戶不需要知道目標服務器的地址,也無須在用戶端作任何設定,
反向代理服務器通常可用來作為Web加速,即使用反向代理作為Web服務器的前置機來降低網路和服務器的負載,提高訪問效率,
負載均衡
負載均衡(Load Balance)其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成作業任務,
單個服務器解決不了,我們增加服務器的數量,然后將請求分發到各個服務器上面,將原先請求到單個服務器上面的情況改為將請求分發到多個服務器上,將負載分發到不同的服務器,這就是所說的負載均衡,
動靜分離
為了加快網站的決議速度,可以把動態頁面和靜態頁面由不同的服務器來決議,加快決議速度,降低單個服務器的壓力,
安裝nginx前的準備
安裝make
yum install -y gcc automake autoconf libtool make
安裝g++
yum install -y gcc gcc-c++
安裝其他擴展
一般我們都需要先裝pcre, zlib,前者為了重寫rewrite,后者為了gzip壓縮,
安裝pcre
https://ftp.pcre.org/pub/pcre/ 下載最新的 PCRE 原始碼包,使用下面命令下載編譯和安裝 PCRE 包
# 進入opt檔案夾
cd /opt
# 下載pcre-8.44.tar.gz
wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
# 解壓縮
tar -zxvf pcre-8.44.tar.gz
# 移動
mv pcre-1.2.11 /usr/local/nginx_extension/pcre
# 進入檔案夾
cd /usr/local/nginx_extension/pcre
# 將pcre安裝在/usr/local/nginx_extension/pcre
./confiure
# 進行編譯安裝
make && make install

安裝zlib
http://zlib.net/zlib-1.2.11.tar.gz 下載最新的 zlib 原始碼包,使用下面命令下載編譯和安裝 zlib包:
# 進入opt檔案夾
cd /opt
# 下載
wget http://zlib.net/zlib-1.2.11.tar.gz
# 解壓縮zlib
tar -zxvf zlib-1.2.11.tar.gz
# 移動
mv zlib-1.2.11 /usr/local/nginx_extension/zlib
# 進入解壓后的zlib檔案夾
cd /usr/local/nginx_extension/zlib
# 將zlib安裝在/usr/local/nginx_extension/zlib
./configure
# 進行編譯安裝
make && make install

安裝openssl
cd /opt
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar -zxvf openssl-1.1.1g.tar.gz
mv openssl-1.1.1g /usr/local/nginx_extension/openssl

安裝nginx
先到nginx官網(http://nginx.org/en/download.html)下載最新的nginx編譯安裝包,我這里下載的是nginx1.19.6

# 進入opt檔案夾
cd /opt
# 下載
wget http://nginx.org/download/nginx-1.19.6.tar.gz
# 解壓縮
tar -zxvf nginx-1.19.6.tar.gz
# 移動
mv nginx-1.19.6 /usr/local/nginx
# 進入解壓好的
cd /usr/local/nginx
# 選擇安裝位置以及開放相應模塊
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_gzip_static_module --with-http_stub_status_module --with-file-aio --with-http_realip_module --with-http_ssl_module --with-pcre=/usr/local/nginx_extension/pcre --with-zlib=/usr/local/nginx_extension/zlib --with-openssl=/usr/local/nginx_extension/openssl
# 編譯安裝
make -j2 && mkae install

PHP安裝
PHP介紹
PHP(“PHP: Hypertext Preprocessor”,超文本前處理器的字母縮寫)是一種被廣泛應用的開放源代碼的多用途腳本語言,它可嵌入到 HTML中,尤其適合 web 開發,
nginx如何運行PHP專案
nginx本身不能處理PHP,它只是個web服務器,當接收到請求后,如果是php請求,則發給php解釋器處理,并把結果回傳給客戶端,
nginx一般是把請求發fastcgi管理行程處理,fascgi管理行程選擇cgi子行程處理結果并回傳被nginx
PHP-FPM是一個PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下載得到.
PHP-FPM其實是PHP源代碼的一個補丁,旨在將FastCGI行程管理整合進PHP包中,必須將它patch到你的PHP源代碼中,在編譯安裝PHP后才可以使用,
新版PHP已經集成php-fpm了,不再是第三方的包了,推薦使用,
PHP-FPM提供了更好的PHP行程管理方式,可以有效控制記憶體和行程、可以平滑多載PHP配置,比spawn-fcgi具有更多優點,所以被PHP官方收錄了,
在./configure的時候帶 –enable-fpm引數即可開啟PHP-FPM,其它引數都是配置php的
PHP安裝前的準備
基礎運行環境安裝
#以下已經安裝了可以不用安裝
yum -y install gcc automake autoconf libtool make
yum -y install gcc gcc-c++ glibc
# 可以直接安裝,也可以在編譯的時候再安裝
yum -y install libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel sqlite-devel sqlite
安裝oniguruma
oniguruma是一個處理正則運算式的庫,我們之所以需要安裝它,是因為在安裝php7.4的程序中,mbstring的正則運算式處理功能對這個包有依賴性,所以我們要先安裝這個庫
# 下載
wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz
# 解壓縮
tar -xvf oniguruma-6.9.4.tar.gz
# 移動
mv oniguruma-6.9.4 /usr/local/php_extension/niguruma
# 進入
cd /usr/local/php_extension/niguruma
# 編譯
./autogen.sh
# 配置
./configure --prefix=/usr --libdir=/lib64
# 安裝
make && make install
PHP安裝
#進入opt檔案夾
cd /opt
#下載
wget https://mirrors.sohu.com/php/php-7.4.16.tar.gz
# 解壓
tar -zxvf php-7.4.16.tar.gz
# 進入PHP檔案夾
cd php-7.4.16
# 配置安裝
./configure --prefix=/usr/local/php --enable-fpm --with-mysql --with-mysqli --with-pdo --with-pdo-mysql
# 安裝
make all install
安裝成功后,PHP的目錄

配置到環境變數
vi /etc/profile
PHP_PATH=/usr/local/php
export PATH=$PATH:/$PHP_PATH/bin
source /etc/profile
php -v

安裝完成之后,需要生成php-fpm組態檔
cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf
cd /usr/local/php/etc/php-fpm.d
cp www.conf.default www.conf
PHP常用擴展的安裝
將php安裝包中的php.ini-production復制到/usr/local/php/lib
# 復制
cp /opt/php-7.4.16/php.ini-production /usr/local/php/lib
#重命名
rename /usr/local/php/lib/php.ini-production /usr/local/php/lib/php.ini
#驗證是否已經加載到配置
php --ini
#查看當前php所使用的的module
php -m

編輯/usr/local/php/lib/php.ini,找到;extension_dir =把前面的分號去掉并更正現有的編譯路徑(/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/),找到;extension=模塊名,選擇要打開的模塊,并把前面的分號去掉,我這里打開的模塊

重啟php-fpm之后,會有下圖提示你,你打開的模塊沒有安裝.這時就要回到php7.4的安裝包中找到ext擴展包,根據下圖提示進行安裝php擴展

安裝bz2擴展
cd /opt/php7.4.16/ext/bz2
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
php -m
其余的擴展同bz2擴展的安裝步驟一直
安裝關于mysql資料庫的擴展時的操作注意
版本在PHP7朝上的,直接在編譯安裝是直接開放即可,無需做二次編譯模塊
mysql安裝
下載mysql安裝包,官網地址(https://dev.mysql.com/downloads/mysql/5.7.html)

首先查詢是否有舊的mariadb安裝包,有就卸載掉
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.1.al7.x86_64
安裝新的mysql
cd /opt
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz /usr/local/mysql
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql /usr/local/mysql
創建mysql的組態檔(my.cnf)
[client]
# 設定mysql客戶端默認字符集
default-character-set = utf8mb4
#如果不設定會報錯ERROR 2002 (HY000): Can't connect to local MySQL server through socket
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
#設定3306埠
port=3306
character-set-server = utf8mb4
# 設定mysql的安裝目錄
basedir=/usr/local/mysql
# 設定mysql資料庫的資料的存放目錄
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
# 禁用主機名決議
skip-name-resolve
# 創建新表時將使用的默認存盤引擎
default-storage-engine=INNODB
lower_case_table_names=1
# 過小可能會導致寫入(匯入)資料失敗
max_allowed_packet = 256M
group_concat_max_len = 10240
# 允許最大連接數
max_connections=200
# 提到 join 的效率
join_buffer_size = 16M
# 事務日志大小
innodb_log_file_size = 256M
# 日志緩沖區大小
innodb_log_buffer_size = 4M
# 事務在記憶體中的緩沖
innodb_log_buffer_size = 3M
配置完成后
chown -R mysql:mysql /usr/local/mysql/data
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
啟動mysql
/usr/local/mysql/support-files/mysql.server start

將mysql添加到自啟動中
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld

驗證mysql是否加入到系統自啟動中

登錄mysql,修改root密碼
# 建立一個鏈接檔案,因為系統默認會查找/usr/bin下的命令,
ln -s /usr/local/mysql/bin/mysql /usr/bin
# 建立一個鏈接檔案.因為系統默認會查找/tmp/mysql.sock(如果沒有拋出這個錯誤ERROR2002(HY000),就無需設定)
ln -s /usr/local/mysql/data/mysql.sock /tmp/mysql.sock
mysql -uroot -p
Enter password:
#登錄以后,修改用戶密碼
mysql> set password for root@localhost=password("用戶新密碼");
#設定root遠程登錄
mysql> GRANT ALL PRIVILEGES ON *.* TO'root'@'%' IDENTIFIED BY '用戶密碼' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)
#更新權限
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
測驗連接

到此mysql的就基本安裝完成了.
php如何連接mysql
請回到PHP安裝常用擴展中
redis安裝
cd /opt
wget https://github.com/antirez/redis/archive/5.0.7.tar.gz
tar -zxvf redis-5.0.7.tar.gz
mv redis-5.0.7 /usr/local/redis
cd /usr/local/redis
make && make PREFIX=/usr/local/redis install


redis遠程連接
修改redis.conf檔案
1.注釋掉bind 127.0.0.1
2設定后臺啟動,將 daemonize no 改為 daemonize yes
3.protected-mode no #默認yes,開啟保護模式,限制為本地訪問
重啟
bin/redis-server /usr/local/redis/redis.conf

php如何連接redis
下載redis擴展,官網地址(https://pecl.php.net/package/redis)

cd /opt
wget https://pecl.php.net/get/redis-5.3.7.tgz
tar -zxvf redis-5.3.7.tgz
mv redis-5.3.7 /usr/local/php_extension/redis
cd /usr/local/php_extension/redis
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
編譯安裝完成后,打開php.ini,添加上extension=redis,并重啟php-fpm


PHP專案部署
1.創建一個單獨的專案檔案夾,上傳或者使用git拉取專案代碼,我這里使用的是上傳專案

2.解壓縮專案代碼(如果是拉取,省略該步驟)
tar -zxvf 專案代碼.tar.gz

3.創建資料庫,并將資料表匯入到該庫中,建議是資料庫管理工具(如:Navicat等)

4.在nginx中進行站點配置,打開nginx.conf配置,修改server中的資訊
server {
listen 80;
server_name blog.lt996.cn;
root /data/tblog/public;
error_page 500 502 503 504 /50x.html;
index index.php;
charset utf-8;
location / {
# try_files $uri @laravels;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
重啟nginx,并驗證站點

至此,網站就部署好了
網站加速
原因
就是頁面回應速度太慢了,提高頁面加載速度
解決辦法
1.添加swoole擴展,安裝方式跟php的其他擴展安裝方式一致,本次使用的swoole版本是4.4.12,安裝完成后

2.下載hhxsv5/laravel-s擴展,我這采用的是composer,并添加,修改配置加速配置
composer require hhxsv5/laravel-s
具體修改的方法(http://www.phpxs.com/post/6623/)
3.修改nginx站點配置
upstream swoole {
# 通過 IP:Port 連接
server 127.0.0.1:5200 weight=5 max_fails=3 fail_timeout=30s;
# 通過 UnixSocket Stream 連接,小訣竅:將socket檔案放在/dev/shm目錄下,可獲得更好的性能
#server unix:/yourpath/laravel-s-test/storage/laravels.sock weight=5 max_fails=3 fail_timeout=30s;
#server 192.168.1.1:5200 weight=3 max_fails=3 fail_timeout=30s;
#server 192.168.1.2:5200 backup;
#keepalive 16;
}
server {
listen 80;
server_name blog.lt996.cn;
root /data/tblog/public;
error_page 500 502 503 504 /50x.html;
index index.php;
charset utf-8;
location / {
try_files $uri @laravels;
#try_files $uri $uri/ /index.php?$query_string;
}
#location ~ \.php$ {
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# include fastcgi_params;
#}
#location = /50x.html {
# root html;
#}
location @laravels {
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 120s;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Scheme $scheme;
proxy_set_header Server-Protocol $server_protocol;
proxy_set_header Server-Name $server_name;
proxy_set_header Server-Addr $server_addr;
proxy_set_header Server-Port $server_port;
# “swoole”是指upstream
proxy_pass http://swoole;
}
}
安裝部署中的問題
出現could not find driver錯誤
1.查詢專案配置是否的mysql是否連接成功

2.查詢php.ini是否安裝php_mysql模塊,完成后請殺死之前php-fpm在啟動

3.若安裝了php_mysql模塊,仍然出現該錯誤.請重新編譯時,加上mysql的安裝路徑,編譯完成后請殺死之前php-fpm在啟動
./configure --prefix=/usr/local/php --with-pdo-mysql=/usr/local/mysql
make all install
ps -ef | grep php-fpm
kill -9 主行程ID 子行程ID ...
參考資料
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/465061.html
標籤:其他
上一篇:PTA刷題筆記
