非コンテナWebアプリをコンテナ化

せっかくDockerの勉強してることですし、練習も兼ねて放置されているWebアプリ。。。をDocker化してみます。

既存のDjangoアプリ(非Docker)を、Docker化します。

今回の記事では、ローカルDocker環境にDjangoアプリを持ってきて動作確認するまでの手順を記載します。

次回以降で、ローカルに作ったDocker環境を、AWSのECSにデプロイしていきたいと思います。

対応前の環境

移行元

今回移す対象のWebアプリですが、さくらVPSに設置のDjangoアプリです。
一つのサーバに、Nginx/Django/MariaDBとまとめて入れてあります。特にPVが有るわけではないWebアプリなので全然これで正常稼働しているはず。(たぶん)
ちなみに、さくらインターネットさんのVPSは安いので、最初に色々構築したりするなら、断然おすすめです。

移行先

AWS のECSに移行予定です。Fargateとか使ってみたいなと。あまりちゃんと決めていなくて、ざっくりとこんな感じで、調べながら対応していきます。

たいてい、調べるのに時間かけるより、さっさと手を動かしたほうが断然早いです。(たぶん)

ローカル環境

今回は、MacのM1で作業を進めます。

Dockerのインストールしておく必要があります。こちらも別記事を参考にしてください。

Mac M1にDockerインストールしてみます

ローカルDockerでDjangoを動作させます

空のDocker環境を作成

こちらについては、過去の記事を参考に対応してください。

Djangoの環境をDocker使って作ってみますか

これで、とりあえず空のDjango環境がDocker上に構築できます。

既存DjangoプロジェクトをローカルDockerに

移行元のソースファイルを取り込み

作った環境の、srcフォルダ直下にmanage.pyが設置されるように、ソースファイル一式を持ってきます。

こちらは、ご自身のGithubなりから持ってきていただければ。

プロジェクト名を変更

プロジェクト全体を、旧プロジェクト名で検索して手当り次第新しいプロジェクト名に変更していきます。

DBの情報を変更

今回のDjango環境の場合、

docker-compose.ymlのdb: environmentの箇所

が該当します。

MariaDBの設定内容、例えばDB名とかUser Passwordをプロジェクト用のものに置き換えておく。
Djangoの場合、settings.pyの内容に置き換えます。

必要なモジュールをインストール

Pythonのコンテナにアタッチして、makemigrations

# python manage.py makemigrations
.....
...
ModuleNotFoundError: No module named '*********'

ま、当たり前ですよね。。。。Django久々なんです😥

一つずつ確認しながら、requirements.txtに追加していきます。

ちなみに、pip freezeコマンドを使うと便利です。現時点で実行すると。。。

# pip freeze > requirements.txt

こんな感じでした。

もし、インストールする際は下記コマンドでテキストに記載のモジュールを一括でインストールしてくれます。

作ったrequirments.txtは、今回の環境だとpythonフォルダの直下に設置していますので、置き換えておいてください。次回移行docker-compose upコマンドを実行する際に、ファイルから自動でインストールされるようになります。

ちなみに、手動でファイルを読み込んで記載のモジュールを一括インストールするのは、下記コマンドで。

# pip install -r requirements.txt

DjangoのMigrate

DBを準備します。お決まりの、

# python manage.py makemigrations
# python manage.py migrate

ですね。

Djangoで静的ファイル群をコピー

# python manage.py collectstatic

docker-compose up でコンテナ作成&起動

docker-compose.yml設置フォルダに移動して、

docker-compose up -d --build

ブラウザでアクセスしてみて、正しく表示・動作しましたでしょうか。

その他

簡単に行ったように書いていますが、裏では色々とエラーなりが起きて対応しています。。。

そのうち一部をメモ

nanoエディターのインストール

Nginxのログを見たい状況になりました。

が、肝心のエディターがコンテナにインストールされていないようです。。。catコマンドで閲覧は可能ですが。

使い慣れているnanoエディターをインストールします。

# apt-get update

# apt-get install nano

これで、nanoエディターを使えるようになりました。

※あとで、Dockerファイルにnanoエディターをインストールする記述を入れておかないといけませんね。

Nginxログの場所

/etc/nginx/nginx.conf

にログ出力パスの記載があります。

確認するのは、この箇所。この場所にログが出力されています。

access_log /var/log/nginx/access.log main;

関連コンテンツ

おせち、キャンペーンやってるし買ってみるかな