python是apache服务器吗_部署Django + Apache服务器

租用服务器每年会有一定的费用,今天买了一个树莓派就把我部署在阿里云的Django项目迁移到树莓派上。

1. SSH登入到树莓派。

ssh pi@192.168.1.201

2. 新建一个名为app的目录,将项目源码checkout到app目录中。

mkdir app

cd app

git clone https://github.com/username/project_name

3. virtualenv。因为我的树莓派的Python版本和这个Django项目的Python版本不一致,所以需要创建一个独立的Python运行环境,virtualenv就是用来创建隔离的Python环境的。

sudo pip3 install virtualenv

cd project_name创建名为venv的运行环境,--no-site-packages表示原来的系统python环境不会复制过来,创建的环境是全新的。(python3需要指定-p /usr/bin/python3,否则venv会使用python2.x)

virtualenv -p /usr/bin/python3 --no-site-packages /home/pi/venv进入virtualenv,每次进入都需要使用这个命令,退出环境使用deactivate。

source /home/pi/venv/bin/activate在~/.bashrc文件最后加上以下代码以确保pip3安装的时候将packages安装到virtualenv中而不是系统中,然后退出SSH再重新登入树莓派并进入virtualenv。

vi ~/.bashrc

# add this line to ~/.bashrc.

export PIP_REQUIRE_VIRTUALENV=true

cd app/project_name

source /home/pi/venv/bin/activate

4. Django项目依赖。安装Django项目的所有依赖(可选,如果是新项目就不需要安装)。

sudo /home/pi/venv/bin/pip3 install xxxxx

...

sudo apt-get install xxxx

...如果出现安装Pillow错误,需要先安装Pillow相关依赖。

apt-get install libjpeg-dev zlib1g-dev查看pip3安装了哪些依赖。

pip3 freeze # show installed packages in requirements format

pip3 list # show all installed packages

pip3 freeze --all == pip list

pip3 freeze > requirements.txt # output all requirements to file

5. 安装数据库。数据库我们使用的是Django官方推荐的postgresql

sudo apt-get install postgresql postgresql-contrib

# vi /etc/postgresql/9.6/main/pg_hba.conf

# (Change all authentication mechanisms from ident to md5)

sudo /etc/init.d/postgresql reload创建账号和数据库

# switch to postgres account

(venv) pi@raspberrypi:~/app/DjangoApps$ sudo su - postgres

# create postgres user

postgres@raspberrypi:~$ createuser pi

# create database

postgres@raspberrypi:~$ createdb myproject

# sql environment

postgres@raspberrypi:~$ psql

# add password for user

postgres=# ALTER USER pi WITH PASSWORD '123456';

ALTER ROLE

# make user superuser

postgres=# ALTER ROLE pi WITH SUPERUSER;

ALTER ROLE

# add create roll permission

postgres=# ALTER ROLE pi WITH CREATEROLE;

ALTER ROLE

# logout

postgres-# \q

postgres@raspberrypi:~$ exit

logout从原来服务器导出数据,database为你的数据库名称。(可选,如果是新项目就不需要)

pg_dump > dump.sql导入到当前数据库(可选,如果是新项目就不需要)

(venv) pi@raspberrypi:~/app/DjangoApps/sqls $ psql -U pi myproject < dump.sqlsettings.py设置数据库信息

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.postgresql_psycopg2',

'NAME': 'myproject',

'PASSWORD': '123456',

'HOST': 'localhost',

'PORT': '',

}

}

6. 现在运行Django,并在树莓派运行localhost:8000/admin就会出现如下画面了。

(venv) pi@raspberrypi:~/app/DjangoApps$ python manage.py runserver

7. Apache2。创建需要的文件夹

mkdir media logs复制static文件

python manage.py collectstatic修改myproject/wsgi.py如下

import os

import sys

#sys.path.append('/home/pi/app/DjangoApps/venv/lib/python3.5/site-packages/')

# add your project directory to the sys.path

project_home = u'/home/pi/app/DjangoApps'

if project_home not in sys.path:

print(project_home)

sys.path.append(project_home)

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

application = get_wsgi_application()

from os.path import dirname,abspath

PROJECT_DIR = dirname(dirname(abspath(__file__)))

sys.path.insert(0, PROJECT_DIR)安装Apache2

sudo apt-get install apache2 libapache2-mod-wsgi3如果安装的时候提示找不到libapache2-mod-wsgi3,请使用以下命令

sudo apt-get install apache2 libapache2-mod-wsgi-py3添加并编辑配置文件

cd /etc/apache2/sites-available

sudo cp 000-default.conf myproject.conf

sudo vi myproject.conf配置文件内容,使用绝对路径

WSGIScriptAlias / /home/pi/app/DjangoApps/myproject/wsgi.py

# for virtaulenv

WSGIDaemonProcess myproject python-home=/home/pi/venv python-path=/home/pi/app/DjangoApps

# for virtaulenv

WSGIProcessGroup myproject

DocumentRoot "/home/pi/app/DjangoApps"

# mkdir /home/pi/app/DjangoApps/static if not exists.

Alias /static/ /home/pi/app/DjangoApps/static/

# mkdir /home/pi/app/DjangoApps/media if not exists.

Alias /media/ /home/pi/app/DjangoApps/media/

# mkdir /home/pi/app/DjangoApps/logs if not exists.

ErrorLog "/home/pi/app/DjangoApps/logs/error_log"

CustomLog "/home/pi/app/DjangoApps/logs/access_log" common

Require all granted

Require all granted

Require all granted

因为需要将Apache和Django进行绑定,所以需要将端口更改为它们共有的

sudo vi /etc/apache2/ports.conf

# add this two line to /etc/apache2/ports.conf

NamevirtualHost *:8000

Listen 8000/etc/apache2/apache2.conf添加ServerName

sudo vi /etc/apache2/apache2.conf

# add this line to /etc/apache2/apache2.conf

ServerName 192.168.1.201

# ServerName localhost

# ServerName 127.0.0.1启用配置文件并重新加载Apache2

# enable myproject.conf

sudo a2ensite myproject.conf

# reload apache2

sudo service apache2 reload使默认配置失效,否则局域网内无法使用

sudo a2dissite 000-default.conf重启Apache2

sudo /etc/init.d/apache2 restartApache log地址:

/var/log/apache2/这样你在树莓派里运行192.168.1.201:8000/admin就会出现如下画面了。如果你只是在局域网内使用这个服务器的话到这步就可以结束了,如果需要做成被外网访问就需要添加动态域名了。如果出现如下错误:access to / denied (filesystem path '/root/app') because search permissions are missing on a component of the path. 则需要确保root和app的目录权限都是755.

如果出现404 bad request错误,则需要将ip添加到myproject/settings.py的ALLOWED_HOSTS

ALLOWED_HOSTS = ['localhsot', '127.0.0.1', '192.168.1.201']如果出现如下错误,表示Apache2的默认用户名是www-data,我们需要将默认用户名改为pi并重启Apache2

sudo vim /etc/apache2/envvars

# 将APACHE_RUN_USER和APACHE_RUN_GROUP都改为pi

# export APACHE_RUN_USER=www-data

# export APACHE_RUN_GROUP=www-data

export APACHE_RUN_USER=pi

export APACHE_RUN_GROUP=pi

sudo /etc/init.d/apache2 restart

8. 动态域名。进入创建账号然后通过邮箱激活并

登入以后进入Hostname这行输入你想添加的hostname,在Domain这行选择一个domain,如果已经注册了就换一个,点击Add Hostname添加hostname创建完成后你将看到一条记录,点击Active进入域名详细列表。点击画圈黄色字体进入配置。点击Configure Now选择你的域名(如果只有一个会默认选中)并点击Next Step路由器我这边是TP-Link,设备选中Rasspberry pi选中Yes并点击Next Step点击Download DUC这边我们选中Linux并点击Download Now下载完客户端后解压并编译安装

tar vzxf noip-duc-linux.tar.gz

cd noip-2.1.9-1

make

sudo make install安装过程中输入信息

# 输入no-ip账号

Please enter the login/email string for no-ip.com

myemail@gmail.com

#输入no-ip密码

Please enter the password for user

....*******

# no-ip客户端检查你路由器外部网址变化的间隔默认是30分钟,我们改为10分钟,因为国内ISP会每几天强制断线、更换IP,这时noip会短暂失效。

Please enter an update interval: [30]

(Increments in minutes that you want no-ip client to check if your router’s external dynamic IP address has changed and updates it accordingly.)

10

# 直接按回车

Do you wish to run something at successful update? [N] (y/N)启动noip客户端,如果需要开机就启动,将下面这行添加到/etc/rc.local的exit 0这行前面

sudo /usr/local/bin/noip2其它no-ip命令

sudo /usr/local/bin/noip2 -C # 重新配置一次

sudo /usr/local/bin/noip2 -S # 显示当前运行状态安装完以后点击Next Step在路由器设置端口转发,可以参考this guide这篇文章或者我之前写的文章8000端口,所以我们转发外部8000端口到内部8000端口。设置完路由器以后我们点击Next Step输入你转发的端口号并点击Check Port进行验证如果显示Port xxx is not open说明你路由器端口转发还不正确需要重新配置。如果显示Port xxx is open表示端口转发成功点击Next Step页面会显示配置成功暂时还不知道什么原因,外网可以访问no-ip:8000这个网址了,但是本地网络内的设备还是只能使用192.168.1.201:8000来访问这个服务器,之后知道原因以后将会更新。

这样我们就将原来在阿里云的服务器迁移到自己的树莓派上了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值