2019-06-03 如何把本地的Django项目部署到服务器

开发环境
开发语言: Python
后台框架:Django
前端框架:bootstrap
web服务器:nginx
wsgi服务器:uwsgi
查看本地项目Django和Python版本:
(可以直接安装Django最新版本就可以了,Python版本不能低于3.4)
Django2.0.4
Python3.6.5

首先python3的安装
[参考链接]
linux安装python3
从零开始配置阿里云服务器centos7.4

首先在官网下载安装包 python-3.6.5
(直接使用wget命令下载,速度也贼快,下载完成后发现在根目录下多了一个Python-3.6.5.tgz的压缩包)

安装相关包
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

服务器自带的python2安装在usr/bin/目录中,可以通过which python命令来查看python的安装目录。
然后进入该目录,用我们熟悉的python -v来查看python版本。(其实直接在根目录下用python -v也是可以的,但which这个命令是真的可不错)

利用 tar xf Python-3.6.5.tgz命令解压

解压完成后,(进入解压后的目录),编辑安装命令。./configure –prefix=/usr/local/python3/# 安装目录为/usr/local/python3(可以自定义安装目录)
make && make install# 编译并安装

提示bug: ./configure: No such file or directory

是因为没有进入解压后的目录,configure是安装文件里面的配置工具。
设置软连接
一条命令解决,再也不用配环境变量了。linux的软链接相当于windows里的快捷方式,快捷方式删了就删了,原来文件还是存在的。软连接后面也有大用。

ln -s /usr/local/python3/bin/python3 /usr/bin/python3.6

即在/usr/bin里面创建一个快捷方式python3.6,该快捷方式指向python3的安装路径。
输入python3.6 -v测试,成功

可以通过以下命令查看所有的软连接:

cd usr/bin/ 
ls -l

可以看到python,python2,连接的都是python2.7,而python3.6连接的就是刚安装的版本 参考链接:百度经验-怎么修改软连接
也可以将python3.6直接改为python。
备份原连接为:python -> python2
使用ln -s /usr/local/python3/bin/python3 /usr/bin/python,建立失败,发现python已经存在。
删除原连接 rm /python2
再次建立成功。
安装各种软件
安装数据库
安装sqlite,mysql

yum install mysql mysql-devel
yum install sqlite-devel

安装pip

yum -y install python-pip

报错

[root@VM_0_12_centos bin]# yum -y install python-pip
File “/usr/bin/yum”, line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax

先安装get-pip

wget –no-check-certificate https://bootstrap.pypa.io/get-pip.py

安装成功。再用python命令安装pip

python get-pip.py

安装成功,pip版本为:

Successfully installed pip-10.0.1 wheel-0.31.0

但此时未配置软连接的情况下,需要使用python -m pip来使用python3的pip。

安装Django

pip install django

安装失败:

This version of Django requires Python 3.4, but you’re trying to
install it on Python 2.7.
This may be because you are using a version of pip that doesn't
understand the python_requires classifier. Make sure you
have pip >= 9.0 and setuptools >= 24.2, then try again:
- python -m pip install --upgrade pip setuptools
- python -m pip install django
This will install the latest version of Django which works on your
version of Python. If you can't upgrade your pip (or Python), request
an older version of Django:
- python -m pip install "django<2"

2.0.5版本需要python3.4以上版本

这里因为使用的是python2的pip,为了解决这个问题可以修改软连接,也可以直接使用python -m pip install django来指定pip为python3的。
我这里使用了第二种方法。

安装mysqlclient(连接器)

python -m pip install mysqlclient

报错:

OSError: mysql_config not found

加入环境变量:

PATH=”$PATH”:/usr/local/mysql/bin

重新安装,成功。

版本:mysqlclient-1.3.12

安装uwsgi

python -m pip install uwsgi

Successfully installed uwsgi-2.0.17

安装nginx
在线项目部署
在服务器上创建简单Django项目hello,结合uwsgi+Django+nginx。

测试uwsgi
测试uwsgi -version

显示环境变量未配置好 -bash: uwsgi: command not found

建立软连接:(好用的一匹,顺便把其他的都配了)

ln -s /usr/local/python3/bin/django-admin.py /usr/bin/django-admin.py 
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi 
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv 
ln -s /usr/local/python3/bin/gunicorn /usr/bin/gunicorn

查看软连接:

cd /usr/bin 
ls -l

建立好软连接后,查看uwsgi是否安装成功:

uwsgi –version

成功,显示:

[root@VM_0_12_centos projects]# uwsgi –version
2.0.17

继续测试,创建test.py:

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

使用uwsgi运行test.py:

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

访问http://127.0.0.1:8000/

访问失败:

localhost拒绝了我们的请求。

有毒,这些教程是真的有毒。在本地浏览器访问云服务器的时候一定要用IP地址或者域名。

访问http://www.zosurn.xyz:8000
访问成功,但出现的是seafile登录页面,说明该端口被占用了,可以释放8000端口,也可以换其他的端口。

修改端口为8002:

uwsgi –http :8002 –wsgi-file test.py 

成功访问到hello world。

创建Django项目hello
在/home/projects/目录下,使用Django创建一个简单hello项目后,配置setting.py中的allowed_host设置为:

ALLOWED_HOSTS = [‘.zosurn.xyz’, ‘localhost’, ‘127.0.0.1’]

将uwsgi与Django连接:
参考链接

uwsgi –http :8008 –chdir /home/projects/hello –wsgi-file hello/wsgi.py –master –processes 4 –threads 2 –stats 127.0.0.1:9192

访问http://www.zosurn.xyz:8008成功,出现Django欢迎页面。

参数太多,可以将其写入ini文件中
在hello项目的目录下创建uwsgi.ini文件,写入如下内容(采用字典格式):

# hello_uwsgi.ini file
[uwsgi]

# Django-related settings

http = :8008

# the base directory (full path)
chdir           = /home/projects/hello

# Django s wsgi file
module          = hello.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

然后使用如下命令启动uwsgi:

uwsgi –ini uwsgi.ini

再次测试,访问http://www.zosurn.xyz:8008成功。

测试nginx:
查看nginx是否安装成功,查看nginx的版本:

[root@VM_0_12_centos hello]# nginx -v
nginx version: nginx/1.12.2

在/home/projects目录下新建一个test目录,在里面添加一个简单的html文件。然后在nginx.conf中简单配置:

events{}
http{
    server{
        server_name www.zosurn.xyz;
        root /home/projects/test;
        index index.html;
    }
}

启动该nginx:(启动之前,要将/usr/local/nginx/mime.types文件复制到该nginx.conf所在目录,并且必须使用绝对路径)

nginx -c /home/projects/test/nginx.conf

如果端口被占用,则先释放该端口,则使用lsof -i :8082查看占用端口进程的pid,并使用kill -9 [pid]关闭相应的进程。

在浏览器中访问自己的域名http://www.zosurn.xyz,访问成功。

将nginx和uwsgi以及Django结合
在hello项目的目录下创建nginx.conf

vim nginx.conf

添加如下内容:

events{}
http{
    server{
        listen 8082;    # 如果不加的话,会默认为80,这里也可以不改
        server_name www.zosurn.xyz;
        root /home/projects/hello;
        index index.html;

        location /{
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8008; # 需要和ini文件中的端口保持一致,这样才能实现两者的通信。
            uwsgi_read_timeout 2;
        }
    }
}

启动nginx:

nginx -c /home/projects/hello/nginx.conf

启动uwsgi:

uwsgi –ini /home/projects/hello/uwsgi.ini

使用域名访问,成功访问到该hello项目的Django欢迎页面。

部署本地项目到服务器
clone本地项目代码到服务器/通过ftp复制项目到服务器
在我的项目目录/home/projects里创建一个blog目录,并在里面创建一个conf目录,用来存放配置文件,这样分离开来,方便更新维护项目代码。

home/ 
projects/ 
blog/ 
conf/ 
nginx.conf
uwsgi.ini
uwsgi.log
mysite/ # 你的Django项目目录,假设为mysite 
blog/
mysite/ 
urls.py
settings.py
static/
template/
manage.py
…

修改项目代码
修改settings.py:

DEBUG = False   # Django是否加载静态资源
ALLOWED_HOSTS = ['localhost','127.0.0.1','.zosurn.xyz'] # 允许访问的主机地址

STATIC_ROOT = os.path.join(BASE_DIR, "static/") # 收集Django的静态文件到同一个static中

创建uwsgi.ini和uwsgi.log
uwsgi.ini不变,依旧为:

# myblog uwsgi.ini file
[uwsgi]

socket = 127.0.0.1:8002
# http = :8002 如果不通过nginx可以直接用http,但要通过web服务器就必须要用socket

# the base directory (full path)
chdir           = /home/projects/blog/mysite

# Django s wsgi file
module          = mysite.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# clear environment on exit
vacuum          = true

创建nginx.conf

# worker_rlmit_nofile 65500; # 提升nginx的进程文件打开数

events{}

http{
    include       mime.types;
    server{

        listen 80;
        server_name www.zosurn.xyz;
        index index.html ;
        root  /home/projects/blog/mysite;

            location /static {
                alias /home/projects/blog/mysite/static; # your Django project's static files - amend as required
            }

            # Finally, send all non-media requests to the Django server.
            location / {
                include     /etc/nginx/uwsgi_params; # the uwsgi_params file you installed
                uwsgi_pass 127.0.0.1:8002;
            }
        }
}

创建数据库、收集静态文件

python manage.py migrate 
python manage.py collectstatic

启动服务
启动nginx

nginx -c /home/projects/blog/conf/nginx.conf

后台启动uwsgi

uwsgi /home/projects/blog/conf/uwsgi.ini -d /home/projects/blog/conf/uwsgi.log

如此就可以通过域名访问自己的Django项目了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容