Sử dụng Cloudflare Tunnel để public Ollama lên Internet

Sử dụng Cloudflare Tunnel để public Ollama lên Internet

Những mẩu tin ngắn hàng ngày dành cho bạn
  • Hẳn là nhiều người ở đây đã nghe đến kiểu tấn công bảo mật Clickjacking rồi nhỉ. Kẻ tấn công thường nhúng một website (thường là mục tiêu) vào trong một iframe trên website của chúng, sau đó làm mờ hoặc ẩn nó đi rồi đặt vào vị trí các nút bấm trên web, ví dụ "Bấm vào để nhận quà". Đâu ai ngờ rằng phía trên nút bấm đó là một nút bấm khác trong iframe. Khá nguy hiểm!

    Nhưng trình duyệt đã có cách ngăn chặn kiểu tấn công này bằng các quy tắc như tiêu đề X-Frame-Options, frame-ancestors của CSP và SameSite: Lax/Strict của Cookies...

    Mới đây, đã xuất hiện thêm kiểu tấn công mới - "DoubleClickjacking" 😨. Đại ý là "hắn" lợi dụng hành động double click để lừa người dùng bấm vào một nút mà hắn muốn. Chi tiết hơn trong bài viết này: DoubleClickjacking: A New Era of UI Redressing.

    » Xem thêm
  • Mọi người đã nghe nói đến Jujutsu - jj - một dạng quản lý phiên bản cho mã nguồn (version control system) chưa? Có vẻ như nó đang nhận được nhiều sự quan tâm.

    Chờ xíu! Chẳng phải git đã quá tốt rồi sao? Thế thì chế ra thằng jj để làm gì nữa? Cũng hơi khó trả lời nhỉ? Mỗi công cụ sinh ra chắc chắn phải cải thiện hoặc khắc phục được nhược điểm của cái trước. Cho nên jj ắt hẳn phải làm được điều gì đó mà git chưa làm được nên mới nổi lên như vậy.

    Thật ra mình đã nghe nói đến jj từ vài tháng trước rồi, nhưng vào đọc thì toàn kiến thức cao siêu. Hoặc là đang mang nặng cái lối suy nghĩ của git vào trong đầu rồi nên chưa lĩnh hội ra được điều gì cả.

    Mình hay có kiểu cái gì đọc lần 1 mà không hiểu thì đọc tiếp lần 2, lần 2 không hiểu thì đọc tiếp lần 3... đến lần thứ n mà vẫn không hiểu thì bỏ. Cơ mà không phải là từ bỏ mà một thời gian sau đó quay lại đọc tiếp. Đến một lúc nào đó khả năng mình sẽ hiểu ra một ít vấn đề, thế mới tài 😆.

    Thì cái jj này có vẻ như nó đang mở ra được tính linh hoạt trong việc "cam kết" mã. Tưởng tượng bạn đang làm việc trên một dự án, đang ở nhánh này, muốn sang nhánh khác để sửa, nhưng mà lại đang viết dở ở nhánh này, thế là phải stash, rồi checkout, rồi commit, rồi merge hoặc rebase lại vào nhánh cũ... nhìn chung quá trình làm việc với git nghiêm ngặt đến mức cứng nhắc, cần nhiều thao tác để giải quyết một vấn đề, chưa kể cái cây commit (commit-tree) nữa thì ôi thôi, khỏi xem cho đỡ nhức mắt. Thế nên ông jj này đang làm cách nào đó để bạn khỏi cần phải quan tâm đến các nhánh luôn, sửa trực tiếp vào commit. Nghe ảo nhỉ 😂.

    Đấy mới lĩnh hội được đến đấy, hy vọng sau n lần đọc lại nữa mình sẽ viết được một bài chi tiết hơn về công cụ này.

    » Xem thêm
  • Gòi gòi tới công chiện gòi 🤤🤤🤤

    » Xem thêm

Vấn đề

Chào các độc giả của 2coffee.dev. Tết sắp đến rồi, các bạn đã sắm sửa hay chuẩn bị gì cho mình và gia đình chưa? Theo như tôi thấy có vẻ như càng cuối năm mọi người càng bận rộn. Từ đầu tháng đến giờ lượng truy cập vào blog đã giảm rõ rệt. Điều đó đôi khi khiến tôi phải sốt vó lên vì không biết độc giả của mình đã đi đâu hết. Hoặc là nghỉ tết sớm, hay là chatbot đang quá mạnh, hoặc cũng có thể là do nội dung không còn đủ hấp dẫn nữa 😥

Phải thú thật rằng mấy tuần cuối cùng này tôi luôn trong tâm thế của một người bận rộn, không có nhiều thời gian để viết bài thường xuyên. Chắc là do tính chất công việc, cộng thêm nhiều vấn đề phải lo quá nên là không còn tâm trí để mà thư giãn. Nhưng không sao, ngày hôm nay tôi vừa cấu hình thành công Cloudflare Tunnel kết hợp với Ollama để "public" một địa chỉ API lên mạng Internet - điều mà trước đó mấy tuần chưa làm được. Nghĩ rằng nhiều người sẽ cần nên bắt tay vào viết luôn một bài cho nóng.

Ban đầu tôi định viết thành một bài viết ngắn trong chuyên mục Threads, nhưng nghĩ lại đã quá lâu rồi mình chưa có một bài viết dài nào nên lại thôi. Bạn có tin được không? Một bài viết dài hoàn toàn có thể cô đọng lại chỉ trong vài dòng ngắn ngủi. Ngược lại, một bài viết ngắn chỉ cần "hoa mỹ" lên một chút là sẽ hoá thành một bài văn dài mà nhiều người phải khiếp sợ. Ấy thế tại sao phải cố viết dài ra làm gì?

Chà! Nếu không nói ra thì có thể chẳng ai biết lý do. Viết với tôi như một cách để giải toả căng thẳng. Bằng cách viết, tôi có thể giao lưu với độc giả của mình, hỏi han, tâm sự, hay lồng ghép những câu chuyện, bài học mà bản thân rút ra được. Nói cách khác, viết một phần là để thư giãn, một phần là để giao lưu với tất cả mọi người.

Từ khi ra chuyên mục bài viết ngắn Threads, tôi không ngờ rằng nhiều người quan tâm đến nó như vậy. À mà nói rằng không ngờ thì hơi quá, vì tôi đã nghiên cứu rất nhiều trước khi làm ra tính năng này. "Code" một tính năng thì không khó, cái khó là vận hành nó như thế nào. Threads phải đảm bảo tần suất viết bài không bị ngắt quãng, nếu như lâu lâu mới viết một bài thì liệu rằng có ai hay vào để cập nhật tin tức nữa không chứ? Việc đó vô tình gây ra một áp lực, rằng làm sao để vừa thu thập, vừa tổng hợp được tin tức thú vị và nổi bật trong ngày cho các độc giả. Nhiều hôm bận quá, quên không viết, y như rằng hôm sau phải lên bài bù cho đủ uy tín 😆

Tôi biết rằng có rất nhiều người thích đọc, mà tôi lại là một trong những người thích viết. Đôi khi đọc không phải lúc nào cũng trong tâm thế của người bị "dí deadline", đang trên đường đi tìm giải pháp, hay là học một cái gì đó mới... Tôi tin rằng với nhiều người việc đọc cũng giống như viết vậy: Là để thư giãn. Thư giãn mà có thêm kiến thức, có thêm kinh nghiệm thì quả là một công đôi việc phải không ạ! 😁

Nói hơi nhiều rồi nhỉ, vào vấn đề chính thôi. Hôm nay tôi mới cấu hình thành công Cloudflare Tunnel cùng với Ollama để public một địa chỉ API lên mạng Internet. Từ đó bất kỳ ai cũng gọi được mà không bị bó buộc trong máy chủ cục bộ (localhost) nữa. Sau khi đọc lại tài liệu của Ollama thì hoá ra nó lại đơn giản hơn mình nghĩ!

Cloudflare Tunnel & Ollama

Nếu chưa biết Cloudflare Tunnel, bạn đọc hãy đọc lại bài viết Thêm một công cụ "Tunnel Locally" - Đưa máy chủ cục bộ lên Internet. Đây là một công cụ giúp chúng ta ánh xạ máy chủ cục bộ lên Internet, đồng nghĩa biến máy tính của bạn thành máy chủ và bất kỳ ai có địa chỉ IP hoặc tên miền đều có thể truy cập vào được.

Ollama là một công cụ giúp chúng ta chạy được một số mô hình ngôn ngữ lớn (LLM) trên máy tính chỉ bằng một câu lệnh duy nhất. Nó giúp đơn giản hoá quá trình cài đặt và sử dụng các mô hình. Điểm nổi bật nhất là hỗ trợ API tương thích với OpenAPI.

Trong bài viết trước đó, tôi có đề cập đến việc tạo một Tunnel thông qua một quy trình 6 bước - hơi dài nhỉ - thực ra Cloudflare Tunnel có cách khởi động nhanh hơn rất nhiều, chỉ cần cài đặt cloudflared rồi sử dụng một lệnh duy nhất:

$ cloudflared tunnel --url http://localhost:11434
...
Your quick Tunnel has been created! Visit it at (it may take some time to be reachable):
https://tennis-coordination-korea-wv.trycloudflare.com
....

Ngay lập tức bạn sẽ thấy một địa chỉ ngẫu nhiên mà cloudflared tạo ra. Nó ánh xạ đến địa chỉ http://localhost:11434 trong máy tính. Khi truy cập vào https://tennis-coordination-korea-wv.trycloudflare.com từ một máy khác, chúng ta thấy kết quả y hệt như truy cập từ http://localhost:11434 trên máy cục bộ.

Ở trên chỉ là ví dụ để ánh xạ bất kỳ cổng (port) nào dưới máy lên Internet, đối với Ollama hoặc nhiều công cụ khác cần phải cấu hình thêm hostname có trong headers. Trong tài liệu Ollama hướng dẫn:

$ cloudflared tunnel --url http://localhost:11434 --http-host-header="localhost:11434"

Sau đó thử gọi API bằng URL mới có. Lưu ý trước đó phải chạy mô hình llama3.2 từ Ollama.

curl https://tennis-coordination-korea-wv.trycloudflare.com/api/generate -d '{
  "model": "llama3.2",
  "prompt": "Why is the sky blue?"
}'

Tuyệt vời, đến đây mọi thứ đã xong và bạn đã có một địa chỉ API trỏ đến Ollama trong máy chủ cục bộ mà bất kỳ ai cũng có thể truy cập vào được. Tuy nhiên, nếu bạn có một tên miền trong Cloudflare và muốn giữ cố định địa chỉ ví dụ như là api-ollama.2coffee.dev thì cần cấu hình đủ theo 6 bước.

Giữ tên miền cố định

Rất đơn giản, sau khi làm đến bước 4 trong bài viết Thêm một công cụ "Tunnel Locally" - Đưa máy chủ cục bộ lên Internet, sửa lại nội dung của tệp config.yml như sau:

tunnel: <tunnel-uuid>
credentials-file: path/to/.cloudflared/.json

ingress:
  - hostname: api-ollama.2coffee.dev
    service: http://localhost:11434
    originRequest:
      httpHostHeader: "localhost:11434"
  - service: http_status:404

Sau đó khởi chạy:

$ cloudflared tunnel run <tunnel-uuid>

Mặc dù cách này có thể giúp bạn tạo ra được một địa chỉ API tương tự như OpenAI của ChatGPT nhưng nó lại có nhiều hạn chế như phụ thuộc vào cấu hình máy và model đang sử dụng, Ollama chỉ xử lý được một truy vấn tại một thời điểm thế nên việc gọi liên tục hay đồng thời sẽ không hiệu quả.

Cao cấp
Hello

Bí mật ngăn xếp của Blog

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (0)

Nội dung bình luận...
Bấm hoặc cuộn mạnh để sang bài mới