avatar

目录
CentOS7 部署 Django

本文要点Centos7 部署 Django 、Django的静态文件static、Python的虚拟环境virtualenv

从网络上可以访问你的图片或者是你在写文件等等能够引用到这个图片(或其他文件)

当然是在本地你没有这个图片的前提下,比如你的电脑重装系统了或是是在手机上图片不小心删除了、手机刷机了等,总之你那不到这个图片

下文是以图片为例而作的,本文所有安装的模块均是在虚拟环境下安装的!!!

我是把图片存放在云服务器上,通过网络地址访问

过程可能比较麻烦😜😜😜

步骤一

在服务器上建一个Git裸仓库👈

在之前的文章中讲过 👆

步骤二

①克隆刚刚创建的裸仓库

举个例子:比如我在gitcode用户下创建的myproject.git裸仓库 ,

Code
1
git clone gitcode@IP:~/myproject.git   # IP指 gitcode用户IP地址

②然后在文件中写Django项目

克隆到本地,克隆下来应该是一个里面包含.git文件的文件夹

创建Django项目(我这个用的是Django==2.0.4)

你创建完Django项目后,settings中的部分设置

Code
1
2
3
4
5
6
7
8
9
10
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'......'
]
STATIC_URL = '/static/'

众所周知Djangostatic是存放项目的一些类似于css、js、*.jpg等静态文件

而你创建Django项目时却没有static目录

settings中加入

Code
1
STATICFILES_DIRS = [os.path.join(BASE_DIR,"static")] # 指定静态文件存储位置在static文件夹下  但是这个 static 文件夹需要手动创建

这个static文件夹下的静态文件的运行依靠于INSTALLED_APPS中的'django.contrib.staticfiles'

③加入图片

我在static文件夹下创建了images文件夹

在images文件夹下加入了几张图片

运行Django项目

项目url默认是

Code
1
http://127.0.0.1:8000/

加入图片路径

Code
1
http://127.0.0.1:8000/static/图片名字

这样就可以访问你的图片了

因为django把static文件配置了公开权限,所以你才能访问,不需要过多的修改。

如果你想自己展示你的图片不用static,就要配置你那文件的公开权限

Code
1
2
3
# 比如我在Django项目下创建一个upload文件夹,在文件夹内添加几张图片
# settings.py 中的配置 加入
UPLOAD_DIRS = os.path.join(BASE_DIR,'upload')
Code
1
2
3
4
5
6
7
8
9
10
# 主应用 urls.py
# 导包
from django.urls import path,include,re_path
from django.views.static import serve
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path(.......),
re_path('upload/(.*)',serve,{'document_root':settings.UPLOAD_DIRS})
]

运行程序

要访问你upload文件下的图片,输入url

Code
1
http://127.0.0.1:8000/upload/图片名字

步骤三

使用git提交文件(上传文件)

我使用的Sourcetree管理的git仓库,有兴趣的可以了解一下。

步骤四

在服务器上克隆你写的代码

比如我是在roc用户下克隆我的代码

Code
1
2
git clone gitcode@IP:~/myproject.git   # 跟上面一样 克隆成功就可以看到你的Django项目    
# 而你在原来创建git仓库的地址 是看不到你的Django项目的 我在创建git远程仓库说过

步骤五

①配置解释器

我个人推荐这里使用虚拟环境,我使用python3.7virtualenv

你你首先要下载virtualenv

Code
1
pip3 install virtualenv

查找virtualenv所在目录

Code
1
2
3
find / -name "virtualenv "
# 这里会返回一个virtualenv的具体地址 /usr/local/python3/bin/virtualenvwrapper.sh
# 以具体地址为准

创建软链接

Code
1
2
3
ln -s /usr/local/python3/bin/virtualenv /usr/local/bin/virtualenv
# |
# 以你实际地址为准

创建虚拟环境

Code
1
virtualenv env   # 我在/home/roc/ 文件夹下操作的  env——>虚拟环境的名字

在不报错的情况下,这时会在/home/roc/文件夹下有一个env文件夹

激活虚拟环境

Code
1
source env/bin/activate

你会发现每行代码前面多了 (env)

说明你已将成功了

②Centos7服务器部署Django项目

在你激活虚拟环境的情况下

安装Django

Code
1
pip install Django # 这是会默认安装Django3.0

运行

Code
1
python manage.py runserver 0.0.0.0:8000

我运行Django3.0 报了一个这样的错

Code
1
You have provided a value for the LANGUAGE_CODE setting that is not in the LANGUAGES setting.

我在国内网站外找了半天的时间都没解决

最后我指定版本安装了Django

Code
1
pip install Django == 2.2.4

因为我提交Django项目数据库修改为MySQL,我服务器上用的是MySQL8.0.5

这是会报一个这样的错

Code
1
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 。。。

你要去打开虚拟环境 Python解释器路径下的

Code
1
2
vi /home/roc/env/lib/python3.7/site-packages/django/db/backends/mysql/base.py
# |————> 我roc用户下创建的env虚拟环境

在文件中把下面俩行注释

Code
1
2
#if version < (1, 3, 3):
# raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)

再次运行,又会报下一个错

Code
1
AttributeError: 'str' object has no attribute 'decode'

包括这个报错在那个文件报的错都会显示 去相应的文件下修改

Code
1
vi /home/roc/env/lib/python3.7/site-packages/django/db/backends/mysql/operations.py  # 以你的地址为准

operations.py 在 146行

Code
1
2
3
query = query.decode(errors='replace')   # 报错的地方
# 进行修改 如下
query = query.encode(errors='replace') # 将decode修改为encode 即刻

再次运行即可

打开浏览器输入如下地址

Code
1
2
3
4
http://IP:8000/static/images/nv.jpg
# | |
# 服务器IP地址 此图片必须存在Django项目的static目录下
# 以上二者都正确才能访问图片

python -m pip install uwsgi

步骤六

实现能够随时访问你的图片

过一段时间后你会发现你的Django项目会自动停止!!!😱😱😱

当你Django项目停止后,你就不能访问

下载uwsgi

Code
1
Python -m pip install uwsgi

测试是否下载完成

Code
1
uwsgi --version  # 他会返回一个版本号  说明安装成功

运行uwsgi

进入项目目录

Code
1
2
nohup python manage.py runserver 0.0.0.0:8000 &
# nohup 是 uwsgi的后台运行大法

运行后这是后台会返回

Code
1
nohup: ignoring input and appending output to ‘nohup.out’

你需要输入exit 重启服务器即可

Code
1
因为在nohup执行成功后直接点击关闭程序按钮关闭终端,会断掉该命令对应的session,导致nohup对应的进程被通知一起shutdown。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。

希望我的文章能够帮助到你😁😁😁

文章作者: Jack-Roc
文章链接: http://jack-roc.top/2018/04/18/django/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jack-Roc
打赏
  • 微信
    微信
  • 支付寶
    支付寶