Django 部署 (python3 Django uwsgi)

Django 部署 (python3 Django uwsgi)
2019/01/24 Chenxin
参考:
https://www.jianshu.com/p/12e0814e6b56
https://segmentfault.com/a/1190000014361352
https://stackoverflow.com/questions/39907281/django-uwsgi-static-files-not-being-served-even-after-collectstatic

安装与配置数据库
安装mysql.略.
导入数据
mysql --default-character-set=utf8mb4 -uzichan -pxxx -P 10306 zichan < zichan02_20190124.sql

安装其他相关软件以及相关的项目依赖包
yum install python36 python36-devel python36-pip
pip-3.6 --version
pip-3.6 install uwsgi
提示: Successfully installed uwsgi-2.0.17.1

制作一个测试py文件
cat test.py

!/bin/env python36

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
运行uwsgi: uwsgi --http :10080 --wsgi-file test.py
web访问测试
http://3.1.111.170:10080/ 浏览器上会看到 "Hello World"

安装Django项目依赖包
比如通过requirements.txt文件来安装
asn1crypto0.24.0
certifi
2018.11.29
cffi1.11.5
chardet
3.0.4
configparser3.5.0
cryptography
2.4.2
Django1.11.7
django-ranged-response
0.2.0
django-simple-captcha0.5.9
idna
2.8
Pillow5.3.0
pycparser
2.19
PyMySQL0.9.2
pypiwin32
220
pytz2018.7
requests
2.19.1
six1.12.0
urllib3
1.23
WMI1.4.9
安装
pip-3.6 install -r requirements.txt # pypiwin32
220 这个在linux下会安装失败.暂时忽略该包,继续安装其他包.

上传代码(Deployment)
pycharm->Tools->Deployment->Configuration
配置SFTP,Connection.
配置Mappings. 在linux服务器上的目录是相对于用户主目录下的次级目录,所以这里目录只需要给出项目名就可以了.比如django-cmdb.
在项目根文件夹点右键(或通过"Tools"),选择Deployment,选择upload执行上传代码到服务器操作.
最终代码被上传到 /home/admin/django-cmdb 目录下.
[root@ip-10-0-1-23 admin]# ls /home/admin/django-cmdb/
aliyun_ecs aws_ec2 login login_regs manage.py requirements.txt server_asset static templates tmp-del

修改配置文件以及测试
使用Django开发模式测试 settings.py修改
login_regs/settings.py
DEBUG = False # 关闭debug模式.注意,在实际部署中,可能会碰到很多问题,也可以将这里为默认"True",等最终再改成False.
ALLOWED_HOSTS = ['*'] # 加入所以主机都可以访问
DATABASES ... # DB配置文件

使用Django开发模式运行项目,进行测试
python36 manage.py runserver 0.0.0.0:10080

通过uwsgi命令方式测试(实际部署不需要)

使用http协议,以及静态文件挂载点
uwsgi --http :10080 --chdir /home/admin/django-cmdb --wsgi login_regs.wsgi --static-map /static=/home/admin/django-cmdb/static
或者 ... --static-map=/static=/home.../static .
可以多次指定 --static-map 选项,即使是对于同一个挂载点,类似 --static-map /images=/var/www/img --static-map /images=/var/www/img2 --static-map /images=/var/www/img3 的方式.在找到文件之前会在每个目录中进行搜索,如果找不到,这个请求就会交由你的应用管理.

其他说明
cd /home/admin/django-cmdb/ # 该文件夹里为项目的多个app
uwsgi --http :10080 --module login_regs.wsgi # 这里, login_regs是文件夹,wsgi是wsgi.py文件."."则为"/".
wsgi.py文件是Django自动生成的.存在路径/home/admin/django-cmdb/login_regs(与其他app同级)/wsgi.py .
如果这里报no python application found, check your startup logs for errors,说明uwsgi没有找到app.一般是路径给错了.

也可以http-socket方式 uwsgi --http-socket :10080 --chdir /home/admin/django-cmdb --wsgi login_regs.wsgi

方式一:通过uwsgi配置文件(只修改uwsgi自身配置文件,以及setting.py生成静态文件)(推荐)

修改setting.py文件

STATIC_ROOT静态文件收集路径,在开发中,STATIC_ROOT什么都不做.你甚至不需要设置它.

需要运行 python manage.py collectstatic 将项目涉及到的所有静态文件,一并拷贝到以下文件夹里.

STATIC_ROOT = '/home/admin/static_dj'

生成静态文件
执行 python36 manage.py collectstatic
将静态文件放入到/home/admin/static_dj/文件夹下,包括 admin(Django自带的资源文件) bootstrap-3.3.7-dist css DataTables image js 文件夹.

修改uwsgi.ini配置文件
[root@ip-10-0-1-23 admin]# cat login_regs_uwsgi.ini
[uwsgi]

这里是手动创建的uwsgi配置文件

pythonpath = /usr/lib/python3.6/dist-packages

协议和端口.用nginx的时候就配socket , 直接运行的时候配 http

http = :10080

socket = 127.0.0.1:10080

项目根目录

chdir = /home/admin/django-cmdb

Django wsgi 文件

wsgi-file=login_regs/wsgi.py

module = login_regs.wsgi:login_regs

module = login_regs.wsgi

the virtualenv (full path)

home = /path/to/virtualenv

process-related settings

允许主线程存在

master = true

开启的进程数量

processes = 2

the socket (use the full path to be safe

socket = /path/to/your/project/mysite.sock

socket = /home/admin/django-cmdb/login_regs.sock

... with appropriate permissions - may be needed

chmod-socket = 664

当服务器退出的时候自动清理环境,删除unix socket文件和pid文件.clear environment on exit

vacuum = true

日志

daemonize = /home/admin/uwsgi8000.log

vhost = true //多站模式

no-site = true //多站模式时不设置入口模块和文件

workers = 2 //子进程数

reload-mercy = 10

vacuum = true //退出、重启时清理文件

max-requests = 1000

limit-as = 512

buffer-size = 30000

pidfile = /var/run/uwsgi8000.pid

静态文件(这里开启的话,urls.py文件里就不用开启了)

static-map = /static=/home/admin/static_dj

启动
[root@ip-10-0-1-23 admin]# uwsgi --ini login_regs_uwsgi.ini
[uWSGI] getting INI configuration from login_regs_uwsgi.ini
[uwsgi-static] added mapping for /static => /home/admin/static_dj # 会看到这个映射的提示信息.如果static-map配置错误,就看不到了.

方式二:通过uwsgi配置文件-让Django自己去找静态文件 (同时配合修改setting.py和urls.py)

[root@ip-10-0-1-23 admin]# cat login_regs_uwsgi.ini
...同方式一...

静态文件(这里默认从Django进入,会从url匹配,故这里就没有作用了).

static-map = /static=/home/admin/static_dj

修改setting.py文件

Static files (CSS, JavaScript, Images)

https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = '/static/'

STATIC_ROOT是新添加的一行,结合url.py供生成环境访问静态资源使用.否则uwsgi无法加载静态资源.对windows系统使用Django貌似无影响

STATIC_ROOT静态文件收集路径,在开发中,STATIC_ROOT什么都不做.你甚至不需要设置它.

需要运行 python manage.py collectstatic 将项目涉及到的所有静态文件,一并拷贝到以下文件夹里.

STATIC_ROOT = '/home/admin/static_dj'

STATICFILES_DIRS:静态文件的额外目录,STATICFILES_DIRS用于包含要查找的其他静态文件目录.比如你自己新建的一个静态文件文件夹.

STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]

修改主urls.py文件
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [...原先的代码...] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) # 是为了生成环境中,uwsgi能够加载到静态文件,如css

生成静态文件
执行 python36 manage.py collectstatic
将静态文件放入到/home/admin/static_dj/文件夹下,包括 admin(Django自带的资源文件) bootstrap-3.3.7-dist css DataTables image js 文件夹.

运行uwsgi并进行测试
uwsgi --ini login_regs_uwsgi.ini

备注
方式一和二不能混合使用,会造成访问不了静态资源文件.

自动任务计划
针对crontab的修改,以及定期执行的方式,请参考<<Django系统计划任务 django-crontab计划任务 自定义命令 三种方式>>笔记内容

posted @ 2020-04-21 14:48  ChanixChen  阅读(1165)  评论(0编辑  收藏  举报