GY的實驗室 - Phalcon+Nginx+PHP-FPM環境搭建

Phalcon簡介

因爲半路出家的緣故,沒用過幾個PHP框架,第一個瞭解的框架是公司本身的,而後又試着用了Yii,CI。在讀了CSDN在某度的高排名翻譯文章(PHP開發框架流行度排名:Laravel居首)後,看了Laravel的皮毛。不得不說Laravel的文檔真是漂亮,可是做爲一個後臺程序開發者,總以爲也不是本身想要的。php

框架的做用:先後端代碼解耦;數據庫操做封裝;內置通用程序模塊(好比路由、認證、加密等);css

雖然整個網站中,框架性能並不是主要因素,可是仍是想把它發揮到極致,只能說是程序員的理想主義在做祟啦。
phalcon就是這種框架。PHP框架這麼一個直接跟業務代碼打交道的東西,都用本地化語言編寫,夠Geek。事實上,雖然說框架只是提供代碼調度和封裝,其自己的性能也不容忽視。html

本地化語言:就是能夠編譯成機器碼(那種能夠直接跑在本機CPU上的代碼啦)的語言,C/C++/Obj-C, ASM這種的。優勢是執行起來快快快,且有些硬件API,也許只有C接口,所以較解釋型語言更適合嵌入式領域,缺點是需從新編譯才能實現跨平臺,且一樣的功能,開發起來複雜度比腳本和Java要高mysql

1. Ubuntu編譯

Phalcon的方式是經過PHP擴展,將框架代碼編譯進去,使得編譯後的php命令支持一些框架類和依賴注入。編譯很是簡單nginx

#下載安裝依賴庫
sudo apt-get install php5-dev libpcre3-dev gcc make php5-mysql php5-fpm 
 #下載git庫
git clone --depth=1 git://github.com/phalcon/cphalcon.git
cd cphalcon/build
sudo ./install
#增長/etc/php5/fpm/conf.d/30-phalcon.ini
sudo echo 'extension=phalcon.so' > /etc/php5/fpm/conf.d/30-phalcon.ini
#增長/etc/php5/cli/conf.d/30-phalcon.ini
sudo echo 'extension=phalcon.so' > /etc/php5/cli/conf.d/30-phalcon.ini

2. 檢查php擴展

如今檢查下安裝是否成功。git

php -r 'echo phpinfo();' | grep -i phalcon

若是輸出下面這樣算做成功程序員

/etc/php5/cli/conf.d/30-phalcon.ini
phalcon
Phalcon Framework => enabled
Phalcon Version => 1.3.4
phalcon.db.escape_identifiers => On => On
phalcon.orm.column_renaming => On => On
phalcon.orm.enable_literals => On => On
phalcon.orm.events => On => On
phalcon.orm.exception_on_failed_save => Off => Off
phalcon.orm.not_null_validations => On => On
phalcon.orm.virtual_foreign_keys => On => On
phalcon.register_psr3_classes => Off => Off

也能夠經過下面這種方式檢測:github

php -r 'echo print_r(get_loaded_extensions());'

若是輸出下面這樣算做成功web

Array
(
    [0] => Core
    [1] => date
    [2] => ereg
    [3] => libxml
    [4] => openssl
    ...

3. Nginx配置

Nginx的安裝略去sql

配置修改:修改/etc/nginx/site-avaliable/default 或 /etc/nginx/conf.d/default,取決於/etc/nginx/nginx.conf的配置和我的喜愛

這裏爲了測試,在default文件中配置了兩個域名,共用8080端口

server {
    listen   8080 default_server;
    server_name ~^(.+)$;
    index index.php index.html index.htm;
    set $root_path '/srv/www/htdocs/phalcon-website/public';
    root $root_path;
    try_files $uri $uri/ @rewrite;
    location @rewrite {
        rewrite ^/(.*)$ /index.php?_url=/$1;
    }
    location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
        root $root_path;
    }
    location ~ /\.ht {
        deny all;
    }
    location ~ \.php$ {
        fastcgi_index /index.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;

        include fastcgi_params;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    }
}
server {
    listen   8080;
    #這裏在測試時用store_server域名,本機須要綁定hosts才能解析
    server_name store_server;
    index index.php index.html index.htm;
    set $root_path '/srv/www/htdocs/store/public';
    root $root_path;
    try_files $uri $uri/ @rewrite;
    location @rewrite {
        rewrite ^/(.*)$ /index.php?_url=/$1;
    }
    location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
        root $root_path;
    }
    location ~ /\.ht {
        deny all;
    }
    location ~ \.php$ {
        fastcgi_index /index.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

4. phalcon-devtools安裝

這個是phalcon的腳手架工具,支持一組命令,可以爲您自動生成代碼。

git clone git://github.com/phalcon/phalcon-devtools.git
cd phalcon-devtools/ && sudo ln -s ~/devtools/phalcon.php /usr/bin/phalcon

而後執行phalcon commands,會出現命令提示

Phalcon DevTools (1.3.4)

Available commands:
  commands (alias of: list, enumerate)
  controller (alias of: create-controller)
  model (alias of: create-model)
  all-models (alias of: create-all-models)
  project (alias of: create-project)
  scaffold
  migration
  webtools

執行create-project就能生成一套框架代碼啦!

cd /srv/www/htdocs/ && phalcon create-project store

5. 啓動服務器

終於到了一個興奮點了,哈哈

#重啓fpm和nginx
sudo service php5-fpm restart
sudo service nginx restart

而後本機綁定host: store_server,在瀏覽器欄輸入store_server:8080,就能看到大大的Congratulations了!

6. 服務器虛擬用戶名修改

期間可能會遇到權限問題,緣由是不管nginx建立子進程,仍是php5-fpm建立子進程,用得都是www-data的用戶名和羣組。
要修改默認值,賦值爲自定義的值。請分別修改/etc/nginx/nginx.conf和/etc/php5/fpm/pool.d/www.conf的user和group


至此,環境搭建完畢,接下來去探索Phalcon的各類內部機制吧!

相關文章
相關標籤/搜索