5

Zacząłem używać Composer do nowej aplikacji PHP (używa ona kilku frameworków i API, takich jak Laravel, Smarty itp.) I wszystko jest w porządku podczas tworzenia.Wyczyść rozmieszczenie aplikacji podczas korzystania z Composer

Jednak nie jestem zbyt pewny, w jaki sposób mam zamiar wdrożyć to na serwerze produkcji na żywo. Podkatalogi poszczególnych modułów w katalogu /vendor wydają się zawierać wiele rzeczy, których normalnie nie dołączę do aplikacji (takich jak pliki demonstracyjne, pliki instalacyjne, dokumentacja itp.). Czy to normalne, czy też twórcy tych pakietów nie mieli pojęcia, jak utworzyć pakiet Composer?

Czy istnieje standardowe podejście do tworzenia wdrożenia czystych aplikacji, które obejmuje tylko niezbędne pliki dystrybucyjne, a nie pozostałe elementy, które nie są powiązane i nawet nie powinny tam być (nawet ze względów bezpieczeństwa)?

Pytam o najczęstszy stosowany przepływ pracy, a może o konkretne polecenie lub konfigurację w composer.json. Powinienem się na to starać.

+0

Domyślam się, że przed wdrożeniem można wyczyścić każdy pakiet niepotrzebnych dostawców, ale nie sądzę, że warto. Nie jestem pewien, jak to wpływa na bezpieczeństwo, ponieważ te pliki nigdy nie powinny być narażone na nikogo poza Twoją własną aplikacją. – deceze

+0

Tak, oczywiście potrafię je oczyścić, ale celem Composer jest automatyzacja instalacji i konfiguracji zależności. Będę musiał to zrobić za każdym razem, gdy będę aktualizował. Zastanawiałem się, czy był jednak jakikolwiek bardziej zautomatyzowany standardowy sposób robienia tego. Użyłem innych systemów zarządzania zależnościami w innych językach (takich jak Maven na Java) i zwykle nie zawierają rzeczy, które nie są rzeczywistą dystrybucją, która powinna być dołączona do aplikacji. Jeśli chcesz uzyskać dostęp do plików demonstracyjnych lub dokumentów HTML API, odwołaj się do nich osobno, nie ma sensu włączać ich do aplikacji. – jbx

+0

Oczywiście zautomatyzujesz proces czyszczenia jako część skryptu wdrażania. Ale tak, musisz zaktualizować go za każdym razem, gdy aktualizacja zależności. Nie, nie ma innego sposobu. Autor pakietu powinien uważać, aby nie zawrzeć niepotrzebnego bałaganu. – deceze

Odpowiedz

1

Są dwie rekomendacje, które przedstawię, które obejmują większość twoich zmartwień.

1)

Zastosowanie aktualizacja kompozytor --no-dev przycinać żadnych zależności dla rozwoju tylko z pliku blokady. Albo dostosuj swoje wymagania w composer.json, aby osiągnąć to samo.

Teoretycznie twórcy pakietów powinni zachować wersję produkcyjną czystszą (np. Nie uwzględniając wszystkich testów phpunit). Jednak tak, to całkiem normalne, aby mieć dużo "cruft" w bibliotece dostawców, głównie dlatego, że pojęcie budowy jest dość rzadkie w PHP, więc "źródła" i "cele" są wymieszane. Wersje demo i readme są nadal niezbędną częścią "dystrybucji" wersji komponentu, więc nadal będą dostępne, jeśli podasz opcję nie-deweloperską, co oznacza po prostu "Nie rozwijam tego pakietu, I "Po prostu go konsumuję".

Wygląda na to, że brakuje funkcji kompozytora: o jeden poziom wyżej, co jest istotnie pakietem min. Czystych wdrożeń.

2)

Zachowaj bibliotekę dostawców powyżej katalogu głównego.

Zapobiega to niechcianemu przeglądaniu biblioteki dostawców i usuwa wszelkie problemy związane z bezpieczeństwem odwiedzających witrynę eksplorującą biblioteki (jeśli jest to tym, o co słusznie martwiłeś).

np. Zazwyczaj użyciu

domain 
    /api 
    /etc 
    /vendor 
    /www 
     /js 
     /css 
     /images 
     /index.php 
     /foo 
      /bar.php 

przypadku www jest zwój główny wirtualnego hosta. Wszystkie skrypty entry-level są w katalogu głównym internetowej jako normalne i ścieżki do autoload w ../vendor/autoload.php

Albo oczywiście www/może być katalog główny laravel jeśli używasz laravel na swojej stronie internetowej, jak również API.

api może obsługiwać oddzielny vhost dla twoich interfejsów API laravel, jeśli są one wykonywane oddzielnie od "płaskiej" strony internetowej.

(I zachować inne foldery powyżej korzenia internetowej build, docs, src dla SASS, JS, Grunt etc, etc można bezpiecznie przechowywać żadnych config, hasła, klucze itd.).

3)

Jeśli nadal nie jest zadowolony z bagażem, a następnie jak sugeruje inny komentator, to chciałby, aby spojrzeć na proces kompilacji, która czyści rzeczy. To może stać się skomplikowane i trudne do utrzymania!

np. możesz zbudować lokalny folder rozmieszczenia www (np. aktualizacja kompozytora plus wszelkie zadania z tyczeniem, instalacje altówkowe, publikowanie laravel/artisan itp.), a następnie przyciąć je (niestandardowe skrypty, które musiałbyś opracować) i zatwierdzić w oddzielnym folderze repozytorium reprezentujące opublikowany, spłaszczony cel wdrożenia. To właśnie chcesz wdrożyć na swojej stronie.

To musiałby być zautomatyzowane lub chcesz przestać robić jeśli po około raz trzeci :)

Ale ... trzeba zapytać, dlaczego jeszcze potrzeba, aby wyciąć z bibliotekami sprzedawca. Miejsca na dysku? Nie są takie duże. Ogólna czystość? Rozważ foldery jako czarne skrzynki i po prostu przeczytaj dokumenty API. tzn. nie patrz :)

Powiązane problemy