Python——Django项目部署到阿里云服务器(uwsgi+nginx+python3)

Django项目部署到web服务器

  • 前言
  • 准备工作
    • 安装python3
    • 安装django和uwsgi
    • 测试是否安装成功
  • 配置自己的python项目
    • 配置settings.py
    • 连接数据库
    • 编写uwsgi.ini文件
  • 配置nginx
    • 同步静态文件到nginx设置的目录下
  • 启动项目
    • 启动uwsgi
    • 启动nginx

前言

自己写的Django项目 一直没试过部署上线 结果今天部署了一天才搞好 踩了不少坑 但是最后还是弄好了!

准备工作

LNMP详细部署可以查看我另一篇博客
LNMP部署

  • Python项目
  • LNMP环境(Linux Nginx Mysql Python)
  • uwsgi
  • Django

安装python3

yum install -y epel-release              # 安装EPEL扩展源
yum install -y python36 python36-pip python36-devel sqlite-devel supervisor  # 安装Python3.6及其工具组件

[root@maomao scripts]# python3
Python 3.6.8 (default, Nov 16 2020, 16:55:22) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('hello world')
hello world

pip3 install --upgrade pip                # 升级pip版本

echo "alias python='/usr/bin/python3.6'" >/etc/profile.d/python.sh
                                                # 添加Python 3.6为系统执行的默认Python

source /etc/profile                      # 使系统配置生效

安装django和uwsgi

这里需要注意的点 你项目的django版本 需要和服务器安装的django版本一样

pip3 list 可以查看版本

比如我是django2.2 因此安装django的时候这样写

pip3 install django==2.2
pip3 install uwsgi

测试是否安装成功

vim test.py

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b'Hello World']

uwsgi --http :8000 --wsgi-file test.py

在浏览器中输入 网址:8000,出现 “Hello World”表示安装成功。
Python——Django项目部署到阿里云服务器(uwsgi+nginx+python3)_第1张图片

配置自己的python项目

在这里插入图片描述
我的项目已经打包传上了服务器

[root@maomao home]# ls
studentsSystem.zip  test.py

[root@maomao home]# unzip studentsSystem.zip 

[root@maomao home]# cd studentsSystem

配置settings.py

将数据库和路径都要改成当前环境的

运行所有ip访问
ALLOWED_HOSTS = ['*']

修改数据库信息
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'studentssystem',
        'USER': 'root',
        'PASSWORD': '123',
        'HOST': '47.108.76.25',
        'PORT': '3306',
        'OPTIONS':{
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES';"  # 初始化数据库的命令
        }
    }
}

连接数据库

这里需要注意阿里云的安全组 需要手动配置打开3306端口 不然无法连接数据库

如果还是连接不上可以授权

grant all on *.* to 'root'@'%' identified by '123';

grant all on *.* to 'root'@'localhost' identified by '123';

flush privileges;
pip install pymysql

创建自己项目的库

mysql> create database studentssystem;

执行sql

[root@maomao studentsSystem]# pwd
/home/studentsSystem

python3 manage.py migrate 	创建数据表

python manage.py createsuperuser   创建admin用户

Python——Django项目部署到阿里云服务器(uwsgi+nginx+python3)_第2张图片

查看数据库里自己的项目表

mysql> select * from studentssystem;
ERROR 1146 (42S02): Table 'studentssystem.studentssystem' doesn't exist
mysql> show tables;
+----------------------------+
| Tables_in_studentssystem   |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| course                     |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| student                    |
| studentinformation         |
+----------------------------+
13 rows in set (0.00 sec)

编写uwsgi.ini文件

[uwsgi]

socket =127.0.0.1:8000
chdir           = /home/studentsSystem
module          = studentsSystem.wsgi
master          = true
processes       = 4
vacuum          = true

  • socket: 指定项目执行的端口号
  • chdir: 项目的目录。
  • module: module = studentsSystem.wsgi 意思是对于 uwsgi.ini 文件而言,与它同级目录有一个 studentsSystem 目录,这个目录下有一个 wsgi.py 文件。

通过 uwsgi 命令读取 uwsgi.ini 文件启动项目

uwsgi --ini uwsgi.ini

配置nginx

vim /usr/local/nginx/conf/nignx.conf

events {
    worker_connections  4096;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    gzip  on;

    upstream django {
        server 127.0.0.1:8000;
        }
    server {
        listen       8080;
        server_name  localhost;
        charset utf-8;

        location / {
                include /etc/nginx/uwsgi_params;
                uwsgi_pass django;
        }

        location /static/ {
                expires 30d;
                autoindex on;
                add_header Cache-Control private;
                alias /home/studentsSystem/static/;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

检查语法
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

同步静态文件到nginx设置的目录下


STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR,'static')
STATICFILES_DIRS = (
     ('css',os.path.join(MEDIA_ROOT,'css').replace('\\','/') ),
     ('js',os.path.join(MEDIA_ROOT,'js').replace('\\','/') ),
     ('images',os.path.join(MEDIA_ROOT,'images').replace('\\','/') ),
     ('upload',os.path.join(MEDIA_ROOT,'upload').replace('\\','/') ),
 )

# 设置图片等静态文件的路径(电脑系统文件夹路径)
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, '/home/studentsSystem/static/').replace('\\', '/'),
)

在django项目setting.py最下面添加
STATIC_ROOT = '/home/studentsSystem/static/'
命令行输入
python manage.py collectstatic  

自动将所有静态文件复制到nginx的索引目录

启动项目

启动uwsgi

uwsgi --ini uwsgi.ini

启动nginx

systemctl start nginx

Python——Django项目部署到阿里云服务器(uwsgi+nginx+python3)_第3张图片
Python——Django项目部署到阿里云服务器(uwsgi+nginx+python3)_第4张图片

添加学生信息之后我们去数据查看一下
Python——Django项目部署到阿里云服务器(uwsgi+nginx+python3)_第5张图片
在这里插入图片描述
项目部署成功

你可能感兴趣的:(Web服务器,Python,python,django,nginx,mysql)