python:WEBアプリの公開(Vultrでデプロイ備忘録)
格安VPS(仮想サーバー)のVultrを使って、作ったアプリをデプロイする方法です。自分の備忘録でもあります。
環境:linux(ubuntu18.04LTS)
以下のコードはすべてターミナル上で実行しています。また、事前にVultrの登録が必要です。
■Vultrサーバーへログイン
ssh root@Vultr IPアドレス
その後、パスワードを求められるので、Vultrサーバーのパスワードを入力。
・パスワードを変更する
passwd
・ユーザーを作成
adduser ユーザー名
※パスワードを設定が求められるので設定します。
・ユーザーへの管理者権限設定
usermod -aG sudo msydsss
・rootの権限をなくす
vim /etc/ssh/sshd_config
※セキュリティ上、rootにアクセスされてしまうと悪用されかねないため
PermitRootLogin no
※sshd_configの中のPermitRootLoginをnoにします。
・リロードする
systemctl reload sshd
・rootからログアウトする
exit
・さっき作ったユーザーにてサーバーへログインを行う
ssh ユーザー名@IPアドレス
・ファイアウォールの設定
sudo ufw allow ssh
sudo ufw enable
※sshのアクセスを許可する
■ubuntuのパッケージマネージャーの更新
まずは、ターミナル上でVultrサーバーにログインしてください。その後、以下のコードを実行していく。
sudo apt update
■pip、PostgreSQL、Nginxのインストール
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl
データベースに関しては、ローカル環境ではsqliteを使用していましたが、本番環境では、よくエラーを起こすのでPostgreSQLに変更。
オープンソースのWebサーバ、Nginx(エンジンエックス)を使用する。
■PostgreSQLの設定
・PostgreSQLにログイン
sudo -u postgres psql
・データベーステーブルの作成
CREATE DATABASE myproject;
※上記では、myprojectというデータベースを作成している。myprojectの部分は任意
・ユーザーの作成
CREATE USER myprojectuser WITH PASSWORD 'password';
※myprojectuserはユーザー名、passwordはパスワード。どちらも任意の値でOK。ただ、経験上、passwordと設定をすると、エラーになる可能性があるのでpassword以外を設定したほうが良い。
・データベースの初期設定
ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';
※文字コードの設定等
・データベースへの権限の付与
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
※先ほど作成したmyprojectテーブルにmyprojectuserというユーザーの権限を付与します。
・データベースからログアウト
\q
Gitを使ってプロジェクトをリモートする
・Gitのインストール
sudo apt-get install git
・リポジトリのclone
git clone https://github.com/****/**** .git
※githubにて、リポジトリを作成し、githubにpushされていることが前提
仮想環境の構築
・仮想環境のインストール
sudo -H pip3 install --upgrade pip
sudo -H pip3 install virtualenv
・開発環境の作成と起動
cd newsproject
#manage.pyがあるフォルダへ移動
virtualenv newsenv
source newsenv/bin/activate
virtualenv newsenvで仮想環境構築。
source newsenv/bin/activateで仮想環境をアクティベート
Djangoとgunicornのインストール
pip install django gunicorn psycopg2-binary
※仮想環境内でdjangoとgunicornをインストール
Djangoプロジェクトの設定
・settings.pyファイルの設定
vim ~/newsproject/newsproject/settings.py
ALLOWED_HOSTS = ['IPアドレス', 'localhost']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': '****',
'HOST': 'localhost',
'PORT': '',
}
}
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
※仮想環境内のsettings.pyファイルに作成したデータベースの情報を入力していく
※vimの操作方法
Migration等のコマンドの実行
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py collectstatic
python3 manage.py createsuperuser
※makemigrations時にNo module Errorが出る場合は、pip install でインストールを行う
※manage.py collectstaticはcss関連ファイルを一つにまとめるようなコード
・gunicornが起動するか確かめる
sudo ufw allow 8000
gunicorn --bind 0.0.0.0:8000 newsproject.wsgi
※ファイアウォールの許可設定。gunicornは、python manage.py runserverと同じようなもの。本番環境では良く使用されるwsgi
IPアドレス:8000 をURLに入力して、しっかりと表示されているか確認
・仮想環境を抜ける
deactivate
gunicornの設定
・gunicorn socketの作成
sudo vim /etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
・gunicorn serviceの作成
sudo vim /etc/systemd/system/gunicorn.service
※socketからアクセスを受けた時に実行するファイルの設定をしていきます。
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=****
Group=www-data
WorkingDirectory=/home/****/newsproject
ExecStart=/home/****/newsproject/newsenv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
newsproject.wsgi:application
[Install]
WantedBy=multi-user.target
※pathの入力する行は注意。スペースでも入ってたらエラーがでる
※****の部分は作ったユーザー名を入力
gunicorn socketの実行
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket
※gunicornを裏で実行させるような設定
Nginxの設定
・Nginxの繋ぎこみの設定
sudo vim /etc/nginx/sites-available/newsproject
server {
listen 80;
server_name **.**.**.**;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/****/news:project;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
※Vultrの環境で行うようにする。
※pathにスペースが入っててもエラーが出るので注意
シンボリックリンクの設定
sudo ln -s /etc/nginx/sites-available/newsproject/ etc/nginx/sites-enabled
※Windowsでいうショートカットのようなもの
Nginxの再起動
sudo systemctl restart nginx
※ここでエラーが出る場合、site-enabledフォルダが悪さしてる可能性あり。現在のsite-enabledフォルダの名前を変更し、新たにsite-enabledフォルダを作成。現在のsite-enabledフォルダに入っているprojectフォルダを新たに作成したsite-enabledフォルダに移動させ、実行してみる
※以下方法
sites-enabledにsites-enabledフォルダが2個入ってしまった場合
cd /etc/nginx/
sudo mv sites-enabled sites-enabled2
sudo mkdir sites-enabled
cd sites-enabled
sudo mv todoproject /etc/nginx/sites-enabled/
Firewallの設定
sudo ufw allow 'Nginx Full'
以上でVultrにてデプロイする方法でした。
※なんかタイトルがおかしいな…
過去記事
この記事が気に入ったらサポートをしてみませんか?