非理性繁荣

姜戈和乌班图无畏年鉴

2月13日,2009.根据django乌邦图memcache《PostgreSQL》阿帕奇nginxmod_wsgi

自从我第一次尝试建立一个健康的环境来部署django已经一年多了(因为Ubuntu存储库粗鲁地提醒我,我的服务器版本将停止运行)。那时候我学到了很多,也把我原来的设置拉到了极限,但不可避免的是,新部署的那一天到来了,它具有更好的配置和更灵活的文件夹布局。

我的上一个服务器安装指南,很多东西保持不变:仍然使用Ubuntu,内存缓存,Postgres,还在Apache2前面使用nginx作为代理服务器。许多事情也发生了变化:使用mod_wsgi现代巨蟒cmemcachepython-memcached,以及一个更有目的性的文件夹布局virtualenv使托管多个项目和域变得简单(包括一些只提供静态文件或PHP脚本的项目和域)。

不仅仅是更新,我还包括了一些附加任务,比如通过ssh将服务器用作远程git存储库,以及安装可插入的Django库。最后,在我之前的教程中,我试着把把把一个裸体的Ubuntu无畏服务器转变成一个功能齐全的多站点django-loving服务器所需要的每一个按键都包括在内。

如果你遇到任何问题,请告诉我。或者提出改进建议!

设置服务器

  1. 以某种方式获得一个Ubuntu无畏的服务器或VPS。(也许去你的SLICLEHOST控制台并请求运行Ubuntu Intrepid(8.10)的新切片。;)

  2. 写下你的邮箱的根密码和IP地址。

  3. ssh进入服务器。

    ssh root@255.255.255.255
  4. 更新apt-get源。

    更新已安装包
  5. 确保系统上有适合您口味的编辑器。VIM是预安装的,但我更喜欢Emacs…

    apt-get安装emacs
  6. 设置任何你想要的非根帐户,一个是为了丹戈

    用户添加djangomkdir /home/djangoChown Django:Django/Home/Django用户添加将mkdir /home/will乔恩:将/home/will被动意志
  7. 除非你喜欢,将默认外壳改为更人性化的外壳。

    chsh root -s /bin/bashCHSH将-S/bin/bashCHSH Django-S/bin/bash公司

    (这些更改将在您下次登录之前不会应用。)

  8. 授予您的帐户(但不是Django)根权限。

    visudo

    然后使用向下箭头找到这样一条线:

    根都=(全部)全部

    用您的用户名复制:

    根都=(全部)全部将所有=(全部)全部
  9. 打开第二个终端(当我们继续配置ssh时,让第一个终端保持登录状态,如果发生了可怕的错误,并以非根用户的身份使用SSH。

    ssh will@255.255.255.255

    验证它是否工作,然后出口回到你的系统。

  10. 现在是设置无密码登录的时候了。回到你的家庭系统,

    scp~/.ssh/id_dsa.pub将@255.255.255.255:。~/ssh will@255.255.255.255mkdir.sshmv id_dsa.pub.ssh/授权密钥chmod go-w~/.ssh/授权密钥~/.ssh/

    现在出口回来。您应该在不需要提供密码的情况下登录。

  11. 现在是限制的时候了一点。

    sudo groupadd sshersudo usermod-a-gsshers将sudo emacs/etc/ssh/shhd_配置

    使这些变化:

    # X11Forwarding是的x11前进没有

    并将这些行添加到文件末尾:

    用户名没有AllowGroupssshers

    保存文件,然后重启服务。

    sudo/etc/init.d/ssh重启

    出口你的副总裁,再次尝试登录。如果成功的话,再次打开/etc/ssh/sshd_配置

    sudo emacs/etc/ssh/sshd_配置

    并将此行附加到文件末尾:

    PasswordAuthentication没有

    再次重新启动服务。

    sudo/etc/init.d/ssh重启

    最后,禁用对…的密码访问帐户。

    sudo-passwd-l根

    现在,只有使用正确的ssh密钥的计算机才能通过您批准的帐户访问您的vps。

  12. 现在是时候开始安装一些通用库了。

    sudo apt get安装subversion git core gcc curlsudo apt get install build essential python dev python安装工具sudo apt get install python egenix mxtime memcached后缀
  13. 现在是时候配置了Postgres公司,首先我们需要找一些图书馆。

    sudo apt get安装postgresql-8.3 postgresql-server-dev-8.3sudo apt get安装postgresql-8.3 postgresql-server-dev-8.3

    而不是打字错误,为了成功安装,我确实需要运行上面的命令两次。

    接下来我们需要配置Postgres公司用户。

    sudo-u postgres psql模板1更改带有密码“PASSWORD”的用户postgres;\问

    (确保你使用了真实的密码,而不是'密码'在上面的例子中。)

    我们还需要修改postgres的配置文件。

    sudo emacs /etc/postgresql/8.3/main/pg_hba.conf

    移到文件底部,和注释(添加γ在线的开始)所有的线开始主办。(这阻止了对数据库的外部访问。)

    应该是这样的:

    #通过Unix套接字进行数据库管理登录地方的全部的Postgres公司识别的sameuser#类型数据库用户cidr-address方法#“本地”仅用于Unix域套接字连接地方的全部的全部的密码#IPv4本地连接:#host all all 127.0.0.1/32 md5#IPv6本地连接:#全部宿主::1/128 MD5

    注意我们换了识别Sameuser密码第二次地方的行!然后重新启动Postgres,让它重新加载其设置。

    sudo/etc/init.d/postgresql-8.3重启

    就这样,设置并运行Postgres。

  14. 现在是时候设置了memcached。这是一个分两部分的过程。首先我们需要开始memcached,这很简单,第二,我们需要建立cmemcache,这有点难。

    sudo memcached-u www数据-p 11211-m 32-d

    运行memcached在标准端口上,用标准WWW数据用户(Ubuntu的标准,也就是说,内存为32兆。你可能想分配更多,取决于您希望在memcached中存储多少数据,以及你的副总裁的规模。

    接下来我们需要设置cmemcache。第一次抓取libmemcache

    sudo apt get安装libmemcache dev

    接下来我们实际建造cmemcache

    苏djangomkdir~/libs/CD~/libs/wget http://gijsbert.org/downloads/cmemcache/cmemcache-0.95.tar.bz2tar-xjvf cmemcache-0.95.tar.bz2CD-CMEMcache-0.95光盘出口

    稍后在设置我们的virtualenv

    如果无法安装cmemcache,遵循这些指示。

    或者,如果要使用基于python的python-memcached(跑得慢一点,但没有C模块来构建和安装),你可以这样做。

    wget ftp://ftp.tummy.com/pub/python-memcached/python-memcached-latest.tar.gz焦油-zxvf python-memcached-latest.tarcd python 1.43 - memcachedγ稍后在virtualenv中使用python setup.py安装

    首选cmemcache严格地基于速度。但是python-memcached仍然很有用,如果选择介于python-memcached不运行memcached作为缓存后端,拣货python-memcached显然是赢家。

  15. 接下来是设置的时候了恩吉克斯,这是一个轻量级的服务器,我们将使用它来为Apache2提供静态内容和代理请求。

    sudo apt-get安装nginx

    我们可以快速验证它是否安装正确。

    sudo/etc/init.d/nginx启动卷曲127.0.0.1

    应返回:

    欢迎来到nginx!<span class=“nt”>
               
                背景=
                “白色”
                文本=
                “黑色”
                >
                
                 

    欢迎来到nginx!

    现在我们要修改nginx.conf归档一点(根据建议在这里

    sudo emacs/etc/nginx/nginx.conf文件

    现在我们只需要做两个小改动,首先将第2行更改为使用四个工作进程,

    worker_processes

    下一个取消注释行18,

    TCP总线

    我们不需要再编辑这个文件,因为最后一行,

    包括/etc/nginx/sites-enabled / *

    这使得在自己的文件中声明特定于站点的设置很容易,减少杂乱nginx.conf

    我们还需要创建一个proxy.conf(代理.conf)文件,这是通用的nginx维护方法nginx.conf清洁。

    sudo emacs/etc/nginx/proxy.conf文件

    其中应包括以下几行:

    #proxy.conf(代理.conf)proxy_redirect远离的代理服务器设置头主机东道主代理服务器设置头X-Real-IPremote_addr美元代理服务器设置头X-Forwarded-For$proxy_add_x_forwarded_用于客户机最大机身尺寸10米客户机主体缓冲区大小128K代理连接超时九十proxy_send_timeout九十代理读取超时九十代理缓冲区三十二4 k

    最后,停止并启动nginx(我不知道当前版本的nginx是否仍然如此,但从历史上看,我从未让它通过重新加载或重新启动来重新加载配置文件)。

    sudo/etc/init.d/nginx停止sudo/etc/init.d/nginx启动
  16. 现在是设置的时候了输入。首先我们抓到必要的图书馆。

    sudo apt get安装apache2 libapache2 mod wsgi

    因为我们已经把nginx装在80号端口上了,所以会引起一些抱怨。

    (98)地址已在使用中:Make_sock:无法绑定到地址0.0.0.0:80没有可用的监听插座,正在关闭无法打开日志…失败!调用rc.d:initscript apache2,“开始”动作失败了。

    但是不用担心,我们会没事的。

    我们需要做的第一件事是设置Apache在内部127.0.0.1:80上运行,而不是在端口80上运行。

    sudo emacs/etc/apache2/ports.confg

    然后修改这些行:

    NameVirtualHost127.0.0.1条:80127.0.0.1条:80

    我们还想对Apache2.conf文件:

    sudo emacs /etc/apache2/apache2.conf

    搜索持久连接(在77号线附近)并改变其值如下:

    # KeepAlive持久连接下车

    我们这么做是因为nginx还不支持持久连接选项。现在让我们试着启动Apache,再一次。

    sudo apache2ctl开始

    可能会抱怨,再一次。

    apache2:无法可靠地确定服务器的完全限定域名,对servername使用127.0.0.1[警告]NameVirtualHost 127.0.0.1:80没有虚拟主机

    但是有一次,再一次,别担心,这只是过程中的一个阶段。

  17. 最后我们来看看Django。切换到/home/django我们之前创建的文件夹,现在是我们创建一些文件夹的时候了。

    苏djangomkdir域mkdir库mkdir .python-eggs出口

    然后让我们进行一些权限争论。

    sudo chown django:www-data.python-eggssudo chmod g+w .python-eggs/sudo usermod-a-g www数据djangosudo usermod -a -G www-data willsudo chgrp -R www-data /home/django/domainssudo chmod -R 2750 /home/django/domains

    然后让我们获取django源代码。

    CD库SVN公司http://code.djangoproject.com/svn/django/trunk/django

    通常,这是一个将包符号化链接到/usr/lib/python2.5/现场包,但是我们要走一条稍微不同的路线virtualenv来封装我们的每个项目。

    sudo轻松安装virtualenv

    我们会安排的virtualenv之后,因为它是在每个项目的基础上完成的。

  18. 通用准备的最后一步是删除apache和nginx的默认站点。使用为nginx/apache正确配置的安装文件(我们很快就会找到这些文件);您不会遇到许多意外显示默认页面的情况,但是,当通过IP地址直接访问页面时,它们通常会显示出来。

    虽然这不是很常见的事情,尽管如此,这可能是不可取的。

    sudo rm /etc/apache2/sites-enabled /违约sudo rm /etc/apache2/sites-enabled /违约sudo rm/etc/apache2/sites enabled/000默认值sudo rm /etc/nginx/sites-enabled /违约

    要使更改生效,需要重新启动服务器。

    sudo/etc/init.d/nginx停止sudo/etc/init.d/nginx启动Sudo Apache2ctl优雅
  19. 现在我们要实际设置一个Django项目。以后,您将能够按照相同的流程设置任意数量的Django项目。

    1. 首先,我们需要为每个域创建文件夹。(我将使用域遍历此示例实体网站,它主持了一个早已被遗忘的旧项目。)

      cd /home/django/domainsmkdir substanceis.comsudo mkdir-p substanceis.com/public,日志sudo mkdir substanceis.com/public/mediaSudo Chown-R Django:www data substanceis.com

      有些人喜欢私有的备份目录也是。随意添加你自己的特殊香料。

      • 公众的目录将用于nginx提供的公共可访问文件。
      • 日志目录将存储域的Apache和Nginx日志。
      • 我们会把项目主管留在实体网站文件夹本身。(和mod_wsgi项目目录中的配置文件。)
    2. 现在我们需要为项目设置一个虚拟环境。如果你没有尝试virtualenv,它使你的项目很容易沙盒,这样每个项目都可以有不同版本的库(Django 0.97 prefor一个项目,Django 1.1代表另一个,一个项目的Pygments 0.6,Pygments 1.1代表另一个,等等)。

      这使得它成为在一台服务器上开发或承载多个应用程序的基本工具。

      注意,我们以前从SVN下载Django到这个文件夹中/主页/django/libs/django

      苏djangocd~/domains/substanceis.com网站virtualenv——无站点包——unzip-setuptools substanceis.comCD~/libs/django~/domains/substanceis.com/substanceis.com/bin/python setup.py安装cd ~ / libs / cmemcache - 0.95~/domains/substanceis.com/substanceis.com/bin/python setup.py安装

      您还需要安装psycopg2(Postgres的python接口)。

      cd域/substanceis.com/substanceis.com/bin//易于安装Egenix MX底座/易于安装psycopg2

      包没有易于安装设置.py支持,您可以将它们符号化链接到虚拟环境的站点包文件夹:

      CD~/libs/ln -s ' pwd ' /some_app /home/django/domains/substanceis.com/substanceis.com/lib/python2.5/site-packages/

      既然我们已经完成了安装,继续测试吧。

      ~ /域/substanceis.com/substanceis.com/bin/python

      然后尝试导入它。

      > >进口django> >

      而如果你在正常情况下这样做python:

      光盘python

      你会得到不同的体验:

      > >进口django回溯(最近一次调用last):文件,行,在里面
                   导入错误:没有名为django的模块> >

      现在我们已经完成了virtualenv继续并退出django用户。

      出口
    3. 接下来,我们需要为该域创建一个nginx虚拟主机。

      sudo emacs /etc/nginx/sites-available / substanceis.com

      如果你想脱衣www从你的域,你应该以这个开头服务器指令:

      你需要更新255.255.255.255成为您的VPS/服务器的IP地址。

      服务器{255.255.255.255:80服务器名称www.substanceis.com重写^ / (. *)http://substanceis.com/1美元永久的}

      不管怎样,文件的其余部分应采用这种格式:

      你需要更新255.255.255.255成为您的VPS/服务器的IP地址。

      服务器{255.255.255.255:80服务器名称www.substanceis.com实体网站访问日志/主页/django/domains/substanceis.com/log/access.logerror_log/主页/django/domains/substanceis.com/log/error.log位置/{代理通行证网址:http://127.0.0.1:80/包括/etc/nginx/proxy.conf}位置/媒体/{/主页/django/domains/substanceis.com/public/到期1 d}}

      请注意,如果静态媒体经常更改,然后你要把过期1d设置。这就增加了一个标题,说明这些内容在第二天不会改变,这意味着浏览器在这段时间内不会尝试重新获取它。

      这意味着更快地为用户加载页面,降低服务器负载。如果你想要的好处未来到期,但是媒体不断变化,标准的解决方案是为媒体文件添加一个版本号(ME.1.PNG格式me.2.png,等等)。django-compress为JavaScript和CSS文件的版本控制过程自动化提供了一些支持(强烈推荐)。

      接下来,我们需要让Nginx知道该站点已启用,通过符号链接它网站可用网站已启用

      sudo ln-s/etc/nginx/sites available/substanceis.com/etc/nginx/sites enabled/substanceis.com

      最后,您需要在nginx知道这个虚拟环境存在之前停止并启动nginx。

      sudo/etc/init.d/nginx停止sudo/etc/init.d/nginx启动

      配置完nginx。

    4. 现在让我们快速创建一个默认的Django项目。

      苏djangocd~/domains/substanceis.com网站//substanceis.com/bin/python substanceis.com/bin/django-admin.py startproject你好出口
    5. 将django管理媒体链接到公共/媒体/文件夹中。

      sudo ln -s /home/ django/domains.com/substanceis.com/lib/python2.5 /site-packages/django/contrib/admin/media /home/django/domains/substanceis.com/public/media/admin

      然后更新管理媒体前缀设置在你的你好/ settings.py文件

      sudo emacs/home/django/domains/substanceis.com/hello/settings.py

      像这样

      #admin_media_prefix='/media/'管理媒体前缀='/media/admin/'
    6. 接下来,让我们创建一个Postgres数据库供这个项目使用。

      Sudo Su Postgres公司创建用户-p pg_实体γ不应是超级用户γ不能创建数据库γ不能创建更多新角色createdb--编码=unicode db_substanceis-o pg_substanceis出口

      然后我们需要更新settings.py具有正确设置的文件。

      sudo emacs你好/设置.py

      和修改DATABASE_ *字段看起来像这样:

      数据库引擎='postgresql_psycopg2'数据库名称='db_实体'数据库用户=“pg_实体”数据库密码='123456789'数据库主机=数据库端口=

      最后,让我们尝试同步数据库以验证设置是否正确。

      ~/domains/substanceis.com/substanceis.com/bin/python hello/manage.py同步数据库

      假设您输入了用户名,数据库和密码正确,您应该看到一些熟悉的东西。

      正在创建表授权权限正在创建表身份验证组正在创建表身份验证用户正在创建表身份验证消息创建表django_content_type创建表Django_会话创建表django_site
    7. 我们的下一步是将项目设置为memcached作为其缓存后端。

      sudo emacs你好/设置.py

      并添加以下设置:

      缓存\后端='memcached://127.0.0.1:11211'CACHE_MIDDLEWARE_SECONDS=六十*CACHE_MIDDLEWARE_KEY_PREFIX=“姐姐”#物质CACHE_MIDDLEWARE_ANONYMOUS_ONLY=真正的

      你必须决定它的值是多少CACHE_MIDDLEWARE_SECONDSCACHE_MIDDLEWARE_ANONYMOUS_ONLY适用于您正在配置的特定项目。还有更多信息此处可用

      价值CACHE_MIDDLEWARE_KEY_PREFIX对于每个使用memcached

    8. 经过一段艰难的旅程,最后一步是:配置mod_wsgi阿帕奇为我们的项目服务。

      sudo emacs /home/django/domains/substanceis.com/hello/hello.wsgi

      并将此代码添加到你好.wsgi:

      ALLDIRS=['/home/django/domains/substanceis.com/substanceis.com/lib/python2.5/site packages']#请注意,上述目录取决于您的virtualenv的区域设置,#因此对于每个项目都是不同的!*进口操作系统进口系统进口网站prev_sys_path=列表系统路径对于目录在里面ALLDIRS:网站addsitedir目录新的系统路径=[]对于项目在里面列表系统路径):如果项目在里面prev_sys_path:新的系统路径附加项目系统路径去除项目系统路径〔:]=新的系统路径#这对于每个项目也是不同的!系统路径附加“/ home / django /substanceis.com/hello/' /域操作系统环境[“PYTHON_EGG_CACHE”]=“/ home / django / .python-eggs”操作系统环境[“DJANGO_SETTINGS_MODULE”]='设置'进口django.core.handlers.wsgi应用程序=django核心处理程序WSGIwsgihandler()

      接下来,我们需要为域创建一个虚拟主机。

      sudo emacs/etc/apache2/sites available/substanceis.com网站

      并添加这个虚拟主机定义。

      
                   
                    127.0.0.1:80
                    >
                    ServerNamewww.substanceis.com
                    服务器别名实体网站
                    
                     
                      /主页/django/domains/substanceis.com/hello/
                      >
                      订单拒绝,允许
                      允许全部的
                      
                      日志级别
                      警告
                      错误日志
                      /home/django/domains/substanceis.com/log/apache_error.log
                      CustomLog
                      /主页/django/domains/substanceis.com/log/apache_access.log合并
                      Wsgidaemonprocess公司实体网站
                      用户=WWW数据
                      =WWW数据线程=25
                      WsgiProcessGroup(WsgiProcessGroup)实体网站
                      WSGIScriptAlias/
                      /主页/django/domains/substanceis.com/hello/hello.wsgi
                      
                     
                   

      最后启用实体网站

      sudo ln-s/etc/apache2/sites available/subscies.com/etc/apache2/sites enabled/subscies.com

      重新启动Apache2,让它接收新站点。

      Sudo Apache2ctl优雅

    您可以重复这些步骤来承载任意数量的项目。

一些附加选项

此时,您的mod wsgi服务器已设置完毕并完全正常工作,但是这里有一些关于您可能想用新服务器做的事情的建议。

  1. 现在,如果您转到您的VPS的IP地址,然后你会发现它根本不提供任何服务。对大多数人来说,这可能是正确的行为,但是,当静态页面通过其IP地址到达您的VPS时,您可能希望为其提供服务(同时,你也可以为你的一些域名提供静态内容,而不是一个完整的Django项目)。

    首先我们需要创建一些文件夹

    sudo mkdir/home/django/domains/defaultsudo mkdir-p/home/django/domains/default/public,logs

    然后创建索引页

    sudo emacs/home/django/domains/default/public/index.html文件

    这个html

    <span class=“nt”>

    你好。欢迎访问我的默认站点。

    现在我们需要配置nginx站点

    sudo emacs/etc/nginx/网站可用/默认

    使用这些设置(您需要更改255.255.255.255到你的副总裁的ip地址):

    服务器{80服务器名称二百五十五.255.255.255访问日志/主页/django/domains/default/log/access.logerror_log/home/django/domains/default/log/error.log位置/{/主页/django/domains/default/public指数index.html文件}

    然后符号链接到网站已启用文件夹中。

    sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default

    最后我们需要停止启动nginx。

    sudo/etc/init.d/nginx停止sudo/etc/init.d/nginx启动

    现在,如果你在浏览器中导航到VPS的ip地址,您将看到静态站点。(请注意,浏览器通常限制到一个域的并发HTTP连接的数量,因此,您可以使用以下步骤来设置一个只包含媒体的子域,从而加快沉重页面的页面加载速度media.example.com网站,等等——为您的Django站点提供静态媒体,而不是提供与您的站点相同的域。)

  2. PIL是最有用的软件包之一,它支持各种各样的图像处理技术。它也被姜戈的一些作品所使用。它似乎是不正确的包装安装与易于安装,但安装起来仍然很简单。

    苏djangocd ~ / libswget http://effbot.org/downloads/imaging-1.1.6.tar.gzTAR-XZVF成像-*cd Imaging-1.1.6/域/substanceis.com/substanceis.com/bin/python setup.py安装

    现在实体网站虚拟环境将可以访问图像模块:

    > >进口图像> >
  3. 你做得越多,您创建可插拔应用程序和重用他人所做的应用程序的次数越多,所以这是一个很好的熟悉过程。因此,让我们花点时间来安装由Django社区开发的两个常见的可重用Django应用程序。

    使用的缺点之一virtualenv您需要在每个环境中一次安装一个可插入的应用程序。当然,这也意味着你可以冻结一个生产站点来使用一个可插拔应用程序的特定版本,而另一个则向前插入未知。

    注意使用它安装的好处是很重要的设置.py易于安装virtualenv。这意味着你会得到一个冻结的代码副本,即使稍后更新源代码,环境不会运行不同的代码。

    另一方面,如果您正在积极开发代码,那么您最好将代码符号链接到环境中站点包目录,这样就不必在更改时重新部署代码。

    两种方法都有各自的位置,小心使用它们。

    首先让我们安装django-compress,我之前提到过,它有助于自动合并和压缩JavaScript和CSS文件。

    苏djangocd / django / libs /回家sudo svn checkout http://django-compress.googlecode.com/svn/trunk/django compresscd django-compress~/domains/substanceis.com/substanceis.com/bin/python setup.py安装

    现在让我们确保它是可用的。

    ~ /域/substanceis.com/substanceis.com/bin/python

    然后在python中尝试

    > >进口压缩> >

    只要你没有出错,然后安装正确。

    下一步让我们安装Django常见问题解答,这是一个可插入的应用程序,用于在网站上创建常见问题解答(可通过django管理进行管理)。

    只是为了好玩,让我们将其符号化(更方便主动开发),而不是使用设置.py

    cd / django / libs /回家sudo git克隆git://github.com/rockhoward/django-faq.gitCD Django常见问题解答ln-s`pwd`/faq/home/django/domains/substanceis.com/substanceis.com/lib/python2.5/site-packages

    最后让我们安装Django梅勒,这就为Django补充了一个更强大的邮件框架。

    cd / django / libs /回家sudo svn checkout http://django-mailer.googlecode.com/svn/trunk/django-mailerCD Django梅勒sudo ln-s`pwd`/mailer/home/django/domains/substanceis.com/substanceis.com/lib/python2.5/site-packages

    等待,可以推荐我的一个项目吗?好啊。你应该考虑看看Django货币化,它支持动态服务不同类型的广告(以及请求捐款,等)基于页面上下文。

    cd / django / libs /回家sudo git克隆git://github.com/lethain/django-monetize.gitCD Django货币化sudo ln-s`pwd`/django_货币化/home/django/domains/substanceis.com/substanceis.com/lib/python2.5/site-packages

    通过这些可插拔的应用程序,还有一些项目已经扩展到类似Django之上的小型框架。它们提供了大量的功能,但往往以一些非标准的安装模式为代价。

    其中两个比较流行的是社会框架宾克斯安装)和webshop平台萨奇莫安装

  4. 我喜欢做的另一件事是用我的虚拟专用数据库吉特存储库,这是——多亏了DVCS--出乎意料的简单。

    光盘mkdir吉特mkdir git /脚本cd git /脚本echo“# a test”> test.pygit init -裸

    然后出口然后回到你的机器。您可以通过使用SSH从您的主机克隆该存储库。

    Mkdir我的报告CD我的报告初始化mkdir回声“测试”> test.pygit添加test.pygit提交-m“初始提交”。git远程添加源站ssh://67.207.149.179/home/will/git/scriptsGit推送源站主服务器

    注意,使用--裸露关键字意味着存储库将其所有文件保存在其Git文件夹,因此,您将无法直接与托管存储库中的文件进行交互。如果您确实想与计算机上Git存储库中的文件进行交互,你应该Git克隆从原始存储库,然后像平常一样推拉。

    (如果你想使用Git作为你的Django项目的代码推送机制,你可能想多了解一下使用类似织物的东西)。

  5. 尽管不承认自己像一个DJONAUT那样迷人,在许多情况下,您可能希望Apache也为您运行一些php脚本。

    sudo apt-get安装php5Sudo Apache2ctl优雅

    那就在这里. phpApache提供的目录中的文件(而不是nginx提供的目录中的文件),他们会被处决的。您可能需要Django和静态nginx配置文件的组合,这些文件是我们在本演练过程中组合在一起的。

资源

这些文章很大程度上借鉴了我以前的文章nginx+apache+mod_python+djangolighttpd+apache+mod_python+django去年的文章,但也利用了新的资源。

  1. 谷歌代码上的mod_wsgi页面是一个很好的启动点。
  2. 与Django集成的mod_wsgi页面也是如此。
  3. 在Ubuntu上设置Nginx虚拟主机。
  4. Nginx配置文件的完整示例。
  5. 使用Django设置mod_wsgi。
  6. 让Nginx提供ip地址。
  7. 使用带有mod wsgi的virtualenv。

多亏了那些创造了上述资源的人,才使这一切成为可能。

更新2/13:虚拟环境

施赖伯提到virtualenv是开发具有不同版本库的多个项目的好工具,根据他的建议,我更新了演练,将其包括在内。谢谢汤姆!

更新了,再次2/13:杂项调整

一个有用的编辑指出了一些改进的方法。尤其是使用CHSH用于更改外壳(而不是手动编辑/ETC/密码文件),让阿帕奇听127.0.0.1:80而不是绑定到*:8080,这使得它可以从外部进入,让nginx听外部IP:80而不是*:80


  1. 嘿,孩子们,你知道Nginx的发音是“engine x”吗?我当然没有。事实上,我有一位同事告诉过我这个词是怎么发音的,但没有看到“引擎X”写的时候对我来说没什么用。现在我明白了。最后。γ