Python3 + django2.0 + apache2 + ubuntu14部署网站上线

  本身尝试在本地搭建了 Django 项目后,想部署到本身云服务器上,常常屡次尝试和屡次踩坑(捂脸),总结以下:html

  环境:ubuntu14, django2.0, apache2。python

  1.首先安装须要的库包,在 ubuntu 下执行以下指令,为了能顺利安装建议使用 root 用户登陆 Ubuntu 或在 apt-get 前加上 sudo :git

安装 Apache2github

apt-get update #获取更新列表 apt-get install apache2    #安装 Apache2
apt-get install libapache2-mod-wsgi-py3  #让 Apache2识别 Python 程序的请求,安装 mod-wsgi模块

 

确认安装的 Apache2 版本号apache

apachectl -v

 

安装和配置 Git(这是为了从远程文档库中推送远程仓库到本地,如需上线的 Django 项目)django

apt-get install git git config --global user.name 'yourname' git config --global user.email 'youremail'

 

安装 Python 的 pip 组件管理程序和虚拟机环境程序 virtualenvubuntu

apt-get install python3-pip pip3 install virtualenv

  

  2.配置远程的 Django 项目vim

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 644 zqxt sudo find mblog -type d | xargs chmod 755

 

  4.修改 Apache 中的文件,让网站上线

建立一个网站的配置文件

sudo vim /etc/apache2/sites-available/sitename.conf

 

这里以个人配置文件为例,可根据实际需求自行更改

<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/ 运行:

sudo service apache2 reload sudo a2dissite 000-default && sudo a2ensite sitename.conf sudo service apache2 restart

 

接着输入 服务器 IP 地址,若是成功,你将看到网站显示正常的内容,后续能够经过将域名解析到服务器等方式来访问。

我本身的以下:

 

**PS:本身将域名解析到服务器后网站一直报500错误,可是本身经过 IP 地址访问却一切正常,查找下缘由,发现是解析域名到服务器,服务器若是在国内的,须要备案,否则是没法访问的,而本身恰巧是腾讯云的国内服务器,查找了很久,才发现一直报错是什么缘由(捂脸)。

相关文章
相关标签/搜索