Django线上部署教程:腾讯云+Ubuntu+Django+Uwsgi(转载)
网站名称: 向东的笔记本
本文链接: https://www.eastnotes.com/post/29
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
终于将Django成功部署到了腾讯云上,也实现了HTTPS的功能。现将步骤方法,部署环境一一列举如下,方便日后查看。
网站源码已经在github开源:https://github.com/mxdshr/DjangoEast ,欢迎克隆使用,并给个star~
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即可。
sudo su
2.1 安装python3.6
由于Ubuntu自带python2.7和python3.5,但这并不是我所需要的版本,因此需要额外安装python3.6,如果你用的是其他的版本,方法是一样的。命令如下:
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:
rm python3
ln -s python3.6 python3
2.2安装pip3
pip的作用不用多说了,主要是用来管理安装Python的各种包,安装方法如下:
apt-get install python3-pip
安装完还只是第一步,与Python一样,我们在终端输入pip,使用的还是系统自带的版本。我们需要做一下更改,原理与上面的python是一样的。
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号
Django线上部署教程:腾讯云+Ubuntu+Django+Uwsgi(转载)的更多相关文章
- Django线上部署实战教程之Nginx+Gunicorn+Django篇
############################################# 推荐 nginx supervisor gunicorn 配置简单,运维方便. Nginx (engi ...
- Django线上部署代码修改失效问题
记一次django项目的线上部署维护问题,django+nginx 关于nginx反向代理服务器的介绍这里有一篇博客介绍的比较好:nginx的相关介绍 以及当一次客户端请求发出后,uwsig以及uWS ...
- nginx+django线上部署
(一):背景在线 由于现在工作的需要,我需要使用Python来进行一个网站后台的开发,python之前接触过其语法的学习,基本的东西已经掌握,但是当时自学的时候是学得python3.5,而现在要使用p ...
- 创建Django项目并将其部署在腾讯云上
这段时间在做scrapy爬虫,对爬出来的数据基于Django做了统计与可视化,本想部署在腾讯云上玩玩,但是因为以前没有经验遇到了一些问题,在这里记录一下: 首先说下Django的创建与配置: 1. 创 ...
- 怎样将本地web数据库项目部署到腾讯云服务器上?
怎样将本地web数据库项目 部署到腾讯云服务器上? 1.本地计算机的工作: 1.1用eclipse或者myeclipse做好一个web项目,可以只做一个数据库的增删改查,本地部署到Tomcat服务器, ...
- Node+mongodb线上部署到阿里云
Node+mongodb线上部署到阿里云 部署使用的主要工具是pm2+nginx,使用码云的私有仓库,自动部署到服务器,私有仓库和服务器要事先设置好免密码登录.使用DNSPOD进行域名解析.事先准备好 ...
- 怎样将本地web项目部署到腾讯云服务器上?
怎样将本地web项目部署到腾讯云服务器上? 1.本地计算机的工作: (1).用eclipse新建一个web项目,然后在webcontent下新建一个index.html,然后在本地部署到Tomcat服 ...
- deepsooncms在Ubuntu 14.04上部署教程
deepsooncms在Ubuntu 14.04上部署教程 一.安装mono1.在命令行运行sudo apt-key adv --keyserver keyserver.ubuntu.com --re ...
- 【Maven篇】---解决Maven线上部署java.lang.ClassNotFoundException和no main manifest attribute解决方法
一.前述 maven 线上部署的话会出现一些问题比如java.lang.ClassNotFoundException或者no main manifest attribute的话,是因为maven 配置 ...
随机推荐
- windows7 配置 python开发环境
1.安装python2.7 官网下载,安装,配置环境变量 path,命令行 执行python 2.easy_install 安装 win7 64位必须使用ez_setup.py进行安装. 方法 ...
- Apple Swift学习教程
翻译自苹果的官方文档:The Swift Programming Language. 简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Progr ...
- JAVA 并发编程-读写锁之模拟缓存系统(十一)
在多线程中,为了提高效率有些共享资源同意同一时候进行多个读的操作,但仅仅同意一个写的操作,比方一个文件,仅仅要其内容不变能够让多个线程同一时候读,不必做排他的锁定,排他的锁定仅仅有在写的时候须要,以保 ...
- 《ASP.NET4 从入门到精通》学习笔记4
第4部分诊断与插件 刚開始看这章的时候,真实一头雾水.不知道在讲什么.只是看了关于http pipeline之后.才了解相关说明. 因此对于这一章的学习,建议各位首先看看http pipeline然后 ...
- Java 技术体系(JDK 与 JRE 的关系)、POJO 与 JavaBeans
Java 技术体系的分层结构(不同的颜色表示不同的层次),尤其注意 JDK 与 JRE 之间的包含关系: 图见 Java Platform Standard Edition 7 Documentati ...
- POJ3709 K-Anonymous Sequence 斜率优化DP
POJ3709 题意很简单 给n个递增整数(n<=500000)和一种操作(选择任意个数 使他们减少整数值) 使得对于所有的整数 在数列中 有k个相等的数 O(n^2)的DP方程很容易得出 如下 ...
- CodeForces 382C Arithmetic Progression (排序+分类讨论)
题意:给出一个长度为n的序列,表示有n张卡片,上面的数字,现在还有一张卡片,上面没有数字,问说可以写几种数字在这张卡片上面, 使得n+1张卡片上的数字可以排列成一个等差数列,有无限多种时输出-1. 析 ...
- 浙江省CIO协会钱塘江论坛近日在网易云创沙龙宣布成立
本文来自网易云社区 9月19日,由网易云与浙江省首席信息官协会共同主办的“网易云创CIO沙龙”在杭州举行,本次活动以“瞩目钱塘,赋能企业数字化创新”为主题,网易云企业服务部总经理岳峥辉,浙江省首席信息 ...
- HTML5常用知识点
github代码:https://github.com/showkawa/H5C3/tree/master/html5 1.自定义属性 data- 1.1 可以给html里的所有DOM对象都可以添加一 ...
- 【知识总结】多项式全家桶(三)(任意模数NTT)
经过两个月的咕咕,"多项式全家桶" 系列终于迎来了第三期--(雾) 上一篇:[知识总结]多项式全家桶(二)(ln和exp) 先膜拜(伏地膜)大恐龙的博客:任意模数 NTT (在页面 ...