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

简介:   自己尝试在本地搭建了 Django 项目后,想部署到自己云服务器上,经常多次尝试和多次踩坑(捂脸),总结如下:  环境:ubuntu14, django2.0, apache2。  1.首先安装需要的库包,在 ubuntu 下执行如下指令,为了能顺利安装建议使用 root 用户登录 Ubun...

  自己尝试在本地搭建了 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 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 地址访问却一切正常,查找下原因,发现是解析域名到服务器,服务器如果在国内的,需要备案,不然是无法访问的,而自己恰巧是腾讯云的国内服务器,查找了好久,才发现一直报错是什么原因(捂脸)。

 

相关文章
|
8天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
81 44
|
9天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
26 2
|
12天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
25 1
|
14天前
|
数据处理 Apache 数据库
将 Python UDF 部署到 Apache IoTDB 的详细步骤与注意事项
【10月更文挑战第21天】将 Python UDF 部署到 Apache IoTDB 中需要一系列的步骤和注意事项。通过仔细的准备、正确的部署和测试,你可以成功地将自定义的 Python UDF 应用到 Apache IoTDB 中,为数据处理和分析提供更灵活和强大的支持。在实际操作过程中,要根据具体情况进行调整和优化,以确保实现最佳的效果。还可以结合具体的代码示例和实际部署经验,进一步深入了解和掌握这一过程。
18 2
|
15天前
|
机器人 Shell Linux
【Azure Bot Service】部署Python ChatBot代码到App Service中
本文介绍了使用Python编写的ChatBot在部署到Azure App Service时遇到的问题及解决方案。主要问题是应用启动失败,错误信息为“Failed to find attribute &#39;app&#39; in &#39;app&#39;”。解决步骤包括:1) 修改`app.py`文件,添加`init_func`函数;2) 配置`config.py`,添加与Azure Bot Service认证相关的配置项;3) 设置App Service的启动命令为`python3 -m aiohttp.web -H 0.0.0.0 -P 8000 app:init_func`。
|
20天前
|
Linux Python
【Azure Function】Python Function部署到Azure后报错No module named '_cffi_backend'
ERROR: Error: No module named '_cffi_backend', Cannot find module. Please check the requirements.txt file for the missing module.
|
23天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
21 4
|
24天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
29 1
|
28天前
|
Python
基于python-django的matlab护照识别网站系统
基于python-django的matlab护照识别网站系统
15 0
|
28天前
|
并行计算 Ubuntu Linux
Ubuntu学习笔记(五):18.04安装多版本CUDA
这篇博客文章介绍了在Ubuntu 18.04系统上如何安装和切换不同版本的CUDA,以及如何安装不同版本的cuDNN。
149 2