drf项目部署到腾讯云

1.部署准备

1.腾讯云服务器(Ubuntu 16.04系统)

在购买了腾讯云服务器成功之后,腾讯云的站内信会将系统的登录名:Ubuntu,以及登录初始密码发给你。

2.本地需要的软件工具

1. Xshell 远程操作服务器实例

通过Xshell,打开软件→【文件】→【新建】→【新建会话,输入云服务器的公网ip,用户名:ubuntu,登录初始密码】即可连接到云服务器。

为了方便安装包,从用户ubuntu切换为root用户:

代码语言:javascript
复制
sudo -i

2. filezilla 用于将打包成zip包的项目压缩文件包,上传到云服务器的  /home/ubuntu目录下

3.Navicat for Mysql 用于同步本地和服务器的数据库

3.本地项目准备

1.django项目

1.settings.py配置

1.settings.py中配置公网ip才允许访问:

代码语言:javascript
复制
ALLOWED_HOSTS = ['公网ip']

2.settings.py中追加静态文件路径配置代码:

代码语言:javascript
复制
STATIC_ROOT=os.path.join(BASE_DIR,'static')
STATICFILES_DIR=[os.path.join(BASE_DIR,'static'),] #这一条在开发阶段就可以添加

3.settings.py中关闭开发调试模式:

代码语言:javascript
复制
DEBUG = False

2.生成requirements.txt

代码语言:javascript
复制
pip freeze >requirements.txt

3.将chaoyuecun项目打包成zip包

2.同步数据库

1.在云服务器安装Mysql数据库

1.服务器安装Mysql5.7(目前默认安装的Mysql就是5.7版本的)

代码语言:javascript
复制
apt-get install mysql-server
y
#设置数据库密码,跟本地的数据库密码设置为相同的就可以,省着在项目的settings中麻烦再特意做修改了
apt-get install mysql-client
apt-get install libmysqlclient-dev
y

2.修改服务器数据库配置文件,使之允许远程连接

代码语言:javascript
复制
vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 英文输入环境下,敲 i 键,进入插入模式
#上下左右键移动光标,注释掉 bind-address = 127.0.0.1
#英文输入环境下,敲Esc键,输入:wq 保存退出

3.设置远程连接密码

代码语言:javascript
复制
mysql -u root -p
#输入密码(不显示),登录mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;
quit;
#重启mysql服务
/etc/init.d/mysql restart

2.使用Navicat,将本地数据库传到腾讯云服务器

1.建立连接

连接本地:点击左上角控制面板的【连接】→选择【MySQL】→随便取个连接名字,测试连接,提示连接成功即可。

连接服务器:点击左上角控制面板的【连接】→选择【MySQL】→随便取个连接名字,输入云服务器的公网pi,用户名:root,密码123456,点击测试连接,提示连接成功即可。

2.传输数据

选择本地要传输到服务器的数据库,然后选择数据库连接,点击开始,确定,然后等待传输完成,关闭。

3.查看是否上传成功

代码语言:javascript
复制
mysql -u root -p
#输入密码
show databases;
#查看本地数据库是否上传上来了
quit;

4.修改服务器数据库配置文件,使之不允许远程连接

代码语言:javascript
复制
vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 英文输入环境下,敲 i 键,进入插入模式
#上下左右键移动光标,将注释掉的 bind-address = 127.0.0.1 恢复
#英文输入环境下,敲Esc键,输入:wq 保存退出
代码语言:javascript
复制
#重启mysql服务
/etc/init.d/mysql restart

3.上传项目并且运行

1.安装python3.6

因为腾讯云的Ubuntu16.04默认安装的python版本是2.7和3.5,而在本地开发时,用的是python3.6,所以需要下载安装python3.6

1.相关依赖,防止因为缺少依赖报错,安装一遍保平安:

代码语言:javascript
复制
apt-get install openssl  
apt-get install libssl-dev
y
apt-get install libc6-dev gcc 
y
apt-get install -y make build-essential zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm tk-dev 

2.安装python3.6

代码语言:javascript
复制
add-apt-repository ppa:jonathonf/python-3.6
#回车
apt-get update
apt-get install python3.6
y

3.将默认的Python 链接指向Python3.6

代码语言:javascript
复制
cd /usr/bin
rm python
ln -s python3.6 /usr/bin/python
python -V

2.项目上传

1.使用FileZilla上传项目的zip包到ubuntu目录下

2.解压

代码语言:javascript
复制
cd /home/ubuntu
ls
unzip gg.zip

3.配置虚拟环境

1.创建虚拟环境

代码语言:javascript
复制
#安装虚拟环境
apt-get install python3-venv
y
#在当前目录下,创建一个python3.6的虚拟环境,取名为env36
python3 -m venv env36
. env36/bin/activate
#进入虚拟环境
#退出虚拟环境 deactivate

2.在虚拟环境中安装依赖库

代码语言:javascript
复制
cd gg
pip3 install -r requirements.txt

4.测试运行项目

1.运行项目:

代码语言:javascript
复制
python manage.py runserver 0.0.0.0:8000

2.在安全组打开8000端口

3.浏览器访问:

代码语言:javascript
复制
http://公网ip:8000/xadmin/

4.退出运行状态:

代码语言:javascript
复制
Ctrl键+C键

4.安装和配置uwsgi

1.安装uwsgi到真实(非虚拟环境)环境下

代码语言:javascript
复制
#退出虚拟环境
deactivate
cd ..
apt install python3-pip
y
pip3 install uwsgi

2.使用uwsgi启动项目

1.运行项目

代码语言:javascript
复制
uwsgi --chdir /home/ubuntu/gg --home /home/ubuntu/env36 --http :8000 --module gg.wsgi

2.浏览器访问:

代码语言:javascript
复制
http://公网ip:8000/xadmin/

3.退出运行状态:

代码语言:javascript
复制
Ctrl键+C键

3.配置uwsgi

1.创建ini文件

代码语言:javascript
复制
mkdir gg_uwsgi #创建一个目录,专门存放uwsgi的相关文件
cd gg_uwsgi/
vim gg.ini #创建一个ini文件

2.编辑ini文件

进入编辑模式:

代码语言:javascript
复制
i #进入编辑模式

输入内容:

代码语言:javascript
复制
[uwsgi]
chdir = /home/ubuntu/gg
home = /home/ubuntu/env36
module = gg.wsgi:application

master = True
processes = 4
harakiri = 60
max-requests = 5000

socket = 127.0.0.1:8000

uid = 1000
gid = 2000

pidfile = /home/ubuntu/gg_uwsgi/master.pid
daemonize = /home/ubuntu/gg_uwsgi/gg.log
vacuum = True

保存退出

代码语言:javascript
复制
Esc键+输入:wq+回车 #保存并退出

4.通过ini启动uwsgi

1.执行通过ini启动项目命令:

代码语言:javascript
复制
uwsgi --ini /home/ubuntu/gg_uwsgi/gg.ini

2.执行检验是否启动了多线程:

代码语言:javascript
复制
ps -aux | grep uwsgi
代码语言:javascript
复制
uwsgi --reload /home/chaoyuecun_uwsgi/master.pid #重启
uwsgi --stop /home/chaoyuecun_uwsgi/master.pid #停止