python3.8.0 Django 开发后端接口api 部署到 Linux Centos7上
经历了两天的时候终于把本地使用python3 django开发的接口API部署到服务器上了,还是记录一下,以免之后忘记,哈哈
注意一点,就是,centos7是基于python2的,我这边默认的是python2.7.5,记住不要删除了python2,否则后果很严重,yum会报错,这是因为python3和python2版本的冲突导致的
第一步,安装 python3 到 Centos7, 先安装软件管理包和可能使用的依赖
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
第二步,下载Pyhton3到/usr/local 目录
wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
第三步,解压
tar -zxvf Python-3.8.0.tgz
第四步,进入cd Python-3.8.0
第五步,解压到指定路径
./configure --prefix=/usr/local/python3
第六步,安装python3
make make install
第七步,安装完成之后 建立软链接 添加变量 方便在终端中直接使用python3
ln -s /usr/local/python3/bin/python3.8 /usr/bin/python3
第八步,Python3安装完成之后pip3也一块安装完成,不需要再单独安装一样建立软链接
同样给pip3建立软链接
ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3 注: 如果软链建立完成,但是却无法使用的时候执行下面命令:
mv pip pip2 # (将文件 pip 更名为 pip2 )
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
如果安装了python3以后发现没有pip可以通过以下方式下载pip,进入一个目录就是你想把它下载到哪个目录就进入哪个目录
执行命令:wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
会下载get-pip.py文件
然后执行: python3 get-pip.py
第九步,安装virtualenv, 方便不同版本项目管理。
pip3 install virtualenv
第十步,建立软链接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv3
第十一步,安装成功在根目录下建立两个文件夹,主要用于存放env和网站文件的 (文件创建随意,根据实际需求)。
mkdir -p /data/env # 存放虚拟环境 mkdir -p /data/www # 存放web项目
第十二步,切换到/data/env/下,创建指定版本的虚拟环境。
virtualenv3 --python=/usr/bin/python web (项目名) # 创建虚拟环境
# 然后进入
cd /data/env/web/bin
# 进入bin目录后开启虚拟环境,执行命令
source activate
# 注:(启动后出现 (web),说明是成功进入虚拟环境。)
第十三步,虚拟环境里用pip3安django和uwsgi (留意:uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。)
pip3 install django #(如果用于生产的话,则需要指定安装和你项目相同的版本) pip3 install uwsgi # 给uwsgi建立软链接,方便使用 ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
第十四步,在本地项目目录下用下面的命令把当前的环境依赖包导出到requirements.txt文件
pip freeze > requirements.txt
第十五步,把项目源码压缩打包。把项目上传到服务器对应的目录里(/data/www/),解压。
这里可以导入本地数据库,其实django建model,只要在线上mysql数据库中建立项目中的数据库的名称,eg:python
然后,可以像本地开发一样 migrate 数据库,前提是已经安装好了数据库啊
第十六步,进入解压好的项目根路径中安装requirements.txt里的依赖包。
pip3 install -r requirements.txt
第十七步,安装mysql
wget -P /home/liudong http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
cd /home/liudong
安装mysql的YUM源:rpm -ivh mysql57-community-release-el7-11.noarch.rpm
检查mysql的YUM源是否安装成功:yum repolist enabled | grep "mysql.*-community.*"
查看mysql版本,执行:yum repolist all | grep mysql
查看当前的启用的 MySQL 版本:yum repolist enabled | grep mysql
yum install mysql-community-server
安装过程中一直输入"y"就可以了,当出现下面的结果时,就代表mysql数据库安装成功了
启动mysql服务:systemctl start mysqld
登录进Mysql(我的刚安装完时没有密码):mysql -uroot -p
查看默认密码
grep 'temporary password' /var/log/mysqld.log

进去之后重新设置密码
set password for 'root'@'localhost' = password('123456');
如果使用navicat for mysql链接不上 可能是这个原因 https://blog.csdn.net/qq_19306197/article/details/83820319
第十八步,通过 python3 manage.py runserver 运行一下项目,如果能正常启动则进行下一步,不能正常运行往上检查
如果报错: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__)
第十九步,在项目根目录里添加uwsgi配置文件 (uwsgi.ini)
[uwsgi]
socket = 127.0.0.1:8070
#是否使用主线程
master = true
# 项目在服务器中的目录(绝对路径)
chdir = /data/www/web
# Django's wsgi 文件目录
wsgi-file = web/wsgi.py
# 最大进程数
processes = 4
#每个进程的线程数
threads = 2
#状态监听端口
stats = 127.0.0.1:9191
# 退出时自动清理环境配置
vacuum = true
#目录下文件改动时自动重启
touch-reload = /data/www/web
#Python文件改动时自动重启
#py-auto-reload = 1
#后台运行并把日志存到.log文件
daemonize = /data/www/web/uWSGI.log
第二十步,进入部署到服务器的项目根目录下,执行
uwsgi --ini uwsgi.ini
第二十一步,查看端口,看下uwsgi是否存在
netstat -nltp

第二十二步,配置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 web.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /data/www/web/; #项目路径
}
location /static {
alias /data/www/web/myapp/static; #静态资源路径
}
location /templates {
alias /data/www/web/templates;
}
}
}
第二十三步,一定要注意Uwsgi和Nginx配置文件里的项目路径和静态资源路径,填写正确了才能成功访问。不然会出现502错误。还有就是,修改Django文件和其它配置文件之后,一定要重启Uwsgi和Nginx,不然不生效。
uwsgi 启动方法
uwsgi --ini uwsgi.ini
Nginx 重启方法
nginx -s reload
以下总结下注意事项:
1 项目上线后记得 DEBUG = False 这样设置,这样的话你的项目访问失败就不会有 Django 的错误信息了
2 设置所有 IP 都可访问 (settings.py)
ALLOWED_HOSTS = ['*']
3 数据库设置(settings.py)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'python', # 库名 (根据实际数据库名进行修改)
'PORT': 3306, # 端口(不用改)
'HOST': '127.0.0.1', # 本地host(不用改)
"USER": 'root', # 用户名
'PASSWORD': '123456' # 密码
}
}
在这里非常感谢 Q博主 https://www.cnblogs.com/chaoqi/p/11103188.html
python3.8.0 Django 开发后端接口api 部署到 Linux Centos7上的更多相关文章
- Vue学习笔记-Django REST framework3后端接口API学习
一 使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7 (Windows x86- ...
- Asp.net web api部署在某些服务器上老是404
asp.net web api部署在Windows服务器上后,按照WebAPI定义的路由访问,老是出现404,但定义一个静态文件从站点访问,却又OK. 这时,便可以确定是WebAPI路由出了问题,经调 ...
- django开发后台接口error 10053/10054
初学Django,开发完接口之后访问post请求的接口遇到error10053和10054,查阅很多资料没有找到具体的原因. 在这里记录下我遇到这两个报错的原因和解决方案: get请求取请求参数:su ...
- .net core Api 部署到Linux
一.环境介绍 1..net开发环境:asp.net core 3.1 2.Linux环境:CentOS Linux release 7.9.2009 (Core) 3.Swagger: Swashbu ...
- 前后端分离项目部署到Linux虚拟机
最近做了一个springboot+vue的前后端分离项目,把它部署到Linux虚拟机上.下面是我的步骤和遇到的问题,需要的朋友可以看下(看的时候注意要全部看完到底部,因为我习惯是把我遇到的问题放到最后 ...
- windows 下开发的 .netCore MVC 部署到 Linux(Mint)
这两天在公司跟同事偶然聊到 .netCore,说到一些趋势什么的.但是说来说去自己也没试过在Linux 机子上部署过,所以就试一下. 尝试之前也在网上看了一些文章,包括 Linux 上.netCore ...
- 使用Django开发简单接口:文章增删改查
目录 1.一些准备工作 安装django 创建django项目 创建博客应用(app) 2.models.py 3.django admin 登录 创建超级用户 4.修改urls.py 5.新增文章接 ...
- Django前后端分离项目部署
vue+drf的前后端分离部署笔记 前端部署过程 端口划分: vue+nginx的端口 是81 vue向后台发请求,首先发给的是代理服务器,这里模拟是nginx的 9000 drf后台运行在 9005 ...
- .net core web api部署到Linux系统CentOS 7
一.创建一个.net core web api 的Demo 完成后的项目结构如图 修改下监听端口 发布代码 二.发布到CentOS 7上并运行 下一步需要一定的虚拟机知识了,我这里使用了windows ...
随机推荐
- html和css常见问题解答
1. 详细描述层叠和继承的概念. 元素内嵌样式(用元素的全局属性style定义的样式) 文档内嵌样式(定义在style元素中的样式) 外部样式(用link元素导入的样式) 用户样式(用户定义的样式) ...
- ajax成功请求到后台(进断点),但是浏览器控制台报404错误!
向Controller发送请求,进入断点且走到最后一步,中间也没有报错.但是,结果没有成功响应,浏览器控制台报404. 原因:忘记加@ResponseBody,spring对返回值映射时找不到对应的视 ...
- Linux 学习记录一(安装、基本文件操作).
Linux 名字的由来,是当时作者将初版的 Linux 发布在网上,供别人下载完善,而那个核心文件夹就叫 Linux,就这么叫着了.而为什么 Linux 的吉祥物是一只企鹅呢?是因为当时大家要发行稳定 ...
- Android Monkey的用法(一)
Monkey 简介 ü Monkey 是一个命令行工具,可以运行在 Android 模拟器里或真实设备中.它可以向系统发送伪随机(pseudo-random)的用户事件流(如按键输入.触摸屏输入 ...
- IT兄弟连 HTML5教程 HTML文档头部元素head
HTML头部标记是<head>,主要包括页面的一些基本描述语句,以及CSS和JavaScript,一般都可以定义在头部元素中.它用于包含当前文档的有关信息,例如网页标题和关键字等.通常位于 ...
- IT兄弟连 Java语法教程 算符运算符
Java提供了丰富的运算符环境.可以将大部分Java运算符划分为4组:算术运算符.位运算符.关系运算符以及逻辑运算符.Java还定义了一些用于处理某些特定情况的附加运算符.本章将介绍除类型比较运算符i ...
- 关于unittest单元测试框架中常用的几种用例加载方法
unittest模块是Python自带的一个单元测试模块,我们可以用来做单元测试.unittest模块包含了如下几个子模块: 测试用例:TestCase 测试集:TestSuite 加载用例:Test ...
- EJB学习
EJB:企业级JavaBean(Enterprise JavaBean, EJB)是一个用来构筑企业级应用的服务器端可被管理组件. EJB主要有三种Bean: Session Beans: 会在单个特 ...
- 10、Fiddler中设置断点修改Response
当然Fiddler中也能修改Response 第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->After Response (这种方法会中 ...
- TCP协议如何保证可靠传输?
一.TCP的可靠传输如何保证? 在TCP连接中,数据流必须以正确的顺序传送给对方.TCP的可靠性是通过顺序编号和确认(ACK)实现的.TCP在开始传送一个段时,为准备重传而首先将该段插入到发送队列中, ...