AWSにdjango開発環境構築メモ（VSCode Remote SSH用）

# 前提

この構築のゴールは、AWS環境ではsshのみ開けて、サーバサイドの開発、デバックをClientPCのVSCodeでできるようにすることです。

Client
　 Windows10
サーバ　
　CentOS7（AWSで動作）

※手順全部書いたつもりです。参考になるところあったら使ってください。
※毎回これするのも大変なのでansible化するかdokerイメージにしたい。
※VSCodeでのdjangoデバック環境は次の機会に。

# ssh 設定
.ssh/sshconfigにAWSで起動したCentOSののログイン情報を記載してSSHでパス無しでログインできるようにする。
LocalForwardの行は、Djangoのポートへの。PCでlocalhost:8000を開くとサーバ側に転送されて便利。

```
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host myserver
    HostName xxx.xxx.xxx.xxx
    User centos
    IdentityFile ~user/.ssh/xxxx.pem
    LocalForward 8000 localhost:8000
```

VSCodeのRemote SSHで接続できる事を確認しておく
VSCodeにpythonのプラグインをインストールする

# サーバ側の変更

CentOS7のGitをVersion2に変更する

```
$ sudo yum -y remove git
$ sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
$ sudo yum -y install git2u
```
venv環境を作ってdjangoをインストール。後で使う、mysqlclientもインストール

```console
$ sudo pip3.6 install --upgrade pip
$ cd ~/envs/activate
$ python3 -m venv django
$ source ~/envs/django/bin/a
$ pip install django
$ sudo yum install python-devel mysql-community-devel
$ pip install mysqlclient
```

djangoのサンプルアプリ作成

```
$ cd ~/web/
$ django-admin startproject mysite

```

Cent7のSQliteのバージョンだとdjangoが動かない。
SQLiteは諦めMysqlをインストール

```console
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
$ yum info mysql-community-server
$ yum -y install mysql-community-server
$ sudo yum -y install mysql-community-server
$ sudo systemctl enable mysqld.service
$ sudo systemctl start mysqld.service
$ sudo systemctl status mysqld.service
$ sudo cat /var/log/mysqld.log|grep password
```

Mysqlのセキュリティ設定

```
[root@ip-172-31-33-248 ~]# mysql_secure_installation 

Securing the MySQL server deployment.

Enter password for user root: 

The existing password for the user account root has expired. Please set a new password.

New password: 
Re-enter new password: 
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : No

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done! 
[root@ip-172-31-33-248 centos]# 
```

MysqlのユーザとDB作成

```
mysql> create database django01;
mysql> create user django@localhost identified by '************';
mysql> grant all on django01.* to django@localhost;
```

venvの適用方法（メモ）

```
[centos@ip-172-31-33-248 web]$ source venv/bin/activate
(venv) [centos@ip-172-31-33-248 web]$ python -V
Python 3.6.2
(venv) [centos@ip-172-31-33-248 web]$ pip list
Package    Version
---------- -------
Django     2.2.7  
pip        19.3.1 
pytz       2019.3 
setuptools 28.8.0 
sqlparse   0.3.0  
```

djangoのDBをMysqlに変更

```
$ git diff
diff --git a/mysite/settings.py b/mysite/settings.py
index 94fdb96..cf0a816 100644
--- a/mysite/settings.py
+++ b/mysite/settings.py
@@ -75,8 +75,15 @@ WSGI_APPLICATION = 'mysite.wsgi.application'
 
 DATABASES = {
     'default': {
-        'ENGINE': 'django.db.backends.sqlite3',
-        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': 'django01',
+        'USER': 'django',
+        'PASSWORD': '********',
+        'HOST': 'localhost',
+        'PORT': '3306',
+        'OPTIONS': {
+                'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
+                },
     }
 }
```

```
python manage.py migrate
python manage.py runserver
```

クライアントPCで```http://localhost:8000```を開くとdjangoサーバにつながります。