手動編譯PHP開發環境

来源:https://www.cnblogs.com/depravity/archive/2019/08/06/11307472.html
-Advertisement-
Play Games

[TOC] 手動編譯PHP開發環境 這是一篇來自深夜加班的手稿 問題復盤 你有沒有遇到過這樣的情況,部署了集成環境,每次添加擴展的時候,總是需要找一堆的配置文件的位置(其實很多人都能熟練使用集成環境) 你有沒有遇到過這樣的情況,去面試,面試官問你: 有沒有自己手動編譯過環境? 你卻回答 我一般都使用 ...


目錄

手動編譯PHP開發環境

這是一篇來自深夜加班的手稿

問題復盤

你有沒有遇到過這樣的情況,部署了集成環境,每次添加擴展的時候,總是需要找一堆的配置文件的位置(其實很多人都能熟練使用集成環境)

你有沒有遇到過這樣的情況,去面試,面試官問你:有沒有自己手動編譯過環境? 你卻回答 我一般都使用集成環境

你有沒有遇到過這樣的問題,本來自己的伺服器配置就很low(有的甚至使用的是vps)基本上使用lnmp或者bt或者其他等等集成環境 但是他們的優缺點十分明顯

這可能就是我現在需要手動編譯環境的理由吧

部署環境及配置

linux centos 7.3
阿裡雲香港輕量級應用伺服器 34/月
購買推薦鏈接:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=4jm8fecv

目標環境

php 7.2
mysql 5.7.2
nginx 1.1.8

安裝部署環境開始

考慮到純凈安裝. 所以首先我們需要一臺乾凈的伺服器(為了這個 我把博客的全部東西幹掉了直接導致伺服器停運24小時)

首先我們確定安裝目錄

我是在根目錄部署了www目錄直接使用命令

mkdir -p /www/{lnmp,web,source} `

這裡創建的 www
/lnmp存放安裝軟體
/web 存放程式代碼
/source 存放安裝軟體

首先安裝PHP

PHP下載網址:
http://am1.php.net/distributions/php-7.2.1.tar.gz

所有的操作全部在 我們自己建立的www/lnmp 下

一、更換yum源

這對我們很重要,因為centos 內部的源一般都是國外的站點,我使用的是阿裡雲的伺服器 所以這裡我也是用阿裡雲的yum源

yum源的地址在

/etc/yum.repos.d/

將下麵的預設Centos-Base.repo 進行備份

mv /etc/yum.repos.d/Centos-Base.repo.bak

進入阿裡雲的鏡像地址:http://mirrors.aliyun.com/

在阿裡雲的鏡像地址找到自己對應的版本然後使用wget 進行下載

沒有wget的,提前使用yum 安裝一個

然後依次執行以下命令

yum clean all
yum makecache
yum update

然後在裸機上面安裝必要的擴展


yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel

上面安裝的都是必要的一些擴展

我們還可以使用yum 對系統的內核進行更新

yum install epel-release -y // 此步驟可以省略

安裝PHP

首先切換到我們的www/lnmp目錄下

然後使用tar -zxvf php-7.2.1.tar.gz 進行解壓

解壓完畢之後 我們進入 解壓過的目錄

設置變數並開始源碼編譯:

cp -frp /usr/lib64/libldap* /usr/lib/

這裡我們使用的是自定義的目錄所以編譯配置也需要改變

./configure --prefix=/www/source/php \
--with-config-file-path=/www/source/php/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqlnd-compression-support \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-openssl \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--enable-intl \
--with-libmbfl \
--enable-ftp \
--with-gd \
--enable-gd-jis-conv \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-gettext \
--disable-fileinfo \
--enable-opcache \
--with-pear \
--enable-maintainer-zts \
--with-ldap=shared \
--without-gdbm

此處重點要考

php7.2 去掉了很多原先php5 - php7.0的擴展 如之前的加密擴展
mcrypt 還有很多 這裡我就不一一舉例了

編譯完畢之後,我們進行下一步

make -j 4 && make install

接下來需要等待大約10-20分鐘 這個根據我們的伺服器而定 如果覺得慢我們可以使用

make -j 8 && make install

上面兩條命令都可以使用

接下來配置php.ini 文件:

cp php.ini-development /www/source/php/ect/php.ini

cp /www/source/php/etc/php-fpm.conf.default /www/source/php/etc/php-fpm.conf

cp /www/source/php/etc/php-fpm.d/www.conf.default /www/source/php/etc/php-fpm.d/www.conf

上述是我的配置文件地址,如果你出現錯誤 或者找不到文件位置,請按照你自己配置的文件安裝目錄進行查詢
也可以使用 find 查詢

配置php.ini

我直接貼出我修改的一些配置 僅供參考 可以根據個人情況進行調整

expose_php = Off
short_open_tag = ON
max_execution_time = 30
date.timezone = Asia/Shanghai
extension= /www/source/php/lib/php/extensions/no-debug-zts-20170718/ldap.so
zend_extension = /www/source/php/lib/php/extensions/no-debug-zts-20170718/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru

配置www.conf (此處為配置php-fpm 可略)

到了這一步的時候 我們需要建立對應的用戶www

groupadd www
useradd -g www www

然後創建存放 php-cgi.sock 的目錄

mkdir /var/run/www/
chown -R www:www /var/run/www

然後配置www.conf文件

 vim /www/source/php/etc/php-fpm.d/www.conf

配置詳解

slowlog = var/log/slow.log
listen = /var/run/www/php-cgi.sock

其他的都不需要改變

然後配置php-fpm.conf

pid = /usr/local/php/var/run/php-fpm.pid

至此php7已經安裝完成。說明:禁用php函數,如果程式需要這些函數,可以取消禁止,新手建議忽略此步驟。

創建system系統單元文件php-fpm啟動腳本:
vim /usr/lib/systemd/system/php-fpm.service

直接 編寫

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/www/source/php/bin/php-fpm --nodaemonize --fpm-config /www/source/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

將php-fpm服務啟動並加入開機自啟動

systemctl enable php-fpm.service
systemctl restart php-fpm.service

配置全局變數

接下來我們就已經配置完畢了試一試php-v

是不是突然報錯 , 沒有php 不要慌

這是因為我們沒有把PHP 加入全局變數的原因

vim /etc/profile
// 最後一行加入
PATH=$PAHT:/www/source/php/bin
// 保存退出
 source /etc/profile

再次執行 php -v
我們會顯示
PHP 7.2.1 (cli) (built: Jul 26 2019 10:50:53) ( ZTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.2.1, Copyright (c) 1999-2017, by Zend Technologies

安裝mysql

實現我們需要安裝mysql 安裝的一些依賴 這個大多都是使用yum安裝 可以直接百度

// 我這邊直接使用

yum install -y gcc gcc-c++ make sudo autoconf libtool-ltdl-devel gd-devel \
        freetype-devel libxml2-devel libjpeg-devel libpng-devel \
        openssl-devel curl-devel patch libmcrypt-devel \
        libmhash-devel ncurses-devel bzip2 \
        libcap-devel ntp sysklogd diffutils sendmail iptables unzip cmake

接下來創建mysql的用戶組和用戶

groupadd mysql
useradd -r mysql -g mysql

下載必要的包

安裝mysql5.6的時候就已經使用cmake了 我們這裡使用mysql 5.7
還需要安裝一個boost的包


wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20.tar.gz

wget --no-check-certificate http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

然後解壓mysql 5.7
進入mysql5.7目錄

然後將 我們下載的 boots 包 移動到 解壓完畢的mysql文件夾內部

然後我們新建一個 configure 文件夾 接下來我們將在該文件夾內 完成整套編譯工作

然後貼出我的配置

cmake .. -DBUILD_CONFIG=mysql_release \
-DINSTALL_LAYOUT=STANDALONE \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DENABLE_DTRACE=OFF \
-DWITH_EMBEDDED_SERVER=OFF \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_SSL=bundled \
-DWITH_ZLIB=system \
-DCMAKE_INSTALL_PREFIX=/www/source/mysql/ \
-DINSTALL_PLUGINDIR="/www/source/mysql/lib/plugin" \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EDITLINE=bundled \
-DFEATURE_SET=community \
-DCOMPILATION_COMMENT="MySQL Server (GPL)" \
-DWITH_DEBUG=OFF \
-DWITH_BOOST=..

關於這些配置命令的名稱 網路上都有介紹 我就不過多的講述了

如果出現編譯失敗 那麼 一定要刪除當前目錄下的
rm -rf CMakeCache.txt 文件

當我們編譯完成之後 執行

make && make install

接下來就是耐心等待20分鐘左右

初始化資料庫

新建資料庫文件夾以及日誌文件夾,並更改用戶為mysql:
mkdir /www/source/mysql/mysql_data
mkdir /www/source/mysql/log
chown -R mysql:mysql /www/source/mysql/mysql_data
chown -R mysql:mysql /www/source/mysql/log
// 在日誌文件中建立 error.log 文件
// 賦許可權整個目錄及其文件夾
chmod -R 777 /www/source/mysql/log
修改配置文件
# vim /etc/my.cnf
[mysqld]
port=3306
datadir=/www/source/mysql/mysql_data
log_error=/www/source/mysql/log/error.log
basedir=/www/source/mysql/
// 註意:my.cnf文件有以下配置
socket=/www/source/mysql/mysql_data/mysql.sock
// 需要手動建立mysql.sock,並賦值讀寫執行許可權
chmod -R 777 mysql.sock
初始化資料庫
/var/mysql/bin/mysqld  --initialize --user=mysql

去查看剛剛創建的文件夾內 是否存在生成的文件

配置啟動文件及環境變更

配置啟動文件
cp /var/mysql/support-files/mysql.server /etc/init.d/mysqld
修改啟動文件
vim /etc/init.d/mysqld

# 找到如下二行:
basedir=
datadir=
# 修改為:
basedir=/www/source/mysql/
datadir=/www/source/mysql/mysql_data/

啟動mysql

/etc/init.d/mysqld start

可以看到提示,已經成功啟動。當然你也可以使用systemctl來啟動MySQL,但執行後,不會有任何提示。

systemctl start mysqld

然後我們將mysql 加入全局變數

這次我試了很多方式 但是沒有成功 所以 我直接建立了一個軟鏈

當我們執行某命令的時候 伺服器首先去看/user/bin這個文件夾

ln -s /www/source/mysql/bin /usr/bin

修改mysql 密碼

從mysql5.7開始 mysql不在支持空密碼登錄 所以我們直接查看密碼

cat /www/source/mysql/log/error.log |grep 'A temporary password'
2019-07-13T06:28:23.096812Z 1 [Note] A temporary password is generated for root@localhost: wa&sk371_,US

後面的就是我們的mysql 密碼了

然後我們直接使用mysql登錄進去

mysql> alter user 'root'@'localhost' identified by 'your_password';

ok!!!!

安裝nginx

準備工作

安裝nginx 的時候 我們首先還需要安裝3個依賴包

pcre:在使用 nginx 的 rewrite 模塊的時候,需要有pcre庫的支持
openssl:在使用ssl功能時,需要有 openssl庫的支持
zlib:在使用gzip模塊時,需要有zlib庫的支持。
而這三個模塊都是我們常用的,所以這3個依賴包還是要安裝的。

1、安裝pcre

首先下載這個包

wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.36/pcre-8.36.tar.gz
tar -zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure
make && make install
2、安裝 openssl
wget https://www.openssl.org/source/openssl-1.1.0k.tar.gz
tar -zxvf openssl-1.1.0k.tar.gz
cd openssl-1.1.0k
./config
make && make install
3、安裝zlib
wget https://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
CFLAGS="-O3 -fPIC" ./configure
make && make install

編譯nginx

因為nginx的命令有很多 我們可以使用

./configure --help

這裡我推薦使用

./configure --user=www --group=www --prefix=/www/source/nginx --with-pcre=/www/lnmp/pcre-8.36 --with-zlib=/www/lnmp/zlib-1.2.11 --with-openssl=/www/lnmp/openssl-1.1.0k

上面的命令是和我們下載的pcre以及openssl and zlib要關聯上的 具體看你的配置

執行完畢之後 我們執行

make && make install
// 然後
ll /www/source/

下麵存在nginx 說明我們安裝成功

然後我們使用

cd /www/source/nginx/conf

到這裡的時候我們基本上已經安裝完畢

本次手動編譯nginx+php+mysql 就到這裡

關於nginx的配置 和 php的問題

請繼續關註我的博客


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 因客戶現場網路複雜,將windows系統的預設遠程埠3389歸入安全策略中,所以伺服器需要修改此埠,配置如下: 首先:登錄操作系統,win+R調出運行菜單後輸入regedit, 進入註冊表編輯相關遠程埠信息,按下麵的路徑進入修改埠: 1、找到HKEY_LOCAL_MACHINE\System ...
  • 一些雜亂的基礎概念 程式是一種靜態的文件,躺在磁碟上。而進程則是將程式運行起來放置於記憶體中。因此進程就是運行中的程式,是程式運行起來的一個實例。同一個程式可以運行為多個進程/實例。 進程之間有父子關係,即父進程與子進程之間的關係。父進程結束後,子進程也會隨之結束。因此,當我們通過終端連接上之後,隨即 ...
  • 1. 總結IP地址規劃 1)IP地址基礎在IP網路中,通信節點需要有一個唯一的IP地址,IP地址用於IP報文的定址以及標識一個節點;IP地址中最重要的是子網劃分。2)特殊IP地址a.受限廣播(用於IP地址請求階段)所有位全為1,255.255.255.255b.直接廣播(子網廣播) 主機位全為1,如 ...
  • 本篇博文以 Cent OS 為例, 演示 Linux 系統下如何查看某個網路埠的占用情況, 並找出占用某個埠的進程, 以及殺死相關進程的方法. ...
  • 簡要介紹硬碟壞道可以說是硬碟致命性故障。出現硬碟壞道以後硬碟往往也就代表著硬碟生命結束,硬碟在出現壞道以後不但是某些壞扇區不可用,還會直接殃及到其它可用磁碟扇區,這樣硬碟生命也不會太長,一般利用不了多長時間後便無法再繼續使用,造成整塊硬碟損壞。硬碟出現壞道,意味著用來存儲數據不安全,硬碟壞了可以再買 ...
  • 1. gpedit.msc 組策略 2. sndrec32 錄音機 3. Nslookup IP地址偵測器 4. explorer 打開資源管理器 5. logoff 註銷命令 6. tsshutdn 60秒倒計時關機命令 7. lusrmgr.msc 本機用戶和組 8. services.msc ...
  • 一、echo在屏幕上列印內容 echo [選項] [輸出內容] -e 支持轉義字元控制的字元轉換 輸出帶顏色的文本 二、第一個腳本 編寫腳本 註意: 運行腳本 兩種方式 (1)賦予執行許可權,直接運行 (2)通過bash調用執行腳本 三、bash的基本功能 (1)命令別名 顯示已有的別名 alisa ...
  • vi -- 終端中的編輯器 visual interface ssh-- secure shell vim vi improved 打開和新建文件 vi 文件名 #如果文件已經存在,會直接打開文件 #如果文件不存在,會新建一個文件 打開文件並定位行 vi 文件 游標定位在最開頭 vi 文件 + 游標 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...