From 657f7c12bbcae070077fc3a246ac5d26978e61a7 Mon Sep 17 00:00:00 2001 From: neon Date: Thu, 2 Apr 2026 10:59:57 -0400 Subject: [PATCH] amke --- makefile | 290 ++++++------------------------------------------------- 1 file changed, 29 insertions(+), 261 deletions(-) diff --git a/makefile b/makefile index 09e39f7..ac01812 100644 --- a/makefile +++ b/makefile @@ -1,284 +1,52 @@ # Zmienne PYTHON = venv/bin/python PIP = venv/bin/pip -FLASK = venv/bin/flask APP = app.py PORT = 2500 PROD_PORT = 8000 -DOMAIN = http.pathl.pl -PROJECT_DIR = /home/neon/PycharmProjects/http -VENV_DIR = $(PROJECT_DIR)/venv -# Kolory do outputu +# Kolory GREEN = \033[0;32m -RED = \033[0;31m -YELLOW = \033[1;33m -BLUE = \033[0;34m -NC = \033[0m # No Color +NC = \033[0m -.PHONY: help setup venv install run debug clean test api status kill reset release prod-start prod-stop prod-restart prod-status init-db backup +.PHONY: setup run clean status kill help: @echo "$(GREEN)Dostępne komendy:$(NC)" - @echo "" - @echo "$(BLUE)=== Rozwój (Development) ===$(NC)" - @echo " make setup - Przygotowanie środowiska (venv + zależności)" - @echo " make venv - Tworzenie środowiska wirtualnego" - @echo " make install - Instalacja zależności" - @echo " make debug - Uruchomienie serwera w trybie debug (port $(PORT))" - @echo " make run - Uruchomienie serwera (standardowo)" - @echo "" - @echo "$(BLUE)=== Produkcja (Production) ===$(NC)" - @echo " make release - Pełne wdrożenie produkcyjne (budowa + start)" - @echo " make prod-start - Uruchomienie serwera produkcyjnego (Gunicorn)" - @echo " make prod-stop - Zatrzymanie serwera produkcyjnego" - @echo " make prod-restart - Restart serwera produkcyjnego" - @echo " make prod-status - Status serwera produkcyjnego" - @echo "" - @echo "$(BLUE)=== Narzędzia ===$(NC)" - @echo " make clean - Usunięcie plików tymczasowych" - @echo " make test - Testowanie API" - @echo " make api - Pokazuje endpointy API" - @echo " make status - Sprawdza status serwera deweloperskiego" - @echo " make kill - Zabija proces Flask na porcie $(PORT)" - @echo " make reset - Resetuje bazę danych (usuwa file.json)" - @echo " make backup - Backup bazy danych" - @echo " make logs - Podgląd logów produkcyjnych" + @echo " make setup - Tworzy venv i instaluje biblioteki" + @echo " make run - Uruchamia serwer deweloperski" + @echo " make prod - Uruchamia serwer produkcyjny (Gunicorn) w tle" + @echo " make status - Sprawdza co działa" + @echo " make kill - Zabija procesy na obu portach" + @echo " make clean - Usuwa śmieci i venv" -# ==================== DEVELOPMENT ==================== - -setup: venv install - @echo "$(GREEN)✓ Środowisko gotowe!$(NC)" - @echo "Uruchom: make debug" - -venv: - @echo "$(GREEN)Tworzenie środowiska wirtualnego...$(NC)" - @python3 -m venv venv || python -m venv venv - @echo "$(GREEN)✓ Środowisko utworzone$(NC)" - -install: - @echo "$(GREEN)Instalacja zależności...$(NC)" +setup: + @python3 -m venv venv @$(PIP) install --upgrade pip - @$(PIP) install flask - @$(PIP) install flask-cors - @$(PIP) install gunicorn - @$(PIP) install python-dotenv - @echo "$(GREEN)✓ Zależności zainstalowane$(NC)" - @# Tworzenie requirements.txt - @$(PIP) freeze > requirements.txt 2>/dev/null || true + @$(PIP) install flask flask-cors gunicorn python-dotenv + @echo "$(GREEN)✓ Gotowe. Użyj 'make run'$(NC)" run: - @echo "$(GREEN)Uruchamianie serwera na porcie $(PORT)...$(NC)" + @echo "$(GREEN)Start dev na porcie $(PORT)...$(NC)" @$(PYTHON) $(APP) -debug: - @echo "$(GREEN)Uruchamianie serwera w trybie DEBUG na porcie $(PORT)...$(NC)" - @export FLASK_ENV=development FLASK_DEBUG=1 && $(PYTHON) $(APP) - -clean: - @echo "$(GREEN)Czyszczenie plików tymczasowych...$(NC)" - @find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true - @find . -type f -name "*.pyc" -delete 2>/dev/null || true - @find . -type f -name "*.pyo" -delete 2>/dev/null || true - @rm -rf .pytest_cache 2>/dev/null || true - @echo "$(GREEN)✓ Pliki tymczasowe usunięte$(NC)" - -# ==================== PRODUCTION ==================== - -release: clean install prod-stop prod-start prod-status - @echo "$(GREEN)========================================$(NC)" - @echo "$(GREEN)✓ Wdrożenie produkcyjne zakończone!$(NC)" - @echo "$(GREEN)========================================$(NC)" - @echo "Aplikacja dostępna pod adresem: http://$(DOMAIN)" - @echo "Port: $(PROD_PORT)" - @echo "" - @echo "Aby sprawdzić status: make prod-status" - @echo "Aby zatrzymać: make prod-stop" - @echo "Aby zobaczyć logi: make logs" - -prod-start: - @echo "$(GREEN)Uruchamianie serwera produkcyjnego...$(NC)" - @echo "Domena: http://$(DOMAIN)" - @echo "Port: $(PROD_PORT)" - @# Zabij stary proces jeśli istnieje - @-lsof -ti :$(PROD_PORT) | xargs kill -9 2>/dev/null || true - @# Uruchom Gunicorn w tle - @cd $(PROJECT_DIR) && nohup $(VENV_DIR)/bin/gunicorn -w 4 -b 0.0.0.0:$(PROD_PORT) app:app > logs/production.log 2>&1 & - @sleep 2 - @echo "$(GREEN)✓ Serwer produkcyjny uruchomiony!$(NC)" - @echo "PID: $$(lsof -ti :$(PROD_PORT) 2>/dev/null || echo 'Nie można odczytać')" - @echo "Logi: $(PROJECT_DIR)/logs/production.log" - -prod-stop: - @echo "$(RED)Zatrzymywanie serwera produkcyjnego...$(NC)" - @-lsof -ti :$(PROD_PORT) | xargs kill -9 2>/dev/null && echo "$(GREEN)✓ Serwer zatrzymany$(NC)" || echo "Serwer nie był uruchomiony" - @-pkill -f "gunicorn.*app:app" 2>/dev/null || true - -prod-restart: prod-stop prod-start - @echo "$(GREEN)✓ Serwer produkcyjny zrestartowany$(NC)" - -prod-status: - @echo "$(BLUE)Status serwera produkcyjnego:$(NC)" - @if lsof -i :$(PROD_PORT) > /dev/null 2>&1; then \ - echo "$(GREEN)✓ Serwer DZIAŁA na porcie $(PROD_PORT)$(NC)"; \ - echo "Domena: http://$(DOMAIN)"; \ - echo "PID: $$(lsof -ti :$(PROD_PORT))"; \ - echo ""; \ - echo "Test połączenia:"; \ - curl -s -o /dev/null -w "Status HTTP: %{http_code}\n" http://localhost:$(PROD_PORT)/; \ - else \ - echo "$(RED)✗ Serwer NIE działa na porcie $(PROD_PORT)$(NC)"; \ - fi - -# ==================== UTILS ==================== - -test: - @echo "$(GREEN)Testowanie API (dev:$(PORT), prod:$(PROD_PORT))...$(NC)" - @echo "$(YELLOW)1. Test root endpoint (dev):$(NC)" - @curl -s http://localhost:$(PORT)/ 2>/dev/null | head -c 200 || echo "Serwer dev nie uruchomiony" - @echo "\n$(YELLOW)2. Test API check user (prod):$(NC)" - @curl -s http://localhost:$(PROD_PORT)/api/check/admin 2>/dev/null || echo "Serwer prod nie uruchomiony" - @echo "\n$(YELLOW)3. Test API get users (prod):$(NC)" - @curl -s http://localhost:$(PROD_PORT)/api/users 2>/dev/null || echo "Serwer prod nie uruchomiony" - @echo "" - -api: - @echo "$(GREEN)Dostępne endpointy API:$(NC)" - @echo "" - @echo "$(BLUE)Deweloperskie (http://localhost:$(PORT)):$(NC)" - @echo " GET / - Strona główna" - @echo " GET /register - Formularz rejestracji" - @echo " POST /register - Rejestracja użytkownika" - @echo " GET /login - Formularz logowania" - @echo " POST /login - Logowanie" - @echo " GET /dashboard - Panel użytkownika" - @echo " GET /logout - Wylogowanie" - @echo "" - @echo "$(BLUE)Produkcyjne (http://$(DOMAIN)):$(NC)" - @echo " GET /api/users - Lista wszystkich użytkowników" - @echo " GET /api/passwd/ - Pobierz hasło użytkownika" - @echo " GET /api/check/ - Sprawdź czy użytkownik istnieje" - @echo " POST /api/register - Rejestracja przez API (JSON)" - @echo " POST /api/login - Logowanie przez API (JSON)" - @echo "" - @echo "$(GREEN)Przykłady użycia API (produkcja):$(NC)" - @echo " curl -X POST http://$(DOMAIN)/api/register \\" - @echo " -H \"Content-Type: application/json\" \\" - @echo " -d '{\"username\":\"test\",\"password\":\"123\"}'" - @echo "" - @echo " curl http://$(DOMAIN)/api/check/test" - @echo " curl http://$(DOMAIN)/api/users" +prod: + @echo "$(GREEN)Start prod na porcie $(PROD_PORT)...$(NC)" + @nohup $(VENV_DIR)/bin/gunicorn -w 4 -b 0.0.0.0:$(PROD_PORT) app:app > production.log 2>&1 & + @echo "$(GREEN)✓ Działa w tle (logi w production.log)$(NC)" status: - @echo "$(GREEN)Sprawdzanie statusu serwerów:$(NC)" - @echo "" - @echo "$(BLUE)Development (port $(PORT)):$(NC)" - @if lsof -i :$(PORT) > /dev/null 2>&1; then \ - echo " $(GREEN)✓ Działa$(NC) - PID: $$(lsof -ti :$(PORT))"; \ - else \ - echo " $(RED)✗ Nie działa$(NC)"; \ - fi - @echo "" - @echo "$(BLUE)Production (port $(PROD_PORT)):$(NC)" - @if lsof -i :$(PROD_PORT) > /dev/null 2>&1; then \ - echo " $(GREEN)✓ Działa$(NC) - PID: $$(lsof -ti :$(PROD_PORT))"; \ - echo " URL: http://$(DOMAIN)"; \ - else \ - echo " $(RED)✗ Nie działa$(NC)"; \ - fi + @echo "--- PORT $(PORT) (DEV) ---" + @ss -tulpn | grep :$(PORT) || echo "Wolny" + @echo "--- PORT $(PROD_PORT) (PROD) ---" + @ss -tulpn | grep :$(PROD_PORT) || echo "Wolny" kill: - @echo "$(RED)Zabijanie procesu deweloperskiego na porcie $(PORT)...$(NC)" - @lsof -ti :$(PORT) | xargs kill -9 2>/dev/null || echo "Brak procesu na porcie $(PORT)" - @echo "$(GREEN)✓ Proces deweloperski zabity$(NC)" + @echo "Zabijanie procesów..." + @-fuser -k $(PORT)/tcp 2>/dev/null || true + @-fuser -k $(PROD_PORT)/tcp 2>/dev/null || true + @echo "$(GREEN)✓ Czysto$(NC)" -reset: - @echo "$(RED)Resetowanie bazy danych...$(NC)" - @rm -f file.json - @echo "{}" > file.json - @echo "$(GREEN)✓ Baza danych zresetowana (file.json)$(NC)" - -backup: - @echo "$(GREEN)Tworzenie backupu bazy danych...$(NC)" - @if [ -f file.json ]; then \ - cp file.json file.json.backup.$$(date +%Y%m%d_%H%M%S); \ - echo "$(GREEN)✓ Backup utworzony$(NC)"; \ - else \ - echo "$(YELLOW)Brak bazy danych do backupu$(NC)"; \ - fi - -logs: - @echo "$(GREEN)Logi produkcyjne (Ctrl+C aby zakończyć):$(NC)" - @mkdir -p logs - @tail -f logs/production.log 2>/dev/null || echo "Brak logów - uruchom najpierw make prod-start" - -init-db: - @echo "$(GREEN)Inicjalizacja bazy danych...$(NC)" - @if [ ! -f file.json ]; then \ - echo '{"users": []}' > file.json; \ - echo "$(GREEN)✓ Utworzono nową bazę danych$(NC)"; \ - else \ - echo "$(YELLOW)Baza danych już istnieje$(NC)"; \ - fi - -# ==================== PRODUCTION SETUP ==================== - -prod-setup: clean install init-db - @echo "$(GREEN)✓ Środowisko produkcyjne gotowe$(NC)" - @mkdir -p logs - @echo "Uruchom: make release" - -# ==================== DLA SYSTEMD (autostart) ==================== - -install-service: - @echo "$(GREEN)Instalacja usługi systemd...$(NC)" - @sudo bash -c 'cat > /etc/systemd/system/http-api.service << EOF -[Unit] -Description=HTTP API Flask App -After=network.target - -[Service] -User=$(shell whoami) -WorkingDirectory=$(PROJECT_DIR) -ExecStart=$(VENV_DIR)/bin/gunicorn -w 4 -b 0.0.0.0:$(PROD_PORT) app:app -Restart=always -RestartSec=10 - -[Install] -WantedBy=multi-user.target -EOF' - @sudo systemctl daemon-reload - @echo "$(GREEN)✓ Usługa zainstalowana$(NC)" - @echo "Uruchom: sudo systemctl start http-api" - @echo "Włącz autostart: sudo systemctl enable http-api" - -remove-service: - @echo "$(RED)Usuwanie usługi systemd...$(NC)" - @sudo systemctl stop http-api 2>/dev/null || true - @sudo systemctl disable http-api 2>/dev/null || true - @sudo rm -f /etc/systemd/system/http-api.service - @sudo systemctl daemon-reload - @echo "$(GREEN)✓ Usługa usunięta$(NC)" - -# ==================== DLA NGINX (proxy) ==================== - -setup-nginx: - @echo "$(GREEN)Konfiguracja Nginx jako reverse proxy...$(NC)" - @sudo bash -c 'cat > /etc/nginx/sites-available/http-api << EOF -server { - listen 80; - server_name $(DOMAIN); - - location / { - proxy_pass http://127.0.0.1:$(PROD_PORT); - proxy_set_header Host $$host; - proxy_set_header X-Real-IP $$remote_addr; - proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $$scheme; - } -} -EOF' - @sudo ln -sf /etc/nginx/sites-available/http-api /etc/nginx/sites-enabled/ - @sudo nginx -t && sudo systemctl reload nginx - @echo "$(GREEN)✓ Nginx skonfigurowany$(NC)" - @echo "Domena: http://$(DOMAIN)" \ No newline at end of file +clean: + @rm -rf venv __pycache__ *.pyc production.log + @echo "$(GREEN)✓ Posprzątane$(NC)" \ No newline at end of file