この記事では、個人ブログを構築するコア機能の最後の部分、つまり展開と起動を完了します。
次のパートでは、記事コラム、メッセージ通知、ユーザー拡張機能、その他の小さな機能モジュールなど、その他のブログ機能を随時更新していきます。
目次
バックエンド ユーザーを準備し、Gunicorn を有効にする
この記事では、Nginx と Gunicorn を使用して Web サイト プロジェクトを実装し、Alibaba Cloud 上で Django プロジェクトのオンライン デプロイメントを実装します。
開発時には Django 独自の開発サーバーを使用しましたが、オンライン環境で使用するにはパフォーマンスが低すぎました。したがって、オンラインでデプロイする場合は、Django だけでなく、Nginx と Gunicorn もインストールする必要があります。これら 3 兄弟のワークフローは次のとおりです。
- クライアントは http リクエストを送信し、Nginx は http リクエストを分析するための直接の外部サーバー インターフェイスとして機能します。
- 静的リソースリクエストの場合は、Nginx 自体によって処理されます (非常に効率的)。
- 動的リソースリクエストの場合は、Gunicorn に転送します。
- Gunicorn がリクエストを前処理した後、それを Django に転送し、最終的にリソースの返却を完了します。
Django プロジェクトをデプロイする手順は、おおよそ次のとおりです。
- サーバーを準備します(ポート80を開きます)
- サーバーへのリモート接続とファイル転送のためのツールを準備します (Xshell と Xftp)
- Python、Nginx、Mysqlをインストールする
- データベースの作成
- Django プロジェクト構成ファイルを変更する
- Django プロジェクトをサーバーに転送する
- プロジェクト Requirements.txt に含まれる関連する Python パッケージをインストールします。
- 静的リソースを収集する
- Nginx関連のプロキシパラメータを構成する
- Gunicorn をインストールして有効にする
- テスト走行
サーバーの準備
この記事では Alibaba Cloud を使用します。Alibaba Cloud サーバーは 1 か月間試用できます。プロジェクトのデプロイメントを実装する例として試用サーバーを使用します。
サービス アクティベーション インターフェイスでは、必要に応じてその他の情報を入力できます。オペレーティング システムの Ubuntu 22.04 64 ビット バージョンを使用します。
アクティブ化するときは、オペレーティング システムのみを選択し、他のアプリケーションはプリインストールされません。
アクティブ化後、管理インスタンス インターフェイスに入ると、最も重要なフィールド コンテンツであるパブリック IP が表示されます。39.107.240.223
次に、インスタンスのパスワードをリセットします (そうしないと、サーバーへのログイン時にデフォルトで秘密キーが使用されます)。
次に、セキュリティ グループの受信ポートを確認します。少なくともポート 80 と 22 が開いている必要があります。
XshellとXftpをインストールする
Xshell と Xftp は、NetSarang によって開発されたリモート ツールです。
- Xshell はサーバーにリモート接続して制御できます
- Xftp はリモートからサーバーにファイルを転送できます
ダウンロードアドレスは以下の通りですが、個人利用の場合は無料版をご利用ください。
家庭/学校向け無料 - NetSarang ウェブサイト https://www.xshell.com/zh/free-for-home-school/
ソフトウェアをインストールした後、まず Xshell を開き、新しいセッションを作成し、ホスト上の Alibaba Cloud のパブリック ネットワーク アドレスを入力します。
「ユーザー認証」を選択し、ログインユーザー名とパスワードを入力し、「接続」ボタンをクリックしてログインを完了します。
Xftp と Xshell のインストール方法とログイン方法はほぼ同じですので、ここでは特別な紹介は行いません。
サーバーインストールソフトウェア
ソフトウェアをインストールする前に、古いシステム バージョンによって引き起こされる問題を防ぐために、まずシステム ライブラリのバージョンをアップグレードします。
~$ sudo apt-get update
~$ sudo apt-get upgrade
必要なソフトウェアをインストールします。Nginx、Python、PIP、および PIP は Python 仮想環境virtualenv
ライブラリをインストールします。
~$ sudo apt-get install nginx
~$ sudo apt-get install python3
~$ sudo apt-get install python3-pip
~$ sudo pip3 install virtualenv
MySQLをインストールする
sudo apt install mysql-server
実行ステータスを確認する
sudo systemctl status mysql
インストールが完了したら、コマンドを使用して root ユーザーとして直接ログインします。
sudo mysql
(MySQL 8.0 では、root ユーザーはデフォルトでauth_socketプラグインによって許可されており、パスワードを使用してログインすることはできません。パスワード ログインは、パスワードを変更した後にのみ有効にできます。)
次に、mysql コマンド インターフェイスに次の 2 つのコマンドを入力して、root ユーザーのパスワードを最新のパスワードに変更します。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
mysql> FLUSH PRIVILEGES;
mysql を終了します。
mysql> exit
次に、root パスワードを使用してログインが成功したかどうかを確認します。
mysql -u root -p
次のインターフェイスは、ログインが成功したことを表します。
便利なことに、データベースを一緒に作成しました (名前がローカルに作成したものと同じである限り)。
mysql> CREATE DATABASE IF NOT EXISTS django_blog DEFAULT CHARSET utf8;
Django プロジェクト構成ファイルを変更する
プロジェクトをオンラインでデプロイする場合は、構成ファイルを変更する必要がありますdjango4blog/settings.py
。
DEBUG = False
ALLOWED_HOSTS = ['*']
# 静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')
主に次の 3 つのポイントが含まれます。
- セキュリティの問題を回避するために、デプロイするときはデバッグ モードをオフにしてください (現時点では、Django は静的リソースを処理しません)。
- ALLOWED_HOSTS は、アクセスを許可するサーバー名または IP を指定します。アスタリスクは、すべてのリクエストが許可されることを示します。実際の展開時にドメイン名または IP に変更してください (ALLOWED_HOSTS = [ '127.0.0.1'] など)。
- プロジェクトには多数の静的ファイルがあります。デプロイするときは、それらを均一に収集する場所を見つける必要があります。これは、STATIC_ROOT で指定されたアドレスです。このアドレスを指定すると、Django はコマンドを使用してすべて (管理ページを含む) を収集できます。関連) 静的リソース (css、js など) はすべて指定されたフォルダーに収集されるため、デプロイ中にそれらを均一に読み込むことが容易になります。
次に、オンライン展開のクロスドメインの問題を解決するために構成を変更する必要があります。
まず PIP を使用してパッケージをインストールしますdjango-cors-headers
。
pip install django-cors-headers
次に、設定ファイルを変更しますdjango4blog/settings.py
INSTALLED_APPS = [
......
'corsheaders', #解决浏览器跨域问题
......
]
MIDDLEWARE = [
......
'corsheaders.middleware.CorsMiddleware', #解决浏览器跨域问题
'django.middleware.common.CommonMiddleware', #解决浏览器跨域问题
......
]
CORS_ORIGIN_ALLOW_ALL = True #解决浏览器跨域问题
CORS_ALLOW_CREDENTIALS = True #解决浏览器跨域问题
SECURE_CROSS_ORIGIN_OPENER_POLICY = 'None' #Django4 特定解决浏览器跨域问题
さらに、サーバー データベースのパスワードがローカル データベースのパスワードと一致しない場合は、事前に構成ファイルのパラメータを変更できます。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'django_blog', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': 'newpassword', # 数据库密码 修改为服务器数据库密码
}
}
最後に、ローカル プロジェクトで使用する必要があるライブラリのリストを作成し、サーバーに均一にインストールできるようにします。
ローカル仮想環境でコマンドを入力します。pip freeze > requirements.txt
(env) E:\django_project\django4blog>pip freeze > requirements.txt
ライブラリマニフェストファイルを取得しますrequirements.txt
。
Django プロジェクトをサーバーに転送する
ローカル プロジェクトのパラメーターを修正した後、Xftp にログインし、ローカル プロジェクト フォルダーをdjango_project
サーバーに直接コピーします。
Xshell のサーバー操作インターフェイスに戻り、プロジェクト フォルダーに入ります。django_project
cd django_project
次に、サーバー上に仮想環境を生成します。
virtualenv --python=python3.10 myenv
仮想環境に入ります。
source env/bin/activate
django4blog
プロジェクト フォルダーに移動します。
cd django4blog
次のコマンドを入力して、プロジェクトに必要な Python ライブラリをインストールします。
(env) ../django4blog# pip3 install -r requirements.txt
pip3 install -r requirements.txt
コマンド実行中に以下のエラーが発生した場合。
これは、ローカルの tzdata ライブラリのバージョンが高すぎるためです。Alibaba のイメージ バージョンは現在 2022.4 のみをサポートしています。現時点では、requirements.txt の tzdata バージョンを 2022.4 に直接変更できます。
Ubuntuのファイル変更コマンドは次のとおりです。
vi requirements.txt
,ファイルを開きます
Insert または i キーを押してファイルの変更を開始し、tzdata バージョンを 2022.4 に変更します。
変更が完了したら、最初に Esc キーを押し、次にコマンドを入力して:wq
ファイルを保存し、終了します。
コマンドを再実行する
pip3 install -r requirements.txt
インストール成功
次に、次のコマンドを入力して、静的リソースの収集とデータの移行を完了します。
(env) ../django4blog# python3 manage.py collectstatic
(env) ../django4blog# python3 manage.py migrate
この時点で、開発およびコーディング部分の展開作業は終了しました。
Nginxの設定
次のステップでは、Nginx を有効にし、関連するプロキシを構成します。
まず、Nginx のデフォルトの構成ファイルと接続ファイルを削除しますdefault
。
別々に入力し/etc/nginx/sites-available
、/etc/nginx/sites-enabled
2 つのフォルダーにコマンドを入力します。
sudo rm -r default
ファイルを削除しますdefault
。
次に、/etc/nginx/sites-available
独自の新しい構成ファイルを入力して作成します。django4blog
(myenv) root.../etc/nginx/sites-available# cd /etc/nginx/sites-available
(myenv) root.../etc/nginx/sites-available# vi django4blog
次の設定内容を入力します。
server {
charset utf-8;
listen 80;
server_name 39.107.240.223; # 改成你的 IP
location /static {
alias /root/django_project/django4blog/collected_static;
}
location / {
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/39.107.240.223.socket; # 改成你的 IP
}
}
:wq
保存して終了したら、次のコマンドを入力します
sudo ln -s /etc/nginx/sites-available/django4blog /etc/nginx/sites-enabled
次に、Nginx 構成ファイルのユーザー情報を確認します。
このユーザー名を変更しないroot
と、403 権限エラーが報告される可能性があります。
cd /etc/nginx#
、vi nginx.conf
ユーザーを root に変更します
最後に、Nginx 構成情報を更新します。
sudo service nginx reload
バックエンド ユーザーを準備し、Gunicorn を有効にする
まず、プロジェクトが存在するディレクトリに戻り、仮想環境に入り、コマンドを入力してスーパー アカウントを作成します。cd django_project/django4blog
python manage.py createsuperuser
次に、Gunicorn をインストールします。
pip3 install gunicorn
それを起動しgunicorn
、独自のパブリック ネットワーク アドレスと独自のプロジェクト名に変更します。
gunicorn --bind unix:/tmp/39.107.240.223.socket django4blog.wsgi:application
テストと実行
ローカル システムに戻り、ブラウザにアドレスを入力します:ホーム ページ
正常に実行されました! !
次に、バックエンドのログイン | Django サイト管理者にログインし、いくつかのデータを追加します。
ホームページに戻る
記事詳細ページを読む