ubuntu部署django uginx+uwsgi

本文使用mysql+nginx+uwsgi部署django项目
Ubuntu18虚拟机
(以下环节均在root权限下进行)

一、配置python环境

apt-get install python3

输入python3得到:



安装pip

apt-get install python3-pip

输入pip3,出错了



打开sources.list

sudo gedit /etc/apt/sources.list

添加下面4行(因个人而异,我之前全部换成了阿里云,所以需要加这几行)

deb http://cn.archive.ubuntu.com/ubuntu bionic main multiverse restricted universe
deb http://cn.archive.ubuntu.com/ubuntu bionic-updates main multiverse restricted universe
deb http://cn.archive.ubuntu.com/ubuntu bionic-security main multiverse restricted universe
deb http://cn.archive.ubuntu.com/ubuntu bionic-proposed main multiverse restricted universe

添加完成后执行

apt-get update

很慢,翻墙应该会稍微快一点。
(如果用的是图形界面的ubuntu的话可以直接在应用菜单搜索update修改图中黄色的部分



貌似会快一点?)
之后卸载python3-pip再装一遍

输入pip3成功


二、安装mysql

apt-get install mysql-server

期间没有弹出窗口让我们输入root密码因此需要修改root的密码
1、先尝试在terminal中输入mysql看看能不能进数据库,如果不行进行如下操作
cd /etc/mysql,查看debian.cnf文件中user和password,用此账号密码进行登陆

mysql -u你的用户名 -p  
然后输入密码

2、登陆进入后

use mysql;
update user set authentication_string=PASSWORD("xxxxxxx") where User='root';#修改密码xxxx是你想要的密码
update user set plugin="mysql_native_password";
flush privileges;
exit;

然后重新登陆,输入密码时是看不见的
登陆成功


三、安装virtualenv

先更换pip为国内镜像

mkdir ~/.pip
cd ~/.pip
gedit pip.conf
#在文件中添加下面的配置,我用的是豆瓣镜像
[global] 
index-url = http://pypi.douban.com/simple 
[install] 
trusted-host=pypi.douban.com

安装virtualenv

pip3 install virtualenv

创建虚拟环境并激活

virtualenv /home/myvenv
source /home/myvenv/bin/ activate

在虚拟环境中安装所需要的包

pip freeze >  requirements.txt#导出
pip install -r requirements#安装

安装时出错


image.png

原因是安装mysqlclient时缺少包,安装一下即可

sudo apt-get install libmysqlclient-dev

再pip一下就好了


四、安装uwsgi

无需在虚拟环境中
注:虚拟环境中安装包用pip,全局用pip3

pip3 install uwsgi

参考https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
进行测试。
创建test.py

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2

然后执行

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

浏览器访问8000端口,输出helloworld则成功


image.png

下面测试下自己的项目

uwsgi --chdir=/home/untitled --home /home/myvenv --http :8001 --module untitled.wsgi:application
#chdir后面为项目文件夹
#home为虚拟环境文件夹(python环境)
#module后面为 项目名.wsgi:application(对应项目里的wsgi文件)

执行完毕后浏览器打开8001端口出现网页则成功
此时CSS等静态文件未生效,因为uwsgi无法处理这些静态文件,需要安装nginx来处理

五、安装nginx

apt-get install nginx

安装完毕后在浏览器输入IP地址看到如下界面就成功了(默认80端口)
(查看ip方式:先安装net-tools :apt-get install net-tools 然后terminal输入ifconfig,inet后面的就是)



注:下载编译和apt安装的路径貌似是不一样的,下面说的都是通过apt安装的,配置文件均位于/etc/nginx下

配置nginx

进入/etc/nginx/sites-available下,新建一个配置文件,名字随意,以.conf结尾就行(下面这个段代码里的第一行中的#不是注释!!!)

root@ubuntu:/etc/nginx/sites-available# gedit untitled.conf
#配置如下
server {
    listen 80;#监听端口
    server_name untitled;#服务器名字,随意
    charset utf-8;

    client_max_body_size 75M;

    location /static {
        alias /home/untitled/static;#项目的静态文件目录
    }

    location /media {
        alias /home/untitled/media;#项目的media文件目录
    }

    location / {
        uwsgi_pass 127.0.0.1:8001;
        include /etc/nginx/uwsgi_params;
    }
}
#配置完成后新建一个软链接(不知道干啥的,反正有用)
ln -s /etc/nginx/sites-available/untitled.conf /etc/nginx/sites-enabled/untitled.conf

然后删除原来的一个default配置文件(这里是sites-enabled下的,不要删错了)

root@ubuntu:/etc/nginx/sites-enabled# rm default 

六、配置uwsgi启动配置

配置了以后就不用像之前测试uwsgi一样输入很多参数来启动uwsgi服务
详细参数见https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/uwsgi/
先创建一个目录用来保存配置文件

root@ubuntu:/home# mkdir uwsgi_config
root@ubuntu:/home# gedit uwsgi_config/untitled.ini
#详细参数见[https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/uwsgi/]
[uwsgi]
chdir = /home/untitled
home = /home/myvenv
module = untitled.wsgi:application

master = True
processes = 4
harakiri = 60
max-requests = 5000

socket = 127.0.0.1:8001
uid = 1000
gid = 2000

pidfile = /home/uwsgi_config/master.pid#用于reload和stop uwsgi服务
daemonize = /home/uwsgi_config/untitled.log#保存日志文件
vacuum = True   

七、启动uwsgi

 uwsgi  --ini /home/uwsgi_config/untitled.ini

输入ps -aux|grep uwsfi看到启动了多个进程就表示启动成功了。



这时候刷新一下之前的没有CSS样式的页面就会发现CSS样式都加载进来了。
如果不对的话去之前ini配置文件中提到那个.log文件中看看具体有什么问题。
但是django admin页面还是样式不对的,还需要进行静态文件收集才行。

有不懂的地方可以评论提问哦

你可能感兴趣的:(ubuntu部署django uginx+uwsgi)