【Django】VPSで自分で専用サーバーを作り、そこにデプロイするまでの奮闘記録

ども、Shinです。

つい最近まではUnityでゲーム制作に没頭。

飽きてきたからUdemy講座で簡単なウェブアプリをデプロイしてみたくなった。エンジニアなら自作のWEBアプリのデプロイなんて簡単だよね!言いたいじゃんね。

ってことで、講座受けてみて詰まったこととか、そこで起こったエラー奮闘記録をここに残すことにする。

ノートに殴り書きしたものをそのまま載せてるからだいぶ雑。ドキュメントみたいな感じで、困ったらまたここに戻ってくればいい。

デプロイまでの道のり

困ったことh3タグで書いてく。

ソースツリーにフォルダが表示されない

  1. 全てのファイルがignored 状態だった(git status –igonored)
  2. ignoredを解除した(git add -f .)
  3. これでファイルが出現して解決。

最初に詰んだとこ、あんまり覚えてないけど解決してるらしい。

プッシュできない

  1. 初めてのプッシュはプルしてからじゃないと出来ないときがある
  2. プルもできない。
  3. マージするときに競合(コンフリクト)したのが原因?
  4. コンフリクトしたファイルは.gitignoreってやつ?
  5. 手動で削除してプルしたら通りました。
  6. そこでプッシュしたらリモートリポジトリに移動したみたい。よかった。

Git初心者だから全くわからなかった。別のUdemy講座でGit入門を購入してるから後で見直しておこう。

実務で使えば一発でわかるはず。今は分からなくても大丈夫なはずだ。

CentOSが4GBだったからマックに入らなかった

  1. Macの「その他」が多すぎ問題。一度電源落としたら2〜3GB浮いたぜ。
  2. グーグルのキャッシュ削除で1GBくらい浮いた。

とにかくMacの「その他」で容量くっちゃてるのがうざいよね。なんだよ「その他」って。

書類やらアプリを外付けのSSDとかHDDに保存して容量を確保したが無難。それかクラウドに置いておくとか。

クロームのキャッシュやらメールをゴミ箱に捨てたけど確保できないからスルーで。深追いはしない。

VirtualBoxでCentOs7が起動できない

  1. 「The virtual machine ‘CentOS 7’ has terminated unexpectedly during startup with exit code 1 (0x1).」「Kernel driver not installed (rc=-1908)」みたいなエラーが出た。
  2. このサイト発見「https://appuals.com/fix-virtual-machine-has-terminated-unexpectedly-during-startup-with-exit-code-1-0x1/」(こっちで解決⇨「https://shikasen-engineer.com/virtualbox-kernel-driver-not-installed/」)
  3. 最新版をアップデートすれば解決できるとの記載があったが、アップデートしたものの解決できず。
  4. PCを再起動すれば治る人もいるらしいからしたけど治らず。
  5. ちゃんとアンストしてからインストールしたけどだめだった。
  6. プライバシーとセキュリティーが原因だった。許可したらちゃんと表示されました。

カーネルドライバーがインストールされてない〜〜みたいな意味わからんエラーが出てきて、CentOS7が起動すらしなかった。起動しても動かないなら事例があったけど、起動すらしない。

アプデしたりアンストしてインストしたりいろいろやっても解決しなかった。

最終的にMacちゃんのセキュリティのせいで起動しなかったらしい。プライバシーとセキュリティからロックを解除したら起動した。

Linux環境にしたらIPアドレスが表示されない

    1. ip addr としても表示されない。
    2. hostname -Iとしても表示されない。
    3. ネットワーク光学デバイスが設定されてないことに気づく。前設定してたのに。。
    4. ソフトウェアの容量が足りないとの警告が、、前は出なかったのに。
    5. ディスク拡張しないといけない
    6. 一回CentOs消してからディスク拡張して入れ直したらいけた。
    7. また見たら勝手に空になってた。意味がわからん。これが原因なのかもわからん。
    8. 再起動したと同時に空になるらしい。一旦これ放置して考えてみよう。
    9. IPアドレスは自動で設定されればラッキーとのこと。手動で設定する必要ありとQ&Aで判明。
    10. このサイトを参考にしてみた「https://qiita.com/tamamius/items/a27fa04a4c978479b395
    11. できた!!IPアドレス「192.168~~」から始めるもので設定した。

光学デバイスが自動で空になってたからそれが原因かと思ったけど違ったみたいね。

ipアドレスが表示されないなら、自分で設定すればええやんとのこと。上記のサイトをみながら自分でIP設定したらできました。アドレス番号は適当でいいってね。

ターミナル上でsshがタイムアウトする

    1. ping確認もそもそもできてない。
    2. プライベートIPアドレスではping確認できる。
    3. enp0s8でやってみる。コネクションしたら表示された「nmcli connection up enp0s8」
    4. コネクションされたけど再起動したらディスクネクションになった。ターミナルでsshもダメみたい。
    5. ens0s3のIpアドレス変更したけえどダメでした。わからん。
    6. Macのゲートウェイを参照してIPアドレスを全部変えてみた(Macのゲートウェイ番号に合わせる)。
    7. ターミナル上でエラーが変わった。「Connection refused」接続拒否ってさ。
    8. pingは確認できるみたい。
    9. このアドレス自分のプライベートIPだった。
    10. 仮想サーバーの方で192.168.0.90に変更
    11. pingをみるも「Request timeout for icmp_seq 13」でタイムアウトする模様。
    12. 仮想サーバー上ではping確認できる。
    13. わかった。
    14. enp0s3じゃなくてenp0s8デバイスでやらないといけなかった。enp0s3はオートコネクションをoffにしてenp0s8だけonにすればできた。2つともonにしてたから衝突してたのかも?「https://qiita.com/Kosei-Yoshida/items/3c1ed5bca95b836fa128

ssh root@ほにゃららが通らないバエラーでしたね。

Pingが通るかどうか確認しろってネットで落ちてたから確認してみた。仮想サーバーのIPアドレスは認知しなくて、MacのプライベートIPアドレスなら認知される。

あと、仮想サーバー上でpingも確認できる。ただ、ローカルからリモートのIPアドレスが認知されない。

最終的な解決策はenp0s3じゃなくてenp0s8デバイスでやらないといけないことが判明。オートコネクションをonにすればローカルでIPアドレスの確認ができた。

この解決には結構時間がかかった。疲れた。

isuをダウンロードしようと思ってもできない(yumコマンド)

  1. ⇨最新版を指定してもできない「Another app is currently holding the yum lock; waiting for it to exit…」ってなる。
  2. ⇨yumのエラーはドメイン設定ができてないのが原因らしい。ping google.comで見れない。
  3. ⇨DNS設定ちゃんとしたらいけました「https://studyinfra.net/linux/error-centos7-cannot-find-baseurlforrep/#%E3%80%90%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95%E3%81%A8%E3%82%A8%E3%83%A9%E3%83%BC%E8%A9%B3%E7%B4%B0%E3%80%91cannot_find_a_valid_baseurl_for_repo_base_7_x86_64

yumコマンドのエラーはドメイン設定の不備らしい。上記のサイト、自分のサイトとほぼ同じで笑った。SANGOのテーマだね。

pip install upgradeをsudoでしなかったから変なとこにpipできちゃった。

  1. pipコマンドが全部無効になった(-bash: /usr/bin/pip: そのようなファイルやディレクトリはありません)
  2. pipのインストールディレクトリがおかしいみたい(/usr/local/bin/pipがおかしいみたい)
  3. Pythonのバージョンが2系で操作してるから?3にできてない?
  4. これは関係ない。
  5. 日を跨いでpip install virtualenvってしたらできた。なんでやねん。(多分pipを実行した場所が悪かった。rootで実行したら通った。)

日を跨いだらできるようになってた。実行する場所がおかしかったっぽい。rootで実行したら通りました。

一旦やめるて次の日やるって大事だね。

psycopg2がpipでインストールできない。

  1. sudo yum install python-psycopg2でやってみるとできた。権限指定しないと無理なのか?
  2. pip install psycopg2をやってみる。だめだ。
  3. sudo yum install postgresql-devel
  4. やったけど最新版がダウンロードされてるから意味なし。
  5. エラー文「error: command ‘gcc’ failed with exit status 1」
  6. Xcodeのセットアップツールがインストールされてないからとからしい。
  7. 手動で入れてみる。
  8. 入れてみたけどだめでした。
  9. エラー文をよくみると「バイナリー入れろ」って書いてある。
  10. $ pip install psycopg2-binary
  11. これうったらサクセスした。
  12. それでマイグレイトするも解決せず。
  13. 次のエラー文が発生。
  14. ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
  15. データベースが不適切な環境設定らしい。エンジンの値をサプライしてくださいとのこと。エンジン変数が間違ってるのか?
  16. 解決した。
  17. 仮想サーバー落とすたびに「export DJANGO_SETTINGS_MODULE=microblog.settings.prod」ってしなきゃいけないこと忘れてたw多分psycopg2はインストできたから今回できたんだと思う。

仮想サーバーを落とすたびにDjango設定モジュールコマンドを打ち込まないといけないの忘れてたのが今回のエラーの原因だと思う。

なんかデフォルトで設定できるみたいだけど、やり方はわからん。

本番環境でアプリが見れない

  1. firewallを止めても見れない。
  2. SELinuxでセキュリティが強化されてるから入れないらしい。
  3. 「setenforce 0」で除去したけど入れない。
  4. vim microblog.settings.prod.pyの中身が何も書かれてなかった(保存されてなかった)
  5. スワップファイルから復元したけど保存できない(ここで詰んでる)。
  6. 一括削除コマンドを実行したものの、スワップファイルが残っている模様。
  7. /var/tmp/prod.py.swpを消せばエラー文が消えるらしい。
  8. 削除したらエラー文は出なくなった。でも書き込み用にファイルを開けませんとか言われて保存できなかった。
  9. わかった。アホだ。
  10. vim /microblog の/これいらんわw./これならいける。うわ〜〜〜リナックスコマンド勉強してないからだ〜〜〜。
  11. できたけど、解決せず。IPアドレスにアクセスしてもエラーページのまま変わらない。。。
  12. nginxとguicornが起動しているか確認。それができたらsockesで繋がっているかの確認。地道にcatでログをみるしかなさそう
  13. prod.pyをみてみると()のところを{}にしてたから修正。
  14. 治らず。gunicornを再び起動してみると[ERROR]と出て、うまくコネクションできてないことが判明。(ログをみて解決)
  15. [2021-04-10 12:34:31 +0900] [2386] [ERROR] Can’t connect to var/run/microblog.sock
  16. ソケットコネクションの設定したファイル「vim gunicorn.conf.py」を覗いてみることに。
  17. bind = ‘unix:/var/run/microblog.sock’のところをvar/にして記述していたからコネクションされてなかった。
  18. 直してipにアクセスしてみたところ無事表示された!!!万歳!!!!!うわあああああああああああああああああ!!!
  19. 本番環境でデプロイできました!!!お疲れさまです!!!自分!!!すごい!!!

すごく興奮しましたね。

普通なら初心者はレンタルサーバーやらでサーバーは自分で用意しないのが普通だと思うけど、今回は自分の専用サーバー(VPS)を作ってそこにデプロイしたのはすごく良い経験になった。

今回のUdemy講座は久々に当たりでしたね。

もっと学びたいと思ったこと一覧

  • Virtualenvとは何か
  • Gitのpullとかpushについて
  • Linuxコマンドを扱えるようになりたい

今はなんとなくわかる。Linuxコマンドは覚えきたい。

自分が来年就職するとこはSierだから、ぶっちゃけLinuxとか使わなそう。Javaメインだからサーバー関係関与しない説あるんだよな。ま、いいや。

〜DjangoとPython ( Python 3 )を使ったウェブサイト構築の基本を最初の一歩からデプロイまで:やってみた所感〜

  • サーバーの知識が増えた。うれしい。本買ったし。
  • VPS(仮想サーバー)を自分でたてて、そこにデプロイするという経験ができた。初心者には難しいと思うけどできた。
  • サーバーの仕組みをよく理解できる(nginx,gunicorn)
  • エラーばかりできつかったけど、なんとか解決できる力が身についた。
  • Linuxコマンドをもっと勉強しなきゃと感じた。
  • VPSは難しいから、HerokuとかAWSで簡単にデプロイできる仕組みを学びたい。(フォロー整理のアプリをリリースしたいから)
  • 難易度がいきなり高過ぎたイメージ。もっと簡単にデプロイできる方法からやった方が無難かも。
  • 次は自分が作ったアプリをデプロイしたい(かなりハードル高い笑)
  • gitの知識も必要だと思う。pullとかcommitとかmergeを理解しないと何をやっているかわからない。

今はDjangoGirlsっていうサイトでチュートリアル受けてる。

PythonAnywhereってサーバーにデプロイして簡単にWEBアプリ出せてる。やっぱり初心者はここからやった方がいい気もするね。他にはHerokuとかAWSとかもあるから挑戦したい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です