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=
- データベース内でのユーザー作成
- postgres=
# CREATE USER myprojectuser WITH PASSWORD 'password';
- postgres=
- データベースの初期設定
- 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=
- データベースへの権限付与
- postgres=
# GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
- postgres=
- データベースから抜ける
- postgres=
#
\q
- postgres=
- データベーステーブルの作成
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サイトには、createsuperuse
rで登録した管理者アカウントのユーザーIDとパスワードでログイン。
http://静的IPアドレス/admin/
(/admin/ 以外のページも確認)