LoginSignup
1
0

More than 3 years have passed since last update.

django mcfirst/settings.py 編集

Last updated at Posted at 2019-07-06

背景

今までaws、GCP、さくらインターネット(高火力)ラズパイなどデプロイしてきましたが、今回はロリポップ社マネージクラウドにteratermを用いながらdjangoをデプロイしたいと思います。後学の為、また自分自身が忘れっぽい為に敢えてエラー内容も記載しています。エラーの内容など大変稚拙でみづらい点も多々あるかもしれませんが予めご了承下さい。なおロリポップ社マネージクラウドpythonは、レンタルサーバーのため管理者権限が使えません。sudoなど利用不可です。

環境

LOCAL
localOS:WIN10
SSH:TERATERM
APP:django

SERVER
FIRM:ロリポップマネージドクラウド
OS:Linux Ubuntu-4ubuntu2.8, OpenSSL 1.0.2g
LANG:Python3.6.8
ディスク容量10GB (SSD + HDD)
メモリ:512MB
データセンター 東京
管理者権限:なし

0 ロリポップ社のマネージクラウドサービスに登録

Python のプロジェクトを作成します。プロジェクト作成ページ から Python のアプリケーションを選んでプロジェクトを作成します。以下のような写真がチェックできたら成功です。

00000001.jpg

1 前処理

まず各種ライブラリをインストールします。マネージクラウドは管理者権限は利用不可の為sudoが使えませんので注意してください。

pip install --upgrade pip --user
pip install gunicorn --user
pip install uwsgi --user  #uWSGIはNginxとDjangoをつなぐ

2 ssh接続 teraterm

さてteratermとサーバー間で使用する各鍵を設定し秘密鍵をダウンロードしましょう。SSHの鍵取得は以下URLになります。

https://mc.lolipop.jp/console/sshkeys

上記ブラウザ上で秘密鍵と公開鍵を作成します。秘密鍵は自動で作成されダウンロードされます。一方で公開鍵はマネージドクラウドに登録されます。秘密鍵は自動ダウンロードされますのでteratermなどSSHやSFTPクライアントツールから利用できます。以下赤線から鍵を新規作成して登録を押してください。

image.png

続いてteratermを開いてください。「ファイル」→「新しい接続」からホスト情報を入力します。

image.png

以下のようにご自身の環境で作成してください。
ホスト名:ssh-1.mc.lolipop.jp
TCPポート:3XXXX3
SSH SSHバージョン:SSH2

teraterm上で入力しエンターを押すと以下のようなSSH認証画面が出てきます。

image.png

ユーザ名:yeXXXXXXX4
パスフレーズ:空白
RSA/DSA/ECDSA/ED25519鍵を使う を選択し
秘密鍵を使いますので「秘密鍵」ボタンをクリックしてください。

開いたら右下のファイルの種類を開き全てのファイルを指定して先程ダウンロードした秘密鍵ファイルを指定してください。

image.png

画面が以下のようになればローカルとサーバー間でSSH接続完了です。

image.png

お疲れ様でした。さて続いてアプリを入れましょう。

3Djangoインストール

djangoや周辺ライブラリをインストールしていきます。

PIPENVインストール

pipenvは、pipでインストールできます。いつも通り以下のコマンドを実行してインストールしましたが既に導入されていました。

$ pip install pipenv

Djangoインストール

まずアプリケーションの起動に必要なDjangoパッケージを取得します。pip を使用して Django のコマンドラインツールをインストールします。 (インストール済みの場合はスキップ)

$ pip install django

エラー:パーミッションエラーが発生

ここで以下のようにパーミッションエラーが発生しました。

image.png

Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/lib/python3.6/site-packages/pytz-2019.1.dist-info'
Consider using the `--user` option or check the permissions.

単にディレクトリを作る権限が無いというだけのようでしたのでpipインストール時にsudoを付けて管理者権限で実行しましたが管理者権限がない為エラーが出ます。

$ sudo pip install django

image.png

-bash: sudo: command not found

どうやらpathが通っていないようです。余談ですが管理者権限でコマンドを実行する場合に用いるsudoですが、環境変数が引き継がれないのでコマンドが見つからないなど不便なことがあります。その場合はvisudoを用いて/etc/sudoersのsecure_pathなどを書き換えれば良いです。※なおロリポップではSSHではroot権限の利用はできませんでした。ソースは以下を参照してください。

管理者権限 なし
https://mc.lolipop.jp/specs

そこで以下コマンドでインストールを正常終了する事ができました。

$ sudo pip install django --user

image.png

pipでinstallする場合--userオプションをつけるとユーザーディレクトリにインストールしてくれて権限の都合とかがある際は便利です。

4PROJECTを作成する

続いてdjango-admin を使ってソースコードを自動生成します。ここではapp という名前のアプリケーションを作成します。

django-admin startproject first

first ディレクトリが作成されるので移動します。

cd first

first/settings.py 編集

サーバーにアップロードしたときに正常動作させる為、いま作成されたディレクトリ この場合firstの first/settings.py の設定を変更します。
具体的には、ALLOWED_HOSTS を下記のように変更します。 まずはもう一回cdでfirstにはいります(注意:firstは二回目)。yellow-aso-5384@gitpush-python-billowing-obi-0729:~/first/first$ ls -al

cd first

そうしたらいつも確認コマンドで中身をみてあげましょう。

ls -al

$ ls -al
total 20
...

setting.pyがありました。

...
 __init__.py
 settings.py
 urls.py
 wsgi.py

vimで開いて

vim setting.py

以下お決まりの3行ともいえるホストを許可しコードとゾーンもかえましょう(挿入はI、保存し閉じる時は:wq)

ALLOWED_HOSTS = ['*']
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

なお、ここではすべてのドメインを許可していますが、アプリケーションに対して使用するドメインがわかっている場合は、セキュリティのため個別にドメインを指定することを強く推奨いたします。

$ cd path/to/first

(先ほどのコマンドから継続して打つなら、$ cd first だけで大丈夫です。このディレクトリを "master directory" と呼ぶことにします)

確認のため

$ ls

manage.py first

となっていますか?(一つ上のfirstの中に入ってください)

firstというプロジェクトに対してmyappというアプリケーションを作成します。

$ python manage.py startapp myapp

パッケージインストール gunicorn

最後に pipenv を使用してサーバー上で必要になるパッケージを設定しますgunicorn, django をインストールします。Gunicornは、UNIX向けのPython WSGI HTTPサーバーです。RubyのUnicornから移植されたサーバーです。様々なWebフレームワークと互換性がありシンプルな実装の為リソース消費が少ないですね。Python 2.6以上、Python 3.2以上に対応しています。

pipenv install gunicorn django

image.png

一階層ディレクトリを戻します。その後manage.pyがあるかを確認します。

$ cd ../
$ ls -al
total 16
 app
 manage.py

manage.pyがある場所へ移動してmigrationを実施して

$ python manage.py makemigrations
$ python manage.py migrate

ターゲットファイルmanage.pyがありました。runserverを起動させましょう。

 python manage.py runserver

ローダーが立ち上がりました。

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

July 07, 2019 - 03:02:54
Django version 2.2.3, using settings 'app.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
^Cyellow-aso-5384@gitpush-python-billowing-obi-0729:~/app$

image.png

5git設定

$ git init
Initialized empty Git repository in /var/app/.git/

変更のあったファイルをすべて登録します。

git add .

登録された変更を確認します。

git status

コミットします。

git commit -m "ここにコミットメッセージを記載します (例: ファーストコミット)"

エラーが出ますのでgitの初期設定をしましょう。
エラーの内容は以下になりますので参考にしてください。

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: empty ident name (for <yellow-aso-5384@gitpush-python-billowing-obi-0729.lolipop.io-816b5acde6>) not allowed

エラー文に記載されている通りgitに自分を分からせるために
gitに登録しているアドレスとユーザーネームを指定してあげましょう。
ターミナルで以下を実行します。

git config --global user.email ここに自分のアドレスを入力してください
git config --global user.name ここに自分の名前を入力してください。

アドレスと名前の部分は""が無くても大丈夫です。これで再度コミットします。再度コミットします。今後は通りました。

git commit -m firstcommit

image.png

6 Gitデプロイ準備

Pythonプロジェクトで リポジトリの push を行った際に依存するパッケージの取得を自動化します。まず作成したプロジェクトへ SSH でログインします。接続情報はプロジェクトの詳細ページを表示し「SSH / SFTP」の項目をチェックしてください。

image.png

$ ssh -p 39126 yellow-aso-5384@ssh-1.mc.lolipop.jp

エラーPermission denied (publickey).が出ました。

The authenticity of host '[ssh-1.mc.lolipop.jp]:41709 ([157.6.124.210]:41709)' can't be established.
ECDSA key fingerprint is SHA256:DFKJANDOFHAOFNASJKEFNA;OSEIHFAWEF.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[ssh-1.mc.lolipop.jp]:41709,[157.6.124.210]:41709' (ECDSA) to the list of known hosts.
Permission denied (publickey).

そこでPUTTYを使って公開鍵と秘密鍵を作成します。

作成したら再度以下に記載されているSSHコマンドをたたきます。

image.png

公開鍵にも拘わらずパーミッションがないと言われています。

$ ssh -p 38453 yellow-aso-5384@ssh-1.mc.lolipop.jp
Permission denied (publickey).
git remote add lolipop ssh://yellow-aso-5384@ssh-1.mc.lolipop.jp:38453/

やはりパーミッションエラーがでました。

git push lolipop master
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

この問題のポイントは対象のリモートリポジトリへのアクセス権限がなく失敗していますので解決策として鍵認証周りを再設定し直す事が重要です。具体的に解決の流れは
1:鍵を作成する。
2:作成した鍵をコピーする。
3:gitghubに公開鍵を登録する。
4:configファイルを作成し直す。(接続確認)
だと思いますが3から実施します。

githubで鍵を登録する

まず鍵を入れるフォルダに移動しましょう。
はじめて鍵を生成するときは何も入っていないはずです。

$ cd ~/.ssh

次のコマンドで鍵を生成します。

$ ssh-keygen -t rsa

3回エンターを押せばid_rsaとid_rsa.pubの2つの鍵が生成されます。
鍵が生成されました。

Generating public/private rsa key pair.
Enter file in which to save the key (/var/app/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/app/.ssh/id_rsa.
Your public key has been saved in /var/app/.ssh/id_rsa.pub.
The key fingerprint is:
Sfafafauhflabndflabliufha;sdfaiO1k yellow-aso-5384@gitpush-python-billowing-obi-0729.lolipop.io-816b5acde6
The key's randomart image is:
+---[RSA 2048]----+
|          . =+  .|
|           * += +|
|          + +o.+.|
|           + oo..|
|        S o.o.o..|
|         . o+oEo.|
|            .X+++|
|            O.===|
|           oo*+oO|
+----[SHA256]-----+
yellow-aso-5384@gitpush-python-billowing-obi-0729:~/.ssh$ clip < ~/.ssh/id_rsa.pub

公開鍵をGitHubにアップロードする

yellow-aso-5384@gitpush-python-billowing-obi-0729:~/.ssh$ vi id_rsa.pub

で公開鍵(pub)の中身をチェックしエディタに保存しておきます。

githubのマイページで、この鍵を登録します。右上のアイコンをクリックし、settings → SSH and GPG keysをクリックしてください。次に、右上のnew keysをクリックしてください。

image.png

image.png

先ほど作成した公開鍵 id_ras.pubの文字列をkeyの箇所に貼り付けてください(titleは任意の値です。)

image.png

config作成

鍵を作るときに名前を指定していれば、うまくいかないかもしれません。ssh接続の際「~/.ssh/id_rsa」、「~/.ssh/id_dsa」、「~/.ssh/identity」のみデフォルトでは見にいかないからです。それに対応するため~/.ssh/configを作成します。

vimで作成してあげて

Host github github.com
  HostName github.com
  IdentityFile ~/.ssh/id_git_rsa #ここに自分の鍵のファイル名
  User git

作成しましょう。これで以下のようにコマンドを打って確かめて見ましょう。

ssh -T github

接続を確かめましょう。

yellow-aso-5384@gitpush-python-billowing-obi-0729:~/.ssh$ ssh -T git@github.com

SSH接続には成功していますがGitHubはシェルアクセスは許していない旨のメッセージす。OKですね。

The authenticity of host 'github.com (13.114.40.48)' can't be established.
RSA key fingerprint is SHAasldkjfasdjfajf;aosdf;asdnfaY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,13.114.40.48' (RSA) to the list of known hosts.
Hi KENOSIN! You've successfully authenticated, but GitHub does not provide shell access.

続いてデプロイしましょう。

git push lolipop master

同じエラーがでました。

Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

リモートリポジトリが読めません。あなたが正しいアクセス権を持っているかそのリポジトリが存在することを確認してください。というエラー内容です。一言で言えば鍵が合ってない可能性が高いですね。アクセス権がない、またはリポジトリが存在しない、いずれかが原因と考えられます。そこでまずそのリモートリポジトリが存在するかコマンドで一覧を確認してみました。

git remote -v
lolipop ssh://yellow-aso-5384@ssh-1.mc.lolipop.jp:38453/ (fetch)
lolipop ssh://yellow-aso-5384@ssh-1.mc.lolipop.jp:38453/ (push)

ちゃんとsshになっています。
そこで以下サイトを参考に鍵を生成しなおす事にしました。
http://tusukuru.hatenablog.com/entry/2018/08/29/021651

鍵は無事生成されましたが、このままではまだ稼働しませんので以下2つの手順を踏みます。

1つめ puttygenで生成されたid_rsaをppkに変換する

.sshの中に生成したid_rsaが入っています。
しかしまだppkになっていません。このファイルをwin10のローカルにダウンロードして
puttygenでppk化して、linuxサーバーへアップロードしました。
puttygenの使い方は以下を参考にしてください。
http://www.puniokid.com/tips/linux/69/

yellow-aso-5384@gitpush-python-billowing-obi-0729:~/.ssh$ ls -al
total 28
drwxr-xr-x 2 yellow-aso-5384 www-data 4096 Jul  8 07:55 .
drwxrwxr-x 9 yellow-aso-5384 www-data 4096 Jul  8 08:00 ..
-rw-r--r-- 1 yellow-aso-5384 www-data   74 Jul  8 05:50 config
-rw-r--r-- 1 yellow-aso-5384 www-data  275 Jul  8 05:21 environment
-rw------- 1 yellow-aso-5384 www-data 1675 Jul  8 05:43 id_rsa
-rw-r--r-- 1 yellow-aso-5384 www-data  406 Jul  8 05:43 id_rsa.pub
-rw-r--r-- 1 yellow-aso-5384 www-data 2212 Jul  7 06:49 known_hosts

名前をid_rsa.ppkに整形します。

yellow-aso-5384@gitpush-python-billowing-obi-0729:~/.ssh$ mv sample.ppk id_rsa.ppk

2つめ マネージドクラウド側へGITHUBの公開鍵の設定を行う

公開鍵の内容はこんな感じです。メールアドレスは含めなくていいので注意してください。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABDAF;AOIJFOAWEJFA;POENF;AWOENFLAWBFKQAJAWGBAWLAGA:WIAE@8WHOIEBBGVL;UAAWHFaC1yc2EAAAADAQABDAF;AOIJFOAWEJFA;POENF;AWOENFLAWBFKQAJAWGBAWLAGA:WIAE@8WHOIEBBGVL;UAAWHFaC1yc2EAAAADAQABDAF;AOIJFOAWEJFA;POENF;AWOENFLAWBFKQAJAWGBAWLAGA:WIAE@8WHOIEBBGVL;UAAWHFaC1yc2EAAAADAQABDAF;AOIJFOAWEJFA;POENF;AWOENFLAWBFKQAJAWGBAWLAGA:WIAE@8WHOIEBBGVL;UAAWHFZ2K6yd

image.png

3回目のデプロイです。

git push lolipop master

今回はデプロイが通りました。

Counting objects: 9507, done.
Delta compression using up to 48 threads.
Compressing objects: 100% (8320/8320), done.
Writing objects: 100% (9507/9507), 34.87 MiB | 221.00 KiB/s, done.
Total 9507 (delta 3035), reused 0 (delta 0)
remote: Run python build process...
remote: Syncing...
remote: Deploy :ok:
remote: Build success! Thanks for using Lolipop! Managed Cloud.
remote: Restarting app...
To ssh://yellow-aso-5384@ssh-1.mc.lolipop.jp:38453/
 * [new branch]      master -> master

manage.pyがある場所へ移動してmigrationを実施して

$ python manage.py makemigrations
$ python manage.py migrate

runserverコマンドを叩きます。

$ python manage.py runserver 8000
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0