http://cn2.php.net/distributions/php-5.6.22.tar.bz2 http://cn2.php.net/distributions/php-7.1.18.tar.bz2
這裏將Centos的yum源更換爲國內的阿里雲源。yum安裝正常的能夠跳過本步驟。php
阿里雲Linux安裝鏡像源地址:
http://mirrors.aliyun.com/html
一、備份你的原鏡像文件,以避免出錯後能夠恢復:node
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
二、下載新的CentOS-Base.repo 到/etc/yum.repos.d/
python
## CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo ## CentOS 6 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo ## CentOS 7 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
三、生成緩存mysql
yum clean all yum makecache
yum install -y gcc gcc-c++ make cmake bison autoconf wget lrzsz yum install -y libtool libtool-ltdl-devel yum install -y freetype-devel libjpeg.x86_64 libjpeg-devel libpng-devel gd-devel yum install -y python-devel patch sudo yum install -y openssl* openssl openssl-devel ncurses-devel yum install -y bzip* bzip2 unzip zlib-devel yum install -y libevent* yum install -y libxml* libxml2-devel yum install -y libcurl* curl-devel yum install -y readline-devel
須要編譯libmcrypt、mhash、mcrypt庫(下載見文末附件)nginx
tar zxvf /libmcrypt-2.5.8.tar.gz \ && cd /libmcrypt-2.5.8 && ./configure && make && make install && cd - / && rm -rf /libmcrypt* \ && tar zxvf /mhash-0.9.9.9.tar.gz && cd mhash-0.9.9.9 && ./configure && make && make install && cd - / && rm -rf /mhash* \ && tar zxvf /mcrypt-2.6.8.tar.gz && cd mcrypt-2.6.8 && LD_LIBRARY_PATH=/usr/local/lib ./configure && make && make install && cd - / && rm -rf /mcrypt*
使用./configure --help
查看編譯支持的選項。若是寫了不支持的選項,如php7裏不支持--with-mysql=mysqlnd
會提示:c++
configure: WARNING: unrecognized options: --with-mysql
wget http://cn2.php.net/distributions/php-7.0.7.tar.bz2 tar jxvf php-7.0.7.tar.bz2 cd php-7.0.7 $ ./configure --prefix=/usr/local/php --with-config-file-scan-dir=/usr/local/php/etc/ --enable-inline-optimization --enable-opcache --enable-session --enable-fpm --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pdo-sqlite --with-sqlite3 --with-gettext --enable-mbregex --enable-mbstring --enable-xml --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-xmlrpc --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-curlwrappers --with-zlib --enable-zip --with-bz2 --with-gd --enable-gd-native-ttf --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-readline $ make $ make install
可選項:git
--with-fpm-user=www --with-fpm-group=www
這裏面開啓了不少擴展。若是這時候忘了開啓,之後還能加上嗎?答案是能夠的。之後只須要進入源碼的ext
目錄,例如忘了pdo_mysql
,進入ext/pdo_mysql
,使用phpize工具,像安裝普通擴展同樣便可生成pdo_mysql.so。github
關於:--enable-safe-mode
開啓的話php能夠執行一下系統函數,建議關閉(可搜索受此函數影響的php函數)web
#若是隻須要配置某一個目錄能夠執行則 設置爲on並指定 safe_mode_exec_dir=string目錄來執行系統函數。 #本特性已自 PHP 5.3.0 起廢棄並將自 PHP 5.4.0 起移除。 safe_mode = off
php7編譯不用加這個配置。
編譯比較耗內存和CPU。等待半小時左右,編譯完成:
Build complete. Don't forget to run 'make test'. Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/ Installing PHP CLI binary: /usr/local/php/bin/ Installing PHP CLI man page: /usr/local/php/php/man/man1/ Installing PHP FPM binary: /usr/local/php/sbin/ Installing PHP FPM config: /usr/local/php/etc/ Installing PHP FPM man page: /usr/local/php/php/man/man8/ Installing PHP FPM status page: /usr/local/php/php/php/fpm/ Installing phpdbg binary: /usr/local/php/bin/ Installing phpdbg man page: /usr/local/php/php/man/man1/ Installing PHP CGI binary: /usr/local/php/bin/ Installing PHP CGI man page: /usr/local/php/php/man/man1/ Installing build environment: /usr/local/php/lib/php/build/ Installing header files: /usr/local/php/include/php/ Installing helper programs: /usr/local/php/bin/ program: phpize program: php-config Installing man pages: /usr/local/php/php/man/man1/ page: phpize.1 page: php-config.1 Installing PEAR environment: /usr/local/php/lib/php/ [PEAR] Archive_Tar - installed: 1.4.0 [PEAR] Console_Getopt - installed: 1.4.1 [PEAR] Structures_Graph- installed: 1.1.1 [PEAR] XML_Util - installed: 1.3.0 [PEAR] PEAR - installed: 1.10.1 Wrote PEAR system config file at: /usr/local/php/etc/pear.conf You may want to add: /usr/local/php/lib/php to your php.ini include_path /php-7.0.7/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin ln -s -f phar.phar /usr/local/php/bin/phar Installing PDO headers: /usr/local/php/include/php/ext/pdo/ [root@e8ed9b00e80c php-7.0.7]# /usr/local/php/bin/php -m [PHP Modules] bcmath bz2 Core ctype curl date dom fileinfo filter gd gettext hash iconv json libxml mbstring mcrypt mysqli mysqlnd openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar posix readline Reflection session shmop SimpleXML soap sockets SPL sqlite3 standard sysvmsg sysvsem sysvshm tokenizer xml xmlreader xmlrpc xmlwriter zip zlib [Zend Modules]
須要從安裝包裏複製php.ini、php-fpm.conf到安裝目錄:
$ cp php-7.0.7/php.ini* /usr/local/php/etc/ $ cd /usr/local/php/etc/ $ cp php.ini-production php.ini $ cp php-fpm.conf.default php-fpm.conf $ cp php-fpm.d/www.conf.default php-fpm.d/www.conf $ ls pear.conf php-fpm.conf.default php.ini-development php.ini-production
配置php.ini
# 不顯示錯誤,默認 display_errors = Off # 在關閉display_errors後開啓PHP錯誤日誌(路徑在php-fpm.conf中配置),默認 log_errors = On # 字符集,默認 default_charset = "UTF-8" # 文件上傳大小,默認值過小,建議修改10M upload_max_filesize = 2M # Maximum size of POST data that PHP will accept. 表單最大值,默認是8M,若是表單含有多圖上傳,大小可能不夠。超過該大小後臺收不到 表單數據 post_max_size = 8M # 設置PHP的擴展庫路徑,,默認被註釋了。 extension_dir = "/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/" # 若是不設置extension_dir,也能夠直接寫絕對位置: # extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/redis.so # 設置PHP的時區 date.timezone = PRC # 開啓opcache,默認是0 [opcache] ; Determines if Zend OPCache is enabled opcache.enable=1
配置php-fpm.conf
; 去掉裏分號,方便之後重啓。建議修改 ; Default Value: none ; 下面的值最終目錄是/usr/local/php/var/run/php-fpm.pid ; 開啓後能夠平滑重啓php-fpm pid = run/php-fpm.pid ; 設置錯誤日誌的路徑,能夠默認值 ; Note: the default prefix is /usr/local/php/var ; Default Value: log/php-fpm.log, 即/usr/local/php/var/log/php-fpm.log error_log = /var/log/php-fpm/error.log ; Log等級,能夠默認值 ; Possible Values: alert, error, warning, notice, debug ; Default Value: notice log_level = notice ; 後臺運行,默認yes,能夠默認值 ; Default Value: yes ;daemonize = yes ; 引入www.conf文件中的配置,能夠默認值 include=/usr/local/php/etc/php-fpm.d/*.conf
配置www.conf(在php-fpm.d目錄下)
www.conf這是php-fpm進程服務的擴展配置文件:
; 設置用戶和用戶組,默認都是nobody。能夠默認值 user = nginx group = nginx ; 設置PHP監聽 ; 下面是默認值,不建議使用。能夠默認值 ; listen = 127.0.0.1:9000 ; 根據nginx.conf中的配置fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; listen = /var/run/php-fpm/php-fpm.sock ######開啓慢日誌。能夠默認值 slowlog = /var/log/php-fpm/$pool-slow.log request_slowlog_timeout = 10s
保存配置文件後,檢驗配置是否正確的方法爲:
/usr/local/php/sbin/php-fpm -t
若是出現諸如 test is successful
字樣,說明配置沒有問題。另外該命令也可讓咱們知道php-fpm的配置文件在哪。
創建軟鏈接:
ln -sf /usr/local/php/sbin/php-fpm /usr/bin/ ln -sf /usr/local/php/bin/php /usr/bin/ ln -sf /usr/local/php/bin/phpize /usr/bin/ ln -sf /usr/local/php/bin/php-config /usr/bin/ ln -sf /usr/local/php/bin/php-cig /usr/bin/
或者將php編譯生成的bin
目錄添加到當前Linux系統的環境變量中:
echo -e '\nexport PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH\n' >> /etc/profile && source /etc/profile
/usr/local/php/sbin/php-fpm
若是提示沒有www用戶(www.conf裏填寫了www而不是nobody),則新增:
useradd www chown -R www:www /www
檢測是否啓動:
ps aux |grep php-fpm # 另外該命令也可讓咱們知道fpm的配置文件在哪。 netstat -ant |grep 9000
查看php-fpm進程數:
ps aux | grep -c php-fpm
php-fpm操做彙總:
/usr/local/php/sbin/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` #php-fpm平滑重啓
重啓方法二:
killall php-fpm /usr/local/php/sbin/php-fpm &
若是沒法平滑啓動,那就終止進程id:
ps aux | grep php-fpm kill -9 1210 #1210指php-fpm進程id
nginx news
http://nginx.org/
http://nginx.org/download/nginx-1.11.1.tar.gz依賴:
# 爲了支持rewrite功能,咱們須要安裝pcre yum install pcre-devel # 須要ssl的支持,若是不須要ssl支持,請跳過這一步 # yum install openssl* # gzip 類庫安裝,按需安裝 # yum install zlib zlib-devel
配置編譯參數
$ tar -zxvf nginx-1.11.1.tar.gz $ cd nginx-1.11.1 $ ./configure \ --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_sub_module \ --with-http_gzip_static_module \ --with-pcre
配置ok:
編譯安裝nginx
make make install
設置軟鏈接:
ln -sf /usr/local/nginx/sbin/nginx /usr/sbin
檢測nginx:
nginx -t
顯示:
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
成功了。咱們從新配置下nginx.conf:
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; # 解決虛擬主機名字過長 http://www.jb51.net/article/26412.htm server_names_hash_bucket_size 128; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; autoindex on;# 顯示目錄 autoindex_exact_size on;# 顯示文件大小 autoindex_localtime on;# 顯示文件時間 include vhosts/*.conf; }
配置localhost:
vhosts/localhost.conf
server { listen 80; server_name localhost; #charset utf-8; #access_log logs/host.access.log main; location / { root /www/www/; index index.php index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root /www/www/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
啓動nginx:
/usr/local/nginx/sbin/nginx # 或者 nginx
重啓:
/usr/local/nginx/sbin/nginx -s reload # 或者 nginx -s reload
中止:
/usr/local/nginx/sbin/nginx -s stop # 或者 nginx -s stop
若是提示80端口被佔用了,可使用ps aunx | grep 80
查看。通常是apache佔用了。可使用:
chkconfig --list chkconfig nginx on service apache off
禁止apache啓動並關閉apache服務。
Swoole: PHP的異步、並行、高性能網絡通訊引擎
http://www.swoole.com/
wget https://github.com/swoole/swoole-src/archive/swoole-1.8.5-stable.zip unzip swoole-1.8.5-stable.zip cd swoole-1.8.5-stable phpize ./configure make && make install
服務器端:
http://download.redis.io/releases/redis-3.2.0.tar.gz
$ wget http://download.redis.io/releases/redis-3.2.0.tar.gz $ tar xzf redis-3.2.0.tar.gz $ cd redis-3.2.0 $ make
默認編譯完後在當前目錄的src目錄下。能夠複製可執行文件到其餘地方:
mkdir /usr/local/redis cd src cp redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis
複製配置文件
$ cd redis-3.2.0 $ cp redis.conf /usr/local/redis/
或者安裝的時候指定位置:
make PREFIX=/usr/local/redis install
將Redis的命令所在目錄添加到系統參數PATH中:
修改profile文件:
vi /etc/profile
在最後行追加:
export PATH="$PATH:/usr/local/redis/bin"
而後立刻應用這個文件:
. /etc/profile
這樣就能夠直接調用redis-cli的命令了
客戶端:
wget https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz tar -zxvf 2.2.4 cd phpredis-2.2.4/ phpize ./configure make && make install
3.0安裝 phpredis/phpredis: A PHP extension for Redis https://github.com/phpredis/phpredis 須要先安裝igbinary: PECL :: Package :: igbinary http://pecl.php.net/package/igbinary
wget http://pecl.php.net/get/igbinary-1.2.1.tgz tar zxvf igbinary-1.2.1.tgz cd igbinary-1.2.1 phpize ./configure make && make install
wget https://github.com/phpredis/phpredis/archive/3.0.0-rc1.zip unzip 3.0.0-rc1 cd phpredis-3.0.0-rc1/ phpize ./configure [--enable-redis-igbinary] make && make install
pecl install memcache
php7安裝有兼容問題,從github上搜到了一個可用的:
git clone https://github.com/websupport-sk/pecl-memcache memcache cd memcache phpize ./confihure make make install
安裝memcached:
pecl install memcached
須要先安裝:
yum install libmemcached-dev
若是存在舊版本,須要先卸載舊版本。
使用下面的命令檢查是否安裝有MySQL Server
rpm -qa | grep mysql
有的話經過下面的命令來卸載掉
rpm -e mysql //普通刪除模式 rpm -e --nodeps mysql // 強力刪除模式,若是使用上面命令刪除時,提示有依賴的其它文件,則用該命令能夠對其進行強力刪除
安裝編譯代碼須要的包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
下載MySQL 5.6.14:
wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.14.tar.gz tar xvf mysql-5.6.14.tar.gz cd mysql-5.6.14
編譯安裝
cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DSYSCONFDIR=/etc \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \ -DMYSQL_TCP_PORT=3306 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci\ -DMYSQL_USER=mysql make && make install
編譯的參數能夠參考http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html。
整個過程須要30分鐘左右……漫長的等待
使用下面的命令查看是否有mysql用戶及用戶組
cat /etc/passwd 查看用戶列表 cat /etc/group 查看用戶組列表
若是沒有就建立
groupadd mysql useradd -g mysql mysql
修改/usr/local/mysql
權限
chown -R mysql:mysql /usr/local/mysql
修改/usr/local/mysql
權限
進入安裝路徑
cd /usr/local/mysql
進入安裝路徑,執行初始化配置腳本,建立系統自帶的數據庫和表
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
注:在啓動MySQL服務時,會按照必定次序搜索my.cnf,先在/etc目錄下找,找不到則會搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,這是新版MySQL的配置文件的默認位置!
注意:在CentOS 6.4版操做系統的最小安裝完成後,在/etc目錄下會存在一個my.cnf,須要將此文件改名爲其餘的名字,如:/etc/my.cnf.bak,不然,該文件會干擾源碼安裝的MySQL的正確配置,形成沒法啓動。
在使用"yum update"更新系統後,須要檢查下/etc目錄下是否會多出一個my.cnf,若是多出,將它重命名成別的。不然,MySQL將使用這個配置文件啓動,可能形成沒法正常啓動等問題。
添加服務,拷貝服務腳本到init.d目錄,並設置開機啓動
cp support-files/mysql.server /etc/init.d/mysql chkconfig mysql on service mysql start --啓動MySQL
MySQL啓動成功後,root默認沒有密碼,咱們須要設置root密碼。
設置以前,咱們須要先設置PATH,要不不能直接調用mysql
修改/etc/profile文件,在文件末尾添加
PATH=/usr/local/mysql/bin:$PATH export PATH
關閉文件,運行下面的命令,讓配置當即生效
source /etc/profile
如今,咱們能夠在終端內直接輸入mysql進入,mysql的環境了
執行下面的命令修改root密碼
mysql -uroot mysql> SET PASSWORD = PASSWORD('123456');
若要設置root用戶能夠遠程訪問,執行
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%' IDENTIFIED BY 'password' WITH GRANT OPTION;
紅色的password爲遠程訪問時,root用戶的密碼,能夠和本地不一樣。
防火牆的3306端口默認沒有開啓,若要遠程訪問,須要開啓這個端口
打開/etc/sysconfig/iptables
在「-A INPUT –m state --state NEW –m tcp –p –dport 22 –j ACCEPT」,下添加:
-A INPUT -m state --state NEW -m tcp -p -dport 3306 -j ACCEPT
而後保存,並關閉該文件,在終端內運行下面的命令,刷新防火牆配置:
service iptables restart
OK,一切配置完畢,你能夠訪問你的MySQL了~
注意:
CentOS 7中默認使用Firewalld作防火牆,因此修改iptables後,在重啓系統後,根本無論用。
Firewalld中添加端口方法以下:
firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload