amke
This commit is contained in:
290
makefile
290
makefile
@@ -1,284 +1,52 @@
|
|||||||
# Zmienne
|
# Zmienne
|
||||||
PYTHON = venv/bin/python
|
PYTHON = venv/bin/python
|
||||||
PIP = venv/bin/pip
|
PIP = venv/bin/pip
|
||||||
FLASK = venv/bin/flask
|
|
||||||
APP = app.py
|
APP = app.py
|
||||||
PORT = 2500
|
PORT = 2500
|
||||||
PROD_PORT = 8000
|
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
|
GREEN = \033[0;32m
|
||||||
RED = \033[0;31m
|
NC = \033[0m
|
||||||
YELLOW = \033[1;33m
|
|
||||||
BLUE = \033[0;34m
|
|
||||||
NC = \033[0m # No Color
|
|
||||||
|
|
||||||
.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:
|
help:
|
||||||
@echo "$(GREEN)Dostępne komendy:$(NC)"
|
@echo "$(GREEN)Dostępne komendy:$(NC)"
|
||||||
@echo ""
|
@echo " make setup - Tworzy venv i instaluje biblioteki"
|
||||||
@echo "$(BLUE)=== Rozwój (Development) ===$(NC)"
|
@echo " make run - Uruchamia serwer deweloperski"
|
||||||
@echo " make setup - Przygotowanie środowiska (venv + zależności)"
|
@echo " make prod - Uruchamia serwer produkcyjny (Gunicorn) w tle"
|
||||||
@echo " make venv - Tworzenie środowiska wirtualnego"
|
@echo " make status - Sprawdza co działa"
|
||||||
@echo " make install - Instalacja zależności"
|
@echo " make kill - Zabija procesy na obu portach"
|
||||||
@echo " make debug - Uruchomienie serwera w trybie debug (port $(PORT))"
|
@echo " make clean - Usuwa śmieci i venv"
|
||||||
@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"
|
|
||||||
|
|
||||||
# ==================== DEVELOPMENT ====================
|
setup:
|
||||||
|
@python3 -m venv venv
|
||||||
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)"
|
|
||||||
@$(PIP) install --upgrade pip
|
@$(PIP) install --upgrade pip
|
||||||
@$(PIP) install flask
|
@$(PIP) install flask flask-cors gunicorn python-dotenv
|
||||||
@$(PIP) install flask-cors
|
@echo "$(GREEN)✓ Gotowe. Użyj 'make run'$(NC)"
|
||||||
@$(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
|
|
||||||
|
|
||||||
run:
|
run:
|
||||||
@echo "$(GREEN)Uruchamianie serwera na porcie $(PORT)...$(NC)"
|
@echo "$(GREEN)Start dev na porcie $(PORT)...$(NC)"
|
||||||
@$(PYTHON) $(APP)
|
@$(PYTHON) $(APP)
|
||||||
|
|
||||||
debug:
|
prod:
|
||||||
@echo "$(GREEN)Uruchamianie serwera w trybie DEBUG na porcie $(PORT)...$(NC)"
|
@echo "$(GREEN)Start prod na porcie $(PROD_PORT)...$(NC)"
|
||||||
@export FLASK_ENV=development FLASK_DEBUG=1 && $(PYTHON) $(APP)
|
@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)"
|
||||||
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/<name> - Pobierz hasło użytkownika"
|
|
||||||
@echo " GET /api/check/<name> - 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"
|
|
||||||
|
|
||||||
status:
|
status:
|
||||||
@echo "$(GREEN)Sprawdzanie statusu serwerów:$(NC)"
|
@echo "--- PORT $(PORT) (DEV) ---"
|
||||||
@echo ""
|
@ss -tulpn | grep :$(PORT) || echo "Wolny"
|
||||||
@echo "$(BLUE)Development (port $(PORT)):$(NC)"
|
@echo "--- PORT $(PROD_PORT) (PROD) ---"
|
||||||
@if lsof -i :$(PORT) > /dev/null 2>&1; then \
|
@ss -tulpn | grep :$(PROD_PORT) || echo "Wolny"
|
||||||
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
|
|
||||||
|
|
||||||
kill:
|
kill:
|
||||||
@echo "$(RED)Zabijanie procesu deweloperskiego na porcie $(PORT)...$(NC)"
|
@echo "Zabijanie procesów..."
|
||||||
@lsof -ti :$(PORT) | xargs kill -9 2>/dev/null || echo "Brak procesu na porcie $(PORT)"
|
@-fuser -k $(PORT)/tcp 2>/dev/null || true
|
||||||
@echo "$(GREEN)✓ Proces deweloperski zabity$(NC)"
|
@-fuser -k $(PROD_PORT)/tcp 2>/dev/null || true
|
||||||
|
@echo "$(GREEN)✓ Czysto$(NC)"
|
||||||
|
|
||||||
reset:
|
clean:
|
||||||
@echo "$(RED)Resetowanie bazy danych...$(NC)"
|
@rm -rf venv __pycache__ *.pyc production.log
|
||||||
@rm -f file.json
|
@echo "$(GREEN)✓ Posprzątane$(NC)"
|
||||||
@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)"
|
|
||||||
Reference in New Issue
Block a user