話說Centos下nginx,php,mysql以及phpmyadmin的配置

大話centos下部署phalcon框架

Centos仍是ubuntu?

當我沿用這個標題的時候,內心在想「我能說我以前用的windows嗎?",windows下xampp,wamp一鍵配置啊,有木有!我剛開始的時候就很傻很天真的在剛買的阿里雲服務器安裝了window Server 2008,着手部署xampp,兩個小時把解析環境所有配置好了,內心各類吐槽什麼服務器難搞定,在本大(diao)神(si)眼裏全是渣!內心各類喜悅啊,開始樂呵樂呵的測試公司的網站(根本沒問題啊),而後我就沒多想了(果真仍是太年輕),以後的幾天開始沉浸在項目開發中沒法自拔,就沒去折騰服務器了。php

因爲項目接近尾聲,開始試上線,我就把本地程序上傳到了服務器(因爲服務器是windows環境,桌面遠程鏈接(我真是忍不住要吐槽)在mac實在是難用),因爲沒有配置好windows下遠程FTP鏈接,而後就悲劇的共享磁盤驅動來更新程序(誰用誰知道),各類慢就不說了,還老是丟失。可是這些都沒有讓我產生放棄windows懷抱的想法。css

由於項目先後臺都是我本身弄的,前端用的h5+js,免不了各類ajax調用數據接口,而後悲劇就此產生~ windows的apache 2會三五分鐘就嗝屁,客戶後臺老是登不進去,基本就是一會一個電話,我內心想仍是換linux系統,就此開始了我3 * 24小時的CentOs+nginx+php+mysql+phpmyadmin+phalcon折騰之旅(聽說nginx是7*24小時不重啓的小金剛)。html

由於最開始我是部署的unbun12.04的系統,在開始以前仍是有思考過要用ubuntu仍是用centos呢?最後,我仍是選擇了centos,緣由是由於我以爲名字感受大氣一點(任性一把)。前端

環境安裝

  • 由於PHP-FPM 在 CentOS 的官方程序庫中不存在,因此咱們首先得添加第三方擴展軟件源,運行如下命令:mysql

    rpm --import https://fedoraproject.org/static/0608B895.txt 
      rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-        release-6-8.noarch.rpm
      rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
      rpm -ivh http://rpms.famillecollet.com/enterprise/remi-     release-6.rpm
      yum install yum-priorities
  • 而後,編輯:vi /etc/yum.repos.d/epel.repo:linux

    [epel]
      name=Extra Packages for Enterprise Linux 6 - $basearch
      baseurl=http://mirrors.aliyun.com/epel/6/$basearch
      http://mirrors.aliyuncs.com/epel/6/$basearch
      mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
      failovermethod=priority
      enabled=1
      priority=10
      gpgcheck=0
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
  • 接着:vi /etc/yum.repos.d/remi.repo:nginx

    [remi]
    
      name=Les RPM de remi pour Enterprise Linux 6 - $basearch
      baseurl=http://rpms.famillecollet.com/enterprise/6/remi/$basearch/
      mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
      enabled=1
      priority=10
      gpgcheck=1
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

下面咱們就能夠安裝所須要的包文件了:git

安裝MySQL服務器

yum install mysql mysql-server

-安裝Nginxgithub

yum install nginx

安裝PHP及相關組件

yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap      php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss       php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap       php-tidy php-pecl-apc
  • 啓動MySQLweb

    chkconfig --levels 235 mysqld on
      service mysqld start
  • 啓動Nginx

    chkconfig --levels 235 nginx on
      service nginx start
  • 啓動PHP-FPM

    chkconfig --levels 235 php-fpm on
      service php-fpm start
  • 若 Nginx 啓動失敗,則有多是由於 Apache httpd 服務佔用了該接口,這時,要麼咱們修改 Nginx 的堅挺端口,要麼修改Apache httpd的或者直接刪除 Apache httpd。

    apachectl stop
      yum remove httpd
      chkconfig --level 235 httpd off
  • 修改mysql密碼
  • 運行 mysql_secure_installation 命令,由於咱們是首次安裝因此直接回車,而後進入設置新密碼

配置 PHP

  • 打開 PHP 配置文件:vi /etc/php.ini
  • 設置 cgi.fix_pathinfo=0:(此處有坑~!)

[...]

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
    ; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

設置 upload_max_filesize 最大文件上傳尺寸爲 upload_max_filesize 爲 16MB:

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 16M

設置 post_max_size 爲 32MB:

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data   reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 32M

打開:vi /etc/php-fpm.d/www.conf :

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock;

以及:

listen.owner = www
listen.group = www
listen.mode = 0660

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default     user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = www
; RPM: Keep a group allowed to write in log dir.
group = www
  • 以上就是全部環境配置基本完畢(通常1個小時全部就能搞定,2M帶寬的話),以上安裝配置參考 潘韜 我的博客:http://xingzhewujiang.org/press/install-nginx-mysql-php-fpm-pahclon-on-centos-65.html。
    配置完這些我當時以爲我應該是離配置完成不遠了,感受本身棒棒噠啊~

域名解析

-因爲以前就已經解析好了域名,因此我只須要配置一下nginx虛擬主機

  • 靜態解析

  • 靜態解析按照nginx提供的virtual.conf裏面提供的例子解析便可

    listen 80;
    server_name somename alias another.alias;

    location / {
    root html;
    index index.html index.htm;
    }
    }

  • 動態解析,由於nginx自己不能解析php,因此它會把php轉發到9000端口,提交給php-fpm去解析,這裏我貼出個人配置文件

    server {
    
          listen       80;
          server_name  yourservername.com(須要解析的域名);
          index  index.html index.htm index.php;
    
          set $root_path  yourpath(項目入口文件位置);
          root $root_path;
    
          try_files $uri $uri/ @rewrite;
    
          location @rewrite {
              rewrite ^/(.*)$ /index.php?_url=/$1;
          }
    
          location ~ \.php {
          fastcgi_pass  127.0.0.1:9000;
          fastcgi_index /index.php;
    
          include /etc/nginx/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;
          }
    
          location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
          root $root_path;
          }
    
      location ~ /\.ht {
      deny all;
      }
      }

-這裏有一個地方須要注意,若是你在重啓nginx的時候,出現沒法識別$document_root,你須要將你的 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;裏面的$document_root換成你項目入口文件位置,我就在這個地方糾結了很久,弄半天才整出來,這個解析規則基本能知足大部分php項目解析。

安裝phpmyadmin

  • 資源下載
  • 進入phpmyadmin首頁(http://www.phpmyadmin.net/home_page/index.php),打開download,下載最新的phpmyadmin(多國語言(all-languages))的版本,下載完成以後,打包用ftp工具上傳到服務器,地址的話建議放home目錄下新建phpmyadmin文件夾下。

  • 解析phpmyadmin
  • 配置一個虛擬主機解析到phpmyadmin根目錄下,仍是沿用上方動態解析規則便可。

常見錯誤

  • 安裝完成以後,一個常常會出現的錯誤出現了,訪問phpmyadmin的時候,出現錯誤代碼以下:
  • Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.
  • 這個時候網上提供什麼5個步驟就能解決神馬的,我就很認(sha)真(bi)的一一試過,而後····神奇的事情發生了,根本沒用!相似這種解決方案(http://www.7edown.com/edu/article/soft_4365_1.html),全是複製粘貼的答案,根- 本沒有用(由於缺失先後文關係,你們就亂搞)。
  • 最後我根據session的配置文件,找到phpmyadmin/ libraries/session.inc.php ,修改一下代碼:

    if (! isset($_COOKIE[$session_name])) { 
      // on first start of session we check for errors 
      // f.e. session dir cannot be accessed - session file not created 
      $orig_error_count = $GLOBALS['error_handler']->countErrors(); 
      //session_save_path('./tmp'); 
      session_save_path("/tmp"); 
      $r = session_start(); 
      if ($r !== true 
      || $orig_error_count != $GLOBALS['error_handler']->countErrors() 
      ) { 
      setcookie($session_name, '', 1); 
      /* 
      * Session initialization is done before selecting language, so we 
      * can not use translations here. 
      */
          PMA_fatalError('Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.'); 
      } 
      unset($orig_error_count); 
      } else { 
      session_save_path("/tmp"); 
      session_start(); }
  • 記得在根目錄下新建tep文件夾,給予讀寫權限(chmod 777 ./),個人比較簡單粗暴,有一點安全隱患。
  • 至此,打開虛擬主機域名就能夠正常訪問phpmyadmin了!

phalcon環境的搭建

  • 由於以上步驟基本已經搭建好了前臺環境,最後須要搭建今天的主角嘉賓(phalcon框架)的搭建了。
  • phalcon介紹(http://www.phalconphp.com/)
  • phalcon是一款由c語言直接編寫的php框架,以靈活性(低耦合),可拓展性強,高性能聞名,也是以組建註冊,工廠服務形式存在的php框架。

  • 由於咱們的系統是Centos,因此根據官方給咱們的案例(http://phalconphp.com/zh/download,咱們須要本身手動編譯phalcon模塊

  • 安裝兩個編譯環境和工具:

    yum install gcc libtool make git
     yum install php55w-devel    
     (此處應該根據你本身的php版本去安裝,具體版本信息能夠輸出phpinfo()查看)。
  • 下載最新的phalcon文件

    git clone git://github.com/phalcon/cphalcon.git
     cd cphalcon/build
  • 而後執行

    ./install
  • 編譯好的.so文件目錄地址:

    /usr/lib64/php/moudels/phalcon.so
  • 常見錯誤

  • 最後咱們須要把.so拓展文件引用至.ini文件中,這個地方須要注意的是Centos不能夠直接在/etc/php.ini中直接加入:extension=phalcon.so,這樣重啓php-fpm的時候會報 php:startup()這個錯誤。
  • 咱們須要在/etc/php.d中新建一個 phalcon.ini文件,

    vi phacon.ini
  • 加入一下內容:

    extension=phalcon.so
  • 而後保存,重啓php-fpm服務,這個地方搞了我好幾個小時,由於開始的時候沒有仔細閱讀文檔,查半天返現centos須要從新新建一個.ini文件才能加載進來。
  • 其次我被php-fpm重啓也坑了半天,其重啓命令是

    services php-fpm restart

我在/etc/init.d/php-fpm restart半天也沒反應,一直重啓不起來,原來搞半天口令都錯了。

  • 至此,phalcon框架算是加載進來了,而後就是部署項目到服務器了

  • 一樣,解析一個域名到服務器,而後沿用以前的動態解析配置文件,而後咱們只須要在瀏覽器輕輕的輸入您的網址,不出意外,報錯!
  • 若是你仔細看我以前寫的文檔,你就會發現咱們在配置nginx環境修改php.ini的時候我寫了一個此處有坑,咱們須要找到etc/php.ini:

    cgi.fix_pathinfo=0改爲
     cgi.fix_pathinfo=1
  • 修改完成以後重啓服務器,緊接着出現第二個錯誤
  • 第二個錯誤應該是權限錯誤,錯誤代碼:Volt can't be writen!,咱們須要給項目文件讀寫權限(775)chmod 755 -R ./
  • 以後咱們就能夠看到熟悉的phalcon界面了!
  • 開心~撒花。

目前服務器配置如上,基本能知足小型項目需求,可是nginx對於後臺php等解析仍是不是特別理想,因此我打算再抽出幾天時間把先後臺服務器分離,前端用ubuntu+nginx+mongodb,後臺用apache2+centos+mysql(postgresql)+php,最後後臺實現業務與數據持久層分離,把數據接口和數據庫放到另一臺服務器上面,實現一個分佈式架構。

附錄:

  • centos經常使用命令:

    php-fpm重啓命令:  services php-fpm restart
      nginx重啓命令:services nginx restart  抑或在/etc/init.d/nginx -s reload
  • 賦予權限:

    chmod 777 -R ./
      chrow  www:www(用戶組:用戶名) -R ./
  • 若是您對本文檔有任何疑問或者建議,請您發送郵箱至zhoukai@dreamzk.cn,我會在第一時間給您答覆,謝謝。 轉載請代表出處,謝謝。

相關文章
相關標籤/搜索