Django+Nginx+uwgi 网页上线教程(真的是手把手教学)
使用内容的版本:
Python | 版本 python 3.7 |
---|---|
Django | 版本 1.11.8 |
服务器 | 腾讯云 ubuntu系统) |
使用的软件
Xshell
用于和服务器建立起来连接
1. 打开Xshell
2. 选择文件里的新建
3. 新建一个会话
输入用户名后输入密码即可
*** 如果忘记了自己的密码可以在腾讯云网页的控制台重置***
连接成功后的画面是这样的
WinSCP
这个软件用来操控远程服务器的文件还是比较方便的
连接的方式和XShell 相似连接完成后是画面是这样的
导入需要的包
Django 1. 11 .8 这是目前大部分企业使用的Django版本,还有你的项目里面有的包请自行安装,如果不知道你的项目里面到底有多少的话可以先python3 manage.py runserver 来运行一下,会有提示的。
uwsgi安装
- 安装uWSGI
- 在线安装 uwsgi
$ sudo pip3 install uwsgi
- 离线安装
- 在线下载安装包:
$ pip3 download uwsgi
- 下载后的文件为
uwsgi-2.0.18.tar.gz
- 下载后的文件为
- 离线安装
$ tar -xzvf uwsgi-2.0.18.tar.gz $ cd uwsgi-2.0.18 $ sudo python3 setup.py install
- 在线下载安装包:
- 在线安装 uwsgi
nginx安装
-
Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡、缓存等一系列重要特性,在实践之中使用广泛。
-
C语言编写,执行效率高
-
nginx 作用
- 负载均衡, 多台服务器轮流处理请求
- 反向代理
-
原理:
-
客户端请求nginx,再由nginx 请求 uwsgi, 运行django下的python代码
-
ubuntu 下 nginx 安装
$ sudo apt install nginx
项目开始上线!
Django项目的迁移
将当前项目源代码复制到远程主机上(linux系统下)
- sudo scp -r 当前项目源代码 远程主机地址和文件夹
- 例如 : sudo scp -r /home/django/mysite1 root@88.77.66.55:/home/root/xxx
- 注: root 是你云服务器的用户名
数据库迁移:
-我使用的数据库的mysql 如果没有安装的安装一下,并且设置mysql的用户名和密码和你django settings里面绑定的相同,否则数据库无法正常连接
迁出数据
mysqldump -h 数据库服务器 -u用戶名 -p密码 -d 数据库名 > 脚本名.sql;
mysqldump -h 192.168.253.199 -uroot -padmin123 -d stu > stu_bak.sql;
注: 同样这里的用户名和不是你云服务的用户和密码而是你本地数据库的用户名和密码
在完成后你会得到一个.sql的文件。 将其保存到你的电脑里在传入到云服务中。
迁入数据
- cd 到你导入的sql文件的位置
- 进入mysql
- use 数据库名; (这里的数据库名就写你导出的数据库对应的名字)
- source aaa.sql; 其中aaa.sql就是代表你刚才导出来的文件名称
Django的配置:
访问配置
因为是在云服务上的所以要在公网上测试,需要再django里做一些配置
DEBUG = False # 关闭DEBUG功能 ,
ALLOWED_HOSTS = ['*']
配置静态文件路径(其实这个在配置了nginx后就没什么用了只是在开发阶段方便使用,如果项目是你自己编写的话想必这些你已经配好了吧)
STATIC_URL = '/static/'
# 添加app的静态文件地址,绝对地址和相对地址都可以
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
注:这样是灵活的设置,在牵动django项目的时候就不用修改这一项配置了
简单测试:
- cd到你的项目文件夹有manage.py 的目录下使用 python3 manage.py runserver 0.0.0.0:8888 运行成功够去 http://IP:8888 (IP是你服务器的公网IP) 如果正常的话就进行下一步
uWSGI 网关接口配置 (ubuntu 18.04 配置)
-
使用
python manage.py runserver
通常只在开发和测试环境中使用。 -
当开发结束后,完善的项目代码需要在一个高效稳定的环境中运行,这时可以使用uWSGI
-
uWSGI是WSGI的一种,它可以让Django、Flask等开发的web站点运行其中.
-
配置uWSGI
- 添加配置文件
项目文件夹/uwsgi.ini
- 如: mysite1/uwsgi.ini(注意这个建议放在如图的这个位置),这样和我下面的配置过程一下省的出现一些奇奇怪怪的错误
注 : chdir 和 wsgi-file 是需要修改一下的 !wsgi-file 就可以写成 你的项目名/ wsgi.py ,比如我的项目名交blog 那我就写blog/wsgi.py[uwsgi] # 套接字方式的 IP地址:端口号 socket=127.0.0.1:8000 # Http通信方式的 IP地址:端口号 # http=127.0.0.1:8000 # 项目当前工作目录 chdir=/home/tarena/.../my_project 这里需要换为项目文件夹的绝对路径 # 项目中wsgi.py文件的目录,相对于当前工作目录 wsgi-file=my_project/wsgi.py # 进程个数 process=1 # 每个进程的线程个数 threads=2 # 服务的pid记录文件 pidfile=uwsgi.pid # 服务的目志文件位置 daemonize=uwsgi.log
- 如: mysite1/uwsgi.ini(注意这个建议放在如图的这个位置),这样和我下面的配置过程一下省的出现一些奇奇怪怪的错误
- 添加配置文件
-
uWSGI的运行管理
-
启动 uwsgi
cd到uwsgi.ini 所在的文件夹位置$ cd 项目文件夹 $ sudo uwsgi --ini uwsgi.ini
-
停止 uwsgi
$ cd 项目文件夹 $ sudo uwsgi --stop uwsgi.pid
-
说明:
- 当uwsgi 启动后,当前django项目的程序已变成后台守护进程,在关闭当前终端时此进程也不会停止。
- 也可以直接 >> sudo killall -9 uwsgi 强制停止
-
-
测试:
-
在浏览器端输入http://IP:8000 进行测试
-
注意,此时端口号为8000
-
ngin 反向代理配置
-
Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡、缓存等一系列重要特性,在实践之中使用广泛。
-
C语言编写,执行效率高
-
nginx 作用
- 负载均衡, 多台服务器轮流处理请求
- 反向代理
-
原理:
-
客户端请求nginx,再由nginx 请求 uwsgi, 运行django下的python代码
-
nginx的配置
-
首先使用vim打开配置文件
-
sudo vim /etc/nginx/nginx.conf
-
打开配置文件,在Http内创建server 子项
server {
listen 8888; # 设置监听端口号
server_name XXX.XXX.XXX.XXX; # 设置对外访问入口,可以是域名可以是IP地址,我设置的是IP
charset UTF-8; # 设置访问的语言编码
access_log /var/log/nginx/InquireScore_access.log; # 访问日志记录
error_log /var/log/nginx/InquireScore_error.log; # 错误日志记录
location / { # 设置虚拟主机的基本信息
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; # 刚才uwsgi设置的socket
uwsgi_read_timeout 2;
}
location /static { # 静态文件设置,nginx自己处理
expires 7d; # 过期时间
alias /home/XXX/; # 项目静态文件地址
}
}
注: 在配置项目的静态文件时候请全部放在,和项目文件夹同级的static文件夹里
CORS - Cross-origin resource sharing问题
稍稍科普下啥是cors
允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制
如果有跨域设置ajax的,就需要在ajax url 那里对应的地址改成公网ip的地址
下面就是最激动的是时刻:
- 重启uwsgi :
sudo killall -9 uwsgi
sudo uwsgi --ini uwsgi.ini
- 重启nginx
/etc/init.d/nginx restart
如果重启失败输入sudo nginx -t 测试配置文件是否正确 ,之后就可以输入http://IP:8888访问自己的网页啦