1. Ubuntu 20.04のインスタンスを作成

2. ローカルターミナルとのSSH接続(ブラウザのターミナルからでも接続可能)
参照-> https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-ssh-using-terminal#terminal-ssh-get-public-ip-address

  • パブリックIPアドレスの確認。IPアドレスは静的に固定化しておく(静的IPアドレスは後にドメインと紐付けする)
  • プライベートキーのダウンロードとsshフォルダ(隠しフォルダ)への格納。ファイルパスをコピーしておく
  • ユーザーだけがキーにアクセスできるようにするコマンドをターミナルから実行
$ sudo chmod 600 /path/to/private-key.pem

コピーしたファイルパスを使う

  • SSH Lightsail を使用して のインスタンスに接続
$ ssh -i /path/to/private-key.pem username@public-ip-address

usernameはインスタンスのユーザー名。ブラウザターミナルより確認。パブリックIPアドレスは最初に確認したもの

3. ubuntuのパッケージマネジャーの更新

$ sudo apt update

sss

4. pip, PostgresSQL, Nginxのインストール

$ sudo apt install python3^pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl

5. Postgres SQLの設定

  • データベースへのログイン $ sudo -u postgres psql
  • Postgressのコマンド内で以下を実行
    • データベーステーブルの作成
      • postgres=# CREATE DATABASE myproject;
    • データベース内でのユーザー作成
      • postgres=# CREATE USER myprojectuser WITH PASSWORD 'password';
    • データベースの初期設定
      • postgres=# ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
      • postgres=# ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
      • postgres=# ALTER ROLE myprojectuser SET timezone TO 'UTC';
    • データベースへの権限付与
      • postgres=# GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
    • データベースから抜ける
      • postgres=# \q

6. Gitを使ってプロジェクトのコピー

  • Gitのインストール $ sudo apt-get install git
  • リポジトリのクローン $ git clone <githubから取得するプロジェクトのHTTPSのパス>

7. 仮想環境の構築

  • 仮想環境のインストール
    $ sudo -H pip3 install --upgrade pip
    $ sudo -H pip3 install virtualenv
  • 開発環境の作成と起動
    $ cd blogproject
    $ virtualenv blogenv
    $ source blogenv/bin/activate
  • Djangoとgunicornのインストール
    $ pip install django gunicorn psycopg2-binary

8. Django プロジェクトの設定

  • settings.py ファイルの設定 (vimモードでの作業)
    • $ vim ~/Djangoプロジェクトフォルダ(main)/Djangoプロジェクトフォルダ(sub)/settings.py
    • 以下のように修正
      ——–省略
      ALLOWED_HOSTS = ['VPSのIPアドレス
      ', 'localhost']
      ——–省略
      DATABASES ={
      'default': {

      'NAME': 'myproject',
      'USER': 'myprojectuser',
      'PASSWORD': 'password',
      'HOST': 'localhost',
      'PORT': '',
      }
      }
      ——–省略
      STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
  • Migrationなどの実行
    • $ python manage.py makemigrations
    • $ python manage.py migrate
    • $ python manage.py collectstatic
    • $ python manage.py createsuperuser
  • 管理者アカウントを作り直す。ユーザー名とパスーワードは記録しておく。
    • $ python manage.py createsuperuser
  • gunicornの起動確認
    • $ sudo ufw allow 8000
    • $ gunicorn --bind 0.0.0.0:8000 Djangoプロジェクト名.wsgi
  • 仮想環境を抜ける
    • $ deactivate

9. gunicornの設定 (Daemonプロセスでアクセスできるようにgunicornを設定)

  • gunicorn socketの作成(vimモードで設定)
    • $ sudo vim /etc/systemd/system/gunicorn.socket
    • 以下のように修正
      [Unit]
      Description=gunicorn socket
      [Socket]
      ListenStream=/run/gunicorn.sock
      [Install]
      WantedBy=sockets.target
  • gunicorn serviceの作成 (vimモードで設定)
    • $ sudo vim /etc/systemd/system/gunicorn.service
    • 以下のように修正
      [Unit]
      Description=gunicorn daemon
      Requires=gunicorn.socket
      After=network.target
      [Service]
      User=VPSのユーザー名
      Group=www-data
      WorkingDirectory=/home/ユーザー名/blogproject
      ExecStart=/home/ユーザー名/blogproject/blogenv/bin/gunicorn \
      --access-logfile - \
      --workers 3 \
      --bind unix:/run/gunicorn.sock \
      blogproject.wsgi:application
      [Install]
      WantedBy=multi-user.target
  • gunicorn socketの実行
    • $ sudo systemctl start gunicorn.socket
    • $ sudo systemctl enable gunicorn.socket

10. Nginxの設定 (ブラウザから受けたリクエストをgunicornに繋げるための設定を行う

  • $ sudo vim /etc/nginx/sites-available/blogproject
  • 以下のように修正
    server {
    listen 80;
    server_name VPSのIPアドレス;
    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
    root /home/ユーザー名/Djangoプロジェクト名;
    }
    location / {
    include proxy_params;
    proxy_pass http://unix:/run/gunicorn.sock;
    }
    }
  • 設定の反映
    $ sudo ln -s /etc/nginx/sites-available/Djangoプロジェクト名 /etc/nginx/sites-enabled
  • Nginxの再起動 (設定を反映させるために再起動)
    $ sudo systemctl restart nginx
  • Firewallの設定
    $ sudo ufw allow 'Nginx Full'
  • 設定を途中で変更した場合、管理画面からVPSを再起動(オレンジのボタン)

11.サイトの確認

以下のアドレすで公開されたサイトを確認。adminサイトには、createsuperuserで登録した管理者アカウントのユーザーIDとパスワードでログイン。

http://静的IPアドレス/admin/

(/admin/ 以外のページも確認)