Django线上部署教程:腾讯云+Ubuntu+Django+Uwsgi(转载)

网站名称: 向东的笔记本
本文连接: https://www.eastnotes.com/post/29
版权声明: 本博客全部文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!css

终于将Django成功部署到了腾讯云上,也实现了HTTPS的功能。现将步骤方法,部署环境一一列举以下,方便往后查看。python

网站源码已经在github开源:https://github.com/mxdshr/DjangoEast ,欢迎克隆使用,并给个star~mysql

1.部署环境与工具

  • 腾讯云
  • Ubuntu Server 16.04.1 LTS 64位
  • Django2.0.8
  • python3.6.7
  • Git
  • Nginx1.10.3
  • Uwsgi
  • Filezilla
    其中Filezilla是用来向服务器上传文件的,以前我一直尝试给Ubuntu安装vsftpd,觉得得搭建ftp才能传文件,其实否则,用Filezilla登陆root帐户也能进行传文件,端口是22。

2.部署步骤

在进行部署前,请保证你的Ubuntu是刚刚装好的,纯净的!也要确保系统的登陆用户是root,若是不是root,使用下面的命令切换到root便可。nginx

sudo sugit

2.1 安装python3.6

因为Ubuntu自带python2.7和python3.5,但这并非我所须要的版本,所以须要额外安装python3.6,若是你用的是其余的版本,方法是同样的。命令以下:github

apt-get install software-properties-common
add-apt-repository ppa:jonathonf/python-3.6
apt-get update
apt-get install python3.6

安装完以后,在终端输入python使用的仍是2.7的版本,所以咱们须要作下面的更改,使终端默认打开咱们安装的python3.6:web

cd /usr/bin rm python3 ln -s python3.6 python3sql

2.2安装pip3

pip的做用不用多说了,主要是用来管理安装Python的各类包,安装方法以下:数据库

apt-get install python3-pip

安装完还只是第一步,与Python同样,咱们在终端输入pip,使用的仍是系统自带的版本。咱们须要作一下更改,原理与上面的python是同样的。django

cd /usr/bin
rm pip3
ln -s pip3.6 pip3

从新登陆可生效,而后就能够用pip3装库了

pip3 install --upgrade pip

不知道是什么缘由,这样操做以后不会立马生效,须要你从新登陆一下服务器才行。好,假设你如今从新登陆了,在终端输入pip3也是咱们所要的了,如今须要给pip作一下升级。

pip3 install --upgrade pip

2.3安装并配置虚拟环境virtualenv

建议你们在一个独立的Python虚拟环境中对网站进行操做,安装命令以下:

pip3 install virtualenv

进入一个你想要存放虚拟环境的目录,这里我选择/home,虚拟环境名我取为django,而后建立并激活虚拟环境:

virtualenv django
source /home/django/bin/activate

之后你们在进行操做的时候,必定要记得先激活虚拟环境,在django的环境下安装python包或者操做django的manage.py文件。

2.4 安装git,下载网站

使用Git能够很方便的与github进行交互操做,帮咱们更新网站源码文件,安装方式以下:

apt-get install git

安装完以后须要选择一个存放网站程序的目录,这里我选择/home/mysite,mysite目录默认是没有的,须要你建立,而后进入到此目录中,用Git将网站pull下来,这里我以个人已经开源到github上的Django博客为例,下载网站程序的方法以下:

git init
git remote add origin https://github.com/mxdshr/DjangoEast.git
git pull origin master

好了,如今咱们已经获取了网站的程序,接下来咱们安装Django程序所需python包

2.5安装网站运行环境

进行此操做前,请保证你如今已经处于Django这个虚拟环境中:

pip install -r requirements.txt

这个时候,Django程序运行所须要的全部python包,都已经装入到你的环境中了,如今网站还不能运行,咱们须要安装数据库。

2.6安装数据库MySQL

这里我选择的是MySQL5.8版本,安装步骤以下:

cd /home
wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb
dpkg -i mysql-apt-config_0.8.12-1_all.deb
*选择8.0便可*
apt-get update
apt-get install mysql-server

安装的过程当中会提示你输入密码,必定要记好哈!安装完以后须要建立数据库,建立用户并受权:

mysql -uroot -p
CREATE DATABASE `数据库名` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%';
FLUSH PRIVILEGES;

这个时候数据库的配置咱们就弄完了,接下来,请先修改网站程序中djangoblog/settings.py中的数据库配置,修改完以后的操做分为两种状况: - 若是你想用以前的数据库,请用MySQL客户端(如Navicat)对其进行数据导入。 - 若是你没有数据库,请在网站根目录下运行下面的命令,建立数据表。

python manage.py makemigrations
python manage.py migrate

好了,Django程序和数据库已经配置好了。咱们能够简单地运行一下网站了,先切换到网站根目录下,而后执行:

python manage.py runserver 0.0.0.0:80

0.0.0.0:80表示任意ip可访问,这样设置你就可使用服务器ip地址访问你的网站了。可是仅使用python自带的runserver工具运行网站程序是远远不够的。咱们还须要nginx或Apache等服务器管理软件来更好的运行咱们的网站,另外咱们还须要安装uwsgi。

2.7安装uwsgi

安装uwsgi以前咱们须要安装python开发包:

apt-get install python3.6-dev

而后再安装uwsgi,安装以前请先退出django这个虚拟环境,咱们在公共环境中安装它.

pip3 install uwsgi

安装完以后,咱们就能够用uwsgi来测试网站是否能成功运行了,使用下面的命令:

uwsgi --http :8888 --chdir /home/mysite --home /home/django --module djangoblog.wsgi:application

--http :用于指定端口,这里我指定8888,请先在腾讯云安全组中开放此端口
--chdir:用于指定网站根目录
--home:用于指定虚拟环境地址
--module:用于指定你的Django项目地址
而后咱们在浏览器地址中输入http://你的服务器ip地址:8888,就能够看到没有css样式的页面了。之因此看不到样式,是由于uwsgi只能提供动态连接服务,要是访问静态文件须要安装nginx:

2.8安装nginx

apt-get install nginx

安装完以后咱们须要对nginx进行一些配置,不过首先咱们须要知道nginx的配置文件都有哪些:

主配置文件:/etc/nginx/nginx.conf通常不用动
可用配置文件:/etc/nginx/sites-available咱们通常更改这里的配置文件
已用配置文件:/etc/nginx/sites-enabled,已经启用的配置文件 咱们在可用配置文件目录,新建一个mysite.conf此文件用于配置咱们的项目。
cd /etc/nginx/sites-available
vim mysite.conf

而后在文件中写入下面的配置:

upstream django {
    server 127.0.0.1:8888; # for a web port socket (we'll use this first)
}

server{
    listen 80;
    server_name mysite;
    charset utf-8;
    client_max_body_size 75M;  #上传文件大小限制

    # 网站静态文件所在目录
    location /static{
        alias /home/mysite/static;
    }
    
    # 上传文件所在目录
    location /media{
        alias /home/mysite/media;
    }
    
    # 动态文件交给uwsgi处理
    location / {
        uwsgi_pass 127.0.0.1:8888;
        include /etc/nginx/uwsgi_params;
    }
}

而后将此文件再sites-enabled中建立一个软链接,表示此配置文件已经启用:

ln -s /etc/nginx/sites-available/mysite.conf   /etc/nginx/sites-enabled/mysite.conf

另外咱们还须要将启动nginx的用户改成root,要否则会出现403 forbidden的错误。打开/etc/nginx/nginx.conf文件,将第一行中user后面的用户改成root便可。

2.9配置uwsgi

以前咱们只是简单的测试了一下uwsgi,可是尚未对它进行配置。如今须要进行配置,首先在/home目录下建立一个mysite_uwsgi目录,而后在目录中建立一个mysite.ini文件用于保存uwsgi的配置选项。

cd /home
mkdir mysite_uwsgi
cd mysite_uwsgi
vim mysite.ini

写入下面的内容

[uwsgi]
chdir = /home/mysite
home = /home/django
module = djangoblog.wsgi:application
master = True
processes = 4
max-requests = 5000
harakiri = 60
socket = 127.0.0.1:8888
uid = root
gid = root
pidfile = /home/mysite_uwsgi/master.pid
daemonize = /home/mysite_uwsgi/mysite.log
vacuum = True

好了,如今nginx配置完了,uwsgi也配置完了,咱们就能够测试网站是否可以成功了,因而用mysite.ini文件打开uwsgi。

uwsgi --ini /home/mysite_uwsgi/mysite.ini

检查uwsgi是否启动成功的命令:

ps -aux | grep uwsgi

若是结果中有多个进程,咱们就能够看到它启动成功了。

2.10 配置HTTPS

如今的网站基本都标配HTTPS,若是不是的话浏览器会提示你的网站不安全。也会影响搜索引擎收录,所以咱们须要将网站升级到HTTPS。

我用的是腾讯云,腾讯云能够免费申请一个TrustAsia TLS RSA CA证书,该SSL证书可用一年,申请以后你就能够获得两个文件一个.crt,一个是.key。咱们须要将这两个文件用Filezilla传到/etc/nginx/目录下。

而后在/etc/nginx/nginx.conf文件里的http模块中写入下面的配置文件,这个内容是将http请求转到https请求,网站域名改为你本身的:

server{
    listen 80;
    server_name eastnotes.com www.eastnotes.com;
    rewrite ^(.*) https://$host$1 permanent;
}

而后打开/etc/nginx/sites-available/mysite.conf在里面填入一下内容:

listen 443 ssl http2;
server_name www.eastnotes.com,eastnotes.com;
ssl_certificate 1_www.eastnotes.com_bundle.crt;
ssl_certificate_key 2_www.eastnotes.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

重启nginx

nginx -t
service nginx restart

好了,如今打开网站应该就看到https的前缀了,可是还不够,咱们须要将全部的不带www的链接进行301重定向到带www的链接,在/etc/nginx/sites-available的location里面添加以下代码:

if ($host != 'www.eastnotes.com' ) {
    rewrite ^/(.*)$  https://www.eastnotes.com/$1   permanent;
}

至此,Django的线上部署所有完成......真TM费劲啊!!!

3.经常使用命令

# 检查nginx配置文件是够有错误

nginx -t

# 重启nginx
service nginx restart

# 查看uwsgi进程
ps -aux | grep uwsgi

# 正常关闭uwsgi进程
uwsgi --stop /home/mysite_uwsgi/master.pid

# 强制关闭所有uwsgi进程
ps -aux | grep uwsgi |awk '{print $2}'|xargs kill -9

# 从新加载uwsgi
uwsgi --reload /home/mysite_uwsgi/master.pid

x lsof -i:9000      #查看端口占用状态​

netstat -lnp| grep 9000  #查看端口占用状态​

kill -9 +PID号
相关文章
相关标签/搜索