お名前ドットコムVPSへ移行への道2-ドメイン取得からDocker+Django単独導入まで

※ 当サイトではアフィリエイト広告を利用しています。リンクは広告リンクも含みます。

この記事は約13分で読めます。
広告

お名前.com VPS 今回はドメインを取得して
Docker,Docker-composeインストール、Djangoを単独で動かすところまでやります。
このシリーズの最終目標はDocker+Nginx+WordPress+Djangoです。
あくまでも私は、こうやってみたということで動作やセキュリティの保証はできません。
記事内でkikuichigevps.comのリンクがありますが、
記事を書いた時点から設定を変えているためアクセスしても記事通りの表示にはなりません。
環境
パソコン Windows11
VPS OS Ubuntu 20.04.3 LTS
こちらの続きです。

広告

ドメイン取得

■ドメイン取るならお名前.com■は初めての人は1個目0円のものがある。
ただし1年間だけ2年目からは更新料がかかるので、更新料もあらかじめチェックして選んだ方がいい。
例えば.comだったら登録0円更新料1287円~
私は、レンタルサーバーと一緒に1個とってあるので.comでも登録750円になるのかと思ったら0円だった。
ログインして申し込むときにレンタルサーバーも0円になっているが、これは削除した。
またクレジットカード登録が必要だった。
更新期日は2025/3/10の1年になっている。

今回とったkikuichigevps.comは練習用で更新期限を延長しないので1年0円でやめるつもりです。
なので更新期限延長をクリックしないようにします。
今、このブログで使っているドメインkikuichige.comを更新していきます。
ただ今まで使っているレンタルサーバーの更新料を払っていたのでドメイン更新料0円だったけど
VPS移行にともないレンタルサーバー解約するのでドメイン更新料が発生します。

完了すると以下の注意書きが表示されますのでメールをチェックしてURLをクリックする必要があります。

お支払いと共にドメイン登録が完了いたしますが、ICANNのWHOIS情報正確性確認方針に基づき、登録完了と共にご登録いただいたメールアドレスの有効性を確認するメールが送信されます。送信後2週間以内にメールに記載されたURLからの認証が確認できない場合、当該ドメインを利用したホームページの閲覧や、メール送受信ができなくなりますので、必ずお手続きをお願いいたします。※jpドメイン等のccTLDは対象外となります。

お名前.com

こちらにも書いてあります。【ドメイン】ドメイン登録情報の正確性確認とは?
ただ私の場合「ドメイン登録完了通知」の中に以下が書いてあったので
既に1個使っているので認証手続き済みでメールは来ないのかもしれない。
(直後は来てない。でも注意してメールチェックしておこう)

登録者情報に設定されているメールアドレスが認証手続きを行われていない 場合、

別途認証をお願いするメールが送信されますので、ご対応くださいますようお願い

いたします。

お名前.com

1年限定でしたら、こちらも安いです。
目次へ

独自ドメインにVPSのIPアドレスを登録する

私の認識では、ここでやっていることは2種類の情報を登録していると思う。
1個はTYPE Aでドメイン名(サブドメイン)とIPを結びつける。
(01.dnsv.jp~04.dnsv.jpに書き込まれる)
もう1個はTYPE NSで、上の情報が書かれているDNSサーバー(01.dnsv.jp~04.dnsv.jp)を指定する。

DNSの基本的な仕組みは
TYPE NSの情報がネット上に出れば、クライアントは、その情報を見て
DNSサーバーが分かる。
そのDNSサーバーをクライアントが見てTYPE Aの情報が分かってドメインとIPアドレスが結びつくという仕組みだと思う。

ドメイン登録

独自ドメインにVPSのIPアドレスを登録するにやり方が書いてあります。
反映されるまで数時間かかるようですが、10分ぐらいしてhttp://kikuichigevps.com/にアクセスしたらApache2 Ubuntu Default Pageが出たので反映されてました。
反映されていない場合は到達できないとかのエラーが出ます。

サブドメイン登録

WordPresとDjangoをサブドメインで切り分けようと思うのでサブドメインも登録しておきます。
参考:https://tech.shiroshika.com/onamae-com-sub-domain/
https://www.onamae.com/guide/p/70?_gl=1jr86wa_gcl_au*OTk2ODg1NDkyLjE3MDc1MTA3OTA.
今の画面遷移を書いておくと
ネームサーバーの設定→ドメインのDNS設定→DNS設定/転送設定-機能一覧→ドメインを選択して次へ→DNSレコード設定を利用する
あとは参考サイト通りだが
ホスト名 サブドメイン名(例django2)、TYPE A、TTL 3600、VALUE IPアドレスで追加
「DNSレコード設定用ネームサーバー変更確認」は外した。(最初のドメイン登録のときはチェックしないとダメみたい。)
確認画面へ進む→ドメインプロテクション設定は有料なので設定しない
→設定する
10分ぐらいしてdjango2.kikuichigevps.comにアクセスしたらApache2 Ubuntu Default Pageがでたので反映されてました。(Apache2は後で止めます。後述)
「DNSレコード設定用ネームサーバー変更確認」にチェックいれてやったら初回とは違いえらい時間がかかっているのでいろいろ調べた結果。
恐らくネームサーバーを01.dnsv.jp / 02.dnsv.jp / 03.dnsv.jp / 04.dnsv.jpに設定するという意味のようなので初回だけやればいいのかも。
目次へ

Docker+Docker-compose

こちら↓にやり方が書いてあります。

Docker-Compose のインストールで以下が出て失敗しました。
Warning: Failed to create the file /usr/local/bin/docker-compose: Permission
こちらhttps://qiita.com/zembutsu/items/dd2209a663cae37dfa81を参考に
sudo -iを実行した後に実行したらうまくいきました。最後exitで元のユーザーに戻る。

バージョン確認
docker --version
Docker version 25.0.4, build 1a576c5
docker-compose --version
Docker Compose version v2.4.1
sudo docker ps -a
でコンテナを見ると確認でいれた hello-world が入っているので必要なければ削除しておきます。
コンテナ個別削除
sudo docker rm コンテナID
イメージも削除しました。
イメージ一覧
sudo docker images
イメージ個別削除
sudo docker rmi イメージID
目次へ

Django

Djangoのコンテナを作って、80番でアクセスできるか確認してみます。

あとで管理しやすいようにdockerディレクトリを作り、
その下にプロジェクトのディレクトリをつくりました。
mkdir docker
cd docker
mkdir django2
cd django2
fileは3つDockerfile、docker-compose.yml、requirements.txt

コードは最低限のコードのDjangoを動かします。以下参照↓↓↓↓コードは下で少し修正します。
docker-compose.ymlを修正します。
コンテナ名を追加し名前はサブドメインと同じにします。
あとでNginxを入れてproxyで飛ばすときに名前が変わらないようにするためです。
しかし思惑通りのコンテナ名になりませんでした(要調査だがコンテナ1回作ると、同じ名前使えないのかも)
services:
  web:
    container_name: 'django2.kikuichigevps.com'
    build: .
portsは今回VPSの80番ポートとくっつけるので80に変更
    ports:
      - "8000:8000"→- "80:8000"

#コンテナ作成
sudo docker-compose run --rm -p 80:8000 web bash

Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use
というエラーが出ます。
またデフォルトの状態でポート80にアクセスするとApache2 Ubuntu Default Pageのページが表示されます。
80番の使用状況を調べてみてもapache2と出ます。
sudo lsof -i tcp:80
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2 30448     root    4u  IPv6 228007      0t0  TCP *:http (LISTEN)
apache2 95649 www-data    4u  IPv6 228007      0t0  TCP *:http (LISTEN)
apache2 95650 www-data    4u  IPv6 228007      0t0  TCP *:http (LISTEN)
つまりApache2が、すでにポート80を使っています。

参考:https://ferret900.hatenablog.com/entry/2022/02/04/000000

Apatch2を止める

Geminiに「Ubuntu 20.04でデフォルトで動いているapatch2を止めたい」と聞いた答えを実行
sudo systemctl stop apache2.service
80番がつながらなくなりました。
それと同時にsudo lsof -i tcp:80は失敗になる。
ちなみにやってないがGeminiに再開を聞いたら
sudo systemctl start apache2.service

apache2が停止した状態で
もう一度コンテナ作成実行すると成功した。
sudo docker-compose run --rm -p 80:8000 web bash
#プロジェクト作成
django-admin startproject composeexample .

#実行
python manage.py runserver 0.0.0.0:8000
サブドメインにアクセスするといつも出るDisallowedHost at /
Invalid HTTP_HOST headerになったので
CTRL+Cで停止してexitでコンテナから出て
cd composeexample
ファイルの所有者を現在のユーザーに変更(取り合えずで、ここは要検討)
sudo chown $USER settings.py
もう一度コンテナ作成実行
sudo docker-compose run --rm -p 80:8000 web bash
Bind for 0.0.0.0:80 failed: port is already allocated
80番の状況確認
sudo lsof -i tcp:80
COMMAND      PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 102471 root    4u  IPv4 896081      0t0  TCP *:http (LISTEN)
docker-pr 102478 root    4u  IPv6 896088      0t0  TCP *:http (LISTEN)

sudo docker ps
で見るとコンテナが動きっぱなしでまた、80番を使うコンテナを作ろうとしたのでエラーになったと思われる。(この前に1回Vsコードを閉じたが、そのときコンテナが削除されず残っていたためと思われる)
docker exec -it コンテナ名 bash
でコンテナの中に入る
settings.pyのALLOWED_HOSTS = ['サブドメイン追加']に修正保存
#実行
python manage.py runserver 0.0.0.0:8000
サブドメインにアクセスするとDjangoの画面が表示される。
画面にも書いてあるがYou are seeing this page because DEBUG=True is in your settings file 
なのでsettings.pyのDEBUG=Falseにすると表示しません。
CTRL+Cで停止、exitで抜ける

sudo systemctl list-units --all
でApache2がどうなっているか見る(すごいいっぱい出て探すの大変)
apache2.service  loaded    inactive dead      The Apache HTTP Server                                                                               

sudo systemctl status apache2.service
略
Mar 11 06:40:47 v*** systemd[1]: Stopped The Apache HTTP Server.
lines 7-16/16 (END)
ちなみにapache2を再開してみる
sudo systemctl start apache2.service
をやるとエラーになるが、statusを見ると80番が使われていたからエラーになったっぽい。
Dockerのコンテナがあるため(docker-compose runで--rmつけたので停止したらコンテナは削除されるはずだが残ってた。?)80番は使用中。
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

Apache2の状態を見てみると

sudo systemctl status apache2.service
Mar 11 08:11:11 v*** systemd[1]: Starting The Apache HTTP Server...
Mar 11 08:11:12 v*** apachectl[105493]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
Mar 11 08:11:12 v*** apachectl[105493]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
Mar 11 08:11:12 v*** apachectl[105493]: no listening sockets available, shutting down
Mar 11 08:11:12 v*** apachectl[105493]: AH00015: Unable to open logs
Mar 11 08:11:12 v*** apachectl[105484]: Action 'start' failed.
Mar 11 08:11:12 v*** apachectl[105484]: The Apache error log may have more information.
Mar 11 08:11:12 v***systemd[1]: apache2.service: Control process exited, code=exited, status=1/FAILURE
Mar 11 08:11:12 v*** systemd[1]: apache2.service: Failed with result 'exit-code'.
Mar 11 08:11:12 v*** systemd[1]: Failed to start The Apache HTTP Server.
ということでApache2は停止にしておく。
ただ全体を再起動したとときはまた立ち上がるだろうから、
こういう状態であることを覚えておきます。

まとめ

新しく取ったドメインは、移行準備用で1年でやめる。
準備が整ったら、レンタルサーバーで使っているドメインに切り替えます。
でも何か問題起きた時用に新しく取ったドメインも更新料が安いものにしといた。
Apache2を停止にしてあることは何かあったときに思い出すようにしようと思います。
目次へ
イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)

コメント

タイトルとURLをコピーしました