日本語パックのインストール
$ sudo apt-get -y install language-pack-ja-base language-pack-ja ibus-mozc
日本語に設定
$ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
確認
$ sudo localectl
次のように表示されることを確認
System Locale: LANG=ja_JP.UTF-8
LANGUAGE=ja_JP:ja
VC Keymap: n/a
X11 Layout: jp,jp
X11 Model: pc105
ソフトウェアの更新
$ sudo apt update
Python3,pip,postgesql,nginxのインストール
$ sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx
注意:おそらく、以下のように表示される
12 main 5432 down postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
その場合、次のように対応する
sudo etc/init.d/postgresql start
直ったか確認(赤字が緑の色になっていればOK)
$ pg_lsclusters
postgresqlのバージョン確認
$ psql --version
postgresqlと通信
$ sudo -u postgres psql
これらは実際入力するときは「¥」は「\」で表示される。
データベースの作成
(your_databaseに自分で決めるデータベースの名前が入る)
# CREATE DATABASE your_database;
データベースのユーザーとパスワードの作成
(your_user_nameに自分の名前、yourpasswordに自分のパスワードが入る)
# CREATE USER your_user_name WITH PASSWORD 'yourpassword';
データベースへの日本語設定
# ALTER ROLE your_user_name SET client_encoding TO 'utf8';
タイムゾーン設定
# ALTER ROLE your_user_name SET timezone TO 'Asia/Tokyo';
ユーザーに権限を付与
# GRANT ALL PRIVILEGES ON DATABASE your_database TO your_user_name;
通信終了
# ¥q
PostgreSQLのリモート接続設定
$ cd /etc/postgresql/12/main
pg_hba.confの編集
$ sudo vim pg_hba.conf
97行目当たり、# IPv4 local connections:に以下を追記
# IPv4 local connections:
host all all 127.0.0.1/32/32 md5
host all all 自分のIPアドレス md5 # 追記
postgresql.conf の編集
$ sudo vim postgresql.conf
# listen_addresses = 'localhost'
59行目あたり、上記を次のように変更する
listen_addresses = '接続させたいIPアドレス'
PostgreSQL再起動
$ sudo /etc/init.d/postgresql restart
Pip3 のインストールとアップグレード
$ sudo -H pip3 install --upgrade pip
virtualenvのインストール
$ sudo -H pip3 install virtualenv
virtualenvのインストール
$ sudo -H pip3 install virtualenv
次のような表示が出るので留意しとく
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
訳
警告: 「root」ユーザーとして pip を実行すると、パーミッションが壊れたり、システム パッケージ マネージャーと競合する動作が発生する可能性があります。 代わりに仮想環境を使用することをお勧めします: https://pip.pypa.io/warnings/venv
ホームディレクトリへ移動
$ cd
virtualenvのファイル作成(仮想環境ファイル名はvenvにしている)
$ virtualenv venv
仮想環境の有効化
仮想環境の実行
$ source venv/bin/activate
仮想環境の中にdjango,gunicorn,psycopg2をインストール
(venv) $ pip3 install django gunicorn psycopg2
次のようになる場合がある
ERROR: Failed building wheel for psycopg2
この場合、以下のように対処
pip install psycopg2-binary
前提として、既にプロジェクトをデプロイしているとして、進めて行きます。GitHubとかお好きなように
GitHubの場合
gitをインストール
$ sudo apt-get install git
プロジェクトを設置したいディレクトリに移動して、クローン
$ git clone git@github.com:xxxxxxxxx/xxxxxxxxx.git
環境変数で管理させるためにdjango-environをインストール
(venv) $ pip3 install django-environ
Djangoの動作確認
settings.pyを編集する
自分のリモートサーバーのIPアドレスを入力
ALLOWED_HOSTS = ['xxx.xxx.xxx.xxx']
8000番ポートを解放
$ sudo ufw allow 8000
manage.pyがあるディレクトリで以下を実行(xxx.xxx.xxx.xxxに自分のIPアドレスを入力)
$ python3 manage.py runserver xxx.xxx.xxx.xxx:8000
エラーが出た場合は対処
ModuleNotFoundError: No module named 'livereload'
livereloadを仮想環境でインストール
$ pip install livereload
ModuleNotFoundError: No module named 'django_cleanup'
django_cleanupを仮想環境でインストール
$ pip install django_cleanup
migrateしてない場合は赤字で注意されるので対応
python3 manage.py migrate
ブラウザで確認
xxx.xxx.xxx.xxx:8000
サイトを確認できたらOK
manage.pyがあるディレクトリで以下を実行(xxx.xxx.xxx.xxxに自分のIPアドレスを入力,projectに自分のプロジェクト名を入力)
(venv) $ gunicorn --bind xxx.xxx.xxx.xxx:8000 project.wsgi
エラーが出ず、サイトを確認できたらOK
GunicornをOSの起動時に動作するように設定
unicornのシステムファイルが含まれるディレクトリに移動
$ cd /etc/systemd/system
gunicornのサービスファイル作成
$ sudo vim /etc/systemd/system/gunicorn.service
作成したファイルを自分の環境に合わせて編集(yournameやprojectの部分)
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=yourname
Group=yourname
WorkingDirectory=/home/yourname/project
ExecStart=/home/yourname/venv/bin/gunicorn --pythonpath /home/yourname --access-logfile - --workers 3 --bind unix:/home/yourname/project/project.sock project.wsgi:application
[Install]
WantedBy=multi-user.target
編集後にファイルの動作を確認
$ sudo systemctl start gunicorn
エラーが出た場合は対処
次に、OS起動時にgunicornを起動するように設定
$ sudo systemctl enable gunicorn
以下のように表示され、/etc/systemd/system/gunicorn.service にシンボリックリンクが作成される
Created symlink /etc/systemd/system/multi-user.target.wants/gunicorn.service → /etc/systemd/system/gunicorn.service.
gunicornのログの表示
エラーが出た場合は対処(私がやった時は、かなりの鬼門だった)
sudo journalctl -u gunicorn
Nginxのコンフィグファイルの編集
Webサーバーのエントリーファイルがあるディレクトリへ移動
$ cd /etc/nginx/sites-available
confの編集
$ sudo vim /etc/nginx/nginx.conf
62行目を編集
include /etc/nginx/sites-enabled/project;
Djangoプロジェクトで使用するオリジナルのエントリーファイルを作成
$ cd /etc/nginx/sites-available
$ sudo vim project
下記のように編集(yournameやprojectなど、自身の環境に合わせて適宜書き換えてください)
server {
listen 80 ;
listen [::]:80 ;
server_name xxx.xxx.xxx.xxx;
server_name hogehoge.com;
location =/fabicon.ico {access_log off; log_not_found off;}
location /{
include proxy_params;
proxy_pass http://unix:/home/yourname/project/project.sock;
}
location /static{
alias /var/www/html/static;
}
location /media{
alias /var/www/html/media;
}
}
}
シンボリックリンクに貼る
sudo ln -s /etc/nginx/sites-available/project /etc/nginx/sites-enabled/
エントリーファイルの検証
$ sudo nginx -t
エラーが出たら対処。以下のようになればOK
8000番ポートの無効化
$ sudo ufw delete allow 8000
80番ポートの解放
$ sudo ufw allow 80
Nginxのリスタート
$ sudo systemctl restart gunicorn
gunicornの再起動
$ sudo systemctl restart nginx
ポート番号指定なしでブラウザで確認できたらOK
SSL化とリダイレクト設定は、こちらの記事を参考
static,mediaファイルの読み込み場所を指定するために、settings.pyに以下を追記
ファイルを置く場所を作成
画像表示に対応するための、必要なライブラリをインストール
(venv) $ pip3 install pillow
仮想環境に入り、静的ファイルを移動させる
(venv) $ python3 manage.py collectstatic
Djangoなど、何か変更を加えた際は、必ずgunicornとnginxを再起動させる
gunicornの再起動
$ sudo systemctl restart gunicorn
nginxの再起動
$ sudo systemctl restart nginx
サイトで確認できたらOK
前の記事 | 次の記事