Django项目部署到Apache服务器

时间:2022-12-21 00:07:41

本文讲述的是在阿里云服务器(ECS)上部署Django项目于Apache,服务器操作系统为ubuntu,公网Ip地址为123.56.30.151。

将Django部署到Apache服务器的原因

Django中的runserver只是一个很简单的web服务器,启动服务器常见的方法是通过Putty执行命令。虽然调试和测试方便,然而如果关闭了Putty或者退出命令,服务就停止了,并且不能承受许多用户同时使用的负载。所以需要将Django部署到生产级的服务器,这里选择Apache。

ubuntu上部署详细步骤

1.安装apache2 

apt-get install apache2

2.测试apache2

打开浏览器输入123.56.30.151(云服务器的IP)

Django项目部署到Apache服务器

3.建立python与apache的连接

apt-get install libapache2-mod-wsgi
#通过执行python -V查看python版本,如果是3.0将第换为
apt-get install libapache2-mod-wsgi-py3

4.准备一个新网站

ubuntu的apache2配置文件在 /etc/apache2/ 下,在文件夹sites-available下新建一个网站配置文件:mysite.conf

<VirtualHost *:8888>
DocumentRoot
/var/www/mysite/mysite
<Directory /var/www/mysite/mysite>
Order allow,deny
Allow
from all
</Directory>
WSGIScriptAlias
/ /var/www/mysite/mysite/wsgi.py
</VirtualHost>

通过apachectl -v查看apache2版本号,如果是2.4.x,将Directory中的内容修改为

Require all granted

5.更改端口

修改ports.conf中的Listen 80为Listen 8000,注意:这个文件的开头有一个提示

# If you just change the port or add more ports here, you will likely also
#
have to change the VirtualHost statement in
#
/etc/apache2/sites-enabled/000-default.conf

无需遵照这个提示,即不用修改000-default.conf中的端口号,默认为80.

6.更改django工程

在工程的wsgi.py文件中添加

import sys
sys.path.append(
"/var/www/mysite/")

7.设置目录和文件权限

一般目录权限设置为 755,文件权限设置为 644 

假如项目位置在 /var/www/mysite (在mysite下面有一个 manage.py,mysite是项目名称)

cd var/www/
sudo chmod
-R 644 mysite
sudo find mysite
-type d -exec chmod 755 \{\} \;

sqlite3数据库读写权限:

sudo chgrp www-data mysite
sudo chmod g
+w mysite
sudo chgrp www
-data mysite/db.sqlite3
sudo chmod g
+w mysite/db.sqlite3

8.配置生效

a2ensite mysite.conf 

9.启动服务

service apache2 restart

出现错误:

restarting web server apache2                                         [fail] 
* The apache2 configtest failed.
Output of config test was:
AH00526: Syntax error on line
8 of /etc/apache2/sites-enabled/mysite.conf:
Invalid command
'WSGIScriptAlias', perhaps misspelled or defined by a module not included in the server configuration
Action
'configtest' failed.
The Apache error log may have more information.
tony@T:
/etc/apache2/sites-available$ sudo a2enmod wsgi
ERROR: Module wsgi does
not exist!

执行命令:

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

出现错误:

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

在apache2.conf文件末尾添加,这里的端口设置跟000-default.conf中的一样,而不是mysite.conf中的端口。

ServerName localhost:80