首先准备环境:

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. Honeycomb

    Honeycomb http://codeforces.com/gym/102028/problem/F time limit per test 4.0 s memory limit per test ...

  2. mybatis sql语句符号问题

    写sql语句<或>不能直接写,而应写作<或>,不然项目不能正常编译启动

  3. php 中的信号处理

    首先我们需要了解几个函数 pcntl_signal   安装信号处理器,也就是当指定信号发生时,调用函数. pcntl_alarm   指定秒数后向进程发送SIGALRM信号. posix_getpi ...

  4. C#以记事本(指定程序)打开外部文档(指定文档)

    System.Diagnostics.Process.Start("notepad.exe", "D:\\a.txt");

  5. NPOI导入导出Excel数据

    代码: using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; usi ...

  6. 改变父元素的透明度,不影响子元素的透明度—css

    1.如果我们给父元素添加opacity:0.4后,子元素的red颜色也变成了0.4的透明度, 例子如下: <!DOCTYPE html> <html> <head> ...

  7. svn回退版本/取消修改

    取消对代码的修改分为两种情况:   第一种情况:改动没有被提交(commit). 这种情况下,使用svn revert就能取消之前的修改. svn revert用法如下: # svn revert [ ...

  8. Spark设计思想浅析

    Spark is no rocket science!——博主 了解分布式计算的朋友,一定知道DAG这样一个概念.其实我接触DAG也是在学习MapReduce时了解到的.(具体可查阅<大数据日知 ...

  9. html5移动开发。

    禁止滚动 $('#idl').bind("touchmove",function(e){ e.preventDefault(); }); 图片居中 (因为图片比较特别,所以需要在外 ...

  10. python list和函数之间的复制和原地址修改问题

    def change(a): a.pop() #自带的方法都是原地址修改 a=[,,] change(a) print (a)#直接修改了3. def change(a): a=[,,,] #复制操作 ...