目标:部署在ubunto上,部署为虚拟主机,端口号8000
准备阶段
- 准备完整的项目,git push 到GitHub上。确保项目可以独立运行。
- 准备好Ubuntu环境 Python3 pip3 django1.11.6 uwsgi MySQL 确保每个部分都正确
部署原理
- nginx提供接受Web请求,也就是说Nginx是浏览器请求最先到达的地方。Nginx根据浏览器请求,讲静态资源的请求交给自己处理。非静态资源的请求交给uwsgi。uwsgi负责与django进行交互。
详细配置
- nginx配置
在/etc/nginx/conf.d/目录下创建Nginx配置文件 bank.conf
conf.d目录下可以同时创建多个Nginx配置文件,他们之间是相互独立的,没有向后影响
upstream django {
#server 127.0.0.1:8001;
server unix://home/sunmingming/sites/bank-manage/Bank-manage1/bank/my_sock.sock;
#Nginx和uwsgi之间通过Sock通信。这里设置uwsgi的Sock路径
}
server {
listen 8000; # 设置访问的端口号,同一个web服务器之间不可以重复
server_name www.sunmingming.top; # 服务器 ip 或是域名
server_name sunmingming.top;
charset utf-8; # 字符集
root /;
location /static {
alias /home/sunmingming/sites/bank-manage/Bank-manage1/bank/static/; # 静态文件所在文件夹
}
# 将所有非媒体请求转到Django服务器上
location / {
uwsgi_pass django; # 最上方已定义
# 将所有参数都转到uwsgi下
include uwsgi_params; # uwsgi_params的路径,nginx和uwsgi相连接所使用到的模块
}
}
- uwsgi的配置
在django的根目录(和manage.py同级)创建uwsgi配置文件 my_uwsgi.ini
[uwsgi]
# 使用nginx连接时使用和nginx之间使用socket
socket = 0:8001
# 直接做web服务器使用
#http = 0:8080
# 项目目录
chdir = /home/sunmingming/sites/bank-manage/Bank-manage1/bank
# 项目中wsgi.py文件的目录
wsgi-file = /home/sunmingming/sites/bank-manage/Bank-manage1/bank/bank/wsgi.py
# 主进程
master = true
# 多进程&多线程
processes = 6
threads = 2
# .sock文件目录需与Nginx文件内的配置相同
socket = /home/sunmingming/sites/bank-manage/Bank-manage1/bank/my_sock.sock
chmod-socket = 666
# 以守护进程的方式启动
vacuum = true
# 存储pid进程
pidfile=uwsgi.pid
# 存储log日志
daemonize=uwsgi.log
- django配置
django要想使用MySQL。需要做一些更改
- 在项目的init.py中添加
import pymysql
pymysql.install_as_MySQLdb()
- django使用MySQL需要安装 pymysql
sudo apt-get install python3-pymysql
3.更改settings.py
DEBUG = False
ALLOWED_HOSTS = ["*"] #设置指定ip访问,* 指所有的都可以
将MIDDLEWARE中的第四行注释掉
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'bank_db',
'USER':'root',
'PASSWORD':' ',
'HOST':'localhost',
'PORT':'3306',
}
}
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR, "static"),
)
部署过程中的一些常用命令
python manage.py migrate #在数据库中创建表
python manage.py makemigrations #数据库结构发生变化的时候同步
python manage.py createsuperuser #创建超级管理员
mysql -u root -p #登录mysql
create database bank_db character set utf8; #在MySQL中创建数据库,指定数据编码为utf-8
show databases; #查看数据库
sudo nginx -t #检查Nginx的语法是否正确
sudo /etc/init.d/nginx restart #重启nginx
uwsgi --stop uwsgi.pid #需要在uwsgi配置文件目录下执行,停止uwsgi
uwsgi --ini my_uwsgi.ini #启动uwsgi