为了将PHP改为Python,使用了Django搭建LNMP服务器,
下面命名默认Ubuntu系统,且用root账户登录,关于如何以管理员身份登录,请参考:Ubuntu Kylin14.04终于可以使用root登陆了。
请注意:在创建mysite工程后,命令运行目录为:/python_workspace/mysite。
##
安装 python 和 python-dev
Ubuntu发行版自带python;
如果没安装python-dev会遇到”致命错误:Python.h:没有那个文件或目录”错误;
为了兼容性,选用Python2.x,python --version查看版本;
参考:五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)
安装 pip
1 | # wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py |
参考:pip安装和使用教程
安装并测试uWSGI
利用pip安装uwsgi:
1
2# export LDFLAGS="-Xlinker --no-as-needed"
# pip install uwsgi测试uwsgi:
在你的机器上写一个test.py并填入:1
2
3def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"
然后执行shell命令:1
uwsgi --http :8001 --wsgi-file test.py
访问网页:http://127.0.0.1:8001/,看在网页上是否有Hello World。
引用:五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)
安装并配置Django
- 安装Django
1
# pip install Django
参考:How to get Django、Django 环境搭建
- 创建项目并测试:
1
2
3
4
5# mkdir -p /python_workspace
# cd /python_workspace
# django-admin.py startproject mysite
# cd mysite
# python manage.py runserver 0.0.0.0:8001
在浏览器里输入localhost:8001或127.0.0.1:8001查看效果。
参考:使用python搭建Django应用程序步骤及版本冲突问题解决、nginx+uwsgi+django+python环境部署文档
- uwsgi调用Django:
Django1.4+在创建工程的时候会自动创建wsgi模块,进入工程目录(mysite),执行:1
uwsgi --http :8001 --module mysite.wsgi
在浏览器里输入localhost:8001或127.0.0.1:8001查看是否有Django页面。
参考:Setting up Django and your web server with uWSGI and nginx
安装Nginx并配置:
本节主要参考:Setting up Django and your web server with uWSGI and nginx
- 安装测试Nginx
1
2# apt-get install nginx
# /etc/init.d/nginx start # start nginx
在浏览器里输入localhost:80或127.0.0.1:80查看是否有Nginx页面。
- Nginx调用(连接)uWSGI
将uwsgi_params拷贝到Django工程目录中:1
# cp /etc/nginx/uwsgi_params ./
在工程目录中创建mysite_nginx.conf文件,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34# mysite_nginx.conf
#
# the upstream component nginx needs to connect to
upstream django {
server unix:///python_workspace/mysite/mysite.sock; # for a file socket
#server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
#
# configuration of the server
server {
# the port your site will be served on
listen 8001;
# the domain name it will serve for
server_name 127.0.0.1; # 测试用的是回环地址,应该设为公网IP或域名
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
location /media {
alias /python_workspace/mysite/media; # 媒体文件目录
}
location /static {
alias /python_workspace/mysite/static; # 静态文件目录
}
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /python_workspace/mysite/uwsgi_params; # the uwsgi_params file you installed
}
}
在Nginx的相应目录中建立软链接,使其能找到该文件:1
# ln -s /python_workspace/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/
部署静态文件:在mysite/settings.py最后添加:1
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
运行python manage.py collectstatic将默认的静态拷贝到新目录。
重启Nginx1
# /etc/init.d/nginx restart
放置media.png到上面设置的media目录,并在浏览器里访问:1
127.0.0.1:8001/media/media.png
创建uWSGI运行脚本mysite_uwsgi.ini并填入:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# mysite_uwsgi.ini file
[uwsgi]
#
# Django-related settings
# the base directory (full path)
chdir = /python_workspace/mysite
# Django's wsgi file
module = mysite.wsgi
# the virtualenv (full path)
#home = /path/to/virtualenv
#
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 3 # 开启3个uwsgi工作进程
# the socket (use the full path to be safe
socket = /python_workspace/mysite/mysite.sock
# ... with appropriate permissions - may be needed
chmod-socket = 666
# clear environment on exit
vacuum = true
运行脚本启动uWSGI:1
# uwsgi --ini mysite_uwsgi.ini
(前提是Nginx要运行着)在浏览器里访问127.0.0.1:8001,应该可以看到Django页面。
安装配置MySQL
- 安装MySQL
1
# apt-get install mysql-server
参考:MySQL安装指南
如果打开MySQL出现错误(仅在出现错误时尝试下面的方法):1
2
3ERROR 2002 (HY000):
Can't connect to local MySQL server through socket
'/var/run/mysqld/mysqld.sock' (2)
需要将MySQL的socket设置为上面的路径(需要修改三处,该方法不一定有效):1
gedit /etc/mysql/my.cn

参考:error: ‘Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)’
- 选择MySQL DB API Drivers^Mysql-notes
- ,本文使用MySQLdb,即mysql-python模块
1
2
3
4
5# apt-get install python-setuptools
# apt-get install libmysqld-dev
# apt-get install libmysqlclient-dev
# easy_install mysql-python
# apt-get install python-mysqldb
测试下:
在python交互式窗口,import MySQLdb(注意:区分大小写)试试,不报错的话,就证明安装好了。
参考:ubuntu下mysql-python模块的安装
- 修改mysite/settings.py,添加MySQL配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# Database
# https://docs.djangoproject.com/en/1.7/ref/settings/#databases
#
DATABASES = {
'default': {
#'ENGINE': 'django.db.backends.sqlite3',
#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'mysql', # 这里的名字一定要设为数据库名字否者会出现Unknown database 'xxx'
# The following settings are not used with sqlite3:
'USER': 'root',
'PASSWORD': '123', # 改为自己设置的密码
'HOST': '127.0.0.1', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '3306', # Set to empty string for default.
}
}
注意,由于py文件默认用ASCII编码,如果有中文会出错,需要在文件的第一或第二行加入编码设置:# -*- coding: utf-8 -*-。参考:Python中文问题 或 SyntaxError: Non-ASCII character ‘\xe8’ in file
在python交互式窗口:1
2>>> from django.db import connection
>>> cursor = connection.cursor()
django.db注意区分大小写,不报错的话,就证明安装好了。
参考:python Django 学习笔记(四)—— 使用MySQL数据库、Django-settings-databases、ubuntu下Django连接mysql数据库出错及解决
- 创建app并测试数据库
1
# django-admin startapp firstapp # firstapp为新创建的app名称
运行上述命令会在mysite工程目录里创建一个firstapp目录。
然后在mystite/settings.py中的INSTALLED_APPS模块的最下面加入firstapp,安装此app:
编辑app的模块文件firstapp/models.py,填入操作数据库的代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#vim: set fileencoding=utf-8 :
#
from django.db import models
#
# Create your models here.
#
class Company(models.Model):
full_name = models.CharField(u'公司全称' ,max_length=30)
address = models.CharField(u'地址', max_length=50)
tel = models.CharField(u'电话', max_length=15,blank=True)
def __unicode__(self):
return '%s %s %s' % (self.full_name,self.address,self.tel)
#
class Product(models.Model):
product_name = models.CharField(u'产品名称', max_length=30)
price = models.FloatField(u'价格')
stock = models.IntegerField(u'库存', max_length=5)
company = models.ForeignKey(Company)
create_date = models.DateField(u'生产日期')
#
def __unicode__(self):
return self.product_name
#设置一些与特定模型相关的选项
class Meta:
ordering = ['create_date']
采用 python manage.py validate 检查模型的语法和逻辑是否正确。
没有错误则执行 python manage.py syncdb创建数据表。
现在你可以看到你的数据库除了生成了products_company,products_product外还创建了其它好几个表,这些是django管理后台所需表暂不管。
参考:python Django 学习笔记(四)—— 使用MySQL数据库