Dokku là Nền tảng dưới dạng dịch vụ (PaaS) tự lưu trữ giúp triển khai ứng dụng đơn giản bằng Git. Mặc dù triển khai Dokku tương tự như Heroku, nhưng nó thiếu một số tính năng chính như tự động mở rộng quy mô. Dokku là một công cụ cực kỳ mạnh mẽ tự động chạy ứng dụng của bạn bên trong Docker và yêu cầu cấu hình tối thiểu của máy chủ web.

Hướng dẫn này trình bày cách thực hiện:

  • Tạo một ứng dụng Flask trả về ‘Hello World!’ trên trang chỉ mục
  • Cài đặt Dokku trên Linode
  • Triển khai ứng dụng Flask với máy chủ WSGI bên trong vùng chứa Docker
  • Thêm chứng chỉ SSL thông qua Dokku bằng plugin Let’s Encrypt

Trước khi bạn bắt đầu

Trên máy tính cục bộ của bạn

Ghi chú: Dokku v0.12.5 tương thích với Ubuntu 16.04 x64, Ubuntu 14.04 x64 và Debian 8.2 x64. CentOS 7 x64 chỉ được hỗ trợ thử nghiệm và do đó một số bước như cấu hình khóa SSH và máy chủ ảo phải được thực hiện thủ công bằng giao diện dòng lệnh dokku. Xem tài liệu chính thức để biết thêm thông tin.

Người ta cho rằng khóa công khai có sẵn. Thông thường, khóa này nằm ở ~/home/username/.ssh/id_rsa.pub.

Cài đặt Git nếu cần:

sudo apt install git

Trên Linode của bạn

Tập lệnh cài đặt Dokku tạo dokkungười dùng trên hệ thống, cài đặt Docker và kéo hình ảnh có liên quan.

1.Tải xuống tập lệnh cài đặt từ Dokku sau đó chạy tập lệnh:

wget https://raw.githubusercontent.com/dokku/dokku/v0.12.5/bootstrap.sh
sudo DOKKU_TAG=v0.12.5 bash bootstrap.sh
Preparing to install v0.11.6 from https://github.com/dokku/dokku.git...
For dokku to build containers, it is strongly suggested that you have 1024 megabytes or more of free memory
If necessary, please consult this document to setup swap: http://dokku.viewdocs.io/dokku/advanced-installation/#vms-with-less-than-1gb-of-memory
--> Ensuring we have the proper dependencies
--> Initial apt-get update
--> Installing docker
--> NOTE: Using Linode? Docker may complain about missing AUFS support.
    You can safely ignore this warning.
        Installation will continue in 10 seconds.
...

2.Điều hướng đến địa chỉ IP công khai của Linode trong trình duyệt và nhập khóa công khai:Cài đặt Dokku ban đầu

Quan trọng: Thêm khóa công khai ngay sau khi chạy tập lệnh cài đặt để tránh người khác thêm khóa công khai vào Dokku. Đối với cài đặt không giám sát, hãy tham khảo hướng dẫn cài đặt nâng cao .

3.Để thêm khóa SSH bổ sung, hãy chuyển đầu ra qua SSH đến dokkungười dùng. Thay thế example.combằng địa chỉ IP của Linode của bạn.

cat ~/.ssh/id_rsa.pub | ssh dokku@example.com ssh-keys:add new-key

Tạo ứng dụng Flask

1.Trên máy tính cục bộ của bạn, hãy tạo một thư mục dự án mới:

mkdir flask-example && cd flask-example

2.Tạo một tệp mới có tên là hello_world.py‘Hello World!’ trên trang chỉ mục.

import os

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='127.0.0.1', port=port)

3.Thêm requirements.txttệp để theo dõi phiên bản của bất kỳ phụ thuộc nào của ứng dụng Flask. Gunicorn là máy chủ WSGI được sử dụng để cho phép Flask giao tiếp đúng cách với NGINX.

Flask==0.12.1
gunicorn==19.7.1

4.Đối với các dự án phức tạp hơn có nhiều sự phụ thuộc khi sử dụng môi trường ảo, hãy chuyển hướng đầu ra của pip freezevào requirements.txt.

pip freeze > requirements.txt

Thêm gitignore

Tùy chọn, thêm một .gitignoretệp để Git bỏ qua các tệp bộ nhớ đệm và môi trường ảo khỏi kiểm soát phiên bản.

__pycache__/
*.pyc

venv/

Hồ sơ

Procfile cho máy chủ Gunicorn biết lệnh nào cần sử dụng khi khởi chạy ứng dụng:

web: gunicorn hello_world:app --workers=4

Ghi chú: 4 công nhân là mặc định tốt cho ứng dụng web chạy trên Linode. Xem tài liệu Gunicorn để biết thêm thông tin về cách xác định số lượng công nhân chính xác cho ứng dụng cụ thể của bạn.

Git từ xa

1.Khởi tạo kho lưu trữ Git:

git init
git add .
git commit -m "Deploy Flask with Dokku"

2.Thêm một tên miền từ xa dokkucó tên người dùng dokkuvà thay thế example.combằng địa chỉ IP công khai của Linode của bạn:

git remote add dokku dokku@example.com:flask-example

3.Xác minh điều khiển từ xa đã được thêm vào:

git remote -v

Thao tác này sẽ liệt kê các điều khiển từ xa.

dokku   dokku@example-ip:flask-example (fetch)
dokku   dokku@example-ip:flask-example (push)

Tóm lại, bố cục của dự án trông như thế này:

flask-example
├── .gitignore
├── Procfile
├── hello_world.py
└── requirements.txt

Tạo dự án trên máy chủ Dokku

1.SSH vào Linode của bạn và tạo ứng dụng:

dokku apps:create flask-example

2.Đảm bảo VHOST đã được bật.

dokku domains:enable flask-example

Triển khai ứng dụng Flask

1.Trên máy tính cục bộ của bạn, triển khai ứng dụng Flask bằng cách đẩy nhánh lên dokkumáy chủ từ xa. Thao tác này sẽ xử lý NGINX ở chế độ nền và hiển thị cổng 80:

git push dokku master

Các nhánh cục bộ khác cũng có thể được triển khai nhưng tất cả các nhánh phải được đẩy lên nhánh chính của nhánh dokkutừ xa:

git push dokku branch-name:master

2.curlđịa chỉ IP của Linode để kiểm tra xem ứng dụng đã được triển khai thành công hay chưa:

curl example.com
Hello World!

Chứng chỉ SSL với Dokku và Let’s Encrypt

Các bước còn lại trong hướng dẫn này phải được thực hiện từ Linode của bạn.

1.Cài đặt plugin Let’s Encrypt cho Dokku:

sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git

2.Đặt DOKKU_LETSENCRYPT_EMAILbiến môi trường thành email cho Let’s Encrypt:

dokku config:set flask-example DOKKU_LETSENCRYPT_EMAIL=docs@linode.com

3.Thêm ứng dụng và tên miền:

dokku domains:add flask-example example.com

4.Tạo chứng chỉ SSL. NGINX sẽ tự động bắt đầu phục vụ ứng dụng qua HTTPS trên cổng 443:

dokku letsencrypt flask-example

5.Chạy lệnh này như một tác vụ cron để chứng chỉ tự động gia hạn:.

dokku letsencrypt:cron-job --add

Bắt đầu, dừng và khởi động lại ứng dụng

  • Liệt kê tất cả các ứng dụng Dokku đang chạy: dokku apps
  • Khởi động lại ứng dụng: dokku ps:restart flask-example
  • Dừng một ứng dụng: dokku ps:stop flask-example
  • Khôi phục tất cả các ứng dụng sau khi khởi động lại: dokku ps:restore

Xem Nhật ký ứng dụng

Xem nhật ký ứng dụng thông qua Dokku hoặc container Docker.

  1. Để xem nhật ký thông qua Dokku:dokku logs flask-example
  2. Liệt kê tất cả các container Docker đang chạy:sudo docker ps -a
  3. Tìm ID container sau đó chạy:sudo docker logs container_id

Ứng dụng cân

Dokku không tự động mở rộng ứng dụng và theo mặc định sẽ chỉ chạy một webquy trình duy nhất. Để tăng số lượng container chạy ứng dụng của bạn, bạn có thể sử dụng ps:scalelệnh.

1.Kiểm tra xem ứng dụng của bạn hiện có bao nhiêu nhân viên:

dokku ps:scale flask-example
-----> Scaling for flask-example
-----> proctype           qty
-----> --------           ---
-----> web                1

2.Mở rộng lên tới 4 webquy trình:

dokku ps:scale flask-example web=4

3.Xác nhận rằng các quy trình mới đang chạy:

-----> Scaling for flask-example
-----> proctype           qty
-----> --------           ---
-----> web                4

Dokku là một giải pháp thay thế mã nguồn mở cho Heroku dành cho các ứng dụng nhỏ. Việc triển khai các ứng dụng cũng đơn giản như đẩy lên một máy chủ từ xa bằng Git. Các thành phần như Docker và NGINX được trừu tượng hóa để giảm thiểu thời gian triển khai. Có các tính năng bổ sung như hook trước khi triển khai và liên kết cơ sở dữ liệu không được hiển thị trong hướng dẫn này.

Thông tin thêm

Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.

Nguồn: https://www.linode.com/docs/guides/deploy-a-flask-application-with-dokku/