2013年7月13日10:36:53:接上篇,bae部署django没成功,转战阿里云。。
阿里云服务器最便宜69/月,现在有个活动,新用户送20元现金券,我就花了RMB 49买了一个,操作系统选的是ubuntu1204安全加强版。
putty下载地址:http://the.earth.li/~sgtatham/putty/latest/x86/putty.zip,解压后直接运行putty.exe即可。
Xftp下载地址http://www.onlinedown.net/soft/143.htm
以上两步看aliyun的帮助文档即可,easy,http://help.aliyun.com/manual?spm=0.0.0.0.ZERNiU&helpId=1846
管理mysql就用phpmyadmin了,这样就得再装个php,命令如下
apt-get install apache2 php5 libapache2-mod-php5 mysql-server libapache2-mod-auth-mysql php5-mysql phpmyadmin
期间要求输mysql root用户密码和phpmyadmin的登陆密码
python系统自带了。需要装python-mysqldb
apt-get install python-mysqldb
安装一个mod_wsgi,此物就是将Python应用部署到Apache上的。
apt-get install libapache2-mod-wsgi
链接phpmyadmin
ln -s /usr/share/phpmyadmin /var/www/phpmyadmin
python ubuntu已经自带了,需要安装一个python-mysqldb
apt-get install python-mysqldb
django从官网下载,我当前下载的版本是1.5.1,然后按照官网的说明安装。
重启Apache2的命令:
sudo /etc/init.d/apache2 restart
切换到/srv目录下,启动一个django站点
django-admin.py startproject mysite
django官方有一篇如何配置的文档,mod_wsgi官网也有如何配置的文档。主要一点mod_wsgi有两种工作模式,嵌入到Apache和作为线程的守护模式。官方推荐用守护模式,守护模式没研究,嵌入模式最简单,先用嵌入模式。
编辑Apache的配置文件
gedit /etc/apache2/sites-available/default
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
WSGIScriptAlias /app/ /srv/mysite/mysite/wsgi.py
<Directory /srv/mysite/mysite>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
ErrorLog ${APACHE\_LOG\_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE\_LOG\_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
重点就是在原来文件的基础上增加了
WSGIScriptAlias /app/ /srv/mysite/mysite/wsgi.py
还有编辑/etc/apache2/httpd.conf文件,增加下面这行
WSGIPythonPath /srv/mysite
然后重启apache服务就OK了!
此时通过浏览器访问你的云服务器主机地址xx:xx:xx:xx/app/,就可一看到django默认页面了!
编辑mysite/settings.py,修改DATABASES一项
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'db_name', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': 'your_mysql_passwd', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
django默认安装的应用有:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
#'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
运行下面的命令,同步数据库,为默认安装的应用创建table:
python manage.py syncdb
输入下面的命令,创建一个叫polls的应用
python manage.py startapp polls
接下来创建模型(models),按照django官网教程的例子,编辑polls/models.py
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.question
class Choice(models.Model): poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
def __unicode__(self):
return self.choice
这里的意思创建了两个模型:Poll、Choice。__unicode__方法是定义模型默认显示的内容。
激活模型,编辑mysite/settings.py中INSTALLED_APP,如下:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'polls',
)
同步一下数据库
python manage.py syncdb
可以在shell下输入一些python语句,为模型创建内容。进入shell环境的命令为:
python manage.py shell
例如:
>>> from polls.models import Poll, Choice # Import the model classes we just wrote.
Poll.objects.all()
[]
from django.utils import timezone
p = Poll(question="What's new?", pub_date=timezone.now())
p.save()
p.id
1
编辑mysite/urls.py
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'simple.views.home', name='home'),
# url(r'^simple/', include('simple.foo.urls')),
url(r'^polls/', include('polls.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
# url(r'^admin/', include(admin.site.urls)),
)
编辑polls/urls.py (此文件不存在,新建一个)
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
url(r'^$', views.index, name='home'),
url(r'^show/$', views.show_all, name='show'),
)
创建views.index视图,编辑polls/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the poll index.")
此时访问主机名xx:xx:xx:xx/app/polls 就可以看到hello world视图了!
首先编辑settings.py,打开admin应用
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'polls',
)
同步下数据库
python manage.py syncdb
编辑mysite/urls.py,打开admin的视图
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'simple.views.home', name='home'),
# url(r'^simple/', include('simple.foo.urls')),
url(r'^$', 'polls.views.index'),
url(r'^polls/', include('polls.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)
设置admin的静态文件。首先编辑apache2的配置文件,让apache提供静态文件的服务。编辑完之后,需要重启apache。
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
AliasMatch ^/(\[^/\]\*\\.css) /srv/mysite/static/styles/$1
Alias /media/ /srv/mysite/media/
Alias /static/ /srv/mysite/static/
<Directory /srv/mysite/static>
Order deny,allow
Allow from all
</Directory>
<Directory /srv/mysite/media>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / /srv/mysite/mysite/wsgi.py
<Directory /srv/mysite/mysite/>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
ErrorLog ${APACHE\_LOG\_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE\_LOG\_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
在/srv/mysite/下新建一个static和media文件夹,将django/contrib/admin/static/admin这个文件夹复制到/srv/mysite/static/下。
在浏览器试一下,xx:xx:xx:xx/admin,此时有admin界面了。
注:这里有个建议,删掉polls/urls.py,将链接分发统一放到mysite/urls.py这一个文件中去。原因是,过程中遇到一些莫名的问题,放在一个文件中就OK,此问题遗留。
下面把我们刚才创建的模型注册到admin中去,(admin的作用无需解释,走一遍django tutorial就了解了)。
在polls/下新建一个admin.py,编辑其内容如下即可:
from django.contrib import admin
from polls.models import Poll
admin.site.register(Poll)
至此,本文结束,阿里云+django搭建完毕,剩下的是django的开发工作了。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章