Python3 + django2.0 + apache2 + ubuntu14部署网站上线
自己尝试在本地搭建了 Django 项目后,想部署到自己云服务器上,经常多次尝试和多次踩坑(捂脸),总结如下:
环境:ubuntu14, django2.0, apache2。
1.首先安装需要的库包,在 ubuntu 下执行如下指令,为了能顺利安装建议使用 root 用户登录 Ubuntu 或在 apt-get 前加上 sudo :
安装 Apache2
apt-get update #获取更新列表
apt-get install apache2 #安装 Apache2
apt-get install libapache2-mod-wsgi-py3 #让 Apache2识别 Python 程序的请求,安装 mod-wsgi模块
确认安装的 Apache2 版本号
apachectl -v

安装和配置 Git(这是为了从远程文档库中推送远程仓库到本地,如需上线的 Django 项目)
apt-get install git
git config --global user.name 'yourname'
git config --global user.email 'youremail'
安装 Python 的 pip 组件管理程序和虚拟机环境程序 virtualenv
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),操作如下:
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 来访问看看网站内容是否完整呈现。
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 中修改如下:
# 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,让静态文件正常加载:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATC_ROOT = '/var/www/staticfiles'
然后运行
python manage.py collectstatic
将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制到 STATIC_ROOT 指定的文件夹中,把这些文件放到一起是为了用apache等部署的时候更方便。
Linux 对文件权限很敏感,我们还需要修改文件权限让 Apache2 能够正确读取到。
一般目录权限设置为 755,文件权限设置为 644 。
cd /var/www/myDjango/mblog
sudo chmod -R zqxt
sudo find mblog -type d | xargs chmod
4.修改 Apache 中的文件,让网站上线
创建一个网站的配置文件
sudo vim /etc/apache2/sites-available/sitename.conf
这里以我的配置文件为例,可根据实际需求自行更改
<VirtualHost *:>
#添加 wsgi.py 文件路径和虚拟环境路径
WSGIScriptAlias / /var/www/myDjango/mblog/mblog/wsgi.py
WSGIDaemonProcess mblog python-path=/var/www/myDjango/mblog:/var/www/VENV/lib/python3./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/ 运行:
sudo service apache2 reload
sudo a2dissite -default && sudo a2ensite sitename.conf
sudo service apache2 restart
接着输入 服务器 IP 地址,如果成功,你将看到网站显示正常的内容,后续可以通过将域名解析到服务器等方式来访问。
我自己的如下:

**PS:自己将域名解析到服务器后网站一直报500错误,但是自己通过 IP 地址访问却一切正常,查找下原因,发现是解析域名到服务器,服务器如果在国内的,需要备案,不然是无法访问的,而自己恰巧是腾讯云的国内服务器,查找了好久,才发现一直报错是什么原因(捂脸)。
Python3 + django2.0 + apache2 + ubuntu14部署网站上线的更多相关文章
- 基于centos7+nginx+uwsgi+python3+django2.0部署Django项目
0.序言 本文讲解如何基于centos7+nginx+uwsgi+python3+django2.0把windows上的本地项目部署到云服务器上. 本文服务器上的django项目和虚拟环境的路径将建立 ...
- Python 3之Django2部署(centos7+nginx+python3+django2.0)
前置工具,系统为centos7.5,为了方便管理,可以安装宝塔免费版本 首先, yum install -y wget && wget -O install.sh http://dow ...
- 10 腾讯云、django2.0、uwsgi、mysql、nginx 部署
1.腾讯云 操作系统 Ubuntu Server 16.04.1 LTS 64位 获取root权限 ubuntu@VM---ubuntu:~$ sudo passwd root Enter new U ...
- Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(1)
1.开发环境配置 Windows7 64位旗舰版 python3.6 node.js mysql navicat pycharm webstorm或vscode 2.项目初始化 新版的pycharm很 ...
- python3.8.0 Django 开发后端接口api 部署到 Linux Centos7上
经历了两天的时候终于把本地使用python3 django开发的接口API部署到服务器上了,还是记录一下,以免之后忘记,哈哈 注意一点,就是,centos7是基于python2的,我这边默认的是pyt ...
- 在阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4
上次在网上找了一个在阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4的文档,可能是这个文档不是最新版的,安装的时候遇到了很多问题, 最后跟一个大神要了一 ...
- 【Python3.6+Django2.0+Xadmin2.0系列教程一】环境搭建及项目创建
由于工作需要,接触了大半年时间的Django+xadmin框架,一直没空对这块对进行相关的梳理.最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧. 好了,话不多说,下面开始进入正题: 环境需求: ...
- Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)
Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项 参考:https://blog.csdn.net/weixin_40475396/article/detail ...
- Python3.7+Django2.0.4配合Mongodb打造高性能高扩展标签云存储方案
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_141 书接上回,之前有一篇文章提到了标签云系统的构建:Python3.7+jieba(结巴分词)配合Wordcloud2.js来构 ...
随机推荐
- Arp内网毒化
攻击者:192.168.220.143 受害者:192.168.220.137 默认网关:192.168.220.2 首先,开启IP转发 使用工具Arpspoof进行ARP毒化,把受害者的流量传送给网 ...
- js中的requestAnimationFrame
js中的requestAnimationFrame requestAnimationFrame的作用就是重绘 一个简单的demo如下 <!DOCTYPE html> <html la ...
- 【树莓派智能门锁】使用脚本控制GPIO来开锁【4】
假定你已经通过此文章或者其他方式完成了树莓派的基本配置 [树莓派]RASPBIAN镜像初始化配置 我们通过VNC View连接到树莓派查看一下~ 1.更新一下基本的设置:更新一下源,把python-d ...
- flask系列八之请求方法、g对象和钩子函数
一.get方法 ,post方法 post请求在模板中要注意几点: (1)input标签中,要写name来标识这个value的key,方便后台获取. (2)在写form表单的时候,要指定method=' ...
- 【整理】Android中的gravity和layout_gravity区别
[背景] 在Android中,想要设置个按钮的水平对齐,都累死了: [已解决]ADT中已设置TableLayout布局的情况下如何设置按钮居中对齐 所以现在有必要搞清楚,到底gravity和la ...
- 去掉字符串中的html标签
public static string removeHtml(string html) { System.Text.RegularExpressions.Regex regex1 = new Sys ...
- libevent网络编程汇总
libevent源码剖析: ========================================================== 1.libevent源码剖析一(序) 2.libeve ...
- express源码学习
终于腾出手来学习express.express在node.js中一株独秀.好像任何一种有主导的托管平台的语言,都出现这现象--马太效应.express是社区的共同孩子,里面聚集上社区最好的常用模块.从 ...
- Reading RxJava Marble Diagrams
------>表示一个Observable(承时间推移,由左入右,左边item先发射) ------>上面的图形,表示这个Observable发射的item ------>上的的|( ...
- Tornado之抽屉实战(3)--注册
知识点应用:标签绑定事件,jQuery获取用户值-->AJAX发送数据-->后台路由系统-->业务逻辑处理-->ORM数据操作-->write返回-->AJAX回调 ...