「Linux+Django」Django+CentOs7+uwsgi+nginx部署网站记录
转自:http://www.usday.cn/blog/51
部署前的准备:
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进入编辑模式,输入以下内容
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
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
具体配置如下:
- upstream django {
- # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
- server 127.0.0.1:8001; # for a web port socket (we'll use this first)
- }
- # configuration of the server
- server {
- # 你的网站监听的端口,此处先用8000端口测试,正式部署可以改为80
- listen 8000;
- # 你的网站的域名
- server_name *.com; # substitute your machine's IP address or FQDN
- charset utf-8;
- # max upload size
- client_max_body_size 75M; # adjust to taste
- # Django media
- location /media {
- alias /home/mysite/media; # 你的media的文件目录
- }
- location /static {
- alias /home/mysite/collected_static; # 你的项目收集的静态文件目录(后边会将收集静态文件)
- }
- # Finally, send all non-media requests to the Django server.
- location / {
- uwsgi_pass django;
- include /home/mysite/uwsgi_params; # uwsgi_params 文件所在目录
- }
- }
这个配置文件告诉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的文件:
- [uwsgi]
- # Django-related settings
- # the base directory (full path)
- chdir = /home/mysite
- # Django's wsgi file
- module = mysite.wsgi:application
- # the virtualenv (full path)
- home = /path/to/virtualenv #到你虚拟环境的路径,没有虚拟环境可以注释掉
- # process-related settings
- # master
- master = true
- # maximum number of worker processes
- processes = 10
- # the socket (use the full path to be safe
- socket = 127.0.0.1:8001
- # ... with appropriate permissions - may be needed
- # chmod-socket = 664
- # clear environment on exit
- vacuum = true
然后使用这个文件运行uswgi:
uwsgi -d --ini mysite_uwsgi.ini
参数 -d 为后台运行。
此时你的django项目已经部署成功。Congratulations!
「Linux+Django」Django+CentOs7+uwsgi+nginx部署网站记录的更多相关文章
- Django+uWSGI+Nginx 部署网站
Django 1.11设置 保证Django在本地调试没有问题: 当然这是前提^_^ 收集静态文件至指定文件夹 Django静态文件设置具体参考:https://docs.djangoproject. ...
- mac+django(1.8.2)+uwsgi+nginx 部署
一. uwsgi 安装 检验 配置uwsgi.ini 1. 安装 pip3 install uwsgi 2. 检验 方法一(uwsgi启动文件): test.py内容如下: def applicati ...
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...
- django+uwsgi+nginx部署(非常详细)
django+uwsgi+nginx部署 1.介绍: 在网上看了很多教程,但自己部署了很久都没有成功,这篇博文记录自己所踩过得坑. 2.环境: Ubuntu 16.04.1 LTS (GNU/Linu ...
- 使用uWSGI+nginx部署Django项目
最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...
- virtualvenv+django+uWSGI+nginx 部署
原创博文 转载请注明出处! 1. virtualvenv 2. django 3. uWSGI 4. nginx 5. 踩坑记录 1. virtualvenv virtualvenv install ...
- linux vue uwsgi nginx 部署路飞学城 安装 vue
vue+uwsgi+nginx部署路飞学城 有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码#这个代码 ...
- vue+uwsgi+nginx部署路飞学城
vue+uwsgi+nginx部署路飞学城 有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码 ht ...
- centosflask+uWSGI+nginx部署
centosflask+uWSGI+nginx部署 1. 概念 Flask自带webserver--Werkzeug,可以搭建服务,运行网站.但在开发时,一般会用专业的--uWSGI. 另外 ...
随机推荐
- C语言—栈
栈的操作:进栈和出栈 #include "stdafx.h" #include "stack.h" #define maxsize 20 typedef int ...
- Logistic回归 逻辑回归 练习——以2018建模校赛为数据源
把上次建模校赛一个根据三围将女性分为四类(苹果型.梨形.报纸型.沙漏)的问题用逻辑回归实现了,包括从excel读取数据等一系列操作. Excel的格式如下:假设有r列,则前r-1列为数据,最后一列为类 ...
- [linux] vim在源代码中自动添加作者信息(转载)
原文出处: http://www.vimer.cn/2009/10/用vim在源代码中添加你的个人信息.html vim ~/.vimrc "进行版权声明的设置 "添加或更新头 m ...
- [笔记] postgresql 流复制(streaming replication)
基本环境说明: os:FreeBSD 9.3 postgresql version: master:192.168.56.101 standby:192.168.56.102 安装过程略,基于pkg包 ...
- static块的本质
在网上看到了下面的一段代码: public class Test { static { _i = 20; } public static int _i = 10; public static void ...
- 团队Alpha冲刺(五)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- BETA阶段第一天
1.提供当天站立式会议照片一张 2.每个人的工作 今天完成工作 林一心 服务器调试 张杭镖 数据库调整 赵意 前端设计 江鹭涛 前端设计 3.发布项目燃尽图 4.每日每人总结 林一心:服务器端的配置不 ...
- laravel5.6 调用第三方类库
大概流程: 1. 新建一个目录方类库 2. 配置composer配置文件 3. 在项目中使用终端运行composer dumpautoload 4. 使用时 方法调用可以new对象后->方法名 ...
- utuntu 安装python3.5
如果想要升级Utuntu系统中的python版本,请不要卸载原先的版本. 桌面环境中的需要依赖于python相关,卸载之后会出现意想不到问题. (1)sudo add-apt-repository p ...
- python获取toast 验证
appium版本 1.6.3 desired_caps['automationName']='uiautomator2' def _find_toast(self,message,timeou ...