2014-07-01 12 views
21

MEAN.JS stack proponuje zadanie "gruntowania" w celu przygotowania aplikacji do produkcji. Niestety brak informacji o kolejnych krokach. W rzeczywistości nie jest jasne, jak wdrożyć aplikację do produkcji i jak ją uruchomić.Jak wdrożyć aplikację MEAN.js (Node.js) do środowiska produkcyjnego

Pytanie # 1 Co musi być skonfigurowany w projekcie, oprócz zmian w config/ENV/production.js? Na przykład. jak pracować z niestandardowymi czcionkami?

Pytanie # 2 Ok. Kod wdrożony do Produkcji (za pośrednictwem Git, rsync itp.). Czy to wystarczy, aby uruchomić go jako

$NODE_ENV=production node server.js& 
+3

można proszę skomentowało jeśli głosowanie negatywne; to powszechna praktyka tutaj na StackOverflow –

+3

Cześć Roman, nie rozumiem negatywnego głosowania. Próbuję tylko mean.js i zastanawiam się, jak wdrożyć go na serwerze produkcyjnym. Jak to w końcu zrobiłeś? – jjimenez

+0

@jjimenez Hi. Powyższy komentarz dotyczy negatywnych wyborców. Piszę teraz odpowiedź dla ciebie. –

Odpowiedz

35

polecam wykonać następujące kroki w celu wdrożenia w środowisku produkcyjnym:

  1. dwukrotnie sprawdzić plik konfiguracyjny /config/env/production.js i obejmują wszystkie aktywa, które zostały dodane ręcznie do /config/env/all.js . To dobre podejście do używania minifikowanych wersji do produkcji.

  2. (Opcjonalnie) Jeśli masz niestandardowe czcionki w swojej aplikacji, radzę zaktualizować plik gruntfile.js i dodać zadanie, które skopiuje czcionki do/public/dist/folder. Zrobiłem następujące zmiany:

    copy: { 
        main:{ 
         expand: true, 
         flatten: true, 
         src: ['public/modules/core/fonts/*'], 
         dest: 'public/dist/', 
         filter: 'isFile' 
        } 
    }, 
    
    ... 
    // Build task(s). 
    grunt.registerTask('build', ['lint', 'loadConfig', 'ngmin', 'uglify', 'cssmin', 'copy']); 
    

    Kopia zadanie wymaga zainstalowania modułu grunt-Copy

  3. Teraz nadszedł czas, aby pojedyncze application.js, application.min.js & plików application.min.css do produkcji (zobacz folder /public/dist). Uruchom w folderze aplikacji

    $grunt build 
    
  4. Skopiuj pliki na serwer produkcyjny. Wolę korzystać z wdrażania GIT push. Wysyła na serwer tylko przyrostowe zmiany. Jeśli używasz GIT do wdrożenia push, to musisz dodać wszystkie pliki z katalogu `/ public/dist/'do repozytorium.

  5. Ponieważ używasz express.js w projekcie to wystarczy użyć polecenia

    $NODE_ENV=production node server.js& 
    

    Wiem, że niektórzy deweloperzy używać zawsze (moduł node.js), ale wolę używać dorobkiewicz (event na bazie demona), które domyślnie dostępne są w systemie Ubuntu jako usługa systemowa. Tworzę plik konfiguracyjny w folderze /etc/init, np. /etc/init/my-app.conf. Po tym mogę rozpocząć, zatrzymać, ponownie uruchomić moją aplikację jako usługę. Na przykład. usługa my-app start | stop | restart

    Urządzenie UPSTART będzie monitorować i ponownie uruchomić usługę w przypadku awarii (patrz polecenie respawn w konfiguracji UPSTART). można znaleźć szczegółową odpowiedź jak zrobić dorobkiewicz plik konfiguracyjny tutaj: upstart script for node.js

  6. (Opcjonalne, ale zalecane) Instalacja nginx przed Node.js. Zalecamy uruchamianie aplikacji internetowej pod nieuprawnionym użytkownikiem ze względów bezpieczeństwa, z drugiej strony, jeśli chcesz używać portu 80 (jest to domyślny port dla protokołu http) dla aplikacji internetowej (np.http://my-app-domain.com/ zamiast http://my-app-domain.com:3000/) taka konfiguracja może być trudna. Z tego powodu korzystam z Nginx (port 80) przed moją aplikacją internetową, która działa na porcie dostępnym dla nieuprzywilejowanego użytkownika (na przykład 3000)

    6a. Zamiast Nginx można użyć lakier

+0

Dzięki za odpowiedź Roman. Rozumiem, że aby obsługiwać ekspresową aplikację, musisz uruchomić węzeł. Ale w przypadku aplikacji kątowej, byłoby wystarczające, aby serwować pliki html i js za pośrednictwem serwera sieciowego, takiego jak apache lub nginx. W sposób wyjaśniony (i podejrzewam, że jest to "oficjalny" sposób mean.js), obsługujesz pliki statyczne za pośrednictwem węzła. Czy to jest wydajne? Mam na myśli, czy nie dajesz więcej "niepotrzebnej" pracy węzłowi? – jjimenez

+0

@jjimenez Właściwie zostawiłem jeden punkt. Problem polega na tym, że musisz skonfigurować Node.js do odpowiedzi na porcie 80 (http), ale wszystkie porty poniżej 1024 należą do root. Tak więc jest to trudne (używać portu 80 i uruchamiać aplikację internetową pod regularnym nieuprawnionym użytkownikiem). Używam Nginx do tego celu. Jak wiem, to powszechne podejście. –

+0

Wygląda na to, że "gruntowa kompilacja" zawiera tylko pakiety js i css, które będą używane przez klienta. Czy nie ma sposobu, aby spakować pliki czysto dla serwera? Idealnie, chciałbym tylko wysłać niezbędne pliki i zminimalizować je. –