Ubuntu服务器通过uWSGI和Nginx部署Django项目教程

uWSGI+Nginx+Django工作原理

nginx作为服务器前端,接受客户端所有的请求,统一来管理。Nginx把所有的静态请求自己处理(静态文件处理是nginx的强项),然后把所有非静态请求通过uwsgi传递给Django,由Django来处理,从而完成一次web请求。

部署环境

阿里云服务器Ubuntu 16.04版 (Linux),Python 3.X。如果你是首次购买阿里云服务器,你应该做如下事情:

  1. 配置安全组

  2. 设置远程连接密码 - 重启服务器

  3. 本地安装FileZilla通过SSH连接服务器 (相当于FTP,以便于上传和查看文件。

同时你还需要知道购买服务器的公网IP,便于后续通过互联网直接查看项目是否已经部署成功。

第一步 升级Python和PIP

刚购买的ubuntu 16.04服务器自带Python还是2.7版的, pip版本为8,需要先使用如下命令升级Python和PIP版本。

sudo apt-get install python3.5 # 安装python

sudo apt-get install python3-pip # 安装python 3-pip

sudo rm /usr/bin/python # 删除python 2.7版本

sudo ln -s /usr/bin/python3.5 /usr/bin/python # 将python链接到最新3.5版的

pip3 install upgrade – pip # 升级pip

pip3 – version #查看pip版本

第二步 创建用户

阿里云给你的默认登录用户是root,而且是没密码的。建议先创建个人用户,我们这里以enka为例。创建好后,你会发现/home/目录里多一个enka文件夹。注意刚创建的enka用户没有sudo权限,你必需先赋予它sudo权限才便于执行后面命令。

• 创建用户: adduser enka, 连续输入密码两次。

•赋予sudo权限: sudo vim /etc/sudoers或visudo , 追加一行enka ALL=NOPASSWD: ALL。按ESC切入命令行,这里要用:wq!来写入保存

•切换用户到enka: su – enka

第三步 创建虚拟环境

每个独立项目都有自己的依耐性。在创建一个Django项目前,我们应该创建一个虚拟环境,把django安装在虚拟环境里。这不是建议,还是必需。连续输入以下项目命令后,你会发现/home/enka/目录下多了一个子目录Env,专门用于存放虚拟环境信息。

•sudo pip install virtualenv virtualenvwrapper

•echo"export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc
•echo"export WORKON_HOME=~/Env" >> ~/.bashrc

•echo"source /usr/local/bin/virtualenvwrapper.sh">> ~/.bashrc

•source ~/.bashrc

本例中我们不仅安装了virtualenv,还安装了virtualenvwrapper,并将配置信息输入到.bashrc文件里了。这里.bashrc隐藏文件是用来存储并加载你的终端配置和环境变量的。现在你可以使用如下命令创建,终止和切换虚拟环境了,这样比使用virtualenv的source /bin/venv/activate等命令来激活和管理一个虚拟环境方便多了。

•mkvirtualenv myproject #创建一个myproject的虚拟环境

•deactivate #退出虚拟环境

•workon myproject1 #切换到myproject1的虚拟环境

第四步 安装Django

使用mkvirtualenv myproject命令创建一个叫myproject的虚拟环境后,你就可以把Django安装在这个虚拟环境里了。

• pip install django #安装django

Django安装好后,cd进入/home/enka目录使用sudo mkdir myproject命令创建一个叫myproject的文件夹(建议与虚拟环境名保持一致,与本地Django项目名保持一致)。这个项目文件夹地址是/home/enka/myproject, 里面将存放django代码,此时可以通过git clone在线获取项目代码,也可以通过FileZilla将本地项目代码上传到这里。(注: 如果你没有现成项目代码,你还可以通过使用django-admin.py startproject myproject在线创建一个项目。)

项目代码到位后,连续输入以下命令,然后访问公网ip地址:8080,你应该就可以看到你的django项目已经上线啦。

• pip install -r requirements.txt #安装依赖文件

• python manage.py createsuperuser #创建超级用户

• python manage.py makemigrations

• python manage.py migrate #生产数据表

• python manage.py collectstatic #搜集静态文件

• python manage.py runserver 0.0.0.0:8080

注意, 运行项目前请确保你已经在settings.py里设置STATIC_ROOT= os.path.join(BASE_DIR, “static/”)和ALLOWED_HOSTS= [‘your_server_domain_or_IP’]。

第五步 安装uWSGI,并将其加入系统服务

第四步中我们还是使用django的runserver命令来运行服务器的,我们现在来安装uWSGI并使其做服务器。使用deactivate命令退出虚拟环境后,使用pip安装uwsgi。随后再使用workon myproject命令进入虚拟环境,在虚拟环境中再安装uwsgi一遍,并测试uwsgi是否安装成功。(注: uwsgi需要安装两遍哦.)

• pip install uwsgi # 安装uwsgi

• uwsgi – version # 查看版本

uWSGI安装成功后,你可以使用如下命令启动Django项目myproject,退出时可以使用Ctrl+C退出。

• uwsgi --http :8080 --home /home/enka/Env/myproject --chdir /home/enak/myproject -w myproject.wsgi

这个命令太长,很难记住。一个更好的方法是配置uwsgi,并将其加入系统服务。这样每次启动uwsgi服务时,自动调用配置文件的设置。在终端连续输入以下命令,创建myproject.ini文件,存放uwsgi配置信息。

• sudomkdir -p /etc/uwsgi/sites

• cd /etc/uwsgi/sites

• sudo nano myproject.ini

myproject.ini文件配置内容如下,这个设置是可以复用的。如果你要复用,你只需要修改project名和base即可。

[uwsgi]

project = myproject # 项目名

uid = www-data # nginx 默认用户名

gid = www-data # nginx默认用户组

base = /home/enka # 根目录

chdir = %(base)/%(project) #项目目录

home = %(base)/Env/%(project) #虚拟环境目录

module = %(project).wsgi:application #对应wsgi文件

master = true #主进程

processes = 2 #同时进程数

socket = /run/uwsgi/%(project).sock #对应sock文件名

chown-socket = %(uid):www-data #指定socket用户与用户组

chmod-socket = 660 #指定socket用户读写执行权限

vacuum = true #每次重启是否清理

现在我们需要把uwsgi加入到系统服务,这样我们就可以通过使用sudo systemctl start uwsgi 来启动uwsgi服务了。

•sudo nano /etc/systemd/system/uwsgi.service

uwsgi.service文件内容如下,采用的是Emperor模式。

[Unit]

Description=uWSGIEmperor service

[Service]

ExecStartPre=/bin/bash -c ‘mkdir-p /run/uwsgi; chownwww-data:www-data /run/uwsgi’

ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites

Restart=always

KillSignal=SIGQUIT

Type=notify

NotifyAccess=all

[Install]

WantedBy=multi-user.target

第六步 安装与设置Nginx

使用如下命令安装Nginx,并创建配置文件。

•sudo apt-get install nginx # 安装nginx

•sudo nano /etc/nginx/sites-available/myproject #创建myproject配置信息

配置文件如下所示,标红部分需要换成你自己的项目信息。

server {

listen 80;

server_name your_ip_or_your_domain;

location = /favicon.ico { access_log off; log_not_found off; }

location /static/ {

root /home/enka/myproject/;

} #设置静态文件根目录

location /media/ {

root /home/enka/myproject/;

} #设置媒体文件根目录

location / {

include uwsgi_params;

uwsgi_pass unix:/run/uwsgi/myproject.sock;

} #如果非静态或媒体文件,交由uwsgi处理

}

设置好配置文件后,连续使用如下4个命令,访问公网IP你就应该能看到你的项目能成功运行啦。

• sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled # 创建链接

• sudo nginx –t #检查nginx语法

• sudo systemctl restart nginx #重启nginx服务

• sudo systemctl restart uwsgi #重启uwsgi服务

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值