Chào mừng đến với Thế giới VPS vs JS! Trong hướng dẫn này, chúng ta sẽ khám phá cách triển khai ứng dụng Django của bạn lên một VPS và mở nó ra thế giới bằng Nginx một cách dễ dàng. Ngoài ra, chúng ta cũng sẽ nói về việc tự động triển khai với một kỹ thuật gọi là Continuous Delivery (CD) sử dụng GitHub Actions. Hãy bắt đầu thôi!
1. Những gì chúng tôi sẽ bao gồm
Trong hướng dẫn này, tôi sẽ hướng dẫn bạn qua quá trình triển khai ứng dụng Django của bạn trên một VPS như một dịch vụ và mở nó ra cho thế giới với Nginx. Ngoài ra, chúng ta cũng sẽ nói về việc tự động triển khai với một kỹ thuật gọi là Continuous Delivery (CD) bằng cách sử dụng GitHub Actions.
Không cần phải chần chừ thêm nữa, hãy đắm chìm vào hành động ngay lập tức!
2. Di chuyển ứng dụng Django của bạn đến VPS của bạn
Để triển khai ứng dụng Django của bạn, trước tiên chúng ta cần có nó ở địa phương trên VPS của chúng ta. Nếu dự án của bạn được lưu trữ trên GitHub, chúng ta có thể dễ dàng tải xuống bằng cách chạy trên VPS của chúng ta
$ git clone https://github.com/username/repository_name.git
Nơi username
là tên người dùng GitHub của bạn và repository_name
là tên của kho của bạn trên GitHub. Nếu dự án của bạn không nằm trong bất kỳ kho git trực tuyến nào, chúng ta có thể tải lên VPS của chúng ta bằng cách chạy cục bộ
$ scp -r localPath/* user@vpsIP:remotePath
mà sẽ sao chép nội dung của localPath
trên máy của bạn đến remotePath
tại vpsIP
với người dùng user
. Trong trường hợp của chúng ta, localPath
sẽ là đường dẫn đến ứng dụng Django của bạn ở địa phương và remotePath
là đường dẫn trên VPS của bạn mà bạn muốn lưu trữ ứng dụng của mình.
3. Cài đặt Nginx
Khi ứng dụng Django của bạn đã có trên VPS của bạn, đến lúc cài đặt Nginx để mở ứng dụng của bạn ra cho thế giới. Nếu bạn đã có Nginx được cài đặt, bỏ qua bước tiếp theo. Để cài đặt nginx trên vps của bạn, đơn giản chạy
$ sudo apt update
$ sudo apt install nginx
Khi Nginx được cài đặt, chúng ta cần điều chỉnh tường lửa để cấp quyền truy cập từ bên ngoài vào Nginx. Vì ufw
đảm nhận tường lửa, hãy chạy
$ sudo ufw allow 'Nginx HTTP'
điều này sẽ mở cổng 80 và cho phép lưu lượng thông thường, không mã hóa. Để chỉ cho phép lưu lượng được mã hóa TLS/SSL, thay Nginx HTTP
bằng Nginx HTTPS
hoặc Nginx Full
để cho phép cả hai.
4. Cấu hình Nginx
Với Nginx đã được cài đặt, chúng ta có thể tiếp tục thêm tệp cấu hình ứng dụng Django của bạn với
$ sudo nano /etc/nginx/sites-available/djangoapp
nơi djangoapp
nên là tên của dự án của bạn, để trong tương lai, bạn có thể nhớ được mục đích của tệp này. Bây giờ hãy viết những gì sau đây trên trình soạn thảo văn bản:
server {
server_name domainorip.com;
access_log off;
location /static/ {
alias remotePath/static;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
nơi domainorip.com
sẽ là địa chỉ IP của VPS của bạn hoặc một tên miền trỏ vào cùng một địa chỉ IP đó và remotePath
sẽ là đường dẫn đến ứng dụng Django của bạn trên VPS của bạn. Tệp cấu hình này sẽ chuyển hướng tất cả lưu lượng đến domainorip
đến a href=”http://127.0.0.1:8000″http://127.0.0.1:8000, > điều này sẽ quen thuộc vì đó là nơi ứng dụng Django của bạn sẽ được khởi chạy bên trong VPS của bạn. Trong trường hợp ứng dụng Django của bạn phục vụ các tệp tĩnh, nó sẽ phục vụ chúng từ **remotePath**/static
.
Chúng ta đã thông báo cho Nginx rằng cấu hình này có sẵn, nhưng vẫn chưa được kích hoạt. Để làm điều đó, chúng ta phải tạo một liên kết tượng trưng giữa tệp cấu hình chúng ta vừa tạo và /etc/nginx/sites-enabled
, có thể thực hiện bằng cách
$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/djangoapp
nơi djangoapp
sẽ là tên của tệp cấu hình chúng ta vừa tạo cho ứng dụng Django của chúng ta. Để đảm bảo không có lỗi trong tệp cấu hình, hãy chạy
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Nếu bạn nhận được hai tin nhắn đó thì bạn đã sẵn sàng. Bây giờ chúng ta cần khởi động lại nginx để áp dụng các thay đổi mới của nó:
$ sudo service nginx restart
5. Chạy ứng dụng Django của bạn
Tất cả những gì còn lại là chạy ứng dụng Django của chúng ta. Trước khi làm điều đó, chúng ta nên cài đặt tất cả các phụ thuộc cần thiết trên VPS của chúng ta, chạy tất cả các di cư cơ sở dữ liệu còn lại và thu thập các tệp tĩnh của chúng ta. Nếu bạn có các phụ thuộc được liệt kê trong một requirements.txt
trong ứng dụng Django của mình, hãy di chuyển đến thư mục dự án của bạn và chạy
$ pip3 install -r requirements.txt
hoặc đơn giản là cài đặt các phụ thuộc của bạn một cách độc lập. Chạy tất cả các di cư cơ sở dữ liệu như thông thường với
$ python3 manage.py makemigrations
$ python3 manage.py migrate
Để thu thập các tệp tĩnh của chúng ta, chỉnh sửa cài đặt tệp tĩnh của bạn:
STATIC_ROOT = 'remotePath/static/'
STATIC_URL = '/static/'
nơi remotePath
lại là đường dẫn đến ứng dụng Django của bạn trên VPS của bạn. Bây giờ chúng ta cần chạy
$ python manage.py collectstatic
Khi tất cả đã hoàn thành, chúng ta cuối cùng có thể chạy
$ python3 manage.py runserver
để khởi động ứng dụng Django của chúng ta! Nếu bạn bây giờ điều hướng trên trình duyệt cục bộ của mình đến domainorip.com
bạn sẽ thấy ứng dụng của mình!
Nhưng có một điều, ngay khi bạn đóng phiên hiện tại nơi bạn bắt đầu máy chủ của mình, ứng dụng Django của bạn sẽ đóng. Nếu chúng ta muốn ứng dụng Django của mình chạy mãi mãi, chúng ta phải thiết lập nó như một dịch vụ. Để tìm hiểu thêm về dịch vụ và quỹ đạo, đừng ngần ngại ghé qua bài viết sau đây, nơi tôi sẽ đi sâu vào chi tiết về cách tạo và duy trì dịch vụ.
6. Kích hoạt HTTPS
Trước bước này, hãy đảm bảo rằng bạn đã đăng ký tên miền. Nhưng trước hết, HTTPS là gì và tại sao bạn muốn sử dụng nó?
HTTPS khác biệt với HTTP ở chỗ dữ liệu của nó được bảo mật bằng mã hóa, thay vì di chuyển trên văn bản thô. Để kích hoạt HTTPS, chúng ta sẽ cần một chứng chỉ SSL, mà chúng ta có thể nhận miễn phí nhờ vào certbot!
Để cài đặt certbot, chạy
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt install python-certbot-nginx
Sau khi certbot được cài đặt, chúng ta sẽ yêu cầu nó tạo một chứng chỉ SSL cho tên miền của chúng ta:
$ sudo certbot --nginx -d domain.com -d www.domain.com
điều này sẽ mở một loạt các câu hỏi. Sau khi chúng được trả lời, certbot sẽ đã cấu hình cho Nginx chứa domain.com
của bạn để hỗ trợ HTTPS. Bây giờ chúng ta cần nói với ufw để kích hoạt HTTPS cho Nginx:
$ sudo ufw allow 'Nginx HTTPS'
7. Một số suy nghĩ cuối cùng
Chúc mừng! Bạn đã triển khai ứng dụng Django của mình chính thức, mở nó ra thế giới và bảo vệ lưu lượng của nó! Không phải là một thành công nhỏ, hãy để tôi nói với bạn.
Nhưng có lẽ, hành trình của bạn với ứng dụng này sẽ không dừng lại ở đây. Khi có lỗi phát sinh và các tính năng mới cần được thêm vào, ứng dụng của bạn sẽ được sửa đổi và cần phải được triển khai lại, điều này trông như một quy trình đầy nhàm chán. Nhưng hãy để tôi nói với bạn là câu lạc bộ này sai lầm thế nào!
Nhờ vào các kỹ thuật linh hoạt như Continuous Integration (CI) và Continuous Delivery (CD), việc viết mã và triển khai các thay đổi của bạn chưa bao giờ dễ dàng như vậy! Hãy kiểm tra bài viết sau để tìm hiểu cách tự động triển khai các thay đổi của bạn với CD và GitHub Actions!
Make Deployment Easy with Continuous Delivery and GitHub Action
Như luôn, đừng ngần ngại liên hệ với tôi nếu bạn cần. Hy vọng hướng dẫn này hữu ích.
Chúc bạn triển khai vui vẻ!
Cảm ơn bạn
8. Kết luận
Chúc mừng bạn đã thành công trong việc triển khai ứng dụng Django của mình lên VPS và mở nó ra thế giới với Nginx! Điều này không phải là một công việc nhỏ, đâu nhé. Tuy nhiên, hành trình với ứng dụng của bạn có lẽ chưa dừng lại ở đây. Với sự xuất hiện của các lỗi và tính năng mới, ứng dụng của bạn sẽ phải trải qua sự sửa đổi và cần phải được triển khai lại. Nhưng đừng lo lắng, với các phương pháp linh hoạt như Continuous Integration (CI) và Continuous Delivery (CD), việc lập trình và triển khai các thay đổi của bạn chưa bao giờ dễ dàng hơn! Hãy kiểm tra bài viết dưới đây để tìm hiểu cách tự động triển khai các thay đổi của bạn với CD và GitHub Actions!
Chúc bạn may mắn trong việc triển khai!
Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ Thế giới VPS vs JS tại đây
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của VPSvsJS để nhận được nhiều hơn nữa: