見出し画像

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にてデプロイする方法でした。

キャプチャ


※なんかタイトルがおかしいな…



過去記事



この記事が気に入ったらサポートをしてみませんか?