首先准备环境:

1.使用虚拟机 VMware Workstation Pro (也可以不用),安装Ubuntu-18.04.2系统

开始搭建环境

(因为ubuntu18.4.2集成了python3.6,因此不需下载python3,只需下载pip即可,有的话可以不用下载)

sudo apt install python3-pip

------搭建python环境------

 sudo apt-get install python3 (如果有python环境可以不装)
sudo apt-get install python3-dev #类库和头文件单独的包
sudo apt-get install libxml* #解析xml文件的库
sudo apt-get install net-tools #网络管理命令如:ifconfig是查看本地ip
sudo apt-get install lsof #列出打开文件工具

------安装 数据库---------

 (使用sqlite3数据库可以不装)
apt-get install mysql-server
apt-get install mysql-client
apt-get install libmysqlclient-dev

------更新pip版本---------

pip3 install --upgrade pip3

------安装SSH-------------

sudo apt-get install openssh-server

------安装vim-------------

sudo apt install vim

------安装django----------

sudo pip3 install django

-------上传你的django项目-----------------
可以在Home目录把项目直接复制到Home目录里
(这里注意:Home是ubuntu桌面上你能看到的目录,/home和/opt是用cd命令行进入的根目录,两者有很大的区别)
我们直接cd回车进入根目录,cd /opt进入opt文件夹,mkdir project创建project目录
再cd回车进入根目录ls看文件夹,找你的项目目录mysite,这时看到你的项目目录准备复制
用cp进行复制(你的命令所处位置在Home/(~/$)指向你的mysite目录)
----------进行复制------------------------

sudo cp -r mysite /opt/project/

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

上传之后运行django测试你的项目能不能运行成功
先进入你的项目目录/opt/project/mysite进行数据迁移
----------数据迁移------------------------

 sudo python3 manage.py makemigrations
sudo python3 manage.py migrate

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

如果想用admin界面,可以用如下指令创建管理员:
----------创建超级用户--------------------

sudo python3 manage.py createsuperuser

------------------------------------------
输入打算使用的登录名:username:michaelshu
输入email:Email address:
输入密码,需要输入两次,输入过程中密码不显示:
Password: Password (again):
当两次密码都相同的时候,就会提示superuser创建成功。
Superuser created successfully

----------添加静态文件目录----------------
#在settings.py中添加默认的静态目录(收集使用)
STATIC_ROOT = os.path.join(BASE_DIR,'static')

先运行--noinput表示是不需要交互的,再来收集静态文件至static目录中
----------收集静态文件--------------------

 sudo python3 manage.py collectstatic --noinput
sudo python3 manage.py collectstatic

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

----------运行django项目测试--------------

sudo python3 manage.py runserver 127.0.0.1:8000

------------------------------------------
浏览器访问127.0.0.1:8000查看成功与否
成功之后安装uwsgi

----------安装 uwsgi----------------------

sudo pip3 install uwsgi
or
sudo pip3 install http://projects.unbit.it/downloads/uwsgi-lts.tar.gz

测试uwsgi,创建test.py文件:

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

----------通过uwsgi运行该文件-------------

uwsgi --http :8001 --wsgi-file test.py

--------------------------------------------------
在浏览器端输入127.0.0.1:8001即可看到Hello World

接下来配置Django与uwsgi连接。此处,假定的我的django项目位置为:/opt/project/mysite
----------通过uwsgi运行项目文件-----------

uwsgi --http :8001 --chdir /opt/project/mysite/ --wsgi-file mysite/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

---------------------------------------------------
在浏览器端输入127.0.0.1:8001/admin即可看到你的django项目admin页面
常用选项:
http : 协议类型和端口号
processes : 开启的进程数量
workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)
chdir : 指定运行目录(chdir to specified directory before apps loading)
wsgi-file : 载入wsgi-file(load .wsgi file)
stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)
threads : 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)
master : 允许主进程存在(enable master process)
daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。
pidfile : 指定pid文件的位置,记录主进程的pid号。
vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)

-------------------小重点-------------------------
接下来,我们要将三者结合起来。首先罗列一下项目的所需要的文件:
mysite/

├── manage.py

├── mysite/

│ ├── __init__.py

│ ├── settings.py

│ ├── urls.py

│ └── wsgi.py

└── my_uwsgi.ini

在我们通过Django创建mysite目时,在子目录mysite下已经帮我们生成的 wsgi.py文件。所以,我们只需要再创建my_uwsgi.ini配置文件即可,当然,uwsgi支持多种类型的配置文件,如xml,ini等。此处,使用ini类型的配置。
---------------------配置文件内容--------------------------------------------

# my_uwsgi.ini file
[uwsgi] # Django-related settings
#socket是用nginx来测试时用的
#socket = :8000
#用uwsgi单独测试时用
http = :8000 # the base directory (full path)
chdir = /opt/project/mysite # Django s wsgi file
module = mysite.wsgi # process-related settings
# master
master = true # maximum number of worker processes
processes = 4 # ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true

----------------------------------------------------------------------------
这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。
socket 指定项目执行的端口号。
chdir 指定项目的目录。
module mysite.wsgi,可以这么来理解,对于mysite_uwsgi.ini文件来说,与它的平级的有一个mysite目录,这个目录下有一个wsgi.py文件。其它几个参数,可以参考上一小节中参数的介绍。接下来,切换到mysite项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。
在项目目录下/opt/project/mysite运行命令启动uwigs,看是否成功,注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。
---------用ini文件启动uwsgi---------------

uwsgi --ini my_uwsgi.ini 

------------------------------------------------
(这里容易犯两个错误:1.项目文件没放对地方,2.http和socket弄混了(socket是搭配nginx用的,用uwsgi单独测试要用http))
成功之后安装nginx

--------安装 Nginx--------------------------

sudo apt-get install nginx

--------nginx命令---------------------------

 /etc/init.d/nginx start #启动
/etc/init.d/nginx stop #停止
/etc/init.d/nginx restart #重启

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

再接下来要做的就是修改nginx.conf配置文件。
打开/etc/nginx/nginx.conf文件,添加如下内容。
(cd返回根目录,cd /etc/nginx进入nginx目录,ls查看目录下的nginx.conf文件,sudo vim nginx.conf打开此文件)
------------------小重点------------------------------
一定要把server放在http{}中,不然会报错,头疼的错误,还要特别注意分号(;)

server {
listen 8099;
server_name 127.0.0.1;
#也可以加你的本机地址
#server_name 127.0.0.1 192.168.1.12;
charset UTF-8;
access_log /var/log/nginx/mysite_access.log;
error_log /var/log/nginx/mysite_error.log; client_max_body_size 75M; location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
uwsgi_read_timeout 2;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /opt/project/mysite/static/;
}
}

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

listen 指定的是nginx代理uwsgi对外的端口号。
server_name 网上大多资料都是设置的一个网址(例,www.example.com),我这里如果设置成网址无法访问,所以,指定的到了本机默认ip。
在进行配置的时候,我有个问题一直想不通。nginx到底是如何uwsgi产生关联。现在看来大概最主要的就是这两行配置。
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
include必须指定为uwsgi_params;而uwsgi_pass指的本机IP的端口号与myweb_uwsgi.ini配置中的文件中的必须一致。

现在重新启动nginx,然后浏览器访问:http://127.0.0.1:8099/
通过这个IP和端口号的指向,请求应该是先到nginx的。如果你在页面上执行一些请求,就会看到,这些请求最终会转到uwsgi来处理。

这时运行访问你的项目应该会报个错误:attempt to write a readonly database(尝试写入只读数据库)
解决很简单,首先停掉nginx和uwsgi,cd /opt/project/mysite进入mysite目录查找db.sqlite3数据库文件
-----------对sqlite3赋予权限----------------

sudo chmod 777 db.sqlite3

--------------------------------------------
顺带着文件夹也给赋权吧,对mysite项目文件和project目录赋予权限

 sudo chmod 777 mysite
sudo chmod 777 project

如果还有错那就是504 Gateway Time-out这个错误了吧,提醒你一下,"socket"有没有改过来,

要把my_uwsgi.ini配置文件中的"http"注释掉,先停掉nginx和uwsgi,使用"socket",接下来cd /opt/project/mysite 进入项目根目录使用 sudo vim my_uwsgi.ini打开uwsgi文件更改配置

# Django-related settings
#socket是用nginx来测试时用的
socket = :8000
#用uwsgi单独测试时用
#http = :8000

这时就完美成功了吧,如果还报错不要急,仔细查看报错信息,一点点解决,你就会离成功更近了一步,容易犯错的位置已经重点标红了,注意使用啊,一起加油吧!!

附录一点vim的使用方法:

     光标:j 下   k 上  H 左 L右
i --当前光标下进入编辑模式
ESC --退出编辑模式
a --当前光标下一个字符进入编辑模式
A --尾行进入编辑模式
dd --删除整行
dG --删除光标所在行到文件最后一行所有内容
dgg --删除光标所在行到文件第一行所有内容
u --返回上一次修改状态
wq --保存退出
q! --放弃打开文件后的所有修改退出

文章引用:http://www.cnblogs.com/fnng/p/5268633.html

Ubuntu-18.04.2系统 Nginx+uWSGI+Django 部署生产环境的更多相关文章

  1. Nginx+uWSGI+Django部署web服务器

    目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py ...

  2. ubuntu 18.04设置系统自带系统截图快捷键

    0.前言 ubuntu 18.04自带一个截图工具gnome-screenshot,有三种模式,全屏截图.当前活动窗口截图.选取活动区域截图 1.设置快捷键 Setting->Devices-& ...

  3. nginx+uwsgi+django部署流程

    当我们在用django开发的web项目时,开发测试过程中用到的是django自带的测试服务器,由于其安全及稳定等性能方面的局限性,django官方并不建议将测试服务器用在实际生产. nginx+uws ...

  4. nginx+uwsgi+django 部署原理

    python开发群里经常有同学问 nginx+uwsgi+django 着了教程部署,但是不知道他们之间怎么样的关系,于是我就google到了一个让我看起来很认同的图,大家看了也比较认同,于是就分享出 ...

  5. 基于window 7安装ubuntu 18.04双系统

    window7下安装ubuntu双系统 1.首先下载ubuntu镜像文件 进入ubuntu官网,http://releases.ubuntu.com/18.04/.下载最新镜像,ubuntu-18.0 ...

  6. Windows 10、Ubuntu 18.04 双系统 双硬盘 安装经验总结

    首先说明,我假设读者懂得分区.安装系统,所以不再深入讨论具体操作. 如果需要手把手教程,建议先参考其它Windows中加装Linux的相关文章. 网上其它文章.教程的常见问题是,各家机器配置不一样,安 ...

  7. ubuntu16.4+nginx+uwsgi+Django 部署上线

    Nginx概述 Nginx是一款轻量级的HTTP服务器,采用事件驱动和异步非阻塞处理方式框架,这让其具有极好的IO性能,市场用于服务端的反向代理和负载均衡 Nginx优点 高并发连接:官方测试Ngin ...

  8. ubantu+nginx+uwsgi+django部署

    1.更新ubantu的apt apt-get update 必要时候更新系统:      apt-get upgrade 2.远程连接服务器 ssh 用户名@ip 上传代码 :        scp ...

  9. 10、nginx+uwsgi+django部署(动静分离)

    10.1.说明: 1.介绍: 创建Django项目,可以通过 pyhon3 manage.py runserver 0.0.0.0:8080 & 命令更方便地调试程序,但是如果当一个项目完成了 ...

随机推荐

  1. subprocess 粘包问题

    1.执行命令: 在py代码中去如何调用操作系统的命令 新模块:subprocess r = subprocess.Popen('ls',shell=True,stdout=subprocess.PIP ...

  2. SQL 将一个字段内用逗号分隔的内容分成多条记录

    转自:http://www.cnblogs.com/zfanlong1314/archive/2013/01/14/2859848.html --> 测试数据 if not object_id( ...

  3. PAT 1035 插入与归并(25)(代码+思路+测试点分析)

    1035 插入与归并(25 分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到 ...

  4. 讲真的,千万别得罪会PS的人

    传说中有一种软件炒鸡可怕 那就是PS,专业术语是photoshop! 它能让你貌美如花 也能让你瞬间丑得掉渣 更可怕的是网络上大神的出现 简直让我们难以想象的厉害! 下面大家一起来欣赏一下 那些大神帮 ...

  5. 测试用例Excel模板For Quality Center

    Subject Test Name Description Step Name  Step Description Expected Result PU Regr\Component\Attribut ...

  6. window.name跨域实现

    参考:window.name实现的跨域数据传输 有三个页面: a.com/app.html:应用页面. a.com/proxy.html:代理文件,一般是一个没有任何内容的html文件,需要和应用页面 ...

  7. 2018.09.29 bzoj3156: 防御准备(斜率优化dp)

    传送门 斜率dp经典题目. 然而算斜率的时候并没有注意到下标的平方会爆int于是咕咕*2. 这道题我用了两个数组来表示状态. f[i]f[i]f[i]表示最后i个位置倒数第i个放木偶的最优值. g[i ...

  8. 2018.09.27 bzoj3029: 守卫者的挑战(概率dp)

    传送门 概率dp经典题目. 直接f[i][j][k]f[i][j][k]f[i][j][k]表示当前是第i次挑战,已经胜利了j次,目前的背包剩余空间是k. 然后用前面的转移后面的就行了. 注意第三维可 ...

  9. 2018.06.29 NOIP模拟 繁星(前缀和)

    繁星 [问题描述] 要过六一了,大川正在绞尽脑汁想送给小伙伴什么礼物呢.突然想起以前拍过一张夜空中的繁星的照片,这张照片已经被处理成黑白的,也就是说,每个像素只可能是两个颜色之一,白或黑.像素(x,y ...

  10. 实现WIFI MAC认证与漫游

    前言 单位里有10来个网件的AP(WNAP210),需要对接入端(主要是手机)进行MAC认证,原来采用AP本地MAC认证,但是人员经常变动(离职),另外人员的岗位(流水线)也经常调整,这样就需在变动后 ...