Giới thiệu
Heroku là một nền tảng đám mây cung cấp dịch vụ lưu trữ. Nó hỗ trợ một số ngôn ngữ lập trình bao gồm PHP, Node.js và Python. Nó là Platform-as-a-Service (PaaS) cho phép bạn quản lý các ứng dụng trang web trong khi nó chăm sóc các máy chủ, mạng, lưu trữ và các thành phần đám mây khác của bạn.
Trong bài viết này, chúng ta sẽ xem xét cách triển khai ứng dụng Django cho Heroku , sử dụng Git .
Bạn có thể làm theo các bước tương tự và triển khai ứng dụng từ GitHub , nếu nó được lưu trữ ở đó.
Điều kiện tiên quyết
Dưới đây là danh sách những việc cần phải làm trước khi chúng tôi bắt đầu triển khai:
- Git
- Tài khoản Heroku và CLI
- Ứng dụng Django
Giao diện dòng lệnh Heroku (CLI) giúp bạn dễ dàng tạo và quản lý các ứng dụng Heroku của mình trực tiếp từ thiết bị đầu cuối. Đó là một phần thiết yếu của việc sử dụng Heroku.
Để cài đặt Heroku CLI (hay còn gọi là Heroku Toolbelt ), vui lòng làm theo hướng dẫn trên trang web chính thức .
Đảm bảo rằng ứng dụng Django của bạn đang chạy trên môi trường ảo mà bạn cần duy trì hoạt động trong suốt quá trình triển khai.
Tài khoản Heroku
Khi tất cả những thứ này đã được cài đặt, bước tiếp theo là tạo một tài khoản Heroku miễn phí tại đây , nếu bạn chưa có tài khoản.
Sau khi viết những điều sau vào một thiết bị đầu cuối:
1 2 | $ heroku login |
Thiết bị đầu cuối sẽ hiển thị một thông báo như:
1 2 | heroku: Press any key to open up the browser to login or q to exit: |
Nhấn phím bất kỳ và đăng nhập bằng trình duyệt của bạn. Sau đó, thiết bị đầu cuối sẽ hiển thị một thông báo dọc theo các dòng:
1 2 | Logged in as <a href="/cdn-cgi/l/email-protection" class="__cf_email__">[email protected]</a> |
Cấu hình ứng dụng Django cho Heroku
Bây giờ chúng ta đã hoàn tất các điều kiện tiên quyết, hãy chuẩn bị ứng dụng Django cho Heroku.
Procfile
Một Procfile là một file có tên Procfilemà không cần bất kỳ phần mở rộng tập tin được đặt trong thư mục gốc của ứng dụng của bạn. Nó liệt kê các loại quy trình trong một ứng dụng và mỗi loại quy trình là một khai báo của một lệnh được thực thi khi một vùng chứa / dyno của loại quy trình đó được khởi động.
Trước khi tạo Procfile, bạn sẽ muốn cài đặt django gunicorntrong thư mục dự án của mình:
1 2 | $ pip install django gunicorn |
Mặc dù Django xuất Procfilexưởng với máy chủ WSGI của riêng mình, chúng tôi sẽ yêu cầu Heroku sử dụng Gunicorn để phục vụ ứng dụng của chúng tôi, điều này cũng được Heroku khuyến nghị.
Bây giờ, hãy tạo một Procfiletrong thư mục mẹ và thêm dòng sau:
1 2 | web: gunicorn yourdjangoweb.wsgi --log-file - |
Thay thế yourdjangowebbằng tên thực tế của dự án của bạn.
Runtime.txt
Tạo một tệp văn bản được gọi runtime.txttrong cùng thư mục với Procfile. Nó cho Heroku biết ứng dụng của bạn đang sử dụng phiên bản Python nào. Nếu bạn không chắc chắn về phiên bản, hãy nhập python –versionvào thiết bị đầu cuối với môi trường ảo Django của bạn được kích hoạt.
Sau đó thêm phiên bản vào runtime.txt:
1 2 | python-x.x.x |
Máy chủ được phép
Đây là một biện pháp bảo mật bổ sung trong Django để ngăn chặn các cuộc tấn công tiêu đề máy chủ HTTP bằng cách chỉ cho phép trang web được phân phát tại máy chủ / miền được thêm vào ALLOWED_HOSTSdanh sách. If Debug = Truevà ALLOWED_HOSTSis []then only localhostđược cho phép theo mặc định. Để triển khai và phục vụ ứng dụng web của bạn trên Heroku, hãy thêm nó vào danh sách:
1 2 | ALLOWED_HOSTS = ['herokuappname.herokuapp.com'] |
Ngoài ra, bạn có thể cho phép tất cả các ứng dụng từ Heroku bằng cách bỏ qua tên ứng dụng như sau:
1 2 | ALLOWED_HOSTS = ['.herokuapp.com'] |
Bạn cũng có thể sử dụng [‘*’]để cho phép tất cả các máy chủ. Bạn có thể tìm thêm chi tiết trong tài liệu .
Cài đặt gói
Dưới đây là các gói bổ sung cần được cài đặt trong môi trường ảo của chúng tôi.
Để kết nối cơ sở dữ liệu Django của chúng tôi với Heroku, hãy cài đặt dj-database-url bằng cách gọi:
1 2 | $ pip install dj-database-url |
Vì Heroku sử dụng cơ sở dữ liệu Postgres, chúng tôi cũng cần bộ điều hợp của nó cho Python:
1 2 | $ pip install psycog2 |
Và cuối cùng, chúng tôi sẽ sử dụng WhiteNoise để phục vụ các tệp tĩnh trong máy chủ sản xuất. Chúng tôi có thể cài đặt bằng cách gọi:
1 2 | $ pip install whitenoise |
Chúng tôi đã định cấu hình gunicorn, hãy thêm cấu hình cho whitenoisevà dj-database-url.
cấu hình tệp tĩnh
Đầu tiên hãy thêm các cài đặt cơ bản để phân phát các tệp tĩnh trong bất kỳ dự án Django nào. Bạn có thể sao chép-dán các cài đặt sau vào settings.py:
1 2 3 4 5 6 7 8 9 10 11 | # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ PROJECT_ROOT = os.path.join(os.path.abspath(__file__)) STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles') STATIC_URL = '/static/' # Extra lookup directories for collectstatic to find static files STATICFILES_DIRS = ( os.path.join(PROJECT_ROOT, 'static'), ) |
Thêm WhiteNoise vào MIDDLEWAREdanh sách ngay sau SecurityMiddlewaređó sẽ ở trên cùng:
1 2 3 4 5 6 7 8 9 10 11 | MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', ] |
Thêm STATICFILES_STORAGE = ‘whitenoise.storage.CompressedManifestStaticFilesStorage’vào settings.py.0 của bạn
Cấu hình cơ sở dữ liệu
Chúng tôi đang sử dụng dj-database-urlđể cấu hình cơ sở dữ liệu của mình. Thêm những dòng này ở cuối settings.py:
1 2 3 4 | import dj_database_url prod_db = dj_database_url.config(conn_max_age=500) DATABASES['default'].update(prod_db) |
requirements.txt
Heroku sẽ chỉ nhận ra một ứng dụng đã triển khai là một ứng dụng Python nếu nó có một requirements.txttệp trong thư mục gốc. Nó cho Heroku biết những gói nào cần thiết để chạy ứng dụng của bạn.
Chúng tôi có thể sử dụng pip freezevà chuyển đầu ra thành requirements.txttệp cho việc này:
1 2 | $ pip freeze > requirements.txt |
Của bạn requirements.txtnên bao gồm những điều sau:
1 2 3 4 5 6 7 | whitenoise==5.2.0 dj-database-url==0.5.0 Django==3.0.9 gunicorn==20.0.4 psycopg2==2.8.5 pytz==2020.1 |
Lưu ý: Các phiên bản trên được ứng dụng Django của chúng tôi sử dụng và chúng có thể khác nhau đối với bạn.
Kết nối ứng dụng Heroku với Git
Bây giờ chúng ta cần tạo một ứng dụng Heroku:
1 2 | $ heroku create herokuappname |
Nó sẽ hiển thị một thông báo “xong” với hai URL dọc theo dòng này:
1 2 3 4 | Creating ⬢ herokuappname... done https://herokuappname.herokuapp.com/ | https://git.heroku.com/herokuappname.git |
Điều này có nghĩa là một kho lưu trữ Git đã được tạo trên đám mây Heroku cho ứng dụng của bạn. URL https://herokuappname.herokuapp.com/sẽ được sử dụng để truy cập ứng dụng của bạn ở bất kỳ đâu nhưng chúng tôi vẫn cần thực hiện thêm một bước trước khi chạy ứng dụng của mình, tức là chúng tôi cần đẩy mã của mình vào kho lưu trữ.
Khởi tạo một kho lưu trữ trống trong thư mục dự án của bạn:
1 2 3 | $ git init > Initialized empty Git repository in /herokuappname/.git/ |
Kết nối ứng dụng Heroku của bạn với gitkho lưu trữ trống :
1 2 3 | $ heroku git:remote -a herokuappname > set git remote heroku to https://git.heroku.com/herokuappname.git |
Thêm tệp vào vùng dàn dựng:
1 2 | $ git add . |
Cam kết các thay đổi / tệp:
1 2 | $ git commit -m "first commit for all files" |
Cuối cùng, đẩy dự án lên gitrepo được lưu trữ trên Heroku:
1 2 | $ git push master heroku |
Nếu mọi thứ suôn sẻ, bạn sẽ thấy một đầu ra như thế này:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Counting objects: 26, done. Delta compression using up to 4 threads. Compressing objects: 100% (20/20), done. Writing objects: 100% (26/26), 32.13 KiB | 0 bytes/s, done. Total 26 (delta 1), reused 0 (delta 0) remote: Compressing source files... done. remote: Building source: ..... ..... remote: -----> Launching... remote: Released v1 remote: https://herokuappname.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/herokuappname.git [new branch] master -> master |
nguồn: https://stackabuse.com/how-to-deploy-a-django-application-to-heroku-with-git-cli/