Django là một framework python được sử dụng để phát triển các trang web và ứng dụng động. Nó tuân theo kiến trúc MVC (Model-View-Controller). Sử dụng Django giúp tăng tốc quá trình phát triển ứng dụng vì nó xử lý hầu hết các tác vụ cơ bản.
Trong hướng dẫn này, bạn sẽ học cách cài đặt framework Django trên máy chủ Rocky Linux 9. Bạn cũng sẽ tạo một dự án demo và thử nghiệm nó.
[*]
Cài đặt các gói tiện ích cơ bản. Một số trong số chúng có thể đã được cài đặt.
Tường lửa hoạt động với nhiều vùng khác nhau và vùng công cộng là vùng mặc định mà chúng ta sẽ sử dụng. Liệt kê tất cả các dịch vụ và cổng đang hoạt động trên tường lửa.
Kết quả đầu ra sau sẽ hiển thị.
Django cần có cổng HTTP và HTTPS để hoạt động. Mở chúng ra.
Tải lại tường lửa để áp dụng các thay đổi.
Cài đặt kho lưu trữ RPM cho PostgreSQL.
Cài đặt máy chủ PostgreSQL 14.
Khởi tạo cơ sở dữ liệu.
Kích hoạt và khởi động PostgreSQL dịch vụ.
Kiểm tra trạng thái của dịch vụ.
Chúng ta hãy cài đặt một số tiện ích bổ sung mà chúng ta sẽ cần để Django làm việc.
Để giải quyết bất kỳ lỗi nào trong tương lai liên quan đến
Thêm dòng sau vào cuối tệp.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tạo cơ sở dữ liệu mới cho Django.
Tạo người dùng cơ sở dữ liệu mới với mật khẩu mạnh.
Cấp quyền cho người dùng sử dụng cơ sở dữ liệu.
Thoát khỏi Postgres Shell.
Chúng ta hãy tạo một thư mục dự án demo.
Tạo môi trường ảo bằng lệnh sau. Thay thế
Thao tác này sẽ cài đặt phiên bản Python di động, pip trong thư mục dự án của bạn. Để cài đặt bất kỳ gói nào vào dự án, bạn cần kích hoạt môi trường bằng lệnh sau.
Dấu nhắc shell của bạn sẽ thay đổi để phản ánh môi trường ảo.
Bây giờ môi trường ảo đã được kích hoạt, hãy sử dụng
Xác minh cài đặt.
Tùy thuộc vào yêu cầu của dự án, bạn có thể cài đặt phiên bản Django khác trong các mục sau cách.
Xác minh cài đặt.
Như bạn thấy, phương pháp này cài đặt phiên bản Django mới hơn phiên bản lấy từ kho lưu trữ Rocky Linux.
Để thoát khỏi môi trường ảo, hãy chạy lệnh sau lệnh.
Sao chép kho lưu trữ vào thư mục
Chuyển sang thư mục mới tạo thư mục.
Tạo môi trường ảo.
Kích hoạt môi trường.
Cài đặt Django bằng
Xác minh cài đặt.
Như bạn thấy, phiên bản ở đây là phiên bản phát triển mới nhất. Phiên bản phát triển của Django không hữu ích cho môi trường sản xuất.
Tạo một môi trường ảo Python.
Kích hoạt môi trường.
Cài đặt gói Wheel.
Cài đặt Django và các gói.
Để xây dựng dự án, chúng ta cần sử dụng lệnh
Django sử dụng biến
Bạn sẽ nhận được đầu ra sau với khóa.
Bước đầu tiên là điều chỉnh cài đặt dự án. Mở tệp cài đặt để chỉnh sửa.
Thay thế giá trị hiện tại của biến
Thay đổi cài đặt cho phần
Tiếp theo, di chuyển đến cuối tệp và thêm cài đặt cho vị trí của các tệp tĩnh. Điều này rất quan trọng để Nginx hoạt động và xử lý các yêu cầu cho các tệp này. Thêm dòng sau vào phía trên biến
Vì Biến
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Xác minh cơ sở dữ liệu cài đặt.
Bạn sẽ nhận được kết quả sau.
Tiếp theo, chúng ta cần di chuyển cơ sở dữ liệu bằng cách sử dụng Lệnh
Bạn sẽ nhận được kết quả sau.
Tiếp theo, tạo một người dùng quản trị để truy cập vào quản trị của Django giao diện.
Bạn sẽ được nhắc nhập tên người dùng, email và mật khẩu.
Sao chép các tệp tĩnh vào thư mục tĩnh. Nhập
Mở tệp cài đặt bằng lệnh sau.
Tìm mục sau.
Nhập địa chỉ IP máy chủ của bạn vào trong dấu ngoặc vuông. Mỗi mục nhập phải được đặt trong dấu ngoặc kép và nhiều mục nhập phải được phân tách bằng dấu phẩy. Nhập
Chúng tôi đã sử dụng địa chỉ IP để khớp với máy chủ của mình. Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Trước khi bạn kiểm tra máy chủ phát triển, bạn cần định cấu hình tường lửa để cho phép Django hoạt động. Django sử dụng cổng 8000 theo mặc định. Mở cổng bằng Tường lửa đơn giản (UFW).
Khởi động máy chủ phát triển.
Khởi chạy URL
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22687%22%3E%3C/svg%3E
Bạn có thể truy cập giao diện quản trị bằng cách theo URL
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22718%22%20height=%22446%22%3E%3C/svg%3E
Nhập thông tin đăng nhập đã tạo trước đó để đăng nhập vào bảng quản trị hiển thị bên dưới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22281%22%3E%3C/svg%3E
Sau khi hoàn tất dự án demo, bạn có thể đóng máy chủ bằng cách nhấn Ctrl + C trong thiết bị đầu cuối của mình.
Đảm bảo rằng bạn đã thoát khỏi máy chủ từ thiết bị đầu cuối bằng cách nhấn Ctrl + C.
Chạy lệnh sau để chạy máy chủ phát triển Django.
Bây giờ, máy chủ Django của bạn sẽ tiếp tục chạy cho đến khi bạn tắt nó theo cách thủ công. Lệnh sẽ cung cấp cho bạn ID tiến trình và xuất ra một lệnh khác.
Nhấn Ctrl + C để thoát. Máy chủ Django gốc sẽ tiếp tục chạy. Bạn có thể xác minh bằng cách mở URL trong trình duyệt của mình.
Sau khi hoàn tất, bạn cần phải kết thúc tiến trình. Lệnh
Như bạn thấy, có hai tiến trình đang được chạy, một tiến trình có ID 153474 và tiến trình còn lại có ID 153475.
Chạy lệnh sau để tắt máy chủ bằng ID tiến trình bạn đã lấy được ở trên.
Cài đặt Gunicorn.
Trước khi tiếp tục, chúng ta cần kiểm tra khả năng phục vụ dự án của Gunicorn. Chạy lệnh sau để chạy Gunicorn.
Điều này sẽ khởi động Gunicorn trên cùng một giao diện mà Django đang chạy. Để xác minh, hãy mở URL
Khi bạn hoàn tất quá trình kiểm tra, hãy nhấn Ctrl + C trên thiết bị đầu cuối để thoát Gunicorn.
Hủy kích hoạt môi trường ảo để quay lại shell thông thường của bạn.
Tạo và mở tệp socket Gunicorn để chỉnh sửa.
Dán mã sau vào nó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tiếp theo, tạo và mở tệp dịch vụ Gunicorn để chỉnh sửa.
Dán mã sau vào nó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc. Thay thế
Tải lại daemon hệ thống để làm mới các tệp systemd.
Kích hoạt và khởi động socket Gunicorn tập tin.
Kiểm tra trạng thái của ổ cắm Gunicorn.
Bạn sẽ nhận được một đầu ra.
Dịch vụ Gunicorn vẫn không chạy như bạn có thể kiểm tra.
Để kiểm tra cơ chế kích hoạt ổ cắm, hãy chạy lệnh sau lệnh.
Bạn sẽ nhận được đầu ra HTML của trang chủ Django trong thiết bị đầu cuối của mình. Điều này cũng khởi động Gunicorn để phục vụ ứng dụng. Kiểm tra lại trạng thái của dịch vụ và bạn sẽ thấy rằng nó đang chạy ngay bây giờ.
Tạo và mở tệp
Dán mã sau vào nó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Cài đặt máy chủ Nginx.
Xác minh cài đặt.
Bật và khởi động máy chủ Nginx.
Kiểm tra trạng thái của server.
Chúng tôi sẽ sử dụng Snapd để cài đặt Certbot. Cài đặt Snapd.
Kích hoạt và khởi động dịch vụ Snap.
Tạo các liên kết cần thiết cho Snapd tới làm việc.
Cài đặt kho lưu trữ Snapd cốt lõi.
Cài đặt Certbot.
Tạo chứng chỉ. Lệnh sau cũng sẽ tự động cấu hình Nginx.
Lệnh trên sẽ tải xuống chứng chỉ vào thư mục
Tạo nhóm Diffie-Hellman chứng chỉ.
Để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không, hãy chạy thử quy trình.
Nếu không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.
Dán mã sau vào nó.
Thay thế vị trí gốc trong tệp trên bằng thư mục trên máy chủ của bạn.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Mở tệp
Thêm dòng sau vào trước dòng
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Xác minh Nginx của bạn cấu hình.
Nếu bạn không thấy lỗi nào, điều đó có nghĩa là bạn có thể tiếp tục.
Bạn cũng sẽ cần thêm tên miền vào lệnh
Thay đổi giá trị cho
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Khởi động lại Gunicorn Socket và Dịch vụ.
Tải lại máy chủ Nginx.
Mở cổng HTTP. Bạn cũng có thể xóa cổng 8000 nếu không sử dụng nữa.
Xác minh bằng cách mở URL
Trong hướng dẫn này, bạn sẽ học cách cài đặt framework Django trên máy chủ Rocky Linux 9. Bạn cũng sẽ tạo một dự án demo và thử nghiệm nó.
Điều kiện tiên quyết
-
Một máy chủ chạy Rocky Linux 9.
-
Một người dùng không phải root có quyền sudo.
-
Một tên miền đủ điều kiện (FQDN) trỏ đến máy chủ của bạn. Đối với mục đích của chúng tôi, chúng tôi sẽ sử dụngdjango.example.com
làm tên miền.
-
Đảm bảo mọi thứ đều được cập nhật.
Mã:
$ sudo dnf update
Cài đặt các gói tiện ích cơ bản. Một số trong số chúng có thể đã được cài đặt.
Mã:
$ sudo dnf install wget curl nano unzip yum-utils -y
- SELinux đã bị vô hiệu hóa.
Bước 1 - Cấu hình Tường lửa
Bước đầu tiên là cấu hình tường lửa. Rocky Linux sử dụng Tường lửa Firewalld. Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --state
running
Mã:
$ sudo firewall-cmd --permanent --list-services
Mã:
cockpit dhcpv6-client ssh
Mã:
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent
Mã:
$ sudo firewall-cmd --reload
Bước 2 - Cài đặt PostgreSQL và Tiện ích
Rocky Linux 9 đi kèm với phiên bản PostgreSQL cũ hơn. Chúng tôi sẽ cài đặt Postgres 14 cho hướng dẫn của mình.Cài đặt kho lưu trữ RPM cho PostgreSQL.
Mã:
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Mã:
$ sudo dnf install -y postgresql14-server postgresql14-contrib postgresql14-devel python3-psycopg2
Mã:
$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
Mã:
$ sudo systemctl enable postgresql-14 --now
Mã:
$ sudo systemctl status postgresql-14
? postgresql-14.service - PostgreSQL 14 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2022-09-12 01:17:24 UTC; 2s ago Docs: https://www.postgresql.org/docs/14/static/ Process: 87995 ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 88000 (postmaster) Tasks: 8 (limit: 5915) Memory: 16.5M CPU: 60ms CGroup: /system.slice/postgresql-14.service ??88000 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/ ??88001 "postgres: logger " ??88003 "postgres: checkpointer " ??88004 "postgres: background writer " ??88005 "postgres: walwriter " ??88006 "postgres: autovacuum launcher " ??88007 "postgres: stats collector " ??88008 "postgres: logical replication launcher "
Sep 12 01:17:24 board.example.com systemd[1]: Starting PostgreSQL 14 database server...
Mã:
$ sudo dnf install -y python3 python3-devel python3-pip gcc
pg_config
không được tìm thấy, bạn cần thêm đường dẫn đến thư mục bin PostgreSQL. Mở tệp .bashrc
để chỉnh sửa.
Mã:
$ nano ~/.bashrc
Mã:
export PATH=$PATH:/usr/pgsql-14/bin
Bước 3 - Cấu hình PostgreSQL
Đăng nhập vào shell PostgreSQL.
Mã:
$ sudo -i -u postgres psql
Mã:
postgres=# CREATE DATABASE djangoapp;
Mã:
postgres=# CREATE USER djangouser WITH ENCRYPTED PASSWORD 'dbpassword';
Mã:
postgres=# GRANT ALL PRIVILEGES ON DATABASE djangoapp TO djangouser;
Mã:
postgres=# \q
Bước 4 - Cài đặt Django
Có một số phương pháp để bạn có thể cài đặt Django. Quyết định phương pháp nào phù hợp nhất với bạn phụ thuộc vào cách bạn muốn cấu hình môi trường phát triển và nhu cầu của bạn. Mỗi phương pháp đều có ưu và nhược điểm riêng. Chúng ta hãy cùng xem qua tất cả các phương pháp này.Cài đặt bằng pip
Đây là cách phổ biến nhất để cài đặt Django. Cách được khuyến nghị là sử dụng tạo môi trường Python ảo. Điều này cho phép bạn cài đặt các gói Python mà không ảnh hưởng đến hệ thống.Chúng ta hãy tạo một thư mục dự án demo.
Mã:
$ mkdir ~/sampleproject
$ cd ~/sampleproject
sample_env
bằng tên bạn muốn gọi cho môi trường ảo của mình.
Mã:
$ python3 -m venv sample_env
Mã:
$ source sample_env/bin/activate
Mã:
(sample_env) navjot@django:~/sampleproject$
pip
để cài đặt Django. Chạy lệnh sau để cài đặt Django.
Mã:
(sample_env) $ pip install django
Mã:
(sample_env) $ django-admin --version
4.1.2
Mã:
(sample_env) $ pip install django==3.2.1
Mã:
(sample_env) $ django-admin --version
3.2.1
Để thoát khỏi môi trường ảo, hãy chạy lệnh sau lệnh.
Mã:
(sample_env) $ deactivate
Cài đặt phiên bản phát triển
Bạn cũng có thể sử dụngpip
để cài đặt phiên bản phát triển của Django. Đối với điều này, chúng ta sẽ lấy phiên bản phát triển từ kho lưu trữ Github của Django.Sao chép kho lưu trữ vào thư mục
~/django-dev
bằng lệnh sau.
Mã:
$ git clone https://github.com/django/django ~/django-dev
Mã:
$ cd ~/django-dev
Mã:
$ python3 -m venv dev_django_env
Mã:
$ source dev_django_env/bin/activate
pip
. Cờ -e
cài đặt nó ở chế độ có thể chỉnh sửa, chế độ này là bắt buộc nếu bạn đang cài đặt từ kiểm soát phiên bản.
Mã:
(dev_django_dev) $ pip install -e ~/django-dev
Mã:
(dev_django_dev) $ django-admin --version
4.2.dev20221012095013
Bước 5 - Tạo một dự án mẫu
Chúng ta hãy xây dựng một dự án Django mẫu. Tạo một thư mục cho dự án mẫu.
Mã:
$ mkdir ~/dj-sample
$ cd ~/dj-sample
Mã:
$ python3 -m venv sample_proj
Mã:
$ source sample_proj/bin/activate
Mã:
(sample_proj) $ pip install wheel
Mã:
(sample_proj) $ pip install django psycopg2 psycopg2-binary
startproject
. Lệnh này tạo một thư mục khác bao gồm:- Một tập lệnh quản lý,
manage.py
, được sử dụng để quản lý các tác vụ cụ thể của Django. - Một thư mục có cùng tên với dự án bao gồm mã dự án.
Mã:
(sample_proj) $ django-admin startproject demoproject .
SECRET_KEY
để cung cấp chữ ký mật mã. Nó tạo ra một giá trị mặc định trong quá trình cài đặt. Bạn nên thay thế nó bằng một giá trị an toàn. Chạy lệnh sau để tạo khóa và sao chép để sử dụng sau.
Mã:
(sample_proj) $ python3 -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
Mã:
wm#dzb^ymuo3s3tza=f5cx^kan!$4sch1!b-q=v%)=d0pb(jqf
Mã:
(sample_proj) $ nano demoproject/settings.py
SECRET_KEY
bằng khóa bạn được tạo ra.
Mã:
SECRET_KEY = 's)3m=4s&!a=p#brttcqu@1s$8(z6e+u8(^tkpw28qyj0t#8ku2'
DATABASES
thành tiếp theo.
Mã:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'DATABASE_DB', 'USER': 'DATABASE_USER', 'PASSWORD': 'DATABASE_PASSWORD', 'HOST': 'DATABASE_HOST', 'PORT': 'DATABASE_PORT', },
}
STATIC_URL
.
Mã:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
STATIC_ROOT
sử dụng mô-đun os
, chúng ta cần nhập mô-đun này vì mặc định mô-đun này không được nhập. Thêm dòng sau phía trên dòng from pathlib import Path
.
Mã:
import os
Xác minh cơ sở dữ liệu cài đặt.
Mã:
(sample_proj) $ python manage.py check --database default
Mã:
System check identified no issues (0 silenced).
migrate
. Di chuyển trong Django sẽ truyền bá những thay đổi bạn thực hiện cho mô hình của mình vào lược đồ cơ sở dữ liệu.
Mã:
(sample_proj) $ python manage.py makemigrations
(sample_proj) $ python manage.py migrate
Mã:
Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions
Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK
Mã:
(sample_proj) $ python manage.py createsuperuser
Mã:
Username (leave blank to use 'navjot'):
Email address: [emailprotected]
Password:
Password (again):
Superuser created successfully.
yes
khi được nhắc.
Mã:
(sample_proj) $ python manage.py collectstatic
130 static files copied to '/home/navjot/dj-sample/static'.
Bước 6 - Kiểm tra Máy chủ phát triển
Đã đến lúc kiểm tra ứng dụng. Để thực hiện được điều đó, bạn cần sửa đổi lệnhALLOWED_HOSTS
trong cài đặt Django. Chỉ thị này định nghĩa danh sách các địa chỉ IP và tên miền được cấp quyền truy cập vào ứng dụng Django.Mở tệp cài đặt bằng lệnh sau.
Mã:
(sample_proj) $ nano demoproject/settings.py
Mã:
ALLOWED_HOSTS = []
www.example.com
sẽ khớp chính xác. Tuy nhiên, .example.com
sẽ khớp với example.com
và www.example.com
và bất kỳ tên miền phụ nào khác của example.com
. Do đó, nên sử dụng dấu chấm để thêm tiền tố cho tên miền để khớp với tên miền đó và các tên miền phụ của nó.
Mã:
ALLOWED_HOSTS = ['']
Trước khi bạn kiểm tra máy chủ phát triển, bạn cần định cấu hình tường lửa để cho phép Django hoạt động. Django sử dụng cổng 8000 theo mặc định. Mở cổng bằng Tường lửa đơn giản (UFW).
Mã:
(sample_proj) $ sudo firewall-cmd --add-port=8000/tcp --permanent
(sample_proj) $ sudo firewall-cmd --reload
Mã:
(sample_proj) $ python manage.py runserver 0.0.0.0:8000
http://:8000
trong trình duyệt của bạn và bạn sẽ nhận được màn hình sau.data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22687%22%3E%3C/svg%3E
Bạn có thể truy cập giao diện quản trị bằng cách theo URL
http://:8000/admin/
và bạn sẽ thấy màn hình đăng nhập sau.data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22718%22%20height=%22446%22%3E%3C/svg%3E
Nhập thông tin đăng nhập đã tạo trước đó để đăng nhập vào bảng quản trị hiển thị bên dưới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22281%22%3E%3C/svg%3E
Sau khi hoàn tất dự án demo, bạn có thể đóng máy chủ bằng cách nhấn Ctrl + C trong thiết bị đầu cuối của mình.
Bước 7 - Cài đặt và kiểm tra Gunicorn
Chạy máy chủ Django liên tục bằng nohup
Cho đến nay, dịch vụ của Django không liên tục. Để làm cho dịch vụ liên tục, có hai phương pháp. Phương pháp đầu tiên liên quan đến việc sử dụng tiện íchnohup
. nohup
là lệnh POSIX có nghĩa là không cúp máy. Nó được sử dụng để thực thi các lệnh theo cách không dừng lại ngay cả khi người dùng đăng xuất.Đảm bảo rằng bạn đã thoát khỏi máy chủ từ thiết bị đầu cuối bằng cách nhấn Ctrl + C.
Chạy lệnh sau để chạy máy chủ phát triển Django.
Mã:
(sample_proj) $ nohup python manage.py runserver 0.0.0.0:8000 &
Mã:
[1] 42595
(sample_proj) $ nohup: ignoring input and appending output to 'nohup.out'
^C
Sau khi hoàn tất, bạn cần phải kết thúc tiến trình. Lệnh
nohup
cung cấp cho bạn một ID tiến trình. Nhưng trên thực tế, có hai tiến trình đang được chạy. Để tìm ID cho cả hai tiến trình, hãy chạy lệnh sau.
Mã:
(sample_proj) $ ps aux | grep manage.py
navjot 153474 1.6 3.9 46264 39016 pts/0 S 04:15 0:00 python manage.py runserver 0.0.0.0:8000
navjot 153475 3.0 4.4 196060 43500 pts/0 Sl 04:15 0:00 /home/navjot/dj-sample/sample_proj/bin/python manage.py runserver 0.0.0.0:8000
navjot 153483 0.0 0.2 6420 2248 pts/0 S+ 04:15 0:00 grep --color=auto manage.py
Chạy lệnh sau để tắt máy chủ bằng ID tiến trình bạn đã lấy được ở trên.
Mã:
(sample_proj) $ sudo kill -9 153474 153475
Cài đặt Gunicorn
Phương pháp thứ hai để chạy máy chủ Django liên tục yêu cầu bạn cài đặt máy chủ web Gunicorn và Nginx. Gunicorn là máy chủ Python WSGI HTTP. Nó sẽ giao tiếp với ứng dụng Django và sau đó Nginx sẽ hoạt động như một proxy ngược cho Gunicorn. Phương pháp này có thêm lợi ích là cung cấp cho bạn tính bảo mật và hiệu suất đi kèm với việc sử dụng Nginx.Cài đặt Gunicorn.
Mã:
(sample_proj) $ pip install gunicorn
Mã:
(sample_proj) $ gunicorn --bind 0.0.0.0:8000 demoproject.wsgi:application
http://:8000
trong trình duyệt của bạn và bạn sẽ nhận được cùng một trang chủ Django. Điều này có nghĩa là Gunicorn đang chạy hoàn hảo.Khi bạn hoàn tất quá trình kiểm tra, hãy nhấn Ctrl + C trên thiết bị đầu cuối để thoát Gunicorn.
Hủy kích hoạt môi trường ảo để quay lại shell thông thường của bạn.
Mã:
(sample_proj) $ deactivate
Bước 8 - Tạo tệp Socket và Dịch vụ cho Gunicorn
Bước đầu tiên là tạo tệp socket Gunicorn. Socket Gunicorn sẽ được tạo khi khởi động và lắng nghe các kết nối. Khi có kết nối xảy ra,systemd
sẽ tự động khởi động tiến trình Gunicorn để xử lý kết nối đó.Tạo và mở tệp socket Gunicorn để chỉnh sửa.
Mã:
$ sudo nano /etc/systemd/system/gunicorn.socket
Mã:
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
Tiếp theo, tạo và mở tệp dịch vụ Gunicorn để chỉnh sửa.
Mã:
$ sudo nano /etc/systemd/system/gunicorn.service
Mã:
[Unit]
Description=django gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=navjot
Group=nginx
WorkingDirectory=/home/navjot/dj-sample
ExecStart=/home/navjot/dj-sample/sample_proj/bin/gunicorn \ -t 3000 \ --access-logfile - \ --workers 3 \ --bind unix:/run/gunicorn.sock \ demoproject.wsgi:application -w 2
[Install]
WantedBy=multi-user.target
navjot
bằng tên người dùng hệ thống của bạn. Nhóm nginx
sẽ cho phép máy chủ Nginx giao tiếp với Django.Tải lại daemon hệ thống để làm mới các tệp systemd.
Mã:
$ sudo systemctl daemon-reload
Mã:
$ sudo systemctl start gunicorn.socket
$ sudo systemctl enable gunicorn.socket
Mã:
$ sudo systemctl status gunicorn.socket
Mã:
? gunicorn.socket - gunicorn socket Loaded: loaded (/etc/systemd/system/gunicorn.socket; enabled; vendor preset: disabled) Active: active (listening) since Thu 2022-10-13 04:19:28 UTC; 14s ago Until: Thu 2022-10-13 04:19:28 UTC; 14s ago Triggers: ? gunicorn.service Listen: /run/gunicorn.sock (Stream) CGroup: /system.slice/gunicorn.socket
Oct 13 04:19:28 django.nspeaks.xyz systemd[1]: Listening on gunicorn socket.
Mã:
$ sudo systemctl status gunicorn.service
? gunicorn.service - django gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled) Active: inactive (dead)
TriggeredBy: ? gunicorn.socket
Mã:
$ curl --unix-socket /run/gunicorn.sock localhost
Mã:
$ sudo systemctl status gunicorn.service
? gunicorn.service - django gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2022-10-13 06:13:55 UTC; 1min 34s ago
TriggeredBy: ? gunicorn.socket Main PID: 157742 (gunicorn) Tasks: 4 (limit: 5915) Memory: 96.2M CPU: 1.198s CGroup: /system.slice/gunicorn.service ??157742 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application -w 2 ??157746 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application -w 2 ??157747 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application -w 2 ??157748 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application -w 2
.......
Bước 9 - Cài đặt Nginx
Bước cuối cùng là cài đặt và cấu hình Nginx. Rocky Linux đi kèm với phiên bản Nginx cũ hơn. Bạn cần tải xuống kho lưu trữ Nginx chính thức để cài đặt phiên bản mới nhất.Tạo và mở tệp
/etc/yum.repos.d/nginx.repo
để tạo kho lưu trữ Nginx chính thức.
Mã:
$ sudo nano /etc/yum.repos.d/nginx.repo
Mã:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Cài đặt máy chủ Nginx.
Mã:
$ sudo dnf install nginx -y
Mã:
$ nginx -v
nginx version: nginx/1.22.1
Mã:
$ sudo systemctl enable nginx --now
Mã:
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2022-10-13 06:17:24 UTC; 1s ago Docs: http://nginx.org/en/docs/ Process: 157900 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 157901 (nginx) Tasks: 2 (limit: 5915) Memory: 1.9M CPU: 18ms CGroup: /system.slice/nginx.service ??157901 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??157902 "nginx: worker process"
Oct 13 06:17:24 django.example.com systemd[1]: Starting nginx - high performance web server...
Bước 10 - Cài đặt SSL
Cho đến nay, ứng dụng Django của bạn đang được phục vụ qua kết nối HTTP dạng văn bản thuần túy. Bạn nên bảo vệ ứng dụng này thông qua chứng chỉ SSL. Để thực hiện việc này, hãy sử dụng công cụ Certbot bằng công cụ Snapd. Cần có kho lưu trữ EPEL để hoạt động.
Mã:
$ sudo dnf install epel-release
Mã:
$ sudo dnf install snapd
Mã:
$ sudo systemctl enable snapd.socket --now
Mã:
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Mã:
$ sudo snap install core
$ sudo snap refresh core
Mã:
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d django.example.com
/etc/letsencrypt/live/django.example.com
trên máy chủ của bạn.Tạo nhóm Diffie-Hellman chứng chỉ.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Mã:
$ sudo certbot renew --dry-run
Bước 11 - Cấu hình Nginx
Tạo và mở tệp/etc/nginx/conf.d/django-gunicorn.conf
để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/django-gunicorn.conf
Mã:
# enforce HTTPS
server { listen 80 default_server; server_name django.example.com; return 301 https://$server_name$request_uri;
}
server { listen 443 ssl http2; server_name django.example.com; access_log /var/log/nginx/django.access.log; error_log /var/log/nginx/django.error.log; http2_push_preload on; # Enable HTTP/2 Server Push ssl_certificate /etc/letsencrypt/live/django.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/django.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/django.example.com/chain.pem; ssl_session_timeout 1d; # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC). ssl_protocols TLSv1.2 TLSv1.3; # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to # prevent replay attacks. # # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data ssl_early_data on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; add_header X-Early-Data $tls1_3_early_data; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/navjot/dj-sample; } location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://unix:/run/gunicorn.sock; }
}
# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data { "~." $ssl_early_data; default "";
}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Mở tệp
/etc/nginx/nginx.conf
để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf;
.
Mã:
server_names_hash_bucket_size 64;
Xác minh Nginx của bạn cấu hình.
Mã:
$ sudo nginx -t
Bạn cũng sẽ cần thêm tên miền vào lệnh
ALLOWED_HOSTS
của mình. Mở tệp settings.py
.
Mã:
$ nano ~/dj-sample/demoproject/settings.py
ALLOWED_HOSTS
biến.
Mã:
ALLOWED_HOSTS = ['','django.example.com']
Khởi động lại Gunicorn Socket và Dịch vụ.
Mã:
$ sudo systemctl restart gunicorn.socket
$ sudo systemctl restart gunicorn.service
Mã:
$ sudo systemctl reload nginx
Mã:
$ sudo firewall-cmd --remove-port=8000/tcp --permanent
$ sudo firewall-cmd --reload
http://django.example.com
và trang chủ Django sẽ tải lên.