一、版本控制
我使用的是 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
由于写文章时已经配置完成,中间遇到的一些问题,做了其它操作。不能完全记起来。如果有问题请指出。