Django项目部署到Linux 服务器

简介: Django项目部署到Linux 服务器

项目依赖:
Linux Centos7 (阿里云轻量级服务器)
Python 3.7.2 + Django 2.2.1
restframework 3.9.4
mysql 5.7

1 安装 python3 到 Centos7, 先安装软件管理包和可能使用的依赖

yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel libffi-devel


# linux 安装python3.7 报错No module named '_ctypes'


ModuleNotFoundError: No module named '_ctypes'

操作系统:centos7

yum install libffi-devel
./configure --enable-optimizations
make altinstall


2 下载Pyhton3到/usr/local 目录


wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz

3 解压


tar -zxvf Python-3.7.2.tgz


4 进入到解压好的python文件中


cdPython-3.7.2


5 编译安装到指定路径

./configure --prefix=/usr/local/python3 --enable-optimizations


6 安装python3

make
make install


7 安装完成之后 建立软链接 添加变量 方便在终端中直接使用python3

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


8 Python3安装完成之后pip3也一块安装完成,不需要再单独安装一样建立软链接

同样给pip3建立软链接

ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
注: 如果软链建立完成,但是却无法使用的时候执行下面命令:
     mv pip pip2  # (将文件 pip 更名为 pip2 )
     ln -s /usr/local/python3/bin/pip3 /usr/bin/pip


9 安装virtualenv, 方便不同版本项目管理。


pip3 install virtualenv


10 建立软链接

ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv3

11 安装成功在根目录下建立两个文件夹,主要用于存放env和网站文件的 (文件创建随意,根据实际需求)。

mkdir -p /data/env    # 存放虚拟环境
mkdir -p /data/wwwroot    # 存放web项目


12 切换到/data/env/下,创建指定版本的虚拟环境。

virtualenv3 --python=/usr/bin/python qize_demo (项目名)    # 创建虚拟环境
       # 然后进入
       cd /data/env/qize_demo/bin 
       # 进入bin目录后开启虚拟环境,执行命令
       source activate    
       # 注:(启动后出现 (qize_demo),说明是成功进入虚拟环境。)


13 虚拟环境里用pip3安django和uwsgi (留意:uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。)

pip3 install django  #(如果用于生产的话,则需要指定安装和你项目相同的版本)
pip3 install uwsgi
# 给uwsgi建立软链接,方便使用
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

14 在本地项目目录下用下面的命令把当前的环境依赖包导出到requirements.txt文件

pip freeze > requirements.txt

15 把项目源码压缩打包。把项目上传到服务器对应的目录里(/data/wwwroot/),解压。

16 进入解压好的项目根路径中安装requirements.txt里的依赖包。

pip3 install -r requirements.txt

17 导入数据库到服务器。(如果用的是Mysql的话)

导出Mysql,django为你的数据库


mysqldump -uroot -p password django>django.sql


把django.sql上传到服务器,在服务器里用下面命令导入


mysql -uroot -ppassword
use dajngo;
source your Path\django.sql

18 通过 python3 manage.py runserver 运行一下项目,如果能正常启动则进行下一步,不能正常运行往上检查 (下面给出几个常见错误和解决方案)。

报错1:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11 解决方案:

解决:编辑Python安装路径下的 Python36-32\Lib\site-packages\django\db\backends\mysql\base.py


将文件中的如下代码注释
#if version < (1, 3, 3):
#    raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)


报错2:File "/usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/operations.py", line 146, in last_executed_query query = query.decode(errors='replace')

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

解决:编辑

/usr/local/python3/lib/python3.7/site-packages/django/db/backends/mysql/operations.py

的 第146 行,

# 将 decode 改为 encode 保存并退出
query = query.decode(errors='replace') 改为 query = query.encode(errors='replace')

19 在项目根目录里添加uwsgi配置文件 (qize_demo.xml)

<uwsgi>       
 <socket>127.0.0.1:8070/</socket><!-- 内部端口,自定义 --> 
 <chdir>/data/wwwroot/qize_demo/</chdir><!-- 项目路径 -->            
 <module>qize_demo.wsgi</module> 
 <processes>4</processes> <!-- 进程数 -->     
 <daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>

20 配置Nginx配置文件(把原先的配置文件可以备份以下,然后将下面的替换进去)。

events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen 80;
        server_name  127.0.0.1:80;  # 改为自己的域名,没域名修改为127.0.0.1:80
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8070;  #端口要和uwsgi里配置的一样
           uwsgi_param UWSGI_SCRIPT qize_demo.wsgi;        #wsgi.py所在的目录名+.wsgi
           uwsgi_param UWSGI_CHDIR /data/wwwroot/qize_demo/; #项目路径
        }
        location /static {
            alias /data/wwwroot/qize_demo/static; #静态资源路径
        }
        location /templates {
            alias /data/wwwroot/qize_demo/templates;
        }
    }
}

留意:一定要注意Uwsgi和Nginx配置文件里的项目路径和静态资源路径,填写正确了才能成功访问。不然会出现502错误。还有就是,修改Django文件和其它配置文件之后,一定要重启Uwsgi和Nginx,不然不生效。

21 Uwsgi和Nginx重启方法:

uwsgi 启动方法

uwsgi -x qize_demo.xml

Nginx 重启方法

nginx -s reload


然后在浏览器里访问服务器ip(或域名),就能查看到项目。

如果想使用域名访问项目,先在域名管理后台把域名解析到服务器IP上来,之后在Nginx配置文件里绑定域名。然后在浏览器里通过绑定的域名访问项目。

以下总结一些问题:

1 如果访问出现 500 以上的错误信息并有nginx的信息,一般是nginx配置出了问题。去查看nginx.conf配置中的项目路径是否正确,uwsgi_pass 参数的端口和 uwsgi的xml 文件中端口是否一致,是否修改完配置后重新启动了nginx。还有就是可以去项目根路径下 python manage.py runserver 启动下项目,看看有没有报错,也有可能是程序本身就有问题。

2 如果访问出现 400 以上的错误信息,重点检查项目路径,包括 tempates / static 静态路径是否正确,和项目中 settings 是否配置了 tempates / static 文件的访问路径,以及 url 是否正确,其次还有html文件中引入的 css, js, img 等文件路径是否正确, 比如:

css文件:<link rel="stylesheet" href="/static/css/q.css">
  js文件 :<script src="/static/js/q.js"></script>


以下总结下注意事项:

1 项目上线后记得 DEBUG = False 这样设置,这样的话你的项目访问失败就不会有 Django 的错误信息了

2 设置所有 IP 都可访问 (settings.py)

ALLOWED_HOSTS = ['*']

3 数据库设置(settings.py)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'sql_base',        # 库名 (根据实际数据库名进行修改)
        'PORT': 3306,            # 端口(不用改)
        'HOST': '127.0.0.1',    # 本地host(不用改)
        "USER": 'root',            # 用户名
        'PASSWORD': '123456'    # 密码
    }
}
相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
3月前
|
JavaScript 前端开发 应用服务中间件
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这篇文章分析了Vue项目在服务器部署后出现404错误的原因,主要是由于history路由模式下服务器缺少对单页应用的支持,并提供了通过修改nginx配置使用`try_files`指令重定向所有请求到`index.html`的解决方案。
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
|
1月前
|
关系型数据库 应用服务中间件 数据库
项目部署二:服务器和环境配置
项目部署二:服务器和环境配置
|
2月前
|
JavaScript Linux 开发工具
如何将nodejs项目程序部署到阿里云服务器上
该文章详细描述了将Node.js项目部署到阿里云服务器的步骤,包括服务器环境配置、项目上传及使用PM2进行服务管理的过程。
|
3月前
|
前端开发 网络协议 物联网
Django Web:搭建Websocket服务器(入门篇)
Django Web:搭建Websocket服务器(入门篇)
77 1
|
3月前
|
Linux PHP
【Azure 应用服务】PHP项目部署到App Service for Linux环境中,如何修改上传文件大小的限制呢?
【Azure 应用服务】PHP项目部署到App Service for Linux环境中,如何修改上传文件大小的限制呢?
|
3月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
|
3月前
|
JavaScript Linux 容器
【Azure 应用服务】NodeJS项目部署在App Service For Linux环境中,部署完成后应用无法访问
【Azure 应用服务】NodeJS项目部署在App Service For Linux环境中,部署完成后应用无法访问
|
4月前
|
JavaScript 应用服务中间件 nginx
【项目部署系列教程】4. 将Vue项目部署到远程服务器
【项目部署系列教程】4. 将Vue项目部署到远程服务器
423 1
|
弹性计算 Linux
[转]ECS之初体验(Linux)
服务商: 阿里云 操作系统:Linux 64位 Ubantu 20.04 64位
115 0
|
7天前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。
下一篇
无影云桌面