阿里云计算:CentOS+nginx+Django+Postgresql web环境搭建

  最近在在万网和阿里云上分别购买了一个域名和一台云服务器,打算用来做点什么。昨天吃完晚饭稍作休息开始对这个新奇的玩意作了些了解并着手配置其运行环境,今早凌晨4点多才弄得7788,为此也错过了西班牙VS荷兰的比赛,在此把期间遇到的一些问题和解决办法记录下来以被查阅。

 云服务器ECS是什么?(摘自阿里云官网)

  云服务器(Elastic Cloud Service, ECS)是处理能力可弹性伸缩的计算服务,管理方式比物理服务器更简单高效。无需提前采购投入,可以根据业务的需要,随时创建、释放任意多台云服务器实例。

  在使用云服务器时,会接触到一些名词,有的会比较熟悉,有的相对来说会少见一些。这些名词所代表的产品概念组合起来,构成完整的云服务器产品。下面是这些名词及代表的含义:

  • 云服务器实例(简称实例,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等。

 


 软硬件环境

  操作系统:CentOS 6.3 64 位。CentOS是Linux再发行版本,有“社区版RedHat”的称号,以稳定著称。为什么选Linux而不是Windows理由有很多。

  CPU:单核

  内存:512M

  带宽:1M(固定IP)

  存储: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 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

  不管是用于提供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

 

 

 

 

 

 

posted @ 2014-06-14 18:16 林之冬 阅读(...) 评论(...) 编辑 收藏