转自:http://www.usday.cn/blog/51

部署前的准备:

1. 在本地可以运行的django项目

2. 一台云服务器,这里选用Centos系统

开始部署:

首先在本地导出项目需要的第三方库:在根目录(或虚拟环境中) 命令行使用

pip freeze >requirements.txt  

利用ssh连接你的服务器 我这里用的是Xshell

安装python3

下载安装之前需要确认服务器上已经安装了:GNU编译器套件、zlib依赖包(python3.7以上版本需要)

具体安装命令如下(路径任意):

yum install gcc 安装GNU编译器套件

yum install -y zlib zlib-devel 安装zlib依赖包

cd /tmp/ 进入tmp文件夹(在这里只是存储临时文件)

官网下载安装所需的Python3(服务器一般自带Python2)

wget www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

进行解压 tar -xzvf Python-3.7.0.tgz

进入解压出来的Python-3.7.0文件夹 cd Python-3.7.0/

安装到/usr/local/python3目录下  ./configure --prefix=/usr/local/python3

编译安装  make && make install

使用软链接便于在任意目录使用python3和pip3

ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

到这里可以在终端输入 python3 测试python3是否安装成功

在requirement.txt所在路径下安装所需模块  pip3 install -r requirement.txt 

可以使用 pip3 list 查看相应模块是否安装

安装uwsgi

pip3 install uwsgi

uwsgi基础测试

创建一个test.py测试文件(路径任意) vim test.py

键盘按i进入编辑模式,输入以下内容

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]

运行uwsgi:   uwsgi --http :8000 --wsgi-file test.py

 解释:  --http :8000 使用http协议 端口8000  --wsgi-file test.py 加载指定文件

在本地浏览器进行访问 输入服务器ip地址或域名(已进行域名解析)+:8000 例如  *.*.*.*:8000 或 *.com:8000

如果没问题。你将在浏览器中看到 Hello World,这证明 web客户端--uwsgi--python 的连接是正常的

使用uwsgi测试你的项目

进入的项目文件夹(与manage.py同一级) 我把项目文件放在了  /home/  项目名字为mysite

所以 cd /home/mysite

确保你的项目可以正常工作

键入 python3 manage.py runserver 0.0.0.0:8000  

如果发现django模块不能导入,则是因为没有添加环境变量,具体命令如下:

vim ~/.bash_profile

添加django的路径

export PATH=$HOME 在此部分添加,用冒号隔开,具体格式请搜索 $PATH

如果在本地浏览器键入ip地址(*.*.*.*:8000)或域名(*.com:8000)不能访问,需要更改django项目的settings.py设置

vim /home/mysite/mysite/settings.py

进入编辑模式 把 ALLOWED_HOSTS = [] 改为 ALLOWED_HOSTS = ['*']

返回manage.py所在文件夹 键入 python3 manage.py runserver 0.0.0.0:8000

打开本地浏览器进行访问,确保你的项目可以工作。

用uwsgi运行你的项目

在终端输入  uwsgi --http :8000 --module mysite.wsgi

用本地浏览器进行访问,如果访问正常,证明 web客户端-uwsgi-django 的连接是正常的

安装nginx

下载       wget http://nginx.org/download/nginx-1.14.1.tar.gz

解压  tar -xzvf nginx-1.14.1.tar.gz

进入解压所得文件夹 cd nginx-1.14.1/

配置      ./configure

编译安装  make && make install

启动nginx,/usr/local/nginx/sbin/./nginx  如果出现  welcome to nginx!  则证明安装成功

为你的站点配置nginx

将/usr/local/nginx/conf目录下的uwsgi_params文件复制到你的项目目录

cp /usr/local/nginx/conf/uwsgi_params /home/mysite/

创建mysettings文件夹 mkdir /home/mysettings

创建一个名为mysite_nginx.conf的文件(可以在任意路径,只要你能找到,这里我把它放在 /home/mysettings/)

vim /home/mysettings/mysite_nginx.conf

具体配置如下:

upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
} # configuration of the server
server {
# 你的网站监听的端口,此处先用8000端口测试,正式部署可以改为80
listen 8000;
# 你的网站的域名
server_name *.com; # substitute your machine's IP address or FQDN
charset utf-8; # max upload size
client_max_body_size 75M; # adjust to taste # Django media
location /media {
alias /home/mysite/media; # 你的media的文件目录
} location /static {
alias /home/mysite/collected_static; # 你的项目收集的静态文件目录(后边会将收集静态文件)
} # Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /home/mysite/uwsgi_params; # uwsgi_params 文件所在目录
}
}

这个配置文件告诉nginx提供来自文件系统的媒体和静态文件,以及处理那些需要Django干预的请求。对于一个大型部署,让一台服务器处理静态/媒体文件,让另一台处理Django应用,被认为是一种很好的做法,现在这样就好了。

现在,让nginx的根文件载入你的mysite_nginx.conf配置的信息

vim /usr/local/nginx/conf/nginx.conf

加入 include       /home/mysettings/*.conf;

现在基本配置已经ok

部署静态文件

在运行nginx之前,你必须收集所有的Django静态文件到静态文件夹里

编辑项目的settings   vim /home/mysite/mysite/settings.py

添加  STATIC_ROOT = os.path.join(BASE_DIR, "collected_static/")

然后运行 python3 manage.py collectstatic

基本的nginx测试

重启nginx  /usr/local/nginx/sbin/./nginx -s reload

要检查是否正确的提供了媒体文件服务,上传一张图片(这里我上传的文件为 1.jpg)到 /home/sysite/media文件夹中

然后访问http://example.com:8000/media/1.jpg - 如果这能正常工作,那么至少你知道nginx正在正确的提供文件服务。

最好将你的nginx先停止, 再开启,而不是重载。

nginx和uwsgi以及test.py

到刚才test.py的文件夹 uwsgi --socket :8001 --wsgi-file test.py

这几乎与之前相同,除了这次有一个选项不同:socket :8001 使用uwsgi协议,端口为8001

同时,已经配置了的nginx在8000端口与uWSGI通信,而对外使用8000端口,访问:

在本地浏览器  *.*.*.*:8000    *.com:8000

如果正常显示内容,则说明 web客户端--web服务器--the socket--uwsgi--python的连接是正常的

使用Unix socket而不是端口

(此部分我部署时出现问题,所以我跳过这部分的说明,具体可以看官方文档

使用uwsgi和nginx运行django应用

进入项目文件夹后运行  uwsgi --socket :8001 --module mysite.wsgi

这时候应该能完整地看到你的网站

配置uWSGI以允许.ini文件

我们可以将用在uWSGI上的相同的选项放到一个文件中,然后告诉 uWSGI使用该文件运行。这使得管理配置更容易。

创建一个名为mysite_uwsgi.ini的文件:

[uwsgi]

# Django-related settings
# the base directory (full path)
chdir = /home/mysite
# Django's wsgi file
module = mysite.wsgi:application
# the virtualenv (full path)
home = /path/to/virtualenv #到你虚拟环境的路径,没有虚拟环境可以注释掉 # process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe
socket = 127.0.0.1:8001
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true

然后使用这个文件运行uswgi:

uwsgi -d --ini mysite_uwsgi.ini

参数 -d 为后台运行。

此时你的django项目已经部署成功。Congratulations!

「Linux+Django」Django+CentOs7+uwsgi+nginx部署网站记录的更多相关文章

  1. Django+uWSGI+Nginx 部署网站

    Django 1.11设置 保证Django在本地调试没有问题: 当然这是前提^_^ 收集静态文件至指定文件夹 Django静态文件设置具体参考:https://docs.djangoproject. ...

  2. mac+django(1.8.2)+uwsgi+nginx 部署

    一. uwsgi 安装 检验 配置uwsgi.ini 1. 安装 pip3 install uwsgi 2. 检验 方法一(uwsgi启动文件): test.py内容如下: def applicati ...

  3. Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)

    Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...

  4. django+uwsgi+nginx部署(非常详细)

    django+uwsgi+nginx部署 1.介绍: 在网上看了很多教程,但自己部署了很久都没有成功,这篇博文记录自己所踩过得坑. 2.环境: Ubuntu 16.04.1 LTS (GNU/Linu ...

  5. 使用uWSGI+nginx部署Django项目

    最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...

  6. virtualvenv+django+uWSGI+nginx 部署

    原创博文 转载请注明出处! 1. virtualvenv 2. django 3. uWSGI 4. nginx 5. 踩坑记录 1. virtualvenv virtualvenv install ...

  7. linux vue uwsgi nginx 部署路飞学城 安装 vue

    vue+uwsgi+nginx部署路飞学城 有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码#这个代码 ...

  8. vue+uwsgi+nginx部署路飞学城

    vue+uwsgi+nginx部署路飞学城   有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码 ht ...

  9. centosflask+uWSGI+nginx部署

    centosflask+uWSGI+nginx部署 1.      概念 Flask自带webserver--Werkzeug,可以搭建服务,运行网站.但在开发时,一般会用专业的--uWSGI. 另外 ...

随机推荐

  1. python基础知识-8-三元和一行代码(推导式)

    python其他知识目录 1.三元运算(三目运算) 三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值格式:[on_true] if [expression] else [on_false]re ...

  2. Erlang/Elixir: 使用 OpenCV, Python 搭建图片缩略图服务器

    这篇文章是在OSX上测试和运行的的, Ubuntu下的安装和配置请移步到这里 应用程序进程树, 默认 Poolboy 中初始化10个用于处理图片的 Python 工作进程(Worker) 首先安装Op ...

  3. [Algorithm] A* Search Algorithm Basic

    A* is a best-first search, meaning that it solves problems by searching amoung all possible paths to ...

  4. Scrum立会报告+燃尽图(十月十八日总第九次):功能细化与数据库设计

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...

  5. 冲刺ing-3

    第三次Scrum冲刺 队员完成的任务 队员 完成任务 吴伟华 分配任务,燃尽图 蔺皓雯 编写博客,美化主界面 蔡晨旸 美化主界面 曾茜 主页面设计 鲁婧楠 服务器建构 杨池宇 服务器建构 成员遇到的问 ...

  6. struts-resultType属性

    1.默认dispatcher:forward方式,服务器端跳转 2.redirect:客户端跳转 3.chain:Action转发,forward方式,服务器端跳转action 4.redirectA ...

  7. 依据Right-BICEP要求的对四则运算2的测试

    代码: #include <iostream> #include <time.h> #include <stdio.h> #include <stdlib.h ...

  8. 通俗理解Hilbert希尔伯特空间

    作者:qang pan 链接:https://www.zhihu.com/question/19967778/answer/28403912 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权, ...

  9. 2018软工实践—Alpha冲刺(6)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试服务器并行能力 学习MSI.CUDA ...

  10. 读我是一只it小小鸟有感!!!

    <<我是一只it小小鸟>>是老师为我们这些即将步入it行业的新人推荐的一本书,通过这本书的简介知道它是由一群it学子共同创造而成的,每个人分别讲述各自的成长经历.书的开篇是本书 ...