nginx+Django+uwsgi+MariaDB项目部署

背景

        有一个Django项目,前端、后端和模型连接测试通过,数据库使用的是SQLite,但这只是一个开发环境,性能不能满足生产需要,故使用nginx+uwsgi+MariaDB进行加强。

环境

        Ubuntu 16.04

  1. Nginx安装

        Nginx是一个高性能的HTTP和反向代理web服务器,优点是轻量级;占有内存少;处理并发能力强;支持热部署,可以不间断运行。

        Nginx处理静态页面能力强,但处理动态能力不足,一般是搭配其他模块进行处理。本实验的处理流程示意图。

         Ubuntu的安装命令如下:

sudo apt install nginx

       安装之后需要对nginx进行配置,在Ubuntu 16.04下查看/etc/nginx/nginx.conf

        可以看到配置文件是conf.d和sites-enabled文件夹下配置文件,其中sites-enabled文件夹下的所有文件都是配置文件。本实验修改的是sites-enabled文件夹下的default文件,修改为:

server {
    listen 80;
    server_name # 域名
    

    location /static/ {
        alias # django项目中静态资源目录
	    autoindex off; 
    }

    location / {
        include uwsgi_params;  
        uwsgi_pass # uwsgi配置文件中的socket;例如yourproject.sock
  
    }

}

        比较重要的是location,/static获取django的静态资源目录,/则负责和uwsgi相连接;在django项目目录下静态资源生成代码:

python manage.py collectstatic

         配置好uwsgi和nginx的config文件之后再启动。

        启动Nginx服务并启用自动启动:

sudo systemctl start nginx
sudo systemctl enable nginx

        nginx检测配置文件是否修改成功:

sudo nginx -t

           查看服务状态:

sudo systemctl status nginx.service

      2. 安装和配置uwsgi

           通过pip install uwsgi失败,之后通过conda安装成功:

conda install -c conda-forge uwsgi

           在django项目目录下创建一个uwsgi.ini的配置文件:

module = yourproject.wsgi:application
master = true
processes = 5
socket = yourproject.sock
chmod-socket = 664
vacuum = true
die-on-term = true

         其中,yourproject为实际的django项目名称。之后创建一个systemd服务文件。

sudo vim /etc/systemd/system/yourproject.service

        写入以下内容:

[Unit]
Description=uWSGI instance to serve yourproject
After=network.target

[Service]
User=youruser
Group=www-data
WorkingDirectory=/path/to/your/project/root
Environment="PATH=/path/to/your/virtualenv/bin"
ExecStart=/path/to/your/virtualenv/bin/uwsgi --ini uwsgi.ini

[Install]
WantedBy=multi-user.target

        将youruser改为实际系统用户名,WorkingDirectory为django项目路径,Environment为虚拟环境路径。

        启动uwsgi服务:

sudo systemctl start yourproject
sudo systemctl enable yourproject

        启动后在django项目目录下后出现yourproject.sock文件,把这个文件名填写到nginx配置文件中的uwsgi_pass,启动nginx,完成nginx、uwsgi、diango的连接。

        3.MariaDB安装

        下载命令:

sudo apt install mariadb-server

       查看数据库是否运行:

sudo systemctl status mariadb

        安装命令:

sudo mysql_secure_installation

        会提问是否设置root秘密,按需选择,本实验选择n,之后几个选择都选y。

        以root用户身份进行数据库:

sudo mysql

        创建一个用户,用于连接django:

GRANT ALL PRIVILEGES ON *.* TO 'yourname'@'localhost' IDENTIFIED BY 'yourpassword';

        创建数据库:

create database yourDB;

        安装pymysql:

pip install pymysql

        在django项目目录下的/core/__init__.py文件下添加以下两行,使用pymysql进行处理。

import pymysql
pymysql.install_as_MySQLdb()

        修改core/settings.py中的数据库部分的内容:

DEBUG = False

DATABASES = {
	'default': {
		'ENGINE': 'django.db.backends.mysql',
		'NAME': 'youriDB',
		'USER': 'yourUser',
		'PASSWORD': 'yourPassword',
		'HOST': 'localhost',
		'PORT': '3306',
		'OPTIONS': {
			'charset': 'utf8mb4',
			'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
		},
	}
}

        同步新数据库:

python manage.py migrate

        如果需要将旧数据库的内容迁移至新数据库,应该先修改core/settings.py中的DATABASES,改为原来数据库设置,使用以下代码将数据库中的数据打包:

python manage.py dumpdata --output=data.json

        再次修改DATABASES为新据库设置,将data.json数据迁移至新数据库:

python manage.py loaddata data.json

结尾

        记录下项目部署的步骤,期间遇到很多错误,是因为没有清楚代码的具体含义,应该要加强下linux系统的学习和逻辑能力。

        有任何错误,欢迎指正和讨论。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值