【Django】GitとSSHを使ってUbuntuへデプロイする(virtualenvでPythonライブラリの管理)【hookでmigrateコマンドも】
要求される知識が非常に多いため、下記対象読者
に該当する方のみ、閲覧を推奨します。
対象読者
- Linuxのコマンドがわかる
- CUIエディタ(nanoもしくはvim)が扱える
- すでにDjangoプロジェクトをUbuntuへデプロイをしたことがある
- gitを使ったことがある(ステージング→コミット→プッシュができればOK)
- SSHでUbuntuへリモートログインをしたことがある(パスワード認証ができればOK)
- virtualenvでPythonライブラリを管理したことがある
関連記事
- UbuntuにSSHでリモートログインする方法【パスワード認証+公開鍵認証+scpコマンド】
- 【git/GitHub】コマンドと使い方の一覧
- UbuntuにDjangoをデプロイする【PostgreSQL+Nginx、Virtualenv使用】
流れ
- ローカルでDjangoのプロジェクトの作成
- ホストで必要なパッケージのインストール
- ホストでリポジトリを作成
- ローカルでリポジトリを作成、ホストのリポジトリを追加
- ローカルでプッシュをする
- ホストでリポジトリからプロジェクトをクローン
- 必要に応じて
migrate
等のコマンドを実行
作業
ローカルでDjangoのプロジェクトの作成
Djangoプロジェクトを作る。すでに作っている場合は次の項へ
mkdir startup_bbs
cd startup_bbs
django-admin startproject config .
ホストで必要なパッケージのインストール
# 全パッケージの更新
sudo apt update && sudo apt -y upgrade && sudo apt -y autoremove
# デプロイに必要なパッケージのインストール
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx
# virtualenvのインストール
sudo pip3 install virtualenv
# gitのインストール
sudo apt install git
ホストでリポジトリを作成
Documents配下にプッシュ先のリポジトリを作る
mkdir -p ~/Documents/myproject.git
cd ~/Documents/myproject.git
空のリポジトリとして初期化する
git init --bare
ローカルでリポジトリを作成、ホストのリポジトリを追加
ローカルではDjangoのプロジェクトディレクトリ内でリポジトリを作成、コミットしておく。
git init
git add .
git commit -m "first commit"
ホストのリポジトリを追加しておく。
git remote add origin ホストのユーザー名@ホストのIPアドレス:~/Documents/myproject.git
ローカルでプッシュをする
git push origin master
パスワードの入力を求められるが、SSHでパスワードログインを行っている場合、そのパスワードを入力する。
ホストでリポジトリからプロジェクトをクローン
ホストにて、Djangoプロジェクトがプッシュされているので、クローンする。
cd ~/Documents/
git clone myproject.git
~/Documents/
の中にDjangoプロジェクトに当たる、myproject
が作られている。後は、NginxやPostgreSQLに設定を行い、デプロイをする。
参照: UbuntuにDjangoをデプロイする【PostgreSQL+Nginx、Virtualenv使用】
1度クローンしたことがある場合は、プロジェクトのディレクトリに移動して、pullする
cd ~/Documents/myproject
git pull origin master
必要に応じてmigrate
等のコマンドを実行
プロジェクト内部へ移動、マイグレーションなどのコマンドを実行する。(任意)
cd myproject
python3 manage.py migrate
python3 manage.py collectstatic
python3 manage.py createsuperuser
結論
scpでアップロードする形式だと、どうしてもローカルで削除したコードがデプロイ先で残留してしまう。また、アップロード先のパスを間違えたら対処に手間取る。
gitであれば、最初の設定さえ間違えなければ、あとはadd
commit
push
とやっていくだけ。とっても簡単。
ローカルのプロジェクトを紛失しても、git cloneでホストからすぐに取ってこれる。ブランチも切れる。以前の状態に戻すこともできる。