Centos7--通过Nginx+uWSGI部署Django项目

Django项目名称:GTD

任务:Windows项目转移至Centos,并通过Nginx+uWSGI部署Django项目

GTD项目路径:/root/projects/gtd/

参考文章:http://projectsedu.com/2017/08/15/centos7-%E4%B8%8B%E9%80%9A%E8%BF%87nginx-uwsgi%E9%83%A8%E7%BD%B2django%E5%BA%94%E7%94%A8/


 

(1)安装Python3

①获取Python3源码

wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz

②安装Python3所需依赖项

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make

③解压

tar -xzvf Python-3.7.2.tgz

④编译及安装(需要进入解压目录)

./configure --prefix=/usr/local  #安装目录为/usr/local

make && make install

⑤安装Django项目环境

#建议使用虚拟环境: pip3 install virtualenvwrapper

#配置virtualenvwrapper环境变量: vi .bashrc
    export WORKON_HOME=$HOME/.virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/local/python3
    source /usr/local/bin/virtualenvwrapper.sh

#刷新.bashrc文件: source .bashrc
#.bashrc文件在用户家目录下

安装mysqlclient可能出现错误,需要安装依赖项:

yum -y install python-devel mariadb-devel

pip3 install mysqlclient

 

(2)安装mariadb或mysql数据库

1、安装mariadb数据库(安装mysql数据库类似)

yum install -y mariadb-server       #安装mariadb数据库
​
systemctl start mariadb             #启动mariadb服务
systemctl enable mariadb            #设置自启动
​
#ss -lpn src :3306  查看端口占用情况
​
firewall-cmd --add-port=3306/tcp    #将3306端口开放,返回success
#一定要开放3306端口,否则无法远程登录mariadb数据库
​
mysql_secure_installation       #进行安全初始化设置(包括root用户密码,匿名登入,远程登入等)
#只有在mariadb服务启动了才能执行成功,要不然一直报错:Can't connect to local Mysql server

2、数据库同步

①远程同步

第一步:设置bind-address
#bind-address = 127.0.0.1 表示只允许本机客户端访问,其他服务器不可访问
#bind-address = 0.0.0.0 表示不限制访问
vi /etc/my.cnf      #在[mysqld]下面加入或修改
    bind-address = 0.0.0.0
第二步:允许外部ip访问
#先进入mariadb或mysql,进入mariadb命令(mysql)与mysql一样:mysql -u root -p

#输入以下命令:表示允许root用户在任意('%')主机以密码('password')登录
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
    FLUSH PRIVILEGES; #刷新权限
第三步:外部主机连接mariadb数据库进行数据同步

②本地同步

导出为sql文件,并通过mysql命令导入。如:source path/data.sql;

 

(3)安装Nginx

1:添加Nginx仓库
    yum install epel-release
    
2:安装Nginx
    yum install nginx
    
3:启动Nginx
    systemctl start nginx
    #systemctl enable nginx  开机自启动
4:设置防火墙
    注意:如果运行了防火墙,设置允许防火墙通过http、https流量,否则无法访问。
        sudo firewall-cmd --permanent --zone=public --add-service=http 
        sudo firewall-cmd --permanent --zone=public --add-service=https
        sudo firewall-cmd --reload
    #启动之后即可网页访问:http://your_machine_ip/

如图所示:Centos7--通过Nginx+uWSGI部署Django项目_第1张图片

 

 

(4)安装uwsgi

#安装
pip3 install uwsgi
​
#测试uwsgi:GTD.wsgi为Django项目目录下的文件,与setting.py在同一文件夹(即GTD)下。
    uwsgi --http :8000 --module GTD.wsgi
#可通过网页http://ip/访问


(5)配置Nginx

第一步:新建nginx配置文件:vi gtd_nginx.conf,写入以下内容。

需要更改内容:

your_ip_address:替换为你主机的ip地址

/root/projects/gtd/media :你的Django项目的media目录,为完整路径

/root/projects/gtd/static :你的Django项目的static目录,为完整路径

# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server
​
server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
server_name your_ip_adderss ; # substitute your machine's IP address or FQDN
charset     utf-8;
​
# max upload size
client_max_body_size 75M;   # adjust to taste
​
# Django media
location /media  {
    alias /root/projects/gtd/media;  # 完整路径,指向django的media目录
}
​
location /static {
    alias /root/projects/gtd/static; # 完整路径,指向django的static目录
}
​
# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass  django;
    include     uwsgi_params; # the uwsgi_params file you installed
}
}

第二步:将gtd_nginx.conf加入Nginx启动配置文件

mv gtd_nginx.conf /etc/nginx/conf.d/

第三步:拉取Django项目所有需要的static file 到同一个目录

#在django的setting文件中,添加下面一行内容:
    STATIC_ROOT = os.path.join(BASE_DIR, "static/")
#注意 STATIC_ROOT 与 STATICFILES_DIRS 不能同时存在,须注释或删除STATICFILES_DIRS
​
#运行命令
    python manage.py collectstatic

第四步:重启并运行Nginx

 

(6)通过配置文件启动uwsgi

第一步:新建gtd_uwsgi.ini配置文件(位置在gtd/conf/gtd_uwsgi.ini,即项目)。

注意:

chdir: 表示需要操作的目录,也就是项目的目录,为完整路径

module: wsgi文件的路径 ​

processes: 进程数 ​

virtualenv:虚拟环境的目录

# gtd_uwsgi.ini file
    [uwsgi]
​
    # Django-related settings
    # the base directory (full path)
    chdir           = /root/projects/gtd/
    # Django's wsgi file
    module          = GTD.wsgi
    # the virtualenv (full path)
​
    # process-related settings
    # master
    master          = true
    # maximum number of worker processes
    processes       = 10
    # the socket (use the full path to be safe
    socket          = 127.0.0.1:8000
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    virtualenv = /root/.virtualenvs/gtd
​
    logto = /tmp/gtd_log.log

第二步:修改setting.py文件。

DEBUG=False

生产环境需要把DEBUG改为False,如果为True,则页面出差时会暴露内部代码及泄露信息。

ALLOWED_HOSTS=['*']

在ALLOWED_HOSTS中添加'*',表示任意主机可访问。不设置则外部主机不可访问。

③注意,你可能需要更改mysql配置信息(如PASSWORD),防止与数据库密码不一致。

第三步:运行uwsgi

uwsgi -i /root/projects/gtd/conf/uwsgi.ini

访问:http://ip/

 

(7)可能出现的错误

错误情况一:502错误。

原因:nginx访问某些目录无权限

解决:vim /etc/nginx/nginx.conf         把user nginx 改为user root

错误情况二:网页无样式。

原因:/etc/nginx/conf.d/gtd_nginx.conf 配置了代理静态文件目录(即media与static),而运行用户 无权限访问这些目录。

解决:赋予用户相应权限。

 

最后,附上部署成功后的项目图片。

Centos7--通过Nginx+uWSGI部署Django项目_第2张图片

Centos7--通过Nginx+uWSGI部署Django项目_第3张图片

Centos7--通过Nginx+uWSGI部署Django项目_第4张图片

Centos7--通过Nginx+uWSGI部署Django项目_第5张图片

 

你可能感兴趣的:(Django)