drf项目部署到腾讯云

1.部署准备

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

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

2.本地需要的软件工具

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

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

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

sudo -i

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

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

3.本地项目准备

1.django项目

1.settings.py配置

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

ALLOWED_HOSTS = ['公网ip']

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

STATIC_ROOT=os.path.join(BASE_DIR,'static')
STATICFILES_DIR=[os.path.join(BASE_DIR,'static'),] #这一条在开发阶段就可以添加

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

DEBUG = False

2.生成requirements.txt

pip freeze >requirements.txt

3.将gg项目打包成zip包

 

2.同步数据库

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

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

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

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

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

3.设置远程连接密码

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.查看是否上传成功

mysql -u root -p
#输入密码
show databases;
#查看本地数据库是否上传上来了
quit;

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

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

3.上传项目并且运行

1.项目上传

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

2.解压

cd /home/ubuntu
ls
unzip gg.zip

3.配置虚拟环境

1.创建虚拟环境

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

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

cd gg
pip3 install -r requirements.txt

 

4.测试运行项目

1.运行项目:

python manage.py runserver 0.0.0.0:8000

2.在安全组打开8000端口

3.浏览器访问:

http://公网ip:8000/xadmin/

4.退出运行状态:

Ctrl键+C键

4.安装配置Nginx

1.安装Nginx

apt-get install nginx
y

2.Nginx配置

1.删除default:

#防止错误,先把default文件给删除了
cd /etc/nginx/sites-available/
rm default 
ls
cd /etc/nginx/sites-enabled
ls
rm default 
ls

2.新建配置文件:

cd /etc/nginx/sites-available/
vim gg.conf

3.编辑内容:

i #进入编辑状态

内容:

server{
  listen 80;
  server_name gg;
  charset utf-8;

  client_max_body_size 75M;

  location /static {
    alias /home/ubuntu/gg/static;
  }
  location /media {
    alias /home/ubuntu/gg/media;
  }

  location / {
    uwsgi_pass 127.0.0.1:8000;
    include /etc/nginx/uwsgi_params;
  }
}

保存退出:

Esc键+输入:wq+回车 #保存退出

5.安装和配置uwsgi

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

#退出虚拟环境
deactivate
cd ..
apt install python3-pip
y
apt-get install -y python3-dev pip3 install uwsgi

2.使用uwsgi启动项目

1.运行项目

uwsgi --chdir /home/ubuntu/gg --home /home/ubuntu/env36 --http :8000 --module gg.wsgi

2.浏览器访问:

http://公网ip:8000/xadmin/

3.退出运行状态:

Ctrl键+C键

3.配置uwsgi

1.创建ini文件

cd /home/ubuntu
mkdir gg_uwsgi #创建一个目录,专门存放uwsgi的相关文件 cd gg_uwsgi/ vim gg.ini #创建一个ini文件

2.编辑ini文件

进入编辑模式:

i #进入编辑模式

输入内容:

[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

保存退出

Esc键+输入:wq+回车 #保存并退出

4.通过ini启动uwsgi

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

uwsgi --ini /home/ubuntu/gg_uwsgi/gg.ini

 

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

ps -aux | grep uwsgi

uwsgi --reload /home/ubuntu/gg_uwsgi/master.pid #重启
uwsgi --stop /home/ubuntu/gg_uwsgi/master.pid #停止

 5.建立软连接

cd /etc/nginx/
ln -s /etc/nginx/sites-available/gg.conf /etc/nginx/sites-enabled/gg.conf #复制一份配置文件到enabled目录下
ls sites-enabled/
nginx -t #查看Nginx运行情况
service nginx restart #重启Nginx

6.运行测试

1.打开80端口(默认是已经是打开的)

2.浏览器访问:

http://公网ip/xadmin/ #注意,这次没有:8000端口号

css丢失了

6.收集静态文件

1.收集静态文件命令:

cd /home/ubuntu
. env36/bin/activate
cd gg
python manage.py collectstatic
yes
#退出虚拟环境
deactivate

2.测试

浏览器刷新访问:

http://公网ip/xadmin/ #注意,这次没有:8000端口号

7.域名配置和https

1.域名购买

1.在腾讯云购买一个域名

2.域名备案

2.域名解析

1.在腾讯云控制台,选择域名管理,然后选择域名解析

2.测试域名解析是否成功了,在本地打开cmd。

ping 域名

3.申请免费的SSL证书

1.腾讯云搜索ssl,然后挑选那个免费的ssl证书,输入相关验证信息,等待通过验证

2.下载到本地

4.nginx安装ssl证书

1.腾讯云nginx安装ssl证书的文档:

https://cloud.tencent.com/document/product/400/35244

2.按照腾讯云的文档

如果存在/usr/local/nginx/conf 目录,则将1_www.xxxx.com_bundle.crt 证书文件和 2_www.xxxx.com.key 私钥文件从本地目录拷贝到此目录下。
如果不存在,则mkdir建立/usr/local/nginx/conf 目录

3.使用filezilla只能以ubuntu的身份与云服务器进行连接,所以只能先将证书文件和私钥文件上传到ubuntu目录下

4.将证书文件和私钥文件拷贝到conf目录下

cp 1_www.luoyikeji.cn_bundle.crt /usr/local/nginx/conf
cp 2_www.luoyikeji.cn.key  /usr/local/nginx/conf
cd /usr/local/nginx/conf

5.编辑/etc/nginx/sites-available/gg.conf

server{
  listen 443;
  server_name www.luoyikeji.cn;
  charset utf-8;

  ssl on;
  ssl_certificate /usr/local/nginx/conf/1_www.luoyikeji.cn_bundle.crt; #证书文件名称
  ssl_certificate_key /usr/local/nginx/conf/2_www.luoyikeji.cn.key; #私钥文件名称
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;

  client_max_body_size 75M;

  location /static {
    alias /home/ubuntu/gg/static;
  }
  location /media {
    alias /home/ubuntu/gg/media;
  }

  location / {
    uwsgi_pass 127.0.0.1:8000;
    include /etc/nginx/uwsgi_params;
  }
}

server {
listen 80;
server_name www.luoyikeji.cn; #填写绑定证书的域名
rewrite ^(.*)$ https://$host$1 permanent; #把http的域名请求转成https
}

6.重启nginx

nginx -t
service nginx restart

7.测试访问:

https://www.域名/xadmin/

 

posted @ 2019-06-26 23:22  雪落忆海  阅读(676)  评论(0编辑  收藏  举报