2016-02-17 42 views
6

Pracuję nad aplikacją internetową z małym zespołem, a po zbadaniu i badaniu odkryliśmy, że dobrą praktyką jest oddzielenie projektów typu back-end i front-end. Opracujemy więc back-end jako API REST z bazą hapijs i mysql, a front-end za pomocą angularjs.Jak rozmieścić projekty zaplecza i frontendu, jeśli są one oddzielne?

Ale w środowisku produkcyjnym muszą znajdować się na tym samym serwerze, prawda? Jak rozmieścić je na tym samym serwerze, jeśli znajdują się w oddzielnych repozytoriach?

Jesteśmy dość nowym zespołem, rozpoczynającym nasze przygody w tworzeniu stron internetowych, więc dużo się uczymy, aby wszystko naprawić.

Nasza technologia stos będą:

  • Hapijs dla serwera WWW
  • sequelize dla ORM
  • socket.io dla funkcji czatu
  • mokka dla testów jednostkowych
  • angularjs dla frontend

Będziemy używać microsoft lazur dla h osting naszą aplikację internetową.

Dziękuję za odpowiedzi i pomoc.

Odpowiedz

6

Nie muszą znajdować się na tym samym serwerze. Wspaniale jest mieć backend na innym serwerze, jest on również przydatny, jeśli potrzebujesz skalować backend/frontend, ale nie na drugi.

Istnieje kilka możliwości:

  • Można użyć brokera wiadomość jak RabbitMQ do komunikowania się między dwoma mikro-usług

  • Twoja aplikacja nakładka może narazić URL swojego zaplecza i ty użyj tego w żądaniach AJAX, to wymaga Twojego zaplecza, aby włączyć CORS. Nie jestem fanem tego podejścia.

  • Użyj względnych adresów URL w twoim interfejsie, a następnie potokuj żądania z określonym wzorcem (np./Api/*) do twojego backendu. Czy twoja aplikacja AngularJs jest obsługiwana przez serwer Node.js, czy też jest to serwer Hapi.js? Jeśli node.js coś

:

app.all(['/api/*', '/fe/*'], function(req, res) { 
    console.log('[' + req.method + ']: ' + PROXY + req.url); 
    req.pipe(request({ 
     url: PROXY + req.url, 
     method: req.method, 
     body: req.body, 
     rejectUnauthorized: false, 
     withCredentials: true 
    })) 
    .on('error', function(e) { 
     res.status(500).send(e); 
    }) 
    .pipe(res); 
}); 

Gdzie PROXY_URL jest url/IP serwera zaplecza. Nie zrobiłem tego w hapi.js, ale powinno być również możliwe.

Jestem pewien, że jest więcej opcji, to te, które znam.

+1

Witaj @ nbermudezs, dziękuję za szybką odpowiedź. Problem z utrzymaniem ich na oddzielnych serwerach to koszt, będziemy musieli zapłacić za dwa serwery, co nie jest opłacalne. –

+0

Jeśli chcesz zachować je jako oddzielne instancje, ale używać tylko jednego serwera, możesz użyć czegoś takiego jak [doker] (https://www.docker.com/), oczywiście wymaga to jeszcze więcej nauki do przygody. – nbermudezs

+0

Jeśli dokowanie nie jest dla ciebie, będziesz musiał bawić się skryptami basha, aby przejść do projektu frontendu, uruchamiać dowolne polecenia potrzebne do wygenerowania plików dist (minified/ugglied gotowe do produkcji), a następnie skopiować je do główny projekt, prawdopodobnie do publicznego folderu i wreszcie rozpocząć proces wdrażania. – nbermudezs

0

Wychodzicie teraz, myślę, że poradzicie sobie z tym, tworząc dwie instancje serwera z hapi.To rozwiązuje swoje wymagania, aby mieć tylko jeden serwer w produkcji:

const server = new Hapi.Server(); 
server.connection({ port: 80, labels: 'front-end' }); 
server.connection({ port: 8080, labels: 'api' }); 

To jest naprawdę łatwe do wykonania, jednak pochodzi z minusem: trzeba zaakceptować ustanawiające formę czasie zarówno aplikację klienta i serwera przy każdym rolecie aktualizacje.

można znaleźć więcej informacji w tym poście: https://futurestud.io/blog/hapi-how-to-run-separate-frontend-and-backend-servers-within-one-project

W odniesieniu do wdrożenia, co użyć do zbudowania uwalnianie (narzędzia ciągła integracja, skrypty ręczny, etc.) może być git popychany do Azure: https://azure.microsoft.com/en-us/documentation/articles/web-sites-publish-source-control. Na przykład skrypt ręczny pobiera kod z dwóch oddzielnych repozytoriów (front-end i back-end), kopiuje odpowiednie pliki, aktualizuje wartości konfiguracyjne i przekazuje wynik końcowy do git.