Ubuntu 上部署 Python3+Virtualenvwrapper+Django+Apache 环境搭建

一、版本控制

我使用的是 aws 的 EC2 实例。

mod_wsgi 版本和 python 版本需要很注意。

Ubuntu 18.04.1
Python 3.6.7
Django 2.1.7
Apache 2.4.29
mod_wsgi 4.6.5

二、Python3 +Virtualenvwrapper

1. Python3 及 pip3 安装

使用下面命令安装 Python3 及 pip3

sudo apt-get install python3
sudo apt-get install python3-pip

2. 查看 Python3 是否安装好。

输入命令,大写的 V:

python3 -V
Python 3.6.7
pip3 -V
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

运行正常则直接跳过下面部分到 "3.安装 virtualenvwrapper"。
如果出现 Command 'python3' not found,则需要修改配置环境。通过
whereis python 查看 python3 路径

whereis python
python: /usr/bin/python3.6 /usr/bin/python3.6m /usr/bin/python3.6-config /usr/bin/python3.6m-config /usr/lib/python3.6 /usr/lib/python2.7 /usr/lib/python3.7 /etc/python3.6 /usr/local/lib/python3.6 /usr/include/python3.6 /usr/include/python3.6m /usr/share/python

python3 路径为:

/usr/bin/python3.6

打开配置文件

vi ~/.bashrc

在文件最后一行加入:

alias python3=/usr/bin/python3.6

更新环境

source ~/.bashrc

pip3 同样处理。

3. 安装 virtualenvwrapper

运行如下代码安装:

sudo pip3 install virtualenvwrapper

环境配置

#创建存放虚拟环境文件的文件夹
mkdir ~/.virtualenvs
# 修改配置文件
sudo vi ~/.bashrc

#在打开的.bashrc文件中添加如下行:
export WORKON_HOME=~/.virtualenvs
source ~/.local/bin/virtualenvwrapper.sh

#更新配置文件
source ~/.bashrc

注意 virtualenvwrapper.sh 文件的位置,我这里是 ~/.local/bin/virtualenvwrapper.sh ,很多人的是 /usr/local/bin/virtualenvwrapper.sh

创建指定 Python 版本的虚拟环境

# -p 后面为 Python 安装路径,可通过 whereis python 查看。
# django 为虚拟环境名字,可在 ~/.virtualenvs 文件夹下找到对应的文件。
mkvirtualenv -p /usr/bin/python3.6 django

测试虚拟环境

#使用虚拟环境 django
workon django

# 可以看到 python 版本为 python3.6
python -V
Python 3.6.7

#退出python3.6
source deactivate

三、 安装 Django

workon django
# 调用的是 pip3
pip install Django
# 查看 Django 版本
python -m django --version
2.2

Django 的使用就不赘述了。

四、 安装apache2和mod_wsgi

# 安装 apache2 
sudo apt-get install apache2

# 查看 apache 版本
apachectl -v
Server version: Apache/2.4.29 (Ubuntu)

安装 mod_wsgi,这里有个大坑。

mod_wsgi 版本和 python 版本必须匹配!!!不仅仅是 python3 和 python2 的区别,python3.x 各版本之间也有区别。

一般采用下面的命令安装,但是我这边安装后会导致后面 mod_wsgi 和 python3.6 版本不匹配。

sudo apt-get install libapache2-mod-wsgi-py3

在写这篇文章时,此命令下载的 mod_wsgi 的版本为 4.5.17。我后面运行成功与 python3.6 匹配的 mod_wsgi 版本为 4.6.5。
后面采用在虚拟环境中使用 pip 安装的方法

# 移除前面 apt-get 安装的 mod_wsgi
sudo apt-get remove libapache2-mod-wsgi-py3
# 使用 pip 安装 mod_wsgi
pip install mod_wsgi
# 安装这个防止后面出 RuntimeError: The 'apxs' command appears 错误。
sudo apt-get install -y apache2-dev
#将下面命令生成的字符串放入 apahce2 配置文件中,/etc/apache2/apache2.conf
mod_wsgi-express module-config
#我这边生成的如下,你的可能会有细微区别
LoadModule wsgi_module "/home/ubuntu/.virtualenvs/django/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/home/ubuntu/.virtualenvs/django"
# 将 前面生成的字符串放入配置环境中
sudo vi /etc/apache2/apache2.conf
# 运行下面命令处理 ERROR: Module mod-wsgi does not exist! 错误。
sudo a2enmod wsgi

五、 配置 apache2 和 Django

默认已经创建了 Django 项目,且通过 python manage.py runserver 运行无错误。
我的项目如下:

# 这些在配置文件中需要用到。
项目名称:mysite
项目存储的文件夹:/home/ubuntu/Django

(1) 修改 wsgi.py 文件,在其中加入如下代码。

from os.path import dirname,abspath
import sys

PROJECT_DIR = dirname(dirname(abspath(__file__)))
sys.path.insert(0,PROJECT_DIR)
# 'mysite.settings' 为你的 settings.py 文件。
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')

我的完整 wsgi.py 文件如下:

import os
import sys

from django.core.wsgi import get_wsgi_application

from os.path import dirname,abspath

PROJECT_DIR = dirname(dirname(abspath(__file__)))
sys.path.insert(0,PROJECT_DIR)
#'mysite.settings' 为你的 settings.py 文件。
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')

application = get_wsgi_application()

(2) 通过配置文件关联 apahce 和 django

# 存放虚拟主机配置文件的路径
cd /etc/apache2/sites-available
# 创建配置文件
sudo touch mysite.conf

mysite.conf 文件内容

# 如果需要修改为其它端口,需要同时修改 /etc/apache2/ports.conf 
#文件中的 Listen 80 项为你需要的端口。否则会报 502 错误
<VirtualHost *:80>
  
# 填写自己服务器的域名或者ip
ServerName XX.XXX.XX.XX
ServerAdmin xxx@Email.com

Alias /media/ /home/ubuntu/Django/mysite/media/
# 多媒体文件存放的路径,具体路径根据你自己的来,这里只是例子
Alias /static/ /home/ubuntu/Django/mysite/static/
# 静态文件文件( js, css, 图片,视频等文件)存放的路径,具体路径根据你自己的来,这里只是例子

# 文件授权
<Directory /home/ubuntu/Django/mysite/media>
     Require all granted
</Directory>

<Directory /home/ubuntu/Django/mysite/static>
    Require all granted
</Directory>

# 通过wsgi.py 连接apache2和你的Django项目
WSGIScriptAlias / /home/ubuntu/Django/mysite/mysite/wsgi.py

<Directory /home/ubuntu/Django/mysite/mysite>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

激活网站

sudo a2ensite /etc/apache2/sites-available/mysite.conf

重启apache2服务器

sudo service apache2 restart

注意在 Django 项目的 settings.py 中开启允许访问的 host

ALLOWED_HOSTS = ['*']

六、apache 错误日志查看

# 注意开启 Django settings.py 中的 DEBUG = True。正式运行时改为 DEBUG = False。
cat /var/log/apache2/error.log

由于写文章时已经配置完成,中间遇到的一些问题,做了其它操作。不能完全记起来。如果有问题请指出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容