阿里云计算: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

 

 

 

 

相关文章
相关标签/搜索