Nginx+Uwsgi+Django 项目部署到服务器的思路详解
作者:赵先鑫 发布时间:2021-05-20 20:23:10
首先先说一下思路:
1.本地django项目打包 主要用到的是 python自带的distutils.core 下的 setup,具体代码在下面,主要讲的两个问题是package主要打包为和目录同级的代码,例如:TCMS如果还有一个子文件夹,那就不能自动打包了。这个时候需要用到data_files。glob(*filename)文件名模式匹配,不用遍历整个目录判断每个文件是不是符合。
from distutils.core import setup
import glob
setup(
name = "demo",
version = "0.1",
packages = ['author_zxx','TCMS','static'],
data_files= glob.glob('templates/*.html')
)
2.打包用到的木块,也就是python的库,pip freeze >> requirement.txt (requirement.txt 问文件名,随便起)
pip freeze > requeirement.txt
3.服务器安装虚拟环境(非常重要,这一步一定要在开始。)
yum install virtualenv
yum install cirtualenvwrapper
4.创建虚拟环境 并且 指定虚拟换 用到的python 解释器版本
# 创建一个项目目录
cd my_project
# 创建虚拟环境 my_project_env 为虚拟环境的名称
virtualenv my_project_env
# 指定虚拟环境所用到的python解释器版本 -p后面为python解释器存放的路径, my_project_env 为虚拟环境的名称
virtualenv -p /usr/bin/python2.7 my_project_env
# 创建完成虚拟环境之后会生成一个文件夹,之后在bin文件夹中会有一个activate,我们在使用虚拟环境需要激活虚拟环境,source activate。
source my_project_env/bin/activate
#退出虚拟环境
deactivate
5.在虚拟环境中安装django 和 uwsgi 。要指定安装版本和开发环境要一样
pip install django==3.0.4
pip install uwsgi
6.创建django中的项目
# . 表示在当前目录下创建,如果不加,会在project_name 下创建一个同名的目录。
django-admin startproject 'project_name' .
7. 将项目通过FileZilla 或者其他交互软件,传入到刚刚所创建的目录中。
8.项目上传完毕之后,需要安装我们所需要的包。
# 刚刚 pip freeze > requirement.txt 所得
pip install -r requirement.txt
9.完成之后,可以通过 python manage.pu runserver 进行测试,是否成功。显示出下面得内容,即为成功。
May 08, 2020 - 10:53:33
Django version 3.0.4, using settings 'TsmWeb.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
10.之后我们需要安装uwsgi替我们代替 python manage.py runserver. 因为在生产环境中我们不可能一直手动得去开启服务器,这个时候就需要uwsgi,刚刚已经安装过uwsgi。我们在服务器项目目录下创建一个test.py 文件。
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"
11. 之后在linux 命令行输入
uwsgi --http :8001 --wsgi-file /‘路径,从跟开始'/test.py
如果出现下面得代码,则表示成功:
*** Starting uWSGI 2.0.18 (64bit) on [Fri May 8 11:00:36 2020] ***
compiled with version: 4.8.5 20150623 (Red Hat 4.8.5-39) on 07 May 2020 02:26:03
os: Linux-3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020
12.之后我们需要安装Nginx
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install gcc-c++
yum install -y openssl openssl-devel
wget -c https://nginx.org/download/nginx-1.14.0.tar.gz
tar -zxvf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure
make
make install
13.之后测试nginx是否可以正常使用,我们需要进到nginx文件下得sbin/ 目录,运行 ./nginx ,之后在浏览器访问我们地址即可。如果出现 Welcome to Nginx! 即表示成功
14.现在是nginx和uwsgi配置,这个也是最头疼的。
# uwsgi 官网
https://uwsgi-docs.readthedocs.io/en/latest/
# nginx主要问题在 nginx.conf,下面附上详解
https://www.jb51.net/article/131362.htm
来源:http://www.cnblogs.com/zhaoxianxin/p/12849331.html
猜你喜欢
- 在平时,常常会提醒自己要做一个善于发现的人,时刻发现细节,这样才会更加懂得生活、会让生活更加精彩。在学习上也是如此,我们常常会发现有很多网站
- 如果说哪个开源程序不需要介绍大家就认识,那一定是phpMyAdmin,一款流行的MySQL数据库的Web管理界面。MySQL是全球最流行的W
- 之前写了一个matlab的,越用越觉得麻烦,如果不同数据集要改类别数目,而且运行速度慢。所以重新写了一个Python的,直接读取xml文件夹
- 第一段代码:#!/usr/bin/python# -*- coding: utf-8 -*-import emailimport mimet
- 报错[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE]问题描述pandas读取网络表格时pd.read_excel(u
- 我想大家都有一些开了80端口的肉 * ,如果是国内的出于安全就不要往下看了,如果不不妨往下看一下,小弟献丑了,以求抛砖引玉。在肉鸡上放网站最麻
- 场景需求:需要在Flask服务器的本地找一张图片返回给前端展示出来。问题疑点:通常前端的<img>标签只会接受url的形式来展示
- 本文实例分析了PHP中怎样防止SQL注入。分享给大家供大家参考。具体分析如下:一、问题描述:如果用户输入的数据在未经处理的情况下插入到一条S
- 具体代码如下所示:#coding=utf8from urllib import requestimport reimport urllib,
- 很多时候我们的redis的IP地址一般都是默认的127.0.0.1代表只能接受本机的访问,因此我们其他机器上想要访问这个redis的时候,就
- 在ASP.NET2.0通过SMTP的验证发送EMAIL ,代码如下:’Create a new MailMes
- 连接 Redisimport redisc连接方式:redis提供了2个方法1:StrictRedis:实现大部分官方的命令2:Redis:
- 广州4.18书友会主题的内容提纲自己参与撰写,同时还参与组织和主持。通过这次的深入参与,我发现胡晓同学能坚持下来多不容易,先赞下。由于天公不
- 代码如下# 爬取网易音乐import requestsfrom bs4 import BeautifulSoupimport urllib.
- 前言开发环境:Centos 7 + Python 3.5.1 + Qt Creator(只是使用Qt Creator编译而已,并没有使用QT
- write()方法把字符串str写入文件。没有返回值。由于缓冲,字符串可能不实际显示文件,直到flush()或close()方法
- 使用pickle模块来dump你的数据:对上篇博客里的sketch.txt文件:import osimport sysimport pick
- 1、Pandas库的操作Panda是数据分析特别重要的一个库,我们要掌握以下三点:· pandas 分组计算;· pandas 索引与多重索
- 思路:创建文件时,先检查是否有同名文件(使用os.path.isfile),如果有,则在文件名后加上编号n来创建。关键点:1. 使用os.p
- 实现效果实现代码import matplotlib.pyplot as pltfrom skimage import iofile_name