详解Ubuntu环境下部署Django+uwsgi+nginx总结

前言

这是我在搭建Django项目时候的过程,拿来总结记录,以备不时之需。

项目采用nginx+uwsgi的搭配方式。

项目依赖包采用 requirements.txt 文件管理的方式。

本地准备工作

确认项目能够运行起来,没有 bug

将当前环境的包导出 pip freeze > requirements.txt

将项目上传到服务器上的 /srv 目录下。这里以 git 的形式为例, 打开终端, 依次输入如下命令:

$ git init
$ git remote add origin xxx.git  # 替换成你的项目git地址
$ git add .
$ git commit -m 'first commit'
$ git pull origin master --allow-unrelated-histories
$ git push origin master

部署项目到服务器

安装python

安装好项目用到的 python 。

$ sudo apt install python
$ sudo apt install python-pip
$ pip install --upgrade pip

安装 virtualenv 以及 virutalenvwrapper ,并创建虚拟环境。

$ pip install virtualenv
$ pip install virtualenvwrapper
$ sudo apt install vim

编辑文件 ~/.bashrc

$ vim ~/.bashrc

# 添加如下2行代码
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# 保存文件,让文件成效
$ source ~/.bashrc

安装git:

$ sudo apt install git

# 为了方便XShell或者CRT连接服务器,建议安装OpenSSH
$ sudo apt install openssh-server openssh-client
$ service ssh restart

安装MySQL

$ sudo apt install mysql-server mysql-client
$ sudo apt-get install libmysqld-dev

测试配置

  1. 安装依赖包,进入虚拟环境 workon *** ,进入项目根目录,执行命令 pip install -r requirements.txt
  2. 创建数据库,新打开一个终端,登录数据库, mysql -uroot -p , 创建相应的数据库 CREATE DATABASE IF NOT EXISTS my_db default charset utf8mb4;
  3. 迁移数据, python manage.py migrate
  4. 收集静态文件, python manage.py collectstatic
  5. 启动服务器,执行 python manage.py runserver 0.0.0.0:8000 ,然后在你自己电脑上,在浏览器中输入 http://<your server ip>:8000 ,访问下网站所有页面,确保所有页面都没有错误。

注意:

  • 设置 ALLOW_HOST 为你的域名或 ip 地址。
  • 设置 DEBUG=False

安装uwsgi

uwsgi 是一个应用服务器,非静态文件的网络请求就必须通过他完成,他也可以充当静态文件服务器,但不是他的强项。

uwsgi 是使用 python 编写的,因此通过 pip install uwsgi 就可以了。( uwsgi 必须安装在系统级别的 Python 环境中,不要安装到虚拟环境中)。

命令行启动 uwsgi :

$ uwsgi --http :8000 --module test.wsgi --vritualenv=/root/.virtualenvs/django-env-py36

如果能够在浏览器中访问到测试的页面,说明uwsgi可以加载项目了。

配置文件方式启动 uwsgi :

在项目的根路径下面,创建一个文件 djangotest.ini ,填写以下代码:

[uwsgi]
# Django相关的配置
# 必须全部为绝对路径
# 项目的路径
chdir=/srv/djangotest

# Django的wsgi文件
module=djangotest.wsgi

# Python虚拟环境的路径
home=/root/.virtualenvs/django-env-py36

# 进程相关的设置
# 主进程
master=true

# 最大数量的工作进程
processes=10

# socket文件路径,绝对路径
socket=/srv/djangotest/djangotest.sock

# 设置socket的权限
chmod-socket=666

# 退出的时候是否清理环境
vacuum=true

然后使用命令uwsgi --ini djangotest.ini,看下是否还能启动这个项目。

安装nginx

nginx 是一个 web 服务器。用来加载静态文件和接收 http 请求的。

通过命令 sudo apt install nginx 即可安装。

nginx 常用命令:

  • 启动nginx:service nginx start
  • 关闭nginx:service nginx stop
  • 重启nginx:service nginx restart

收集静态文件:

静态文件应该让 nginx 来处理,而不是让 django 来做。

首先确保你的 settings.py 文件中有一个 STATIC_ROOT 配置,这个配置应该指定你的静态文件要放在哪个目录下。

那么我们可以执行以下命令: python manage.py collectstatic 来收集所有静态文件(已经执行过请忽略)。

编写nginx配置文件,在 /etc/nginx/conf.d 目录下,新建一个文件 djangotest.conf ,然后将以下代码贴进去:

upstream djangotest {
  server unix:///srv/djangotest/djangotest.sock;
}

# 配置服务器
server {
  # 监听的端口号
  listen   80;
  # 域名
  server_name 192.168.0.101;
  charset   utf-8;

  # 最大的文件上传尺寸
  client_max_body_size 75M; 

  # 静态文件访问的url
  location /static {
    # 静态文件地址
    alias /srv/djangotest/static_dist;
  }

  # 最后,发送所有非静态文件请求到django服务器
  location / {
    uwsgi_pass djangotest;
    # uwsgi_params文件地址
    include   /etc/nginx/uwsgi_params;
  }
}

测试配置文件: service nginx configtest 。注意:每次修改完配置需要重启 nginx : service nginx restart

使用supervisor

让supervisor管理uwsgi,可以在uwsgi发生意外的情况下,自动重启。

安装 supervisor :在系统级别的python环境下 pip install supervisor

在项目根目录下创建一个文件 my_supervisor.conf 。编写内容:

# supervisor的程序名字
[program:mysite]
# supervisor执行的命令
command=uwsgi --ini zlkt_uwsgi.ini
# 项目的目录
directory = /srv/djangotest
# 开始的时候等待多少秒
startsecs=0
# 停止的时候等待多少秒
stopwaitsecs=0
# 自动开始
autostart=true
# 程序挂了后自动重启
autorestart=true
# 输出的log文件
stdout_logfile=/srv/djangotest/log/supervisord.log
# 输出的错误文件
stderr_logfile=/srv/djangotest/log/supervisord.err

[supervisord]
# log的级别
loglevel=info

# 使用supervisorctl的配置
[supervisorctl]
# 使用supervisorctl登录的地址和端口号
serverurl = http://127.0.0.1:9001

# 登录supervisorctl的用户名和密码
username = admin
password = 123

[inet_http_server]
# supervisor的服务器
port = :9001
# 用户名和密码
username = admin
password = 123

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

运行 supervisor ,执行 supervisord -c my_supervisor.conf 。

进入 supervisor 管理控制台, supervisorctl -c my_supervisor.conf

supervisor 管理控制台常用命令

# 查看状态
status

# 启动程序
start program_name

# 重新启动程序
restart program_name

# 关闭程序
stop program_name

# 重新加载配置文件
reload

# 退出控制台
quit

到此这篇关于Ubuntu环境下部署Django+uwsgi+nginx总结的文章就介绍到这了,更多相关Ubuntu环境下部署Django+uwsgi+nginx总结内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • django2+uwsgi+nginx上线部署到服务器Ubuntu16.04

    1.前期准备 1.打开Terminal终端,执行以下命令,将项目所需要的依赖包,都记录到一个文件内备用. pip freeze >requirements.txt 2.将项目文件夹→右键→添加压缩文件,压缩为zip包 3.准备软件 1.xshell(用于远程操作服务器)2.FileZilla(用于从客户端将项目包上传到服务器)3.Navicat 12 (用于同步数据库) 4.环境云 服务器/云主机:京东云 (云服务还是要选大厂的,我也试过一些比较小的厂的云服务,不说是哪家了,哇,简直是坑啊,各种

  • Ubuntu系统搭建django+nginx+uwsgi的教程详解

    1. 在开发机上的准备工作 1.确认项目没有bug. 2.用pip freeze > requirements.txt将当前环境的包导出到requirements.txt文件中,方便在部署的时候安装. 3.将项目上传到服务器上的/srv目录下.这里以git的形式为例,打开终端,依次输入如下命令 •git init •git remote add origin xxx.git •git add . •git commit -m 'first commit' •git pull origin mas

  • Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程

    具体环境: Ubuntu 14.04 Python 2.7.6 Django 1.7.1 Virtualenv name:test Nginx uwsgi 假设 项目文件夹位于 /data/www/ts 设置保存在 ./conf 复制代码 代码如下: virtualenv name = test domain name = example.com django+uwsgi的部署实在是太蛋疼了..网上已有的教程似乎有新版本的兼容问题.最后跑到uwsgi官网上找的教程终于跑通了.. 不过官网的教程似

  • 详解Ubuntu环境下部署Django+uwsgi+nginx总结

    前言 这是我在搭建Django项目时候的过程,拿来总结记录,以备不时之需. 项目采用nginx+uwsgi的搭配方式. 项目依赖包采用 requirements.txt 文件管理的方式. 本地准备工作 确认项目能够运行起来,没有 bug 将当前环境的包导出 pip freeze > requirements.txt 将项目上传到服务器上的 /srv 目录下.这里以 git 的形式为例, 打开终端, 依次输入如下命令: $ git init $ git remote add origin xxx.

  • 详解如何使用Docker部署Django+MySQL8开发环境

    前一段时间重装了系统,然后我还没有备份,导致电脑里的开发环境全都没有了. 一想到又要装 Python 环境,还要装数据库,然后安装过程中还可能报一堆错就头疼. 最近正在学习 Docker,这不正好解决了我当前的痛点了吗?而且,不止这次重装系统,以后再重装都不怕了,只要拿着 Dockerfile 和 docker-compose 文件,不管到什么环境,一条命令轻松跑起来. 之前部署 Python 开发环境,都是用的 virtualenv,或者是 Pipenv.这次使用 Docker 之后,对比下来

  • 详解Ubuntu/CentOS下Apache多站点配置

    前言: 情景一:平时在我们开发的时候,一般项目都只存放在 localhost 指定的根目录下,当有好几个项目的时候,只能在根目录下以不同的文件夹区分,特别的不方便. 情景二:平时在看教学视频的时候,总是看到那些老师在单机下使用不同的域名,访问的却是本地的项目代码,每当这时候我都会问,这个怎么实现的. 情景三:在最近去实习面试的时候,面试官问我如何在 apache 服务器上搭建多站点.我只能回答我不会. 为了解决上面的几个问题,我决定把 apache 多站点配置这个知识点搞清楚.关键是搞懂 apa

  • 详解Ubuntu Server下启动/停止/重启MySQL数据库的三种方式

    Ubuntu Server下启动/停止/重启MySQL数据库的三种方式 系统环境:ubuntu server 12.10 x64(mysql为系统自带) 当我们需要修​​改MySQL的配置文件my.cnf(windows 下为 my.ini)来进行一些设置的时候,修改完之后我们需要重启MySQL. my.cnf文件位置为:/ect/mysql/my.cnf Waring:如果该文件配置错误,MySQL将无法启动. 下面介绍三种方式对MySQL进行启动/停止/重启操作: 启动mysql: 方式一:

  • 详解windows 环境下搭建electricSearch+kibana

    1.ES7.3.2 + kibana + ik-smart 百度网盘下载地址:https://pan.baidu.com/s/1eCKTYoosXl8NfX37EwjyWA 提取码:ibcf kibana 操作文档 GET _search { "query": { "match_all": {} } } ### 查看集群健康信息 GET /_cat/health?v ### 帮助 GET /_cat/health?help ### 查看集群中节点信息 GET /_c

  • 详解Linux环境下NodeJS的安装配置(HelloWorld)

    最简单的环境安装,测试helloworld.给初学者!! 安装脚本,请仔细阅读逐行执行: #!/bin/bash #检查是否已经安装 rpm -qa | grep python #查版本 python #最好是重新安装 Python推荐版本( >= v2.5.0 & < 3.0.0 ),否则影响nodejs运行 #进入安装目录 cd /usr/local/ #删除原有安装 rm -rf node rm -rf node-v0.10.29-linux-x64 #解压压缩包 tar -zx

  • 详解Linux环境下使Nginx服务器支持中文url的配置流程

    1:确定你的系统是UTF编码 [root@Tserver ~]# env|grep LANG LANG=en_US.UTF-8 2:NGINX配置文件里默认编码设置为utf-8 server { listen 80; server_name .inginx.com ; index index.html index.htm index.php; root /usr/local/nginx/html/inginx.com; charset utf-8; } 如果是用securecrt 上传文件,请选

  • 详解android环境下的即时通讯

    首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送给另外一个人的消息对象(文字,音视频,文件)通过消息通道(C/S实时通信)进行传输的服务.即时通讯应该包括四种形式,在线直传.在线代理.离线代理.离线扩展.在线直传指不经过服务器,直接实现点对点传输.在线代理指消息经过服务器,在服务器实现中转,最后到达目标账号.离线代理指消息经过服务器中转到达目标账

  • 详解Django+Uwsgi+Nginx的生产环境部署

    使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署 准备条件: 1.确保有一个能够用runserver正常启动的django项目 2.项目已上传到linux 3.linux上已部署好python环境,且已安装好项目所需的模块 安装uwsgi uwsgi是python的一个模块,安装u

  • 详解SSM框架下结合log4j、slf4j打印日志

    本文主要介绍了详解SSM框架下结合log4j.slf4j打印日志,分享给大家,具体如下: 首先加入log4j和slf4j的jar包 <!-- 日志处理 <!-- slf4j日志包--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dep

随机推荐