美文网首页
Ubuntu 上部署 Python3+Virtualenvwra

Ubuntu 上部署 Python3+Virtualenvwra

作者: 诸葛二楞 | 来源:发表于2019-04-06 12:35 被阅读0次

一、版本控制

我使用的是 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

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

相关文章

网友评论

      本文标题:Ubuntu 上部署 Python3+Virtualenvwra

      本文链接:https://www.haomeiwen.com/subject/ieoliqtx.html