Danh sách kiểm tra để tạo và xuất bản ứng dụng web

Để tạo ứng dụng web của riêng bạn trong thời đại chúng ta, việc phát triển nó là chưa đủ. Một khía cạnh quan trọng là thiết lập các công cụ để triển khai, giám sát ứng dụng cũng như quản lý và điều hành môi trường mà nó hoạt động. Khi kỷ nguyên triển khai thủ công dần đi vào quên lãng, ngay cả đối với các dự án nhỏ, các công cụ tự động hóa có thể mang lại những lợi ích hữu hình. Khi triển khai “bằng tay”, chúng ta thường có thể quên di chuyển một thứ gì đó, tính đến sắc thái này hay sắc thái kia, chạy thử nghiệm đã quên, danh sách này có thể tiếp tục trong một thời gian khá dài.

Bài viết này có thể giúp ích cho những người mới tìm hiểu kiến ​​thức cơ bản về tạo ứng dụng web và muốn hiểu một chút về các thuật ngữ và quy ước cơ bản.

Vì vậy, việc xây dựng ứng dụng vẫn có thể được chia thành 2 phần: mọi thứ liên quan đến mã ứng dụng và mọi thứ liên quan đến môi trường mà mã này được thực thi. Ngược lại, mã ứng dụng cũng được chia thành mã máy chủ (mã chạy trên máy chủ, thường là: logic nghiệp vụ, ủy quyền, lưu trữ dữ liệu, v.v.) và mã máy khách (mã chạy trên máy của người dùng: thường là giao diện và logic liên quan với nó).

Hãy bắt đầu với thứ Tư.

Cơ sở cho hoạt động của bất kỳ mã, hệ thống hoặc phần mềm nào là Hệ điều hành, vì vậy bên dưới chúng tôi sẽ xem xét các hệ thống phổ biến nhất trên thị trường lưu trữ và mô tả ngắn gọn về chúng:

Windows Server - cùng một Windows, nhưng ở một biến thể máy chủ. Một số chức năng có sẵn trong phiên bản máy khách (thông thường) của Windows không có ở đây, ví dụ: một số dịch vụ thu thập số liệu thống kê và phần mềm tương tự, nhưng có một bộ tiện ích quản trị mạng, phần mềm cơ bản để triển khai máy chủ (web, ftp, ...). Nhìn chung, Windows Server trông giống Windows thông thường, quạc quạc như Windows thông thường, tuy nhiên, nó có giá cao gấp 2 lần so với Windows thông thường. Tuy nhiên, do rất có thể bạn sẽ triển khai ứng dụng trên một máy chủ ảo/chuyên dụng nên chi phí cuối cùng đối với bạn, mặc dù có thể tăng lên, nhưng không quan trọng. Vì nền tảng Windows chiếm vị trí áp đảo trong thị trường hệ điều hành tiêu dùng nên phiên bản máy chủ của nó sẽ quen thuộc nhất với hầu hết người dùng.

Unix-hệ thống tương tự Công việc truyền thống trong các hệ thống này không yêu cầu sự hiện diện của giao diện đồ họa quen thuộc, chỉ cung cấp cho người dùng bảng điều khiển làm thành phần điều khiển. Đối với người dùng thiếu kinh nghiệm, làm việc ở định dạng này có thể khó khăn, chi phí để thoát khỏi trình soạn thảo văn bản khá phổ biến trong dữ liệu là bao nhiêu Khí lực, một câu hỏi liên quan đến vấn đề này đã nhận được hơn 6 triệu lượt xem trong 1.8 năm. Các bản phân phối (phiên bản) chính của họ này là: Debian - một bản phân phối phổ biến, các phiên bản gói trong đó tập trung chủ yếu vào LTS (Hỗ trợ dài hạn – hỗ trợ trong thời gian dài), được thể hiện ở độ tin cậy và tính ổn định khá cao của hệ thống và gói; Ubuntu – chứa các bản phân phối của tất cả các gói trong các phiên bản mới nhất của chúng, điều này có thể ảnh hưởng đến tính ổn định nhưng cho phép bạn sử dụng chức năng đi kèm với các phiên bản mới; Red Hat Enterprise Linux – Hệ điều hànhTuy nhiên, được định vị cho mục đích sử dụng thương mại, được trả phí, bao gồm hỗ trợ từ các nhà cung cấp phần mềm, một số gói độc quyền và gói trình điều khiển; CentOS - mã nguồn mở một biến thể của Red Hat Enterprise Linux, đặc trưng bởi sự thiếu vắng các gói và hỗ trợ độc quyền.

Đối với những người mới bắt đầu nắm vững lĩnh vực này, đề xuất của tôi sẽ là hệ thống Windows ServerHoặc Ubuntu. Nếu chúng ta xem xét Windows, thì đây chủ yếu là sự quen thuộc của hệ thống, Ubuntu – khả năng chấp nhận các bản cập nhật cao hơn và do đó, ít vấn đề hơn khi khởi chạy các dự án trên công nghệ yêu cầu phiên bản mới.

Vì vậy, sau khi quyết định chọn HĐH, hãy chuyển sang một bộ công cụ cho phép bạn triển khai (cài đặt), cập nhật và giám sát trạng thái của ứng dụng hoặc các bộ phận của nó trên máy chủ.

Quyết định quan trọng tiếp theo sẽ là vị trí đặt ứng dụng của bạn và máy chủ cho nó. Hiện nay, phổ biến nhất là 3 cách:

  • Lưu trữ (giữ) một máy chủ cho riêng bạn là tùy chọn thân thiện với ngân sách nhất, nhưng bạn sẽ phải đặt hàng IP tĩnh từ nhà cung cấp của mình để tài nguyên của bạn không thay đổi địa chỉ theo thời gian.
  • Thuê một Máy chủ chuyên dụng (VDS) – và quản lý nó một cách độc lập cũng như mở rộng quy mô tải
  • Trả tiền (thường họ cho bạn cơ hội dùng thử miễn phí chức năng của nền tảng) để đăng ký một số dịch vụ lưu trữ đám mây, trong đó mô hình thanh toán cho các tài nguyên được sử dụng khá phổ biến. Đại diện nổi bật nhất của hướng này: Amazon AWS (họ cung cấp một năm sử dụng dịch vụ miễn phí nhưng có giới hạn hàng tháng), Google Cloud (họ tặng 300 đô la vào tài khoản, số tiền này có thể được chi tiêu trong năm cho các dịch vụ lưu trữ đám mây) , Yandex.Cloud (họ tặng 4000 rúp ... trong 2 tháng), Microsoft Azure (cấp quyền truy cập miễn phí vào các dịch vụ phổ biến trong một năm, + 12 rúp cho bất kỳ dịch vụ nào trong một tháng). Vì vậy, bạn có thể dùng thử bất kỳ nhà cung cấp nào trong số này mà không tốn một xu nào mà vẫn có được ý kiến ​​​​gần đúng về chất lượng và mức độ dịch vụ được cung cấp.

Tùy thuộc vào con đường đã chọn, điều duy nhất sẽ thay đổi trong tương lai là ai chịu trách nhiệm chính về lĩnh vực hành chính này hoặc lĩnh vực đó. Nếu bạn tự lưu trữ, thì bạn phải hiểu rằng mọi sự gián đoạn về điện, Internet, chính máy chủ, phần mềm được triển khai trên đó - tất cả những điều này hoàn toàn nằm trên vai bạn. Tuy nhiên, đối với việc đào tạo và kiểm tra, điều này là quá đủ.

Nếu bạn không có thêm một máy có thể đóng vai trò máy chủ thì bạn sẽ muốn sử dụng cách thứ hai hoặc thứ ba. Trường hợp thứ hai giống hệt trường hợp đầu tiên, ngoại trừ việc bạn chuyển trách nhiệm về tính khả dụng của máy chủ và sức mạnh của nó sang vai chủ nhà lưu trữ. Việc quản lý máy chủ và phần mềm vẫn nằm trong tầm kiểm soát của bạn.

Và cuối cùng là tùy chọn thuê dung lượng của các nhà cung cấp đám mây. Tại đây bạn có thể thiết lập điều khiển tự động hầu hết mọi thứ mà không cần đi sâu vào chi tiết kỹ thuật. Ngoài ra, thay vì một máy, bạn có thể có một số phiên bản chạy song song, ví dụ: có thể chịu trách nhiệm về các phần khác nhau của ứng dụng, trong khi chi phí không khác nhiều so với việc sở hữu một máy chủ chuyên dụng. Ngoài ra, còn có các công cụ để điều phối, container hóa, triển khai tự động, tích hợp liên tục và hơn thế nữa! Chúng ta sẽ xem xét một số điều dưới đây.

Nói chung, cơ sở hạ tầng máy chủ trông như thế này: chúng tôi có cái gọi là “bộ điều phối” (“điều phối” là quá trình quản lý một số phiên bản máy chủ), quản lý các thay đổi môi trường trên một phiên bản máy chủ, một thùng chứa ảo hóa (tùy chọn, nhưng khá thường được sử dụng), cho phép bạn chia ứng dụng thành các lớp logic biệt lập và phần mềm Tích hợp liên tục—cho phép cập nhật mã được lưu trữ thông qua “tập lệnh”.

Vì vậy, việc điều phối cho phép bạn xem trạng thái của máy chủ, triển khai hoặc khôi phục các bản cập nhật cho môi trường máy chủ, v.v. Lúc đầu, khía cạnh này khó có thể ảnh hưởng đến bạn, vì để sắp xếp mọi thứ, bạn cần một số máy chủ (bạn có thể có một máy chủ, nhưng tại sao điều này lại cần thiết?), và để có một số máy chủ, bạn cần chúng. Trong số các công cụ theo hướng này, công cụ phổ biến nhất là Kubernetes, được phát triển bởi Google.

Bước tiếp theo là ảo hóa ở cấp độ hệ điều hành. Ngày nay, khái niệm “dockerization” đã trở nên phổ biến, xuất phát từ công cụ phu bến tàu, cung cấp chức năng của các vùng chứa tách biệt với nhau nhưng được khởi chạy trong bối cảnh của một hệ điều hành. Điều này có nghĩa là gì: trong mỗi vùng chứa này, bạn có thể chạy một ứng dụng hoặc thậm chí một bộ ứng dụng sẽ tin rằng chúng là những ứng dụng duy nhất trong toàn bộ hệ điều hành mà không hề nghi ngờ sự tồn tại của người khác trên máy này. Chức năng này rất hữu ích để khởi chạy các ứng dụng giống hệt nhau ở các phiên bản khác nhau hoặc đơn giản là các ứng dụng xung đột, cũng như để chia các phần của ứng dụng thành các lớp. Lớp này sau đó có thể được ghi vào một hình ảnh, ví dụ, có thể được sử dụng để triển khai một ứng dụng. Nghĩa là, bằng cách cài đặt hình ảnh này và triển khai các vùng chứa trong đó, bạn sẽ có được một môi trường sẵn sàng để chạy ứng dụng của mình! Trong những bước đầu tiên, bạn có thể sử dụng công cụ này cho cả mục đích cung cấp thông tin và nhận được những lợi ích rất thực tế bằng cách chia logic ứng dụng thành các lớp khác nhau. Nhưng điều đáng nói ở đây là không phải ai cũng cần dockerization và không phải lúc nào cũng cần. Dockerization là hợp lý trong trường hợp ứng dụng bị “phân mảnh”, được chia thành các phần nhỏ, mỗi phần chịu trách nhiệm về nhiệm vụ riêng của mình, cái gọi là “kiến trúc microservice”.

Ngoài ra, ngoài việc cung cấp môi trường, chúng tôi cần đảm bảo triển khai ứng dụng một cách hiệu quả, bao gồm tất cả các loại chuyển đổi mã, cài đặt các gói và thư viện liên quan đến ứng dụng, chạy thử nghiệm, thông báo về các hoạt động này, v.v. Ở đây chúng ta cần chú ý đến một khái niệm như “Tích hợp liên tục” (CI – Tích hợp liên tục). Các công cụ chính trong lĩnh vực này hiện tại là Jenkins (Phần mềm CI được viết bằng Java lúc đầu có vẻ hơi phức tạp), Travis C.I. (viết bằng Ruby, chủ quan, có phần đơn giản hơn Jenkins, tuy nhiên vẫn cần có một số kiến ​​thức về lĩnh vực cấu hình triển khai), CI Gitlab (được viết trên Ruby và đi).

Vì vậy, sau khi nói về môi trường mà ứng dụng của bạn sẽ hoạt động, đã đến lúc xem xét những công cụ mà thế giới hiện đại cung cấp cho chúng ta để tạo ra chính những ứng dụng này.

Hãy bắt đầu với những điều cơ bản: Backend (phụ trợ) - phần máy chủ. Việc lựa chọn ngôn ngữ, tập hợp các chức năng cơ bản và cấu trúc (khuôn khổ) được xác định trước ở đây chủ yếu được xác định bởi sở thích cá nhân, tuy nhiên, điều đáng được đề cập đến để xem xét (ý kiến ​​​​của tác giả về ngôn ngữ khá chủ quan, mặc dù có khẳng định thành một mô tả không thiên vị):

  • Python là một ngôn ngữ khá thân thiện với người dùng thiếu kinh nghiệm, nó tha thứ cho một số lỗi, nhưng nó cũng có thể khá nghiêm khắc với nhà phát triển để anh ta không làm điều gì xấu. Đã là một ngôn ngữ khá trưởng thành và có ý nghĩa, xuất hiện vào năm 1991.
  • Go - một ngôn ngữ của Google, cũng khá thân thiện và tiện lợi, khá dễ dàng biên dịch và lấy file thực thi trên mọi nền tảng. Nó có thể đơn giản và dễ chịu, hoặc có thể phức tạp và nghiêm túc. Tươi trẻ, xuất hiện tương đối gần đây, vào năm 2009.
  • Rust lớn hơn một chút so với người đồng nghiệp trước đó, ra mắt năm 2006, nhưng vẫn còn khá trẻ so với các bạn cùng lứa. Nhằm vào các nhà phát triển có kinh nghiệm hơn, mặc dù nó vẫn cố gắng giải quyết nhiều nhiệm vụ cấp thấp cho lập trình viên.
  • Java là một ngôn ngữ kỳ cựu trong phát triển thương mại, được giới thiệu vào năm 1995 và là một trong những ngôn ngữ được sử dụng phổ biến nhất trong phát triển ứng dụng doanh nghiệp hiện nay. Với các khái niệm cơ bản và thiết lập phức tạp, thời gian chạy có thể trở nên khá khó khăn đối với người mới bắt đầu.
  • ASP.net là một nền tảng phát triển ứng dụng được phát hành bởi Microsoft. Để viết chức năng, ngôn ngữ C# (phát âm là C Sharp), xuất hiện năm 2000, chủ yếu được sử dụng. Độ phức tạp của nó có thể so sánh với mức độ giữa Java và Rust.
  • PHP, ban đầu được sử dụng để tiền xử lý HTML, hiện tại, mặc dù nó giữ vị trí dẫn đầu tuyệt đối trong thị trường ngôn ngữ nhưng có xu hướng giảm sử dụng. Nó có ngưỡng đầu vào thấp và khả năng viết mã dễ dàng, nhưng đồng thời, khi phát triển các ứng dụng khá lớn, chức năng của ngôn ngữ có thể không đủ.

Chà, phần cuối cùng của ứng dụng của chúng tôi - phần hữu hình nhất đối với người dùng - lối vào (frontend) – là bộ mặt của ứng dụng của bạn; chính với phần này mà người dùng tương tác trực tiếp.

Không đi sâu vào chi tiết, giao diện người dùng hiện đại dựa trên ba trụ cột, các khung (và không quá nhiều), để tạo giao diện người dùng. Theo đó, ba phổ biến nhất là:

  • ReactJS không phải là một framework mà là một thư viện. Trên thực tế, khung này khác với danh hiệu đáng tự hào của nó chỉ ở chỗ không có một số chức năng “có sẵn” và cần phải cài đặt chúng theo cách thủ công. Vì vậy, có một số biến thể trong quá trình “chuẩn bị” thư viện này, tạo thành các khuôn khổ độc đáo. Nó có thể hơi khó khăn đối với người mới bắt đầu do một số nguyên tắc cơ bản và việc thiết lập môi trường xây dựng khá tích cực. Tuy nhiên, để bắt đầu nhanh chóng, bạn có thể sử dụng gói “tạo-phản ứng-ứng dụng”.
  • VueJS là một framework để xây dựng giao diện người dùng. Trong bộ ba này, nó xứng đáng nhận danh hiệu là framework thân thiện với người dùng nhất; để phát triển ở Vue, rào cản gia nhập thấp hơn so với những người anh em được đề cập khác. Hơn nữa, anh ấy là người trẻ nhất trong số họ.
  • Angular được coi là framework phức tạp nhất trong số các framework này, là framework duy nhất yêu cầu TypeScript (tiện ích bổ sung cho ngôn ngữ Javascript). Thường được sử dụng để xây dựng các ứng dụng doanh nghiệp lớn.

Tóm tắt những gì đã được viết ở trên, chúng ta có thể kết luận rằng việc triển khai một ứng dụng hiện nay hoàn toàn khác với cách quá trình này diễn ra trước đây. Tuy nhiên, không ai ngăn cản bạn thực hiện việc “triển khai” theo cách cũ. Nhưng liệu khoảng thời gian ít ỏi tiết kiệm được khi bắt đầu có xứng đáng với vô số sai lầm mà nhà phát triển chọn con đường này sẽ phải mắc phải không? Tôi tin câu trả lời là không. Bằng cách dành thêm một chút thời gian để làm quen với những công cụ này (và bạn không cần nhiều hơn thế, vì bạn cần hiểu liệu bạn có cần chúng trong dự án hiện tại của mình hay không), chẳng hạn, bạn có thể sử dụng nó, giảm đáng kể , các trường hợp lỗi ghost tùy thuộc vào môi trường và chỉ xuất hiện trên máy chủ sản xuất, phân tích hàng đêm về nguyên nhân dẫn đến sự cố máy chủ và lý do máy chủ không khởi động, v.v.

Nguồn: www.habr.com

Thêm một lời nhận xét