| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Django项目部署到腾讯云服务器 -> 正文阅读 |
|
[Python知识库]Django项目部署到腾讯云服务器 |
目录 一.准备工作在开发测试阶段,python3 manage.py runserver 命令可以使得django项目很便捷地在本地运行,但该方式运行效率低,只允许少量用户访问。在实际的生产环境中的应用系统要考虑系统安全、响应速度、运行效率、静态文件处理、动态页面性能等问题,一般在生产环境部署django项目的方案大多基于Linux+uWSGI+Nginx组合方式进行部署。 1.1基础知识Nginx是一款轻量级HTTP服务器,它能提供一个负载均衡器和一个HTTP缓存,具有占用内存少、稳定性高、并发服务能力强等优势;Nginx最适合处理静态文件,如CSS文件、JavaScript文件、HTML文件、图片文件等,在生产环境中动态文件一般由Nginx转交给uWSGI进行处理。 uWSGI是实现了uWSGI、WSGI、HTTP等协议的Web服务器,具有超强性能、低内存占用、多应用程序管理、高可定制性等优势。在生产环境中,uWSGIke可作为Nginx服务器部署的补充选项,它相当于一个中间桥梁,Nginx服务器通过HttpUwsgiModule模块和uWSGI服务器进行数据交换,uWSGI服务器通过在配置文件中指定application的地址能直接和应用框架中的WSGI application通信。 本项目部署的系统架构如下图所示,该架构充分利用了Nginx服务器和uWSGI服务器各自的优势,静态文件由Nginx服务器处理,动态文件由uWSGI和应用程序共同高效处理。 ? 1.2安装环境介绍本项目部署在腾讯云服务器中(ubuntu系统),相关软件版本如下: ''' Ubuntu 18.04.3 LTS Nginx 1.14.0 uWSGI 2.0.18 Python 3.6.8 Django 1.11.11 virtualenv 16.7.7 MYSQL 5.7.27 ''' 1.3准备工作与其他操作系统不同,Ubuntu把系统管理员rootz收起,禁止了root直接登录。系统默认使用操作系统安装过程中建立的用户进行登录,这个用户是系统使用者级别。后续相关的操作都需要使用root权限,所以要知道如何获取root权限。切换到管理员的命令如下: sudo -i #该命令会提示输入密码,密码验证后命令提示符由$变成#,说明已获取root权限 #退出root权限使用logout logout #可以直接通过sudo + 待执行命令的方式来使用root权限 在项目部署之前最好更新系统,避免因为版本问题导致后续的软件安装出现问题,更新命令如下: sudo apt-get update sudo apt-get dist-upgrade #ubuntu中的/etc/apt/source.list中的源可能比较旧,最好也是更新一下 sudo apt-get -y update #更新python安装工具 sudo apt-get install python-setuptools 二.安装MYSQL数据库2.1安装mysql数据sudo apt-get install mysql-server ?#安装mysql 上述命令会安装如下包: apparmor mysql-client-5.7 mysql-common mysql-server mysql-server-5.7 mysql-server-core-5.7 因此不需要再安装mysql-client等 对数据库进行安全配置和初始化操作,主要步骤如下:
sudo mysql_source_installation 具体细节如下: ? 2.2配置mysql数据库进入MYSQL是数据库配置文件所在目录,修改my.cnf文件 cd /etc/mysq/ sudo vim my.cnf 在my.cnf文件后添加如下内容 #原内容如下 !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ ? #添加内容如下 ? #配置客户端 [client] #配置端口号 port=3306 #配置socket socket=/var/lib/mysql/mysql.sock #配置mysql默认字符集 default-character-set=utf8 #配置服务端 [mysqld] port=3306 socket=/var/lib/mysql/mysql.sock character-set-server=utf8 [mysql] #禁用MySql命令自动补全功能 no-auto-rehash default-character-set=utf8 接下来,配置数据库权限,让用户不使用sudo命令也可以使用和管理mysql,命令如下: sudo chmod 775 /var/lib/mysql #重启数据库,让更改生效 sudo service mysql restart 2.3生成项目数据库在myproject项目的settings.py文件中,对数据库进行如下配置: DATABASES = { ? ?'default': { ? ? ? ?'ENGINE': 'django.db.backends.mysql', ? ? ? ?'NAME': 'py_mysql', ? ? ? ?'USER':'root', ? ? ? ?'PASSWORD':'root', ? ? ? ?'HOST':'127.0.0.1', ? ? ? ?'PORT':3306, ? ? ? ?'CHARSET':'utf8' ? } } 根据settings.py中的配置,进入mysql数据库管理界面,用如下命令生成数据库py_mysql create database py_mysql default character set utf8 collate utf8_general_ci; 三.python环境部署django1.11.11对应可使用python3.4-3.6,ubuntu18.04.3 默认安装了python3.6,所以不需要再另外安装python。如果版本高于3.6,那么建议更换版本,避免可能出现的兼容性问题。 3.1升级pip具体命令如下: sudo pip3 install --upgrade pip 系统自带的pip源下载速度很慢,可以换成国内源,更换方法如下: 在用户根目录下新建.pip目录,在该目录下新建pip.conf文件,命令如下。 sudo mkdir ~/.pip sudo vim ~/.pip/pip.conf 然后在pip.conf文件下加入如下内容 [global] index-url=http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com 四.安装uWSGI服务器4.1安装uWSGI安装uwsgi之前需要安装一个C编译器,命令如下: sudo apt-get install gcc 安装python开发相关模块,命令如下: sudo apt-get install python3-dev 安装uWSGI sudo pip3 install uwsgi 在终端输入uwsgi测试是否安装成功,结果如下则说明安装成功 ? 4.2测试uWSGI建立一个文件test.py,在文件中输入如下内容: def application(env,start_response): ? ?start_response('200 OK',[('Content-Type','text/html')]) ? ?return [b'welcome uwsgi!'] 输入如下命令启动test.py sudo uwsgi --http :9000 --wsgi-file test.py 然后在浏览器中输入http://127.0.0.1:9000/并回车,网页结果如下则说明uwsgi安装成功。 ? 五.安装Nginx服务器5.1安装NginixNginx服务器用来处理静态文件请求,安装命令如下: sudo apt-get install nginx 5.2测试NginxNginx服务器的默认端口是80,可以重启Nginx服务器后直接输入ip地址即可访问,结果如下: #重启命令 sudo service naginx start ? 六.项目部署前的工作6.1修改项目配置(1)在settings.py文件加入如下配置项 #加入一个配置项,为使用Nginx做准备 STATIC_ROOT=os.path.join(BASE_DIR,'/static/') #STATIC_ROOT指明了静态文件的收集目录,这里设置收集目录为根目录下的static文件夹 #static 两边都要加上"/",否则会报错 (2)关闭debug选项和设置允许访问的域名 #在settings.py文件下找到如下参数,并设置对应值 DEBUG=FALSE ALLOWED_HOSTS=['*'] (3)在每个app的migrations文件夹下,把以数字开头的文件都删除 (4)将项目用到的静态文件复制到项目根目录下的static文件夹中,在命令行终端输入以下命令进行复制 python3 manage.py collectstatc (5)在项目开发中,为了方便一次性安装所需要的第三方python库,可以将项目导入的第三方库的名字写入requirements.txt文本文件,命令如下: pip3 freeze>requirements.txt 6.2在服务器的目录设置myproject是放置项目程序的目录,myenv是虚拟环境目录 /home/ubuntu/ myweb/ myproject/ myenv/ 6.3项目代码上传可通过FileZilla等工具将项目目录上传至服务器对应目录中 6.4安装虚拟环境virtualenv可以搭建虚拟且独立的python运行环境,使得单个项目的运行环境与其他项目隔离,也就是安装在虚拟环境里面的所有软件均不会对环境外的其他软件包产生影响,反之,在虚拟环境中只能调用虚拟环境中安装的软件包,不能调用外部的软件包。 #安装virtualenv sudo pip3 install virtualenv 安装完成后,就可以在项目目录下建立虚拟目录,进入myweb目录,通过如下命令建立虚拟目录: cd myweb sudo virtualenv --python=python3 myenv 提示:要用--python=python3来指定虚拟环境使用的python3环境,因为Ubuntu操作系统可能安装了多个版本的python,如果不特别指定的话,virtualenv可能会使用其他版本的python环境,导致各种问题。 6.5在服务器中配置项目配置项目之前先激活虚拟环境 source myenv/bin/activate 看到命令提示符前面多了myenv,说明我们已经成功激活了虚拟环境,接下来就可以开始安装Django和项目中用到的第三方python库,这些可以按照requirements.txt中列出的软件包进行安装,命令如下。 sudo pip3 install -r requirements.txt 运行如下命令在ubuntu中Mysql的py_mysql数据库中创建表 python3 manage.py makemigrations python3 manage.py migrate 生成Django Admin后台管理员,命令如下 python3 manage.py createsuperuser #根据提示输入相关信息即可 七.配置Nginx和uWSGI7.1配置Nginx首先进入myproject目录下,把/etc/nginx/下的uwsgi_params复制到项目根目录下,最后检查是否成功复制。 cd myweb/myproject sudo cp /etc/nginx/uwsgi_params . ls 在项目根目录下用sudo vim myproject_nginx.conf 创建nginx配置文件,输入如下内容: upstream django { server 127.0.0.1:8001; } ? #server{ # ? ? listen 80; ? #表示监听80端口 # ? ? server_name 70cug.cloud 124.223.197.148; # ? ? rewrite ^(.*) https://$host$1 permanent; #将http 请求跳转https #} server { ? ? ? ?#监听端口号 ? ? ? ?listen 8000; ? ? ? ?#服务器ip或者域名 ? ? ? ?server_name 124.223.197.148; ? ? ? ?charset ?utf-8; ? ? ? ?#django static ? ? ? ?location /static { ? ? ? ?#静态文件所在文件夹 ? ? ? ?alias /home/lighthouse/code/MyWeb/myproject/static; } ? ? ? ?#最大上传字节数 ? ? ? ?client_max_body_size 75M; ? ? ? ? ?location / { ? ? ? ?uwsgi_pass django; ? ? ? ?#uwsgi_params 路径,已复制到项目根目录 ? ? ? ?include /home/lighthouse/code/MyWeb/myproject/uwsgi_params; } } 上述代码说明:
在项目根目录下配置完成myproject_nginx.conf后,需要把这个配置文件加入到启用的网站列表中去,使Nginx能够使用它。Nginx能读取的配置文件包含在/etc/nginx/sites-enabled文件夹下,我们需要通过链接命令把该文件加入到该目录下,命令如下: sudo ln -s myproject_nginx.conf /etc/nginx/sites-enabled/ 配置完成后,要重启Nginx才能生效,命令如下: sudo service nginx restart 7.2配置uWSGI在项目根目录下用sudo vim myproject_uwsgi.ini 创建配置文件,内容如下: #uwsgi配置文件 [uwsgi] #django项目根目录,全路径 chdir=/home/lighthouse/code/MyWeb/myproject #django项目中wsgi.py文件路径,以.分隔 module=py_django_test_0312.wsgi #masyer=True表示以主进程模式运行 master=true #运行进程数目 processes=10 #设置socket socket=127.0.0.1:8001 chmod-socket=662 #退出时清除Python、Django虚拟环境变量 vacuum=true 以上配置文件中的socket值要与myproject_nginx.conf中的uwsgi_pass一致,这样Nginx和uWSGI两个服务器才能进行数据交换。 八.结果测试经过前面的一系列的部署工作,接下来就可以进行服务器测试,检查是否能正常登录。 uwsgi --ini myproject_uwsgi.ini 在浏览器中输入Log in | Django site admin,若能正常打开Django admin管理后台,才说明部署成功。 若要让该项目常驻后台,可以使用nohup命令将想要执行的命令不挂起。可参考菜鸟教程的命令介绍 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 13:48:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |