Ubuntu+nginx+uwsgi部署django项目到阿里云上
本文的Ubuntu版本为16.04 64位,使用python3 + django2进行部署,数据库为MySQL。
本文并不能一通到底完成部署,相信你也很难找到能一直正确的部署教程,遇到问题一定要记住:看完错误提示!看完错误提示!看完错误提示!!!
一、安装python虚拟环境
远程连接阿里云服务器后第0件事情是更新一下已经安装的软件包。
apt update
apt upgrade
1、安装python3
大多数机器里边默认安装过python3,可以执行下边的语句检查一下python3是否已经安装。
apt-get install python3
2、安装pip3
安装pip3的版本过低,会造成很多版本不兼容的问题,所以在安装完pip3之后要先对pip3进行更新升级。
apt install python3-pip
pip3 install --upgrade pip
3、首先安装支持包
apt-get install libjpeg-dev libfreetype6-dev zlib1g-dev libpng12-dev
4、安装pillow、virtualenv和virtualenvwrapper(虚拟环境)
pip3 install pillow virtualenv virtualenvwrapper
5、创建并使用虚拟环境
创建文件夹放置虚拟环境。
mkdir .virtualenvs
6、配置virtualenvwrapper
到 .bashrc 文件中在最后加上下面几段代码。
# virtualenv
export WORKON_HOME=/root/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
保存并退出之后激活环境。
source ~/.bashrc
7、创建和使用虚拟环境
mkvirtualenv -p /usr/bin/python3 myenv
执行完上面的语句后可以看到自己命令行的开头用括号括起来自己虚拟环境的名字,那么虚拟环境就可以使用了。
# 进入虚拟环境
workon myenv
# 退出虚拟环境
deactivate
二、安装nginx、uwsgi和mysql
1、安装nginx
sudo apt-get install nginx
安装完成后,就可以用其他电脑或者手机的浏览器服务器的公网ip地址,网页上会显示 welcome to nginx!的画面。
2、安装uwsgi
在你的本地电脑访问https://uwsgi-docs.readthedocs.io/en/latest/Download.html
,下载Stable/LTS 版本的源文件,用本地下解压这个源文件,然后用 Xftp 把解压出来的文件(一个文件夹和一个文件)拖放到阿里云的Ubuntu的家目录 /home下。或者在虚拟环境中安装uwsgi,即 pip3 install uwsgi。
建议新手在虚拟环境外和虚拟环境里分别进行一次uwsgi的安装,操作均为pip3 install uwsgi 。
3、安装配置mysql
apt-get install mysql-server mysql-client
安装过程中会让你设置 root 的密码,完成后配置 mysql。
进入 mysqld.cnf 文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉这行代码
bind-address = 127.0.0.1
三、配置项目
先暂时不用阿里云的服务器,回到你自己的电脑界面。
1、配置 django 项目
导出项目的所有依赖,到项目根目录下执行命令。
pip freeze > requirement.txt
进入 settings.py 文件内,更改内容!
DEBUG = False
ALLOWED_HOSTS = ["*"]
2、配置uwsgi
在你的 django 项目的根目录下,也就是有 manage.py 文件的目录下,新建一个 uwsgi.ini 文件用作 uwsgi 的配置文件,(本文的 django 工程将要放在/home文件夹下,以此为例)写入:
[uwsgi]
# 使用nginx连接时使用
socket = 127.0.0.1:8000 #此处端口号要和nginx的配置文件对应内容一致
# 直接做web服务器使用
#http=0.0.0.0:80
# 配置工程目录
chdir=/home/项目名
# 配置项目的wsgi目录,相对于工程目录
wsgi-file=项目名/wsgi.py
processes=4
threads=2
enable-threads=True
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log
这时候,使用Xftp或其他工具将你的项目放到阿里云服务器的 /home 文件夹下。
3、配置虚拟环境
用 workon 命令进入虚拟环境,用 cd 切换到之前导出项目依赖文件 requirement.txt 的目录下,安装所有依赖。
pip3 install -r requirement.txt
这个时候可能会出现找不到版本的错误,可以在 requirement.txt 文件中删除对应的依赖,然后用 pip3 直接下载。
4、配置MySQL
创建一个与 django 项目里 settings.py 文件相匹配的数据库,将数据表的 .sql 文件放到 /home 文件夹下,然后在命令行下输入命令恢复数据。
sudo mysql -u root -p table名字<table名字.sql
5、配置nginx
切换到 sites-available 文件夹下。
cd /etc/nginx/sites-available
用 vim 打开这个文件夹下唯一的default文件,将 default 改变为下列内容,然后保存退出。
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html; # 这里nginx默认界面的存放位置
index index.html; # 这里是nginx默认界面的文件名
server_name xxx.xxx.xxx.xx; # 这里是公网ip地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; # 此处端口名要和uwsgi.ini对应位置一致
}
location /static {
alias /home/项目名/static;
}
location /media {
alias /home/项目名/media;
}
}
static 那里也要替换成你自己 Django 项目的 static 路径,media 同理换成你自己 Django 项目的 media 路径,这是媒体文件的文件夹。
6、启动项目
到项目根目录下,输入以下命令启动项目:
uwsgi --ini uwsgi.ini
service nginx restart
到此,项目可以被访问了!!!
注:部署完成后遇到修改代码无效的情况,是因为没有重新启动uwsgi,首先在更改代码后终止uwsgi,命令如下:
killall -9 uwsgi
可以用bash ps -ef|grep uwsgi
查看是否存在uwsgi进程。确定uwsgi进程结束后再次使用
uwsgi --ini uwsgi.ini
重启uwsgi服务,代码修改生效。