Django+CentOs7+uwsgi+nginx部署网站记录

部署前的准备:

转载

http://www.xuyukun.com/python/django/djangocentos7uwsginginx%E9%83%A8%E7%BD%B2%E7%BD%91%E7%AB%99%E8%AE%B0%E5%BD%95/

1. 在本地可以运行的django项目

 

2. 一台云服务器,这里选用Centos系统

开始部署:

 

首先在本地导出项目需要的第三方库:在根目录(或虚拟环境中) 命令行使用

 

pip freeze >requirements.txt  

 

利用ssh连接你的服务器 我这里用的是Xshell

 

安装python3

 

下载安装之前需要确认服务器上已经安装了:GNU编译器套件、zlib依赖包(python3.7以上版本需要)

 

具体安装命令如下(路径任意):

 

yum install gcc 安装GNU编译器套件

 

yum install -y zlib zlib-devel 安装zlib依赖包

 

cd /tmp/ 进入tmp文件夹(在这里只是存储临时文件)

 

官网下载安装所需的Python3(服务器一般自带Python2)

 

wget www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

 

进行解压 tar -xzvf Python-3.7.0.tgz

 

进入解压出来的Python-3.7.0文件夹 cd Python-3.7.0/

 

安装到/usr/local/python3目录下  ./configure --prefix=/usr/local/python3

 

编译安装  make && make install

 

使用软链接便于在任意目录使用python3和pip3

 

ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3

 

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

 

到这里可以在终端输入 python3 测试python3是否安装成功

 

在requirement.txt所在路径下安装所需模块  pip3 install -r requirement.txt 

 

可以使用 pip3 list 查看相应模块是否安装

 

安装uwsgi

 

pip3 install uwsgi

 

uwsgi基础测试

 

创建一个test.py测试文件(路径任意) vim test.py

 

键盘按i进入编辑模式,输入以下内容

 

 
  1. def application(env, start_response):
  2. start_response('200 OK', [('Content-Type','text/html')])
  3. return [b"Hello World"]

 

运行uwsgi:   uwsgi --http :8000 --wsgi-file test.py

 

 解释:  –http :8000 使用http协议 端口8000  –wsgi-file test.py 加载指定文件

 

在本地浏览器进行访问 输入服务器ip地址或域名(已进行域名解析)+:8000 例如  *.*.*.*:8000 或 *.com:8000

 

如果没问题。你将在浏览器中看到 Hello World,这证明 web客户端–uwsgi–python 的连接是正常的

 

使用uwsgi测试你的项目

进入的项目文件夹(与manage.py同一级) 我把项目文件放在了  /home/  项目名字为mysite

所以 cd /home/mysite

 

确保你的项目可以正常工作

 

键入 python3 manage.py runserver 0.0.0.0:8000  

 

如果发现django模块不能导入,则是因为没有添加环境变量,具体命令如下:

 

vim ~/.bash_profile

 

添加django的路径

export PATH=$HOME 在此部分添加,用冒号隔开,具体格式请搜索 $PATH

 

如果在本地浏览器键入ip地址(*.*.*.*:8000)或域名(*.com:8000)不能访问,需要更改django项目的settings.py设置

 

vim /home/mysite/mysite/settings.py

 

进入编辑模式 把 ALLOWED_HOSTS = [] 改为 ALLOWED_HOSTS = ['*']

 

返回manage.py所在文件夹 键入 python3 manage.py runserver 0.0.0.0:8000

 

打开本地浏览器进行访问,确保你的项目可以工作。

 

用uwsgi运行你的项目

 

在终端输入  uwsgi --http :8000 --module mysite.wsgi

 

用本地浏览器进行访问,如果访问正常,证明 web客户端-uwsgi-django 的连接是正常的

 

安装nginx

 

下载       wget http://nginx.org/download/nginx-1.14.1.tar.gz

 

解压  tar -xzvf nginx-1.14.1.tar.gz

 

进入解压所得文件夹 cd nginx-1.14.1/

 

配置      ./configure

 

编译安装  make && make install

 

启动nginx,/usr/local/nginx/sbin/./nginx  如果出现  welcome to nginx!  则证明安装成功

 

为你的站点配置nginx

 

将/usr/local/nginx/conf目录下的uwsgi_params文件复制到你的项目目录

 

cp /usr/local/nginx/conf/uwsgi_params /home/mysite/

 

创建mysettings文件夹 mkdir /home/mysettings

 

创建一个名为mysite_nginx.conf的文件(可以在任意路径,只要你能找到,这里我把它放在 /home/mysettings/)

 

vim /home/mysettings/mysite_nginx.conf

 

具体配置如下:

 

 
  1. upstream django {
  2. # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
  3. server 127.0.0.1:8001; # for a web port socket (we'll use this first)
  4. }
  5.  
  6. # configuration of the server
  7. server {
  8. # 你的网站监听的端口,此处先用8000端口测试,正式部署可以改为80
  9. listen 8000;
  10. # 你的网站的域名
  11. server_name *.com; # substitute your machine's IP address or FQDN
  12. charset utf-8;
  13.  
  14. # max upload size
  15. client_max_body_size 75M; # adjust to taste
  16.  
  17. # Django media
  18. location /media {
  19. alias /home/mysite/media; # 你的media的文件目录
  20. }
  21.  
  22. location /static {
  23. alias /home/mysite/collected_static; # 你的项目收集的静态文件目录(后边会将收集静态文件)
  24. }
  25.  
  26. # Finally, send all non-media requests to the Django server.
  27. location / {
  28. uwsgi_pass django;
  29. include /home/mysite/uwsgi_params; # uwsgi_params 文件所在目录
  30. }
  31. }

 

这个配置文件告诉nginx提供来自文件系统的媒体和静态文件,以及处理那些需要Django干预的请求。对于一个大型部署,让一台服务器处理静态/媒体文件,让另一台处理Django应用,被认为是一种很好的做法,现在这样就好了。

 

现在,让nginx的根文件载入你的mysite_nginx.conf配置的信息

 

vim /usr/local/nginx/conf/nginx.conf

 

加入 include       /home/mysettings/*.conf;

 

现在基本配置已经ok

 

部署静态文件

 

在运行nginx之前,你必须收集所有的Django静态文件到静态文件夹里

 

编辑项目的settings   vim /home/mysite/mysite/settings.py

 

添加  STATIC_ROOT = os.path.join(BASE_DIR, "collected_static/")

 

然后运行 python3 manage.py collectstatic

 

基本的nginx测试

 

重启nginx  /usr/local/nginx/sbin/./nginx -s reload

 

要检查是否正确的提供了媒体文件服务,上传一张图片(这里我上传的文件为 1.jpg)到 /home/sysite/media文件夹中

 

然后访问http://example.com:8000/media/1.jpg – 如果这能正常工作,那么至少你知道nginx正在正确的提供文件服务。

 

最好将你的nginx先停止, 再开启,而不是重载。

 

nginx和uwsgi以及test.py

 

到刚才test.py的文件夹 uwsgi --socket :8001 --wsgi-file test.py

 

这几乎与之前相同,除了这次有一个选项不同:socket :8001 使用uwsgi协议,端口为8001

 

同时,已经配置了的nginx在8000端口与uWSGI通信,而对外使用8000端口,访问:

 

在本地浏览器  *.*.*.*:8000    *.com:8000

 

如果正常显示内容,则说明 web客户端–web服务器–the socket–uwsgi–python的连接是正常的

 

使用Unix socket而不是端口

 

(此部分我部署时出现问题,所以我跳过这部分的说明,具体可以看官方文档

 

使用uwsgi和nginx运行django应用

 

进入项目文件夹后运行  uwsgi --socket :8001 --module mysite.wsgi

 

这时候应该能完整地看到你的网站

 

配置uWSGI以允许.ini文件

 

我们可以将用在uWSGI上的相同的选项放到一个文件中,然后告诉 uWSGI使用该文件运行。这使得管理配置更容易。

 

创建一个名为mysite_uwsgi.ini的文件:

 
  1. [uwsgi]
  2.  
  3. # Django-related settings
  4. # the base directory (full path)
  5. chdir = /home/mysite
  6. # Django's wsgi file
  7. module = mysite.wsgi:application
  8. # the virtualenv (full path)
  9. home = /path/to/virtualenv #到你虚拟环境的路径,没有虚拟环境可以注释掉
  10.  
  11. # process-related settings
  12. # master
  13. master = true
  14. # maximum number of worker processes
  15. processes = 10
  16. # the socket (use the full path to be safe
  17. socket = 127.0.0.1:8001
  18. # ... with appropriate permissions - may be needed
  19. # chmod-socket = 664
  20. # clear environment on exit
  21. vacuum = true

然后使用这个文件运行uswgi:

uwsgi -d --ini mysite_uwsgi.ini

参数 -d 为后台运行。

此时你的django项目已经部署成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值