web 上での Django プログラムをローカルへ

vps を借りて ubuntu 18.04 をインストールし、そこへ Django をインストールしてカード型データベースを動かしています。

画像も記録でき、もちろんデータベース検索もできるのでとても重宝しているのですが、安い vps でも年間 7,900 円かかり、ドメイン名をムームードメインで購入したので、その費用が 4,500 円程かかるのでバカになりません。

そこで、ローカルに持ってきて、勤務先・本宅・別宅の 3 台のコンピュータ間でデータを共有すればいいと考えました。ネット上からローカルへまずは移してしまおうと思います。

その後は、NAS の virtualmachine などに設定して、外部から見られるようにするのが一番安上がりです。

セキュリティ的には落ちるかもしれませんが、もともと他人にはほとんど意味のないデータばかりです。

Django の自動バックアップ

他人にはどうでもいい内容でも私には大事なものなので、データが消失すると大変です。

そこでしつこいくらいのバックアップを取ります。

bak.sh

#!/bin/bash

dirpath='/home/user/jsonbak'
filename=`date +%Y%m%d`.json
cd /home/django/mydjango
source venv/bin/activate
python manage.py dumpdata > $dirpath/$filename
chmod 700 $dirpath/$filename
find $dirpath -type f -daystart -mtime +6 |xargs rm -f

このシェルスクリプトを毎日深夜 2 時に実行します。


0 2 * * * /home/user/bak.sh

毎日バックアップを取るので、どんどん貯まらないように古い方から削除するようにしています。

ローカルに移行する

json ファイルでエクスポートされたデータには画像は含まれません。

私の場合は「media」ディレクトリを作成してそこに格納するようにしているのでそれもローカルにダウンロードします。


python manage.py runserver

で動かしてみると、そもそも Django が入っていないので次々とエラーメッセージが。

一つ一つクリアすればいいのですが、postgresql の設定が面倒なのと、最後に「DETAIL: Key (app_label, model)=(admin, logentry) already exists.」というエラーが。

DETAIL: Key (app_label, model)=(admin, logentry) already exists.

ダンプファイルを作成する時点で以下のようにすべきだったようです。


python manage.py dumpdata --exclude auth.permission --exclude contenttypes > dump.json

これでようやく Django をローカルに持ってこれました。