阿里雲計算:CentOS+nginx+Django+Postgresql web環境搭建

  最近在在萬網和阿里雲上分別購買了一個域名和一臺雲服務器,打算用來作點什麼。昨天吃完晚飯稍做休息開始對這個新奇的玩意做了些瞭解並着手配置其運行環境,今早凌晨4點多才弄得7788,爲此也錯過了西班牙VS荷蘭的比賽,在此把期間遇到的一些問題和解決辦法記錄下來以被查閱。
html

 雲服務器ECS是什麼?(摘自阿里雲官網)

  雲服務器(Elastic Cloud Service, ECS)是處理能力可彈性伸縮的計算服務,管理方式比物理服務器更簡單高效。無需提早採購投入,能夠根據業務的須要,隨時建立、釋聽任意多臺雲服務器實例。python

  在使用雲服務器時,會接觸到一些名詞,有的會比較熟悉,有的相對來講會少見一些。這些名詞所表明的產品概念組合起來,構成完整的雲服務器產品。下面是這些名詞及表明的含義:nginx

  • 雲服務器實例(簡稱實例,Instance,如非特指,在雲服務器的文檔中指的是雲服務器實例)是一個虛擬的計算環境,包含CPU、內存等最基礎的計算組件,是雲服務器對於每一個用戶的應用的具體體現和實際操做實體。實例的規格定義了實例的CPU、內存的配置。實例是雲服務器最爲核心的概念,下面描述的磁盤、IP等只有與實例結合後纔是有意義的。
  • 地域(Region)是實例的物理位置的選擇。在中國區域,根據您的客戶羣體分佈能夠選擇不一樣區域的雲服務器服務,如杭州、青島。地域內的實例內網是能夠互通的,不一樣地域之間的實例內網不互通。
  • 鏡像(Image)是實例可選擇的運行環境模板,通常包括操做系統和預裝的軟件。您能夠選擇阿里雲提供的鏡像,支持Linux和Windows的多個髮型版本,也能夠建立本身的自定義鏡像。
  • 磁盤(Disk)有云磁盤和臨時磁盤兩種類型。存儲在雲磁盤上的數據安全性更高,臨時磁盤則吞吐性能更好。購買一個實例時,若是選擇臨時磁盤,那麼磁盤的空間大小和個數在將來是不可調整的。
  • 快照(Snapshot)是磁盤上的數據在某一個時間點的拷貝,存儲在開放存儲服務(OSS)上。快照採用增量備份機制,只有磁盤上發生變化的數據塊纔會被拷貝到快照中。
  • IP包含內網IP地址和公網IP地址。每一個實例默認包含一個內網IP地址,公網IP地址是可選的。
  • Ÿ安全組(SecurityGroup)指定了一個或多個防火牆規則,規則包含允許訪問的網絡協議、端口、源IP等。防火牆規則對加入安全組的全部實例生效。但加入同一個安全組的實例相互之間的訪問是不受規則限制的。

關於單位,1000和1024的描述

  換算單位有兩套標準,SI的標準用1000進製表示(如GB),IEC 60027-2的標準是以二進制表示(1024進制,如GiB),bi-表示binary(二進制)的縮寫。阿里雲的雲服務器採用IEC標準,單位爲GiB,TiB等。sql

 


 軟硬件環境

  操做系統:CentOS 6.3 64 位。CentOS是Linux再發行版本,有「社區版RedHat」的稱號,以穩定著稱。爲何選Linux而不是Windows理由有不少。數據庫

  CPU:單核django

  內存:512Mvim

  帶寬:1M(固定IP)windows

  存儲:20G(系統盤) + 50G(數據盤)安全

  地域:杭州服務器

  費用:(55 + 18.05) 元/月,算把每月蹭別人的網省下來的錢補到這個裏面去了。


 

 遠程訪問雲服務器ECS實例

  首次訪問服務器前須要在阿里雲管理控制檯修改實例訪問密碼,用戶名是root,最高權限了。

  遠程工具:在Winodows下推薦使用puTTY,下載地址:http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe

  使用外網IP經過SSH協議訪問遠程雲服務器實例。


 數據盤掛載

  fdisk -l(因爲我已經掛載過數據盤,因此顯示的以下信息:)

  Disk /dev/xvda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00073f45

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *           1        2611    20970496   83  Linux

Disk /dev/xvdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa6b22d46

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdb1               1        6527    52428096   83  Linux

  如有未掛載的數據盤:

   fdisk /dev/xvdb          //(對數據盤xvdb進行分區,依次輸入如下選項:)

  n                  //(新增一個分區)

  p                  //(主分區)

  1                  //(新增分區xvdb1,回車2次)

  w                 //(寫入分區表並退出)

  fdisk -l            //(查看分區是否劃分紅功)

  mkfs.ext3 /dev/xvdb1    //(格式化分區xvdb1爲ext3格式,等待完成)

  cd /

  mkdir alidata       //(建立掛載目錄)

  mount /dev/xvdb1 /alidata/ //(完成掛載)

 


 

 ftp軟件vsftpd的安裝與配置

  vsftpd 是「very secure FTP daemon」的縮寫,安全性是它的一個最大的特色。vsftpd 是一個 UNIX 類操做系統上運行的服務器的名字,它能夠運行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個徹底免費的、開發源代碼的ftp服務器軟件,支持不少其餘的 FTP 服務器所不支持的特徵。好比:很是高的安全性需求、帶寬限制、良好的可伸縮性、可建立虛擬用戶、支持IPv六、速率高等。

  不論是用於提供ftp服務仍是用於平常系統管理,安裝ftp軟件都是頗有必要的。一下簡述其安裝與配置過程:

  yum install vsftpd  (版本是vsftpd-2.2.2-11.el6_4.1.x86_64)

  安裝完成後會自動建立用戶:ftp

    mkdir /var/ftp              //(建立ftp目錄)

  chown ftp /var/ftp/           //(讓用戶ftp成爲 /var/ftp的全部者,後面咱們會禁用匿名訪問,因此這步是必須的)

  chmod o-x /var/ftp/*            (撤銷用戶ftp 對/var/ftp/下的全部文件的執行權限,這樣會更安全些。*/

  passwd ftp                 //(設置用戶ftp的密碼)

  vim /etc/password             //(編輯password文件,將ftp的home目錄更爲:/var/ftp)

  vim /etc/vsftpd/vsftpd.conf   //(編f輯vsftpd主配置文件,anonymous_enable=NO,listen=YES)

  service vsftpd start        //(啓動vsftpd)

  chkconfig vsftpd on         //(設置系統啓動時啓動vsftpd)

  配置完成後就可使用ftp協議訪問(上傳/下載文件)vsftpd搭建的公網ftp服務器:

 


 

 升級Python版本至2.7.5

  一直使用的是python 2.7.5,不想改。CentOS自帶了Python 2.6.6,升級須要作一些配置工做。

  涉及到多個Python版本的問題,爲了後面安裝PostgreSQL的Python包:psycopg2,須要先安裝python-lib postgresql-devel:

  yum install python-lib postgresql-devel

  安裝sqlite-devel:

  yum install sqlite-devel

  若是你搭建好了ftp服務器,在windows下可使用資源管理器訪問ftp服務器,將Python-2.7.5.tar.gz上傳至ftp目錄,不然請使用如下命令獲取:

  wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
  tar -jxvf Python-2.7.5.tar.bz2                           //解壓包
  cd Python-2.7.5/
  ./configure --with-zlib                                 //後面的選項必定要帶上以安裝zlib 
  make                                                    //編譯
  make install                                            //安裝
  mv /usr/bin/python /usr/bin/python2.6.6    
  ln -s /usr/local/bin/python2.7 /usr/bin/python
  vim /usr/bin/yum                                        //修改yum的shebung爲:#!/usr/bin/python2.6.6
 

 


 Django的安裝

  若是你搭建好了ftp服務器,在windows下可使用資源管理器訪問ftp服務器,將Django-1.6.5.tar.gz上傳至ftp目錄,不然請使用如下命令獲取:

 wget https://www.djangoproject.com/m/releases/1.6/Django-1.6.5.tar.gz

  編譯安裝Django 1.6.5:

 tar -xzvf Django-1.6.5.tar.gz                //解壓包
 cd Django-1.6.5/
 python setup.py install                      //安裝

  測試安裝是否成功:

  >>> import django

  >>> django.VERSION

    (1, 6, 5, 'final', 0)


 

 PostgreSQL的安裝

  如下是來之PostgreSQL官網的一段介紹:

  PostgreSQL is a powerful, open source object-relational database system. It has more than 15 years of active development and a proven architecture that has earned it a strong reputation for reliability, data integrity, and correctness. It runs on all major operating systems, including Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64), and Windows. It is fully ACID compliant, has full support for foreign keys, joins, views, triggers, and stored procedures (in multiple languages). It includes most SQL:2008 data types, including INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL, and TIMESTAMP. It also supports storage of binary large objects, including pictures, sounds, or video. It has native programming interfaces for C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, among others, and exceptional documentation.

  

rpm -qa|grep postgres                //檢查是否已安裝PostgreSQL
/*若是是默認yum 安裝的話,會安裝較低版本的PostgreSQL 8.4,
這不符合咱們的要求。咱們使用PostgreSQL Yum Repository 來安裝最新版本的PostgreSQL。*/
rpm -i http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-redhat92-9.2-7.noarch.rpm yum install postgresql92-server postgresql92-contrib    //此處安裝的是9.2.8版本
/etc/init.d/postgresql-9.2 initdb //初始化數據庫 /etc/init.d/postgresql-9.2 start su - postgres psql ALTER USER postgres WITH PASSWORD 'postgres';       //更改數據庫用戶密碼 select * from pg_shadow; \q su - root passwd postgres                        //更改系統用戶postgres密碼 vim /var/lib/pgsql/9.2/data/postgresql.conf     //根據須要修改listen_address,取消端口5432註釋 vim /var/lib/pgsql/9.2/data/pg_hba.conf    //根據須要添加遠程訪問用戶認證 eg:host all all 0.0.0.0/0 md5 //容許全部經過md5密碼驗證的客戶端鏈接. service postgresql-9.2 restart //重啓服務 chkconfig postgresql-9.2 on //設置系統啓動時啓動服務

   配置成功後,可使用pgAdmin或者Navcat for PostgreSQL等工具來鏈接數據庫。只有在外網訪問限制解除的前提下才可行。


 Nginx的安裝與配置

  Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服務器。 Nginx 是由 Igor Sysoev 爲俄羅斯訪問量第二的 Rambler.ru 站點開發的,第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。如下對其的安裝以及配合Django的一些配置工做:

  安裝依賴庫:

 yum -y install gcc gcc-g++ autoconf automake
 yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel  

  下載並安裝nginx:

 wget http://nginx.org/download/nginx-1.6.0.tar.gz
 tar -xzvf nginx-1.6.0.tar.gz
 cd nginx-1.6.0
 ./configure
 make
 make install
ln -s
/usr/local/nginx/sbin/nginx /usr/sbin/nginx

  默認狀況下,nginx被安裝到/usr/local/nginx/; 該目錄下共有四個文件夾:

  • conf 存放一些配置文件,其中咱們要重點配置就是這個目錄下面的nginx.conf文件

  • html 這個目錄默認狀況下就存放了兩個html文件,其中一個是index.html,很顯然這是測試咱們nginx 是否運行起來的測試顯示文件,另一個htnl文件也是相似做用

  • sbin 默認狀況下就是隻有一個nginx的可執行文件

  • logs 這個目錄下就只有兩個文件:access.log,error.log,從名字上咱們能夠看出來,這是兩個日誌文件, 分別記錄,訪問日誌和錯誤日誌。

  uWSGI的安裝

 wget http://projects.unbit.it/downloads/uwsgi-2.0.5.1.tar.gz
 tar -xzvf uwsgi-2.0.5.1.tar.gz
 cd uwsgi-2.0.5.1
 python setup.py install
 cp uwsgi /usr/bin
 chmod a+x /usr/bin/uwsgi
 groupadd -g 515 uwsgi              //後期須要用到
 useradd -g 515 uwsgi                //後期須要用到

 

 配置nginx:

server {
        listen       80;
        server_name  www.foxpy.com;

        #charset koi8-r;

        access_log  /data/www/logs/access.log;
        error_log   /data/www/logs/error.log;
        location / {
            #root   html;
            root    /data/www;
            #index  index.html index.htm;
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:9090;
        }

        #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;
        }
    #根據實際狀況配置 location /static/ { alias /data/www/statics/
; index index.html index.htm; }     #根據實際狀況配置 location /media/ { alias /data/www/media/; } }

 

  啓動nginx並從新加載配置:

 /usr/sbin/nginx
 nginx -s reload

 

  在繼續下面的配置以前有必要說明一下django項目的目錄結構:

  /data/www/

      db.sqlite3

      manage.py

      uwsgi.ini         #uwsgi的配置文件

      logs/

        access.log      #nginx的訪問日誌

        error.log       #nginx的錯誤日誌

      blogs/

        __init__.py

        settings.py

        urls.py

        wsgi.py

      mainapp/        #app

        __init__.py        

        admin.py

        models.py

        tests.py

        views.py

 配置uWSGI

  即上面着色的文件:uwsgi.ini:

 [uwsgi]
 socket=127.0.0.1:9090
 chdir=/data/www/
wsgi-file=/data/www/blogs/wsgi.py uid
=515 gid=515 env=DJANGO_SETTINGS_MODULE=blogs.settings module=django.core.handlers.wsgi:WSGIHandler() processes=4 threads=2 stats=127.0.0.1:1080

 

  當你的Django版本小於1.4時,須要配置env,module,pythonpath。


結束

  使用uwsgi.ini啓動uwsgi:

cd /data/www/
uwsgi uwsgi.ini

 

 

 

 

相關文章
相關標籤/搜索