Django+nginx+uwsgi部署教程
00-所需工具
xshell:https://www.netsarang.com/zh/downloading/?token=ZlZnVUNsWDJuM0VaZnVPUjZST1dwd0AzYlNteUZwb0dhRlUxRVV4bmNUZ2ZR xftp:https://www.netsarang.com/zh/downloading/?token=QlBLQUdldk1mUjliSzVQdzczeTVkQUA3R1RiZDFNcGQxOXFHVFAyaGhhREZn
01-uwsgi介绍
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。 要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。 1. WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
2. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
3. 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
4. uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。
02-nginx介绍
Nginx是一个Http和反向代理服务器
什么是反向代理服务器呢? 正向的就是由浏览器主动的想代理服务器发出请求,经代理服务器做出处理后再转给目标服务器
反向的就是不管浏览器同不同意,请求都会经过代理服务器处理再发给目标服务器
这其中的区别就是必须经过Nginx反向代理服务器,这就有了使用Nginx的几个好处: 安全:不管什么请求都要经过代理服务器,这样就避免了外部程序直接攻击web服务器
负载均衡:根据请求情况和服务器负载情况,将请求分配给不同的web服务器,保证服务器性能
提高web服务器的IO性能:这个我也没看懂,总结来说就是请求从客户端传到web服务器是需要时间的,
传递多长时间就会让这个进程阻塞多长时间,而通过反向代理,就可以在反向代理这完整接受请求,然后再
传给web服务器,从而保证服务器性能,而且有的一些简单的事情(比如静态文件)可以直接由反向代理处理,不经过web服务器
03-centos7的部署
以全新服务器为例:
yum -y update yum install gcc yum -y install zlib* yum install openssl-devel -y
04-ssh安装
yum install openssh-server -y service sshd restart #xshell连不上,SSH服务端不允许密码验证。
#服务端开启密码验证的方法: vim /etc/ssh/sshd_config 把PasswordAuthentication项为yes 重启服务
service sshd restart
05-安装MySQL
#1.安装
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server #2.重启服务
service mysqld restart # 查看是否开机自启
执行命令:
chkconfig --list | grep mysqld
chkconfig mysqld on #3. 设置bind-ip vim /etc/my.cnf
在 [mysqld]:
下面加一行
bind-address = 0.0.0.0 #4.登录mysql
mysql -u root #5. 设置外部ip可以访问
#mysql中输入命令:
#后面用navicat连接远程服务器mysql的用户名和密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '' WITH GRANT OPTION; FLUSH PRIVILEGES; #6.设置mysql密码
进入mysql:
set password =password(''); #密码123456
flush privileges;
5.1 卸载MySQL
# 查看是否已安装mysql
执行命令:yum list installed | grep mysql #yum方式安装的mysql: 1、yum remove mysql mysql-server mysql-libs compat-mysql51
2、rm -rf /var/lib/mysql
3、rm /etc/my.cnf # 删除mysql相关文件
提示:该命令是查找mysql的相关文件
执行命令:find / -name mysql 执行命令:rm -rf [上面命令查出的结果目录]
提示:删除命令执行完之后,可再使用find / -name mysql 确认是否已经全部删除 可以回到安装步骤重新安装mysql了。
5.2 CentOS7 安装 MariaDB10.3
# 1. 配置repo文件,通过yum安装:
vi /etc/yum.repos.d/MariaDB.repo # 2. 添加以下内容:
# MariaDB 10.3 CentOS repository list - created 2018-06-21 09:11 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
# baseurl = http://yum.mariadb.org/10.3/centos7-amd64
# 修改为国内源
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.3/centos7-amd64/
gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1 # 3. 安装:
sudo yum install MariaDB-server MariaDB-client # 4. 修改数据库文件目录:
service mysql stop
mkdir -p /data/mysqldb
#拷贝默认数据库到新的位置,-a表示将文件属性一起拷贝
cp -a /var/lib/mysql /data/mysqldb # 5. 修改mysql启动配置
vim /etc/my.cnf.d/server.cnf # 6. 找到[mysqld],添加以下内容:
[mysqld]
datadir=/data/mysqldb/mysql
socket=/var/lib/mysql/mysql.sock
#default-character-set=utf8
character_set_server=utf8
slow_query_log=on
slow_query_log_file=/data/mysqldb/slow_query_log.log
long_query_time=2 # 7. 创建慢查询日志文件
touch /data/mysqldb/slow_query_log.log
chmod 666 /data/mysqldb/slow_query_log.log # 8. 启动MariaDB
service mysql start # 9. 修改root密码:
mysqladmin -u root password 'root' # 10. root原始密码存在于:/root/.mysql_secret # 11. 授权ip登录:
grant all on *.* to 'root'@'%' identified by 'password' with grant option; # 12. 启停命令:
service mysql start
service mysql stop
service mysql restart
service mysql status
06-pip和python3.6的安装
#安装pip wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate sudo python get-pip.py
# 安装python3.6
1. 获取
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
tar -xzvf Python-3.6.2.tgz -C /tmp
cd /tmp/Python-3.6.2/ 2. 把Python3.6安装到 /usr/local 目录
./configure --prefix=/usr/local
make
make altinstall 3. 更改/usr/bin/python链接
ln -s /usr/local/bin/python3.6 /usr/bin/python3
07-虚拟环境的安装
yum install python-setuptools python-devel
pip install virtualenvwrapper #编辑.bashrc文件
vim ~/.bashrc #添加进去
export WORKON_HOME=$HOME/.virtualenvs
source /usr/bin/virtualenvwrapper.sh #sudo find / -name virtualenvwrapper.sh 查看你的virtualenvwrapper.sh在什么地方 #重新加载.bashrc文件
source ~/.bashrc #虚拟环境保存的路径
cd ~/.virtualenvs/ (创建的虚拟环境都会保存在这个目录,前面设置的) #创建指定python版本的虚拟环境方法
mkvirtualenv -p /usr/local/bin/python3.6 workmanage02 workon MxShop #进虚拟环境安装依赖包 首先 pip freeze > requirements.txt
将本地的虚拟环境安装包导出来,上传到服务器 pip install -r requirements.txt #安装mysqlclient出问题 centos 7:
yum install python-devel mariadb-devel -y ubuntu:
sudo apt-get install libmysqlclient-dev 然后:
pip install mysqlclient
08-安装git
yum install git git config --global user.name "Your Name"
git config --global user.email "youremail@domain.com" cd ~/ && ssh-keygen -t rsa -C "你的邮箱" #提示的信息,直接按enter就行 cd .ssh 把公钥文件(id_rsa.pub)中的码复制到github #就可以开始clone代码了 git clone
09-拉取项目静态文件
# 在django的setting文件中,添加下面一行内容: STATIC_ROOT = os.path.join(BASE_DIR, "static/") # 运行命令
python manage.py collectstatic
10-安装uwsgi
1. 进虚拟环境安装
workon workmanage02 pip install uwsgi
2. 在项目目录下新建uwsgi.ini文件
[uwsgi] socket =127.0.0.1:8000
chdir = /home/workspace/workamange02
module = workamange02.wsgi
master = true
processes = 4
vacuum = true
virtualenv = /root/.virtualenvs/workamange02
logto = /tmp/mylog.log
[uwsgi]
#使用HTTP访问的端口号, 使用这个端口号是直接访问了uWSGI, 绕过了Nginx
http = :8010
#与外界连接的端口号, Nginx通过这个端口转发给uWSGI
socket = 127.0.0.1:8001
#是否使用主线程
master = true
# 项目在服务器中的目录(绝对路径)
chdir = /home/workspace/workamange02
# Django's wsgi 文件目录
wsgi-file = /home/workspace/workamange02/workmanage02/wsgi.py
# 最大进程数
processes = 4
#每个进程的线程数
threads = 2
#状态监听端口
stats = 127.0.0.1:9191
# 退出时自动清理环境配置
vacuum = true
#目录下文件改动时自动重启
touch-reload = /home/workspace/workamange02
#Python文件改动时自动重启
#py-auto-reload = 1
#后台运行并把日志存到.log文件
daemonize = /home/workspace/workamange02/uWSGI.log
11-安装nginx
这里有安装方法:https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7
# 要添加CentOS 7 EPEL存储库,请打开终端并使用以下命令:
sudo yum install epel-release
# 安装nginx
sudo yum install nginx # Nginx并不是自己开始的。要运行Nginx,请键入:
sudo systemctl start nginx #可能会用到的命令
service nginx restart
service nginx stop
service nginx start
11.1 配置文件
在/etc/nginx/conf.d下新workmanage02.conf
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server server {
# the port your site will be served on
listen 80;
# the domain name it will serve for
server_name 118.190.208.5; # 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/workspace/workmanage02/media; # 指向django的media目录
} location /static {
alias /home/workspace/workmanage02/static; # 指向django的static目录
} # Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include uwsgi_params;
}
}
配置好后
nginx -t service nginx restart
12-MySQL数据库数据传输
12.1 远程连接服务器数据库mysql
# 解决方法:
网上一大堆解决方法,都是开放端口、给账号开放远程连接权限,但都设置了 可还是不行。
原因应该是:在阿里云安全组添加3306端口规则,把3306端口添加到入方向规则。成功了!
12.2 新建数据库
12.3 右键 点击数据传输
数据传输完成,配置也都配置好后,就可以开始访问了
#创建超级用户 python manage.py createsuperuser #把uswgi服务开启 uwsgi --ini uwsgi.ini #访问
http://你的ip地址/
Django+nginx+uwsgi部署教程的更多相关文章
- Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)
在线教育平台项目演示地址 项目部署教程 1.1.工作原理介绍 django 一个基于python的开源web框架 uwsgi 一是一个web服务器,也可以当做中间件 nginx 常用高性能代理服务器 ...
- ubuntu+Django + nginx + uwsgi 部署
ubuntu+Django + nginx + uwsgi 部署 0.前期准备 注意:以下几件事都必须在激活虚拟环境下完成 运行以下命令生成项目所需的依赖列表,会在项目根目录生成一个requireme ...
- Django+Nginx+uWSGI部署
一.介绍 Django的部署可以有多种方式,采用nginx+uwsgi的方式是最常见的一种方式.在这种方式中,将nginx作为服务器前端,接收WEB的所有请求,统一管理请求.nginx把所有静态请求自 ...
- centos django+Nginx+uwsgi部署
第五天 部署python3+uwsgi+nginx的博客系统 ================================ mysql基本命令 mysql mysql -p mysqladmin ...
- django+nginx+uwsgi 部署配置
django官方文档在这 https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/uwsgi/ 第一步:先收集静态文件 之前要先设置 S ...
- 使用Nginx+uWSGI部署Django项目
1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgi l ...
- 填坑!!!virtualenv 中 nginx + uwsgi 部署 django
一.为什么会有这篇文章 第一次接触 uwsgi 和 nginx ,这个环境搭建,踩了太多坑,现在记录下来,让后来者少走弯路. 本来在 Ubuntu14.04 上 搭建好了环境,然后到 centos7. ...
- nginx + uwsgi 部署 Django+Vue项目
nginx + uwsgi 部署 Django+Vue项目 windows 本地 DNS 解析 文件路径 C:\Windows\System32\drivers\etc 单机本地测试运行方式,调用dj ...
- Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统
Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统 这个是写好的Django程序在本地机运行的情况,一个查询接口. 准备工作 1.首先购买一台阿里云的EC ...
随机推荐
- 智能POS打印配置&常见问题FAQ 12-14 后期持续更新
1.安卓一体机会员注销钱会不会退回到支付宝 智能pos会员注销钱目前只能现金退还. 2.支付异常订单悬浮球在哪关闭 设置-->功能设置-->系统设置-->开启支付异常订单悬浮球 3. ...
- MySQL 授予普通用户PROCESS权限
在MySQL中如何给普通用户授予查看所有用户线程/连接的权限,当然,默认情况下show processlist是可以查看当前用户的线程/连接的. mysql> grant process on ...
- 转:RowVersion 用法
在数据表更新时,如何表征每个数据行更新时间的先后顺序?最简单的做法是使用RowVersion(行版本)字段,它和时间戳(TimeStamp)类型的功能相似,只不过TimeStamp 已过时,应避免用于 ...
- 全局Ajax加载时呈现Loading
全局设置: 1 2 3 4 5 $(document).bind("ajaxSend", function () { $("#loading_messag ...
- Selenium Webdriver 中的 executeScript 使用方法
1.使用executeScript 返回一个WebElement . 下例中我们将一个浏览器中的JavaScript 对象返回到客户端(C#,JAVA,Python等). IWebElement el ...
- Golang 并发简介
并发概要 随着多核CPU的普及, 为了更快的处理任务, 出现了各种并发编程的模型, 主要有以下几种: 模型名称 优点 缺点 多进程 简单, 隔离性好, 进程间几乎无影响 开销最大 多线程 目前使用最多 ...
- 【Linux基础】Linux常用命令汇总
3-1文件目录操作命令(cd pwd mkdir rmdir rm) 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc: 相对路径:相对于目前路径的 ...
- linux历史命令查找快捷方式
一.回到上次操作的目录# cd -进入上次访问目录 二.历史命令搜索操作快捷键:[Ctrl + r], [Ctrl + p], [Ctrl + n] 在终端中按捉 [Ctrl] 键的同时 [r] ...
- Loj 6068. 「2017 山东一轮集训 Day4」棋盘
Loj 6068. 「2017 山东一轮集训 Day4」棋盘 题目描述 给定一个 $ n \times n $ 的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置 $ (x, y),(u, ...
- docker实战练习(一)
systemctl start docker systemctl pause docker systemctl unpause docker systemctl start docker system ...