Linux 下 将使用Python-Django开发的web应用布置到服务器上(亲测有效)

写在前面:

Django是一个卓越的新一代Web框架,相信使用Python的人对此并不陌生,但将我们完成的web应用布置到到服务器上并不是一件容易的事情。

Django详细的教程可以参考http://python.usyiyi.cn/django/index.html。

Django有自己的一个调试服务器,通过在项目文件夹下执行:

  python  manage.py runserver 8080(参数8080是设置的端口号,指明该服务器使用端口号为8080)

但是此语句也仅限在自己的机器上进行调试自己的项目,并不能将其布置在服务器上,供其他用户使用。

所以此处,我将介绍一种详细的布置过程(亲测有效),有问题欢迎大家评论探讨。

使用Nginx和uWSGI部署Python Web站点的方法。OS:Ubuntu Server 14.04 LTS

基础环境配置
sudo apt-get install python-setuptools

安装Nginx

什么是Nginx?

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.

首先需要添加Nginx库到apt-get source中:

sudo add-apt-repository ppa:nginx/stable
# 如果报错 sudo: add-apt-repository: command not found,请先安装software-properties-common包
# 安装software-properties-common包
sudo apt-get install software-properties-common

升级已有的包,并确保系统上有uWSGI所需的编译器和工具:
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install build-essential python-dev

安装:
sudo apt-get install nginx
sudo /etc/init.d/nginx start
以上步骤完毕,就可以在浏览器访问127.0.0.1并见到页面:welcome nginx

安装uWSGI
Nginx是一个提供静态文件访问的web服务,然而,它不能直接执行托管Python应用程序,而uWSGI解决了这个问题。

WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范。
sudo pip install uwsgi

配置Nginx
我们不需要对Nginx默认配置文件(/etc/nginx/sites-enabled/default)做任何改变,只需要在相应的Web应用里单独配置即可。这样做的好处就是:各项目配置隔离,不干扰其他项目。

以下为例子,首先我们编辑配置文件,找到include项的位置,增加需要部署项目的nginx配置文件。

sudo vim /etc/nginx/nginx.conf
# 增加以下行 (所有Web应用都放在一个文件夹,方便以后reload Nginx)
include /data/www/*/conf/nginx.conf;×(放在http第一行即可)

# reload (如果使用了restart,配置文件错误导致所有全挂)
sudo /etc/init.d/nginx reload

# 也可以先检查配置文件是否正确
sudo nginx -t
出现以下代表检查全部通过
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# 更多帮助
sudo nginx -h

Demo for nginx.conf
(只包括以下代码即可,记得修改路径)
server {

listen 8080;
server_name home;
index index.html index.htm;

access_log /home/tom/www/mysite/logs/access.log;
error_log /home/tom/www/mysite/logs/error.log;

location /favicon.ico {
alias /home/tom/www/favicon.ico;
}

location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/mysite.sock;
}

location /static {
alias /home/tom/www/static;
}

location /media {
alias /home/tom/www/media;
}

}
此时,访问8010端口不再是404而应该是502页面。如下图所示:

这是正常的,Nginx和uWSGI是通过socket文件连接的。由于我们并没有配置uWSGI,这个文件并不存在。

配置uWSGI
首先确定uwsgi是可以正常启动并服务的,由于我们使用的是虚拟环境,所以使用以下命令:
uwsgi --http :8000 --chdir path/conf --home path/env/ --wsgi-file path/conf/wsgi.py
如果在浏览器可以通过ip:8000访问,表示OK。

检查通过后,开始使用文件配置:(以下面为例子)
[uwsgi]

#permissions for the socket file
chmod-socket = 666

# variables
projectname = mysite
projectdomain = /home/tom/www
base = /home/tom/www/mysite
LC_ALL = zh_CN.UTF-8

# plugins
protocol = uwsgi
plugins = python

# the base directory(full path)
chdir = %(base)/mysite

# django wsgi.py
module = wsgi

socket = /tmp/mysite.sock
buffer-size = 32768
threads = 10
master = true

----------------------------------

修改:
wsgi.py中的“setting”
setting 中的 “urls”

(有待详细说明)

--------------------------------

执行uWSGI,用新创建的配置文件作为参数:

uwsgi --ini path/conf/uwsgi.ini

可能发生的错误: !!! UNABLE to load uWSGI plugin: ./python_plugin.so: cannot open shared object file: No such file or directory !!!

首先安装:

sudo apt-get install uwsgi-plugin-python
以上不能解决,请先检查uwsgi版本和配置。使用:

/usr/bin/uwsgi --ini path/conf/uwsgi.ini

可能发生权限问题执行以下语句:
sudo chmod -R 777 ./调节权限

------------------------------------------------------

一次安装成功后,若修改文件内容只需重复执行以下语句
sudo /etc/init.d/nginx reload
uwsgi --ini conf/uwsgi.ini

-----------欢迎评论讨论---------------------

申明:此文章由The_Third_Wave发表于:http://www.ttwshell.com/ ,转载需带上此声明和本文链接。

时间: 2024-11-03 21:37:59

Linux 下 将使用Python-Django开发的web应用布置到服务器上(亲测有效)的相关文章

windows 7搭建python+django开发环境

windows 7 64位,搭建python+django 开发环境实践 一.安装python 因为要应用于京东云或百度云引擎,选择2.7.4.到python官网下载相应版本并安装.安装完成后,需要配置环境变量,Path中添加c:\python27,我直接安装在c盘根目录下. cmd输入python回车,进入python环境,ok结束 二.安装django  到官网下载相应版本包,然后解压,cmd工作目录切换到解压路径,运行python setup.py install 报错:ImportErr

Linux 下编译安装 Python 3.4

Linux 下编译安装 Python 3.4 更新于 2014-09-24 02:01:05 UEANER 系统环境: CentOS 6.5 x86_64 / Fedora 20 x86_64 安装相关包 # yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make 下载 Python 3.4 源码包 # wget http://mirr

关于 Linux 下后台执行 Python 脚本的缓冲问题

[问题简述] 在 Linux 下后台执行 Python 脚本,重定向到日志文件,日志文件迟迟没有内容. [方案一](测试有效) nohup python3 -u t.py &> log.log & [方案一](测试无效) 方案二来自 stackoverflow,虽然测试无效,但其他地方也许会用到,记录一下. stdbuf -oL nohup python3 t.py &> log.log & *** walker *** 原文地址:http://blog.51c

深度Linux下配置Eclipse的Android开发环境

前段时间开始折腾Linux,其它常用软件都轻松找到了功能相同或相近的替代软件,但到了android开发工具这块,网上好多朋友都推荐使用android studio,而俺是个eclipse的老顽固,在windows下就不习惯使用android studio,再加上手头还有一个在windows下用eclipse做了了一半的项目,只好再折腾下如何在linux下配置eclipse的android开发环境.以前在windows下配置eclipse的android开发环境一般是以下几个步骤:1.安装JDK,

使用 Visual Studio Code(VSCode)搭建简单的 Python + Django 开发环境

写在前面的话 作为有个 Python 菜逼,之前一直用的 Pycharm,但是在主题这一块怎么调整都感觉要么太骚,看起来不舒服,要么就是简直不能看.似乎用大 JB 公司 IDE 的人似乎都不怎么重视主题这个东西. 我个人是那种“喜新厌旧”的,所以看久了 Pycharm 就感觉很难受了,再加上 Pycharm 太笨重了,就换成了以前短时间用过的 VSCode,以前没用是懒得折腾插件,现在闲下来准备折腾一下! 这里放一张我现在的 Pycharm 的配色主题: 闲话少说,进入正题! 创建 Django

linux下berkeley-db及python binding安装

1.下载源代码 shell > wget http://download.oracle.com/berkeley-db/db-5.3.21.tar.gz shell > wget http://pypi.python.org/packages/source/b/bsddb3/bsddb3-5.3.0.tar.gz#md5=d5aa4f293c4ea755e84383537f74be82 2, 解压缩,进入目录 3, 安装berkeley-db shell > cd build_unix/

Python Django开发 1

先配置个虚拟环境,在Flask第一篇文章有写,这里就跳过了 比如我的Django的目录是:C:\Workspaces\DjangoDemo,已经安装好了名为venv虚拟目录,接下来安装django框架,在虚拟环境状态下输入:pip install django即可 接下来创建一个Django项目的基础框架 虚拟环境下cd到C:\Workspaces\DjangoDemo,然后输入:venv\scripts\django-admin.py startproject demo1 demo1为项目的名

Linux 下如何调试 Python?

一般开发者都是在?IDE?中进行程序的调试,当然,有?IDE?的话,当然首选?IDE?进行调试. 但是,有时我们的业务场景,限制只能在 Linux 命令行模式进行调试. 这时该怎么办呢? 今天,就给大家介绍一个 Linux 下调试 Python 程序的工具. pdb简介 pdb 调试器是 Python 标准库提供的,因此最为方便,不需要安装其他组件,直接 import 后就能使用. pdb 调试器提供了调试所需的大多数功能,如断点.单行步进.堆栈帧的检查等等. 常用命令 l # 查看运行到哪行代

Linux下安装并使用Java开发opencv的配置

inux编译安装opencv 首先, linux下安装opencv其实不麻烦的, 参考文档即可完成: http://docs.opencv.org/trunk/doc/tutorials/introduction/linux_install/linux_install.html 大致有以下几个步骤: 1) 安装gcc以及cmake等等乱七八糟的软件(不过ubuntu下默认差不多都有了吧…) sudo apt-get install build-essential python-dev cmake