- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python3+django2.0+apache2+ubuntu14部署网站上线的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
自己尝试在本地搭建了 django 项目后,想部署到自己云服务器上,经常多次尝试和多次踩坑(捂脸),总结如下:
环境:ubuntu14, django2.0, apache2.
1.首先安装需要的库包,在 ubuntu 下执行如下指令,为了能顺利安装建议使用 root 用户登录 ubuntu 或在 apt-get 前加上 sudo :
安装 apache2 。
1
2
|
apt
-
get update
#获取更新列表
apt
-
get install apache2
#安装 apache2apt-get install libapache2-mod-wsgi-py3 #让 apache2识别 python 程序的请求,安装 mod-wsgi模块
|
确认安装的 apache2 版本号 。
1
|
apachectl
-
v
|
安装和配置 git(这是为了从远程文档库中推送远程仓库到本地,如需上线的 django 项目) 。
1
2
3
|
apt
-
get install git
git config
-
-
global
user.name
'yourname'
git config
-
-
global
user.email
'youremail'
|
安装 python 的 pip 组件管理程序和虚拟机环境程序 virtualenv 。
1
2
|
apt
-
get install python3
-
pip
pip3 install virtualenv
|
2.配置远程的 django 项目 。
linux 操作系统中的 apache 网页服务器一般会把网页放在 /var/www/html 中,(安装 apache2后便生成 /var/www 目录),所以我们也将 django 项目放在 /var/www 下。首先在 /var/www 下使用 virtualenv 创建虚拟环境并启用,然后再使用 git clone 命令推送远程 django 项目分支到本地(这里以我自己的仓库为例https://github.com/weixuqin/mydjango.git),操作如下:
1
2
3
4
5
6
|
cd
/
var
/
www
#移动到 /var/www 目录下
virtualenv venv
#创建虚拟环境 venv
source venv
/
bin
/
activate
#激活虚拟环境 venv
git clone https:
/
/
github.com
/
weixuqin
/
mydjango.git
#克隆远程仓库到本地
cd mydjango
/
mblog
#移动到项目目录
pip install
-
r requirements.txt
#安装 requirements.txt文件中的库包
|
接下来我们可以使用下列命令来启动 django 来访问看看网站内容是否完整呈现.
1
|
python manage.py runserver
0
:
8000
|
3.修改settings.py,增加静态文件等设置 。
正式上线的网站我们不能通过使用 python manage.py runserver 这样的方式启用。应该通过网页服务器(如 apache)把远程浏览器的请求转送到 django 程序中执行,再把执行后的结果通过 apache 传回给浏览器.
主要涉及到两个文件,setting.py 和 wsgi.py。setting.py 负责做 django 网站的相关设置,而 wsgi.py 负责创建一个可以让 apache 顺利转交程序代码以及返回执行结果的设置文件.
setting.py 中修改如下:
1
2
3
4
5
6
7
8
9
|
# security warning: keep the secret key used in production secret!
#基于安全考虑,把原有 secret_keys的内容创建为/etc/secret_key.txt 文件,并使用读取的方式获取 secret_keys 的内容
with
open
(
'/etc/secret_key.txt'
) as f:
secret_key
=
f.read().strip()
# security warning: don't run with debug turned on in production!
debug
=
false
#关闭 debug 模式,关闭后静态文件不会自动加载,需指定路径
allowed_hosts
=
[
'*'
]
#指定允许存取此网站的 ip 地址为'*',表示不做任何限制
|
然后我们修改 setting.py,让静态文件正常加载:
1
2
3
4
5
|
static_url
=
'/static/'
staticfiles_dirs
=
[
os.path.join(base_dir,
'static'
)
]
statc_root
=
'/var/www/staticfiles'
|
然后运行 。
1
|
python manage.py collectstatic
|
将所有staticfiles_dirs中所有文件夹中的文件,以及各app中static中的文件都复制到 static_root 指定的文件夹中,把这些文件放到一起是为了用apache等部署的时候更方便.
linux 对文件权限很敏感,我们还需要修改文件权限让 apache2 能够正确读取到.
一般目录权限设置为 755,文件权限设置为 644 .
1
2
3
|
cd
/
var
/
www
/
mydjango
/
mblog
sudo chmod
-
r
644
zqxt
sudo find mblog
-
type
d | xargs chmod
755
|
4.修改 apache 中的文件,让网站上线 。
创建一个网站的配置文件 。
1
|
sudo vim
/
etc
/
apache2
/
sites
-
available
/
sitename.conf
|
这里以我的配置文件为例,可根据实际需求自行更改 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<virtualhost
*
:
80
>
#添加 wsgi.py 文件路径和虚拟环境路径
wsgiscriptalias
/
/
var
/
www
/
mydjango
/
mblog
/
mblog
/
wsgi.py
wsgidaemonprocess mblog python
-
path
=
/
var
/
www
/
mydjango
/
mblog:
/
var
/
www
/
venv
/
lib
/
python3.
4
/
site
-
packages
wsgiprocessgroup mblog
#添加静态文件路径
alias
/
static
/
/
var
/
www
/
staticfiles
/
<directory
/
var
/
www
/
staticfiles>
require
all
granted
<
/
directory>
#获取 wsgi.py 中内容
<directory
/
var
/
www
/
mydjango
/
mblog
/
mblog>
<files wsgi.py>
require
all
granted
<
/
files>
<
/
directory>
<
/
virtualhost>
|
切换到目录:/etc/apache2/sites-available/ 运行:
1
2
3
|
sudo service apache2
reload
sudo a2dissite
000
-
default && sudo a2ensite sitename.conf
sudo service apache2 restart
|
接着输入 服务器 ip 地址,如果成功,你将看到网站显示正常的内容,后续可以通过将域名解析到服务器等方式来访问.
我自己的如下:
**ps:自己将域名解析到服务器后网站一直报500错误,但是自己通过 ip 地址访问却一切正常,查找下原因,发现是解析域名到服务器,服务器如果在国内的,需要备案,不然是无法访问的,而自己恰巧是腾讯云的国内服务器,查找了好久,才发现一直报错是什么原因(捂脸).
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://www.cnblogs.com/weixuqin/p/9158919.html 。
最后此篇关于Python3+django2.0+apache2+ubuntu14部署网站上线的方法的文章就讲到这里了,如果你想了解更多关于Python3+django2.0+apache2+ubuntu14部署网站上线的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我对 Python-Django 和 web 开发还很陌生,我被困在这个使用 POST 创建新资源的特殊问题上。 我正在为 REST API 使用 Django REST 框架,我正在尝试创建一个新资
我已经使用 Django-storages 成功地将 Word 文档存储到 S3。 class Document(TitleSlugDescriptionModel, TimeStampedModel
我有 2 个关于模型代理的问题, 如何从模型对象创建代理对象? 如何从模型查询集创建代理查询集? 例如,假设我们定义了: from django.contrib.auth.models import
我想编写一个直接执行 HTTP 请求的单元测试(而不是使用 django.test.client.Client)。 如果您好奇为什么 - 那是因为我想测试我从 Django 应用程序公开的 Thrif
我为我的个人网站启动了一个 django 项目来学习 django。到目前为止,我已经将我的开发环境设置为我需要的一切,并遵循 this很棒的教程来创建一些基本的数据结构和模板。现在我想开始使用我之前
我已经阅读了很多关于如何在使用 Django 注册时添加额外字段的信息,例如 here 、 here 和 here 。代码片段是: forms.py(来自注册应用程序) class Registrat
我正在编写小型社交应用程序。功能之一是在网站标题中写入用户名。因此,例如,如果我登录并且我的名字是Oleg(用户名),那么我应该看到: Hello, Oleg | Click to edit prof
我有一个使用 Django 和 Django Rest 框架开发的应用程序。我想将 django-reversion 功能添加到我的应用程序中。 我已经尝试过http://django-reversi
我有一个简单的 HTML 表单,我没有使用 Django 表单,但现在我想添加一个选择。 选择最容易创建为 Django ChoiceField (与通过循环等手动创建选择相反),但是,如果没有在 D
我不明白为什么人们以两种方式编写外键,这样做的目的是什么?它们是相同还是不同? 我注意到有些人这样写: author = models.ForeignKey(Author, on_delete=mod
我想在我的 Django 应用程序中获取评论最多的十个帖子,但我做不到,因为我想不出合适的方法。 我目前正在使用 django 评论框架,并且我已经看到使用 aggregate or annotate
这对于 Django 1.2 仍然有效吗? Custom Filter in Django Admin on Django 1.3 or below 我已经尝试过,但管理类中的 list_filter
问题在于,当 django-compressor 编译为 .js 文件的 CoffeeScript 文件中引用 {{ STATIC_URL }} 时,它无法正确加载。 在我的 django 模板中,我
我正在尝试将一些字段从一个 django 模型移动到一个新模型。假设我有一个书籍模型: class Book(models.Model): title = models.CharField(max
我想在我的 Django 应用程序中获取评论最多的十个帖子,但我做不到,因为我想不出合适的方法。 我目前正在使用 django 评论框架,并且我已经看到使用 aggregate or annotate
目前我正在寻找在 Django 中实现访问控制。我已经阅读了有关内置权限的内容,但它并不关心每个对象的基础。例如,我想要“只有创建者可以删除自己的项目”之类的权限。所以我读到了 django-guar
嗨,我正在将我的 Django 模型的一个字段的值设置为其他模型的另一个字段的值。这个值应该是动态变化的。 这是我的第一个模型 class MainModel(AbstractBaseUser, Pe
我正在尝试为我的模型创建一个编辑表单。我没有使用模型表单,因为根据模型类型,用户可以使用不同的表单。 (例如,其中一个表单有 Tinymce 小部件,而另一个没有。) 有没有什么方法可以使用模型设置表
Django 模板中的搜索字段 如何在类似于此图像的 Django 模板中创建搜索字段 http://asciicasts.com/system/photos/1204/original/E354I0
根据 Django documentation ,如果 Django 安装激活了 AuthenticationMiddleware,HttpRequest 对象有一个“user”属性代表当前登录的用户
我是一名优秀的程序员,十分优秀!