python官方中文文档上线_基础 项目部署 上线

本文详细介绍了如何将Django项目部署到服务器,包括配置ALLOWED_HOSTS、使用scp命令上传代码、通过uwsgi运行Django、配置uwsgi.ini、利用nginx做反向代理和处理静态文件,以及使用supervisor进行进程管理。还涉及到静态文件的收集和uwsgi静态文件映射。整个过程涵盖了从基础部署到高级优化的多个步骤。
摘要由CSDN通过智能技术生成

项目开发完毕后,需要将代码放到服务器上,这样用户才能访问。接下来我们一步一步来进行一波部署操作。

1. 简单粗暴

项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如:

ALLOWED_HOSTS = ["*",]

示例源码:猛击下载

然后将源码上传至服务器指定目录,如:/data/ ,然后执行命令来运行:

注: 上传命令: scp /Users/wupeiqi/PycharmProjects/oldboy-1.zip root@192.168.10.33:/data/

解压,进入目录并执行以下命令:

python3 mange.py runserver 0.0.0.0:8000

425762-20180317192500413-1870237176.png

2. uwsgi

Django框架运行依赖wsgi(本质提供socket服务端),众多模块实现了wsgi规范,而django框架中默认使用wsigiref模块来实现,他由于性能比较低,所以用于本地开发和测试,而线上部署时需要使用uwsgi来代替。

a. 在服务器上安装uwsgi

pip3 install uwsgi

需要先安装:yum install python-devel

b. 单文件使用uwsgi

在服务器上编写一个Python文件:

def application(env, start_response):

start_response('200 OK', [('Content-Type','text/html')])

return [b"Hello World"]

在服务器上执行命令启动Web服务器:

uwsgi --http :9001 --wsgi-file app.py

# 或

uwsgi --http :9002 --wsgi-file foobar.py --master --processes 4

PS: flask需要再加 --callable app

访问查看即可:

425762-20180318114723566-667013924.png

c. django程序使用uwsgi

将开发好的django程序拷贝到服务器目录【同示例一】,即:/data/oldboy ,执行命令启动:

uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4

ContractedBlock.gif

ExpandedBlockStart.gif

1. 创建配置文件 oldboy.ini

[uwsgi]

http= 0.0.0.0:9005chdir= /data/oldboy/wsgi-file = oldboy/wsgi.py

processes= 4static-map = /static=/data/oldboy/allstatic2. 根据配置文件启动uwsgi

uwsigi--ini oldboy.ini

配置文件的形式启动uwsgi

PS: 如果有虚拟环境可以添加上虚拟环境路径配置: virtualenv= /env/oldboy_venv

此时访问时,会出现找不到静态文件的错误。

想要uwsgi处理静态文件,需要先将django的静态文件收集到制定目录,然后再设置对应关系。

收集django静态文件

在django的配置文件中添加:STATIC_ROOT = os.path.join(BASE_DIR,"allstatic")

执行 python3 manage.py collectstatic 命令,至此django项目所有相关静态文件都会收集到制定目录。

设置uwsgi静态文件对应关系

uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4 --static-map /static=/data/oldboy/allstatic

访问地址,即可看到你的女朋友们了....

3. nginx

利用Nginx做反向代理、负载均衡以及处理静态文件。

a. 安装Nginx

yum install nginx

b. 配置nginx

ContractedBlock.gif

ExpandedBlockStart.gif

user root;

worker_processes4;

error_log/var/log/nginx/error.log;

pid/var/run/nginx.pid;

events {

worker_connections1024;

}

http {

log_format main'$remote_addr - $remote_user [$time_local] "$request"'

'$status $body_bytes_sent "$http_referer"'

'"$http_user_agent" "$http_x_forwarded_for"';

access_log/var/log/nginx/access.log main;

sendfile on;

tcp_nopush on;

tcp_nodelay on;

keepalive_timeout65;

include/etc/nginx/mime.types;

default_type application/octet-stream;

upstream django {

server127.0.0.1:8001;

# server192.1.123.1;

}

server {

listen80;

charset utf-8;

# max upload size

client_max_body_size 75M;

location/static {

alias/data/oldboy/allstatic;

}

location/{

uwsgi_pass django;

include uwsgi_params;

}

}

}

示例配置文件/etc/nginx/nginx.conf

确保nginx配置文件目录下有uwsgi_params文件(默认)

c. 配置uwsgi

为了确保让所有请求均通过80端口来访问网站,将uwsgi的配置文件修改为:

[uwsgi]

socket = 127.0.0.1:9005

chdir = /data/oldboy/

wsgi-file = oldboy/wsgi.py

processes = 4

logto = /tmp/oldboy.log

d. 启动uwsgi和nginx

uwsgi --ini /data/oldboy/oldboy.ini &

/etc/init.d/nginx start

3. supervisor

supervisor是一个对进程管理的软件,可以帮助我们启动uwsgi并维护(uwsgi进程关闭时,自动将其启动起来)。

a. 安装

yum install supervisor

b. 配置 vim /etc/supervisor.conf

ContractedBlock.gif

ExpandedBlockStart.gif

[supervisord]

http_port=/var/tmp/supervisor.sock ; (default is to run a UNIX domain socket server)

;http_port=127.0.0.1:9001; (alternately, ip_address:port specifies AF_INET)

;sockchmod=0700 ; AF_UNIX socketmode (AF_INET ignore, default 0700)

;sockchown=nobody.nogroup ; AF_UNIX socket uid.gid owner (AF_INET ignores)

;umask=022 ; (process file creation umask;default 022)

logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)

logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)

logfile_backups=10 ; (num of main logfile rotation backups;default 10)

loglevel=info ; (logging level;default info; others: debug,warn)

pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)

nodaemon=false ; (start in foreground if true;default false)

minfds=1024 ; (min. avail startup file descriptors;default 1024)

minprocs=200 ; (min. avail process descriptors;default 200)

;nocleanup=true ; (don't clean up tempfiles at start;default false)

;http_username=user ; (default is no username (open system))

;http_password=123; (default is no password (open system))

;childlogdir=/tmp ; ('AUTO' child log dir, default $TEMP)

;user=chrism ; (default is current user, required ifroot)

;directory=/tmp ; (default is not to cd during start)

;environment=KEY=value ; (key value pairs to add to environment)

[supervisorctl]

serverurl=unix:///var/tmp/supervisor.sock ; use a unix:// URL for a unix socket

;serverurl=http://127.0.0.1:9001 ; use an http://url to specify an inet socket

;username=chris ; should be same as http_username ifset

;password=123 ; should be same as http_password ifset

;prompt=mysupervisor ; cmd line prompt (default "supervisor")

; The below sample program section shows all possible program subsection values,

; create one ormore 'real'program: sections to be able to control them under

; supervisor.

;[program:theprogramname]

;command=/bin/cat; the program (relative uses PATH, can take args)

;priority=999 ; the relative start priority (default 999)

;autostart=true ; start at supervisord start (default: true)

;autorestart=true ; retstart at unexpected quit (default: true)

;startsecs=10 ; number of secs prog must stay running (def. 10)

;startretries=3 ; max # of serial start failures (default 3)

;exitcodes=0,2 ; 'expected' exit codes for process (default 0,2)

;stopsignal=QUIT ; signal used to killprocess (default TERM)

;stopwaitsecs=10 ; max num secs to wait before SIGKILL (default 10)

;user=chrism ; setuid to this UNIX account to run the program

;log_stdout=true ; if true, log program stdout (default true)

;log_stderr=true ; if true, log program stderr (def false)

;logfile=/var/log/cat.log ; child log path, use NONE fornone; default AUTO

;logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)

;logfile_backups=10 ; # of logfile backups (default 10)

[program:oldboy]

command=/usr/local/bin/uwsgi /data/oldboy/oldboy.ini ;命令

priority=999; 优先级(越小越优先)

autostart=true; supervisord启动时,该程序也启动

autorestart=true; 异常退出时,自动启动

startsecs=10; 启动后持续10s后未发生异常,才表示启动成功

startretries=3; 异常后,自动重启次数

exitcodes=0,2; exit异常抛出的是0、2时才认为是异常

stopsignal=QUIT ; 杀进程的信号

stopwaitsecs=10; 向进程发出stopsignal后等待OS向supervisord返回SIGCHILD 的时间。若超时则supervisord将使用SIGKILL杀进程

user=chrism ; 设置启动该程序的用户

log_stdout=true; 如果为True,则记录程序日志

log_stderr=false; 如果为True,则记录程序错误日志

logfile=/var/log/cat.log ; 程序日志路径

logfile_maxbytes=1MB ; 日志文件最大大小

logfile_backups=10 ; 日志文件最大数量

配置详细

c. 启动

supervisord /etc/supervisor.conf

/etc/init.d/supervisor start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值