0
0
Lập trình
Admin Team
Admin Teamtechmely

Xây dựng Công Cụ Năng Suất Tích Hợp GitHub với Notion

Đăng vào 7 tháng trước

• 6 phút đọc

Xây dựng Công Cụ Năng Suất Tích Hợp GitHub với Notion

Trong vai trò là một lập trình viên sinh viên, tôi thường xuyên phải đối mặt với các thời hạn. Đôi khi, việc theo dõi và xác định thời hạn nào cần tập trung trở nên rất khó khăn khi phải xử lý nhiều nhiệm vụ cùng lúc. Để đơn giản hóa quá trình này và giảm thiểu việc trì hoãn một số công việc, tôi đã phát triển GitDone, và đây là câu chuyện về cách nó từ một ý tưởng đơn giản trở thành một ứng dụng đầy đủ, chạy trên đám mây.

GitDone là một công cụ năng suất mã nguồn mở tích hợp với GitHub. Nó cho phép các lập trình viên tạo ra các đếm ngược thời hạn theo thời gian thực cho bất kỳ mục tiêu nào trong kho lưu trữ - một dự án, một bản sửa lỗi, hoặc một bản cập nhật phiên bản. Đếm ngược sẽ tự động hoàn thành khi một thông điệp cam kết chứa từ khóa cụ thể được đẩy lên kho lưu trữ. Những đếm ngược này thậm chí có thể được nhúng trong các công cụ như Notion, giữ cho toàn bộ quy trình làm việc của bạn ở một nơi.

Tia Lửa Ban Đầu: Tạo Mẫu Với Đối Tác AI

Dự án bắt đầu với một giao diện người dùng đơn giản. Tôi đã phác thảo phiên bản đầu tiên bằng HTML và CSS tiêu chuẩn, nhưng tôi muốn xây dựng một trải nghiệm hiện đại và thân thiện hơn. Để làm điều này, tôi đã sử dụng Amazon Kiro.

Tôi đã dùng Kiro để giúp tư duy về yêu cầu dự án, phác thảo kiến trúc, và phân chia phát triển thành các nhiệm vụ dễ quản lý. AI tích hợp của nó đã hỗ trợ tôi:

  • Tái cấu trúc tập tin kiểu dáng của tôi để có thiết kế hoàn toàn đáp ứng, ưu tiên di động.
  • Thực hiện chế độ sáng/tối bằng JavaScript để cải thiện trải nghiệm người dùng.
  • Tạo logic phía khách hàng để hiển thị liên kết nhúng duy nhất cho mỗi mục tiêu.

Bước Nhảy Vọt Đến Đám Mây: Kiến Trúc Để Sản Xuất

Một nguyên mẫu cục bộ là một chuyện, nhưng một ứng dụng thực tế cần phải đáng tin cậy, có thể mở rộng và an toàn. Điều này có nghĩa là triển khai trên đám mây. Tôi đã chọn AWS và thiết kế một kiến trúc 3 tầng để tách biệt các mối quan tâm của ứng dụng.

  • Tầng Backend: Một ứng dụng Python được xây dựng với framework Flask, phục vụ một API REST và render động giao diện người dùng.
  • Tầng Dữ Liệu: Một cơ sở dữ liệu AWS RDS PostgreSQL được quản lý để đảm bảo dữ liệu được bảo tồn và an toàn.
  • Tầng Tính Toán: AWS Elastic Beanstalk để quản lý hạ tầng máy chủ EC2, xử lý mọi thứ từ triển khai đến cân bằng tải và giám sát sức khỏe.
  • Tầng Biên: AWS CloudFront hoạt động như một CDN, lưu trữ các tài sản tĩnh gần người dùng hơn và cung cấp bảo mật bằng cách quản lý miền tùy chỉnh (gitdone.online) và chấm dứt chứng chỉ SSL/TLS.

Thiết lập này rất vững chắc trên giấy, nhưng việc làm cho tất cả các phần hoạt động cùng nhau mới là thách thức thực sự.

"Năm Vòng Địa Ngục Gỡ Lỗi": Câu Chuyện Về Những Thách Thức

Triển khai một ứng dụng đa dịch vụ lần đầu tiên là một bài thử thách thực sự. Tôi đã lần lượt khắc phục các vấn đề kỹ thuật quan trọng trong thực tế của đám mây.

1. Vòng Đời "Chết" SQLite

Sai lầm lớn đầu tiên của tôi là sử dụng cơ sở dữ liệu SQLite dựa trên tệp. Ứng dụng của tôi hoạt động hoàn hảo cho đến lần triển khai đầu tiên. Tôi đã hoảng hốt khi phát hiện rằng 100% dữ liệu ứng dụng đã bị xóa hoàn toàn mỗi khi tôi đẩy mã mới. Tôi đã học được một bài học khó khăn về bản chất thoáng qua của các máy chủ đám mây. Điều này đã buộc tôi phải tái cấu trúc tầng dữ liệu, chuyển sang AWS RDS để đạt được tính bền vững dữ liệu thực sự.

2. Ứng Dụng Không Khởi Động Được

Sau khi chuyển sang RDS, ứng dụng của tôi vẫn không triển khai được. Khi xem qua nhật ký Elastic Beanstalk, tôi đã phát hiện hai thủ phạm mới:

  • ModuleNotFoundError: Cấu trúc tệp của application.py và cấu hình WSGIPath của Elastic Beanstalk không khớp nhau.
  • SQLAlchemy URL Parse Error: Một lỗi chính tả đơn giản trong biến môi trường DATABASE_URL đã khiến ứng dụng bị sập khi khởi động.

3. Mê Cung Mạng

Với ứng dụng cuối cùng cũng đã khởi động, nó vẫn không thể kết nối với cơ sở dữ liệu, dẫn đến lỗi 504 Gateway Timeout. Điều này đã đưa tôi đi sâu vào mạng lưới AWS. Giải pháp là cấu hình một bộ quy tắc Security Group chính xác để hoạt động như một tường lửa, tạo ra một cầu an toàn giữa các dịch vụ:

  • Một quy tắc cho phép CloudFront giao tiếp với Elastic Beanstalk.
  • Một quy tắc cho phép Elastic Beanstalk giao tiếp với cơ sở dữ liệu RDS.
  • Một quy tắc tạm thời cho phép máy tính cá nhân của tôi kết nối với cơ sở dữ liệu để khởi tạo các bảng.

4. Đống Chồng Chất Đống

Tại một thời điểm, một bản cập nhật cấu hình thất bại đã khiến môi trường ở trạng thái UPDATE_ROLLBACK_FAILED. Bảng điều khiển Elastic Beanstalk bị khóa. Tôi đã phải học cách sử dụng bảng điều khiển AWS CloudFormation để can thiệp thủ công, bỏ qua tài nguyên đang gặp sự cố, và buộc hoàn tác hoàn tất, cứu vãn môi trường "bị kẹt".

Tự Động Hóa Thành Công: Dòng Chảy CI/CD

Sau khi giải quyết những vấn đề này, tôi đã tự động hóa toàn bộ quy trình triển khai bằng cách xây dựng một dòng chảy CI/CD với AWS CodePipeline. Giờ đây, mỗi lần git push đến nhánh chính trên GitHub sẽ tự động kích hoạt một lần triển khai đến Elastic Beanstalk. Điều này đã loại bỏ một quy trình thủ công 5 bước, giảm thiểu nguy cơ sai sót của con người, và cho phép giao hàng liên tục thực sự.

Sản Phẩm Cuối Cùng & Những Bước Tiếp Theo

Sau một hành trình dài xây dựng và gỡ lỗi, GitDone giờ đây là một ứng dụng hoàn toàn chức năng, ổn định và có khả năng mở rộng, chạy trên kiến trúc đám mây chất lượng chuyên nghiệp.

Dự án hoàn toàn mã nguồn mở, và mục tiêu cuối cùng là cộng đồng có thể đóng góp và giúp định hình tương lai của nó, thêm vào những tính năng và tích hợp mà họ mong muốn nhất. Những bước tiếp theo mà tôi hình dung là tích hợp thông báo qua email cho các thời hạn và mở rộng hỗ trợ cho các nhà cung cấp Git khác như GitLab. Tôi hy vọng sẽ thấy những đóng góp cho dự án này để đưa nó đến những tầm cao mới.

Bạn có thể thử ứng dụng trực tiếp tại gitdone.online và xem mã nguồn trên GitHub Repo. Cảm ơn bạn đã đọc!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào