nginx-demo/RAPORT.md
2025-11-11 13:50:58 +01:00

100 lines
3.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Konfiguracja reverse proxy na Linuxie z użyciem Nginx
## Cel
---
## 1. Stworzenie prostych aplikacji webowych
Jako że nie jest to główna część projektu, a jedynie jego element to aplikacje są bardzo proste
### Java
### .NET Core
Do tej demonstracji została użyta wersja dotnet 8.0.
Aplikacja składa się z dwóch części:
- dotnet.csproj zawierającej ustawienia projektu
- Program.cs zawiejącej kody który zostanie wykonany i uruchomi prosty serwer HTTP
### Docker
Obydwie aplikacje uruchomione są w dockerze, rozwiązanie to ma kilka zalet
- pozwala na łatwą reprodukcją środowiska na innej maszynie. Na przykład na innym komputerze, lub na maszynie wirtualnej w laboratorium
- ułatwia późniejszą konfigurację z Nginx (nie trzeba konfigurować oddzielnych adresów ani portów, dla kilku równoległych aplikacji)
- ułatwia uruchomienie całego środowiska (całość można uruchomić jedną komendą)
Każda aplikacja ma przygotowany plik `Dockerfile`, który jest wykorzystywany przez dockera do stworzenia kontera na podstawie kodu źródłowego.
Na potrzeby projektu plik `Dockerfile` jest mocno uproszczony i w zasadzie tylko uruchamia polecenie `dotnet run` dla c#, oraz .... dla java.
---
## 2. Stworzenie prostej sieci konterów z aplikacjami
Ponieważ do uruchomienia aplikacji używamy dockera, najprostszym sposobem na utworzenie wspólnej podsieci dla aplikacji i nginx jest użycie docker compose.
Docker compose jest narzędziem do definiowania i uruchamianiania wilokontenerowej aplikacji w dockerze.
- Normalnie w dockerze, uruchamia się kontener komendą `dotnet run`, ale gdy aplikacja potrzebuje kilku kontenerów (jak serwer, reverse proxy, ...) zarządzanie nimi staje się skomplikowane.
- Docker compose pozwala zdefiniować wszystkie kontenery i jak one oddziałają ze sobą w jednym pliku i uruchomienie wszystkiego jedną komendą
---
## 3. Stworzenie instancji reverse proxy
### Dodanie kontera
Utworzenie instancji dotnet przy użyciu dockera jest bardzo proste, wystarczy użyć poniższą komendę
```sh
docker run -v ./nginx/html:/usr/share/nginx/html:ro -p 80:80 nginx
```
Polecenie `docker run` uruchamia dany kontener, w tym przypadku `docker run nginx` uruchamia konter o nazwie nginx. Ponieważ na maszynie lokalnej nie ma kontenera o takiej nazwie, docker szuka tego kontenera w repozytorium hub.docker.com
Jednak sam kontener z serwerem niewiele nam daje, potrzebujemy jeszcze powiedzieć mu co ma serwować, i gdzie ma to serwować. W tym celu potrzemujemy kolejne dwie opcje do komendy
- `-v ./nginx/html:/usr/share/nginx/html:ro` tworzy link między lokalnym folderem, a folderem w kontenerze
- `-v` mówi dockerowi że chcemy zamontować jakiś folder/volume
- `./nginx/html` to lokalizacja na systemie hosta
- `/usr/share/nginx/html` to lokalizacja na systemie kontenera
- `ro` mówi dockerowi że folder jest w trybie tylko do odczytu
- `-p 80:80` piekierowuje port z kontenera do hosta
- pierwsza wartość to numer portu hosta
- druga wartość to numer portu kontenera
Podobnie wygląda konfiguracja kontenera w docker docker compsose
- `image` to nazwa kontenera który chcemy uruchomić
- `volumes` to odpowiednik `-v`
- `ports` to odpowiednik `-p`
#### dokumentacja kontenera
- [[https://hub.docker.com/_/nginx]]
### Konfiguracja reverse proxy
---
## 4. Przekierowanie zapytań do odpowiednich aplikacji w zależności od nagłówków HTTP
### Konfiguracja reverse proxy
---
## 5. Load Balancing
### Utworzenie kopii kontenerów z aplikacjami
W ramach prezentacji działania reverse proxy kilka instancji tej samej aplikacja zostanie uruchomione na tej samej maszynie, w ramach podsieci dockera można o nich myśleć jako osobne maszyny wirtualne o osobnych adresach ip
### Konfiguracja reverse proxy
---
## 6. Rate Limiting
### Konfiguracja reverse proxy