Web uygulamaları oluşturmaya ve yayınlamaya yönelik kontrol listesi

Çağımızda kendi web uygulamanızı oluşturabilmeniz için onu geliştirebilmeniz yeterli değildir. Önemli bir husus, uygulamanın dağıtımı, izlenmesi ve aynı zamanda içinde çalıştığı ortamın yönetilmesi ve yönetilmesi için araçların ayarlanmasıdır. Manuel dağıtım çağı unutulmaya yüz tutarken, küçük projeler için bile otomasyon araçları somut faydalar sağlayabilir. "Elle" konuşlandırırken, genellikle bir şeyi taşımayı, şu veya bu nüansı hesaba katmayı, unutulmuş bir testi çalıştırmayı unutabiliriz, bu liste oldukça uzun süre devam ettirilebilir.

Bu makale, web uygulamaları oluşturmanın temellerini yeni öğrenen ve temel terimler ve kurallar hakkında biraz bilgi edinmek isteyenlere yardımcı olabilir.

Dolayısıyla bina uygulamaları yine de 2 kısma ayrılabilir: uygulama koduyla ilgili her şey ve bu kodun yürütüldüğü ortamla ilgili her şey. Uygulama kodu da sunucu kodu (çoğunlukla sunucuda çalışan kod: iş mantığı, yetkilendirme, veri depolama vb.) ve istemci kodu (kullanıcının makinesinde çalışan kod: genellikle) olarak ikiye ayrılır. arayüz ve onunla ilgili mantık).

Çarşamba ile başlayalım.

Herhangi bir kodun, sistemin veya yazılımın çalışmasının temeli İşletim Sistemidir, bu nedenle aşağıda barındırma pazarındaki en popüler sistemlere bakacağız ve onlara kısa bir açıklama yapacağız:

Windows Server - aynı Windows, ancak sunucu varyasyonunda. Windows'un istemci (normal) sürümünde bulunan bazı işlevler burada mevcut değildir, örneğin istatistik toplamaya yönelik bazı hizmetler ve benzer yazılımlar, ancak ağ yönetimi için bir dizi yardımcı program, sunucuların dağıtımı için temel yazılım (web, ftp, ...). Genel olarak, Windows Server normal Windows'a benziyor, normal Windows gibi şarlatan, ancak normal muadilinden 2 kat daha pahalı. Ancak, uygulamayı büyük olasılıkla özel/sanal bir sunucuya dağıtacağınız göz önüne alındığında, sizin için nihai maliyet artsa da kritik değildir. Windows platformu tüketici işletim sistemi pazarında çok büyük bir yer işgal ettiğinden, sunucu sürümü çoğu kullanıcının en aşina olduğu sürüm olacaktır.

Unix-benzer sistem. Bu sistemlerdeki geleneksel çalışma, tanıdık bir grafik arayüzün varlığını gerektirmez ve kullanıcıya kontrol elemanı olarak yalnızca bir konsol sunar. Deneyimsiz bir kullanıcı için bu formatta çalışmak zor olabilir, veri alanında oldukça popüler olan bir metin düzenleyiciden çıkmanın maliyeti nedir? Gayret, bununla ilgili bir soru zaten 6 yılda 1.8 milyondan fazla görüntülendi. Bu ailenin ana dağıtımları (sürümleri) şunlardır: Debian - popüler bir dağıtım, içindeki paket sürümleri esas olarak LTS'ye odaklanmıştır (Uzun Süreli Destek - sistemin ve paketlerin oldukça yüksek güvenilirliği ve kararlılığı ile ifade edilen uzun süreli destek; Ubuntu – tüm paketlerin en son sürümlerindeki dağıtımlarını içerir; bu, kararlılığı etkileyebilir, ancak yeni sürümlerle birlikte gelen işlevleri kullanmanıza olanak tanır; Red Hat Enterprise Linux – İşletim Sistemiticari kullanım için konumlandırılmış, ücretlidir ancak yazılım satıcılarından destek, bazı özel paketler ve sürücü paketlerini içerir; CentOS - açık kaynak Red Hat Enterprise Linux'un özel paketlerin ve desteğin bulunmaması ile karakterize edilen bir çeşidi.

Bu alanda yeni yeni ustalaşmaya başlayanlar için tavsiyem sistemler olacaktır. Windows ServerVeya Ubuntu. Windows'u düşünürsek, bu öncelikle sistemin aşinalığıdır, Ubuntu – güncellemelere karşı daha fazla tolerans ve buna bağlı olarak örneğin yeni sürümler gerektiren teknolojiler üzerinde projeler başlatırken daha az sorun.

İşletim sistemine karar verdikten sonra, uygulamayı veya parçalarını sunucuya dağıtmanıza (kurmanıza), güncellemenize ve durumunu izlemenize olanak tanıyan bir dizi araca geçelim.

Bir sonraki önemli karar, uygulamanızın ve bunun için sunucunun yerleştirilmesi olacaktır. Şu anda en yaygın olanı 3 yoldur:

  • Bir sunucuyu kendi başınıza barındırmak (tutmak) en bütçe dostu seçenektir, ancak kaynağınızın zamanla adresini değiştirmemesi için sağlayıcınızdan statik bir IP sipariş etmeniz gerekecektir.
  • Özel Sunucu (VDS) kiralayın ve bağımsız olarak yönetin ve yükleri ölçeklendirin
  • Kullanılan kaynaklar için ödeme modelinin oldukça yaygın olduğu bazı bulut barındırma hizmetlerine abonelik için ödeme yapın (genellikle size platformun işlevselliğini ücretsiz olarak deneme şansı verirler). Bu eğilimin en önde gelen temsilcileri: Amazon AWS (hizmetlerin kullanımı için bir yıl ücretsiz veriyorlar, ancak aylık limitle), Google Cloud (hesaba yıl boyunca bulut barındırma hizmetlerinde harcanabilecek 300 ABD doları veriyorlar) , Yandex.Cloud (4000 ay boyunca 2 ruble veriyorlar), Microsoft Azure (bir yıl boyunca popüler hizmetlere ücretsiz erişim, bir ay boyunca herhangi bir hizmet için + 12 ruble). Böylece, bu sağlayıcılardan herhangi birini bir kuruş harcamadan deneyebilir, ancak sağlanan hizmetin kalitesi ve düzeyi hakkında yaklaşık bir fikir edinebilirsiniz.

Seçilen yola bağlı olarak gelecekte değişecek olan tek şey, şu veya bu yönetim alanından büyük ölçüde kimin sorumlu olacağıdır. Kendinizi barındırıyorsanız, elektrikteki, İnternet'teki, sunucunun kendisindeki, üzerinde kurulu olan yazılımdaki herhangi bir kesintinin tamamen sizin omuzlarınızda olduğunu anlamalısınız. Ancak eğitim ve test için bu fazlasıyla yeterli.

Eğer sunucu rolünü üstlenebilecek ekstra bir makineniz yoksa o zaman ikinci veya üçüncü yolu kullanmak isteyeceksiniz. İkinci durum, sunucunun kullanılabilirliği ve gücünün sorumluluğunu barındırıcının omuzlarına devretmeniz dışında birinciyle aynıdır. Sunucu ve yazılımın yönetimi hala sizin kontrolünüz altındadır.

Ve son olarak bulut sağlayıcıların kapasitesini kiralama seçeneği. Burada çok fazla teknik ayrıntıya girmeden hemen hemen her şeyin otomatik kontrolünü kurabilirsiniz. Ek olarak, tek bir makine yerine, örneğin uygulamanın farklı bölümlerinden sorumlu olabilecek, ancak özel bir sunucuya sahip olmaktan maliyet açısından çok fazla farklı olmayan birkaç paralel çalışan örneğiniz olabilir. Ayrıca orkestrasyon, kapsayıcılaştırma, otomatik dağıtım, sürekli entegrasyon ve çok daha fazlası için araçlar var! Aşağıda bunlardan bazılarına bakacağız.

Genel olarak, sunucu altyapısı şuna benzer: bir sunucu örneğindeki çevresel değişiklikleri yöneten sözde bir "orkestratörümüz" ("orkestrasyon", birkaç sunucu örneğini yönetme sürecidir), bir sanallaştırma konteynerimiz (isteğe bağlı, ancak oldukça Uygulamayı izole edilmiş mantıksal katmanlara ayırmanıza olanak tanıyan Sürekli Entegrasyon yazılımı ve barındırılan kodun "komut dosyaları" aracılığıyla güncellenmesine olanak tanıyan Sürekli Entegrasyon yazılımı.

Böylece orkestrasyon, sunucuların durumunu görmenize, güncellemeleri sunucu ortamına dağıtmanıza veya geri almanıza vb. olanak tanır. İlk başta, bu durumun sizi etkilemesi pek olası değildir, çünkü herhangi bir şeyi düzenlemek için birkaç sunucuya ihtiyacınız vardır (bir taneye sahip olabilirsiniz, ancak bu neden gerekli?) ve birden fazla sunucuya sahip olmak için onlara ihtiyacınız vardır. Bu doğrultudaki araçlar arasında en popüler olanı ise Kubernetes'tir. Google.

Bir sonraki adım işletim sistemi düzeyinde sanallaştırmadır. Günümüzde araçtan gelen “dockerization” kavramı yaygınlaşmıştır. liman işçisi, birbirinden izole edilmiş ancak tek bir işletim sistemi bağlamında başlatılan konteynerlerin işlevselliğini sağlar. Bu ne anlama geliyor: Bu kapların her birinde, bu makinede başka birinin varlığından bile şüphelenmeden, tüm işletim sistemindeki tek uygulama olduklarına inanacak bir uygulamayı, hatta bir dizi uygulamayı çalıştırabilirsiniz. Bu işlev, farklı sürümlerdeki aynı uygulamaları veya yalnızca çakışan uygulamaları başlatmak ve aynı zamanda bir uygulamanın parçalarını katmanlara bölmek için çok kullanışlıdır. Bu katman dökümü daha sonra örneğin bir uygulamayı dağıtmak için kullanılabilecek bir görüntüye yazılabilir. Yani, bu imajı yükleyerek ve içerdiği konteynerleri dağıtarak, uygulamanızı çalıştırmak için hazır bir ortam elde edersiniz! İlk adımlarda bu aracı hem bilgilendirme amaçlı kullanabilir hem de uygulama mantığını farklı katmanlara bölerek oldukça gerçek faydalar elde edebilirsiniz. Ancak burada herkesin limanlaştırmaya ihtiyacı olmadığını ve her zaman olmadığını söylemekte fayda var. Dockerizasyon, uygulamanın "parçalanmış" olduğu, her biri kendi görevinden sorumlu olan küçük parçalara bölündüğü ve "mikro hizmet mimarisi" olarak adlandırılan durumlarda haklı çıkar.

Ayrıca ortamı sağlamanın yanı sıra, her türlü kod dönüşümünü, uygulamaya ilişkin kütüphane ve paketlerin kurulumunu, testlerin çalıştırılmasını, bu işlemlerle ilgili bildirimlerin yapılmasını vb. içeren uygulamanın yetkin bir şekilde dağıtımını sağlamamız gerekiyor. Burada “Sürekli Entegrasyon” gibi bir kavrama dikkat etmemiz gerekiyor (CI – Sürekli Entegrasyon). Şu anda bu alandaki ana araçlar Jenkins'tir (Java ile yazılmış CI yazılımı başlangıçta biraz karmaşık görünebilir), Travis C.I. (Ruby ile yazılmış, öznel, biraz daha basit Jenkinsancak dağıtım yapılandırması alanında hala biraz bilgi gereklidir), Gitlab CI (üzerine yazılmış Ruby ve Git).

Uygulamanızın çalışacağı ortamdan bahsettikten sonra, modern dünyanın bu uygulamaları oluşturmak için bize hangi araçları sunduğuna nihayet bakmanın zamanı geldi.

Temel bilgilerle başlayalım: Backend (arka uç) – sunucu kısmı. Buradaki dil seçimi, temel işlevler kümesi ve önceden tanımlanmış yapı (çerçeve) esas olarak kişisel tercihlere göre belirlenir, ancak yine de dikkate alınması gereken bir husustur (yazarın diller hakkındaki görüşü oldukça özneldir, ancak bir iddiayla tarafsız bir açıklamaya göre):

  • Python deneyimsiz bir kullanıcı için oldukça arkadaş canlısı bir dildir, bazı hataları affeder, ancak aynı zamanda geliştiriciye kötü bir şey yapmaması için oldukça katı olabilir. Zaten 1991'de ortaya çıkan oldukça olgun ve anlamlı bir dil.
  • Go - Google'ın bir dili, aynı zamanda oldukça kullanıcı dostu ve kullanışlıdır, herhangi bir platformda çalıştırılabilir bir dosyayı derlemek ve almak oldukça kolaydır. Basit ve hoş olabilir ya da karmaşık ve ciddi olabilir. Taze ve genç, nispeten yakın zamanda 2009'da ortaya çıktı.
  • Rust, 2006 yılında piyasaya sürülen önceki meslektaşından biraz daha yaşlı ancak yine de benzerleriyle karşılaştırıldığında oldukça genç. Daha deneyimli geliştiricilere yöneliktir, ancak yine de programcı için birçok düşük seviyeli görevi çözmeye çalışır.
  • Java, 1995 yılında tanıtılan ticari geliştirme alanında deneyimli bir dildir ve günümüzde kurumsal uygulama geliştirmede en yaygın kullanılan dillerden biridir. Temel konseptleri ve ağır kurulumuyla çalışma zamanı yeni başlayanlar için oldukça zorlayıcı olabilir.
  • ASP.net, Microsoft tarafından yayımlanan bir uygulama geliştirme platformudur. İşlevsellik yazmak için esas olarak 2000 yılında ortaya çıkan C# dili (C Sharp olarak telaffuz edilir) kullanılır. Karmaşıklığı Java ve Rust arasındaki seviyeyle karşılaştırılabilir.
  • Başlangıçta HTML ön işlemesi için kullanılan PHP, şu anda dil pazarında mutlak liderliğe sahip olmasına rağmen, kullanımında bir düşüş eğilimi var. Giriş eşiği düşük ve kod yazma kolaylığı var ancak aynı zamanda oldukça büyük uygulamalar geliştirirken dilin işlevselliği yeterli olmayabilir.

Uygulamamızın son kısmı - kullanıcı için en somut kısım - Frontend (ön uç) – uygulamanızın yüzüdür; kullanıcının doğrudan etkileşime girdiği kısımdır.

Ayrıntılara girmeden, modern ön uç, kullanıcı arayüzleri oluşturmaya yönelik üç sütun, çerçeve (ve çok fazla değil) üzerinde duruyor. Buna göre en popüler üçü:

  • ReactJS bir çerçeve değil, bir kütüphanedir. Aslında çerçeve, gurur duyduğu unvanından yalnızca "kutudan çıktığı gibi" bazı işlevlerin yokluğunda ve bunları manuel olarak yükleme ihtiyacı nedeniyle farklılık gösterir. Bu nedenle, bu kütüphanenin "hazırlanmasının" benzersiz çerçeveler oluşturan çeşitli varyasyonları vardır. Bazı temel ilkeler ve yapı ortamının oldukça agresif kurulumu nedeniyle yeni başlayanlar için biraz zor olabilir. Ancak hızlı bir başlangıç ​​için “create-react-app” paketini kullanabilirsiniz.
  • VueJS, kullanıcı arayüzleri oluşturmaya yönelik bir çerçevedir. Bu üçlü arasında haklı olarak en kullanıcı dostu çerçeve unvanını alıyor; Vue'da geliştirme açısından giriş engeli diğer kardeşlere göre daha düşük. Üstelik aralarında en genç olanıdır.
  • Angular, bu çerçevelerin en karmaşıkı olarak kabul edilir; daktilo ile yazılmış yazı (Javascript dili için eklenti). Genellikle büyük kurumsal uygulamalar oluşturmak için kullanılır.

Yukarıda yazılanları özetleyerek, bir uygulamayı şimdi dağıtmanın, bu sürecin daha önce ilerleyiş şeklinden kökten farklı olduğu sonucuna varabiliriz. Ancak hiç kimse sizi "konuşlandırmayı" eski yöntemle yapmaktan alıkoyamaz. Ancak başlangıçta kazanılan az zaman, bu yolu seçen bir geliştiricinin adım atmak zorunda kalacağı çok sayıda hataya değer mi? Cevabın hayır olduğuna inanıyorum. Bu araçlara alışmak için biraz daha fazla zaman harcayarak (ve bundan daha fazlasına ihtiyacınız yok, çünkü mevcut projenizde bunlara ihtiyacınız olup olmadığını anlamalısınız), bunu gerçekleştirebilir, örneğin önemli ölçüde azaltabilirsiniz. , ortama bağlı olarak ve yalnızca üretim sunucusunda görünen hayalet hata durumları, sunucunun çökmesine neyin sebep olduğuna ve sunucunun neden başlamadığına ilişkin gecelik analizler ve çok daha fazlası.

Kaynak: habr.com

Yorum ekle