Denua 博客

Django部署, Nginx + Centos

发布时间: 2017-11-19 17:04   分类 : WEB    标签: Django 浏览: 1047   

Django 是一个用 Python 实现的 web 框架, 使用django 部署 web 项目可以说是迅速方便, django 的许多特性都让我爱不释手, 如默认的 sqllite 数据库, 强大后台管理, 自带的 XXS 的表单验证, 基于 MVC 的设计, 写不到两百行代码就可以搭建一个网站.

这里我使用的是阿里云的 centos7 + nginx 为例, 部署第一个 django 项目.

服务器: 阿里云 centos 7.4

数据库: MariaDB 5.5.56

http代理: Nginx

django: 1.11.7

先在阿里云控制台 -> 安全组 -> 配置规则 -> 添加安全组规则

端口范围: 80/80

授权对象: 0.0.0.0/0

其余默认

安装 MariaDB 5.5.56

MariaDB 是 centos 中 MySQL 的替代品, 使用与 MySQL 一致

yum install -y mariadb mariadb-server
yum install -y mysql-devel python-devel python-setuptools
pip install mysql-python

启动 Mariadb 服务

systemctl start mariadb

登入, 修改密码, 创建数据库, 作为 django 项目的默认数据库

# mysql -u root

> set password for root@localhost = password('password');   
> create database www default charset=utf8;

安装 Nginx , uwsgi

选择 nginx 是因为 nginx 配置比较方便, 其特性完全满足适用于 django

yum -y install nginx
nginx  # 启动 nginx

在浏览器访问服务器公网 IP 地址, 就可以看到 nginx 成功安装的提示

安装 uwsgi

uwsgi 暂且认为它是沟通 nginx 与 django 的一座桥梁, 一个 web 服务器, 它实现了与 django 项目通信的接口 - wsgi (Web Server Gateway Interface) 协议

yum -y install uwsgi uwsgi-plugin-python
pip install uwsgi

安装 Django 1.11

pip install django

启动一个项目

cd /home
django-admin startproject www
cd www
mkdir static # 创建静态文件文件夹

创建完成后, 目录结构如下:

www_
    |_ manage.py
    |
    |_ static   # 静态文件
    |
    |_ www_
           |_ __init__.py
           |_ settings.py   # django 配置文件
           |_ urls.py   # 路由列表
           |_ wsgi.py

配置 Nginx . uwsig

配置 nginx

关于 vim 的使用查阅相关资料

cd /etc/nginx
yum -y install vim
vim nginx.conf

按 insert 键编辑 修改/etc/nginx/ nginx.conf

server {
    listen       80;
    server_name  ip; # 服务器 ip 或者域名

    include /etc/nginx/default.d/*.conf;

    access_log /home/logs/access.log;   # 日志
    error_log /home/logs/error.log;

    location / {
        uwsgi_pass 127.0.0.1:3031;      # uwsgi
        include /etc/nginx/uwsgi_params;    
    }
    location /static {
        root /home/www/static/;     # 静态文件
    }   
}

按 esc 退出编辑, 按 shift + : 输入 wq 回车保存退出.

启动 uwsgi

cd /home
mkdir logs  # 用于存放日志
cd /home/www
vim uwsgi.ini   # uwsgi 配置

/home/www/ uwsgi.ini

[uwsgi]
plugin = python
socket = 127.0.0.1:3031
workers = 2
threads = 2
wsgi-file = www/wsgi.py # wsgi 文件 相对django 项目的位置
chdir = /home/www   # django 项目位置
master = true   
daemonize = /home/logs/uwsgi.log    # 日志
log-maxsize = 5000000   # 日志最大大小
vacuum = true
enable-threads = true   # 多线程
py-autoreload = 1   # 当 django 发生改变时自动更新

配置 django settings, 修改默认数据库

vim /home/www/www/settings.py

ALLOWED_HOSTS = ['ip']  # 允许 ip

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   # 数据库
        'NAME': 'www', 
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': '',
        'PORT':'3306',
    }
}

初始化 django

python manage.py migrate

测试 项目是否配置成功

python manage.py runserver 0.0.0.0:80

访问你服务器的 ip 看到以下页面说明部署完成

image

从配置文件启动 uwsgi

uwsgi --ini uwsgi.ini

重启 nginx

nginx -s reload

访问服务器 ip , 如果现实 its worked 则说明部署成功

Note

  • 确定服务器 80 端口可访问, 配置安全组
  • 版本不同会略微不同
  • 如果 uwsgi 配置改变 或者 django 项目改变后访问 服务器 显示 服务器错误需要杀死 uwsgi 的进程后重启

    ps -A # 找到 uwsgi 进程 PID kill -9 PID1 PID2 PID3

(完)

评论    

Copyright denua denua.cn