Initial commit: ROA2WEB - FastAPI + Vue.js + Telegram Bot

Modern ERP Reports Application with microservices architecture

Tech Stack:
- Backend: FastAPI + python-oracledb (Oracle DB integration)
- Frontend: Vue.js 3 + PrimeVue + Vite
- Telegram Bot: python-telegram-bot + SQLite
- Infrastructure: Shared database pool, JWT authentication, SSH tunnel

Features:
- FastAPI backend with async Oracle connection pool
- Vue.js 3 responsive frontend with PrimeVue components
- Telegram bot alternative interface
- Microservices architecture with shared components
- Complete deployment support (Linux Docker + Windows IIS)
- Comprehensive testing (Playwright E2E + pytest)

Repository Structure:
- reports-app/ - Main application (backend, frontend, telegram-bot)
- shared/ - Shared components (database pool, auth, utils)
- deployment/ - Deployment scripts (Linux & Windows)
- docs/ - Project documentation
- security/ - Security scanning and git hooks
This commit is contained in:
2025-10-25 14:55:08 +03:00
commit 6b13ffa183
237 changed files with 70035 additions and 0 deletions

View File

@@ -0,0 +1,270 @@
#!/bin/bash
# ROA2WEB Docker Setup Test Script
# Validates Docker configuration before deployment
set -e
# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Test results
TESTS_PASSED=0
TESTS_FAILED=0
ISSUES=()
# Logging function
log() {
local level=$1
shift
local message="$*"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "[$timestamp] [$level] $message"
}
# Test function
run_test() {
local test_name=$1
local test_command=$2
echo -n "Testing $test_name... "
if eval "$test_command" &>/dev/null; then
echo -e "${GREEN}PASS${NC}"
((TESTS_PASSED++))
return 0
else
echo -e "${RED}FAIL${NC}"
((TESTS_FAILED++))
ISSUES+=("$test_name")
return 1
fi
}
# Test Docker availability
test_docker() {
echo -e "${BLUE}=== Testing Docker Prerequisites ===${NC}"
run_test "Docker installed" "command -v docker"
run_test "Docker Compose installed" "command -v docker-compose"
run_test "Docker daemon running" "docker info"
}
# Test file structure
test_file_structure() {
echo -e "${BLUE}=== Testing File Structure ===${NC}"
cd "$PROJECT_DIR"
# Core Docker files
run_test "Main docker-compose.yml exists" "test -f docker-compose.yml"
run_test "Development override exists" "test -f docker-compose.override.yml"
run_test "Production compose exists" "test -f docker-compose.production.yml"
# Backend files
run_test "Backend Dockerfile exists" "test -f reports-app/backend/Dockerfile"
run_test "Backend requirements exists" "test -f reports-app/backend/requirements.txt"
# Frontend files
run_test "Frontend Dockerfile exists" "test -f reports-app/frontend/Dockerfile"
run_test "Frontend nginx.conf exists" "test -f reports-app/frontend/nginx.conf"
run_test "Frontend package.json exists" "test -f reports-app/frontend/package.json"
# Nginx Gateway files
run_test "Nginx Gateway Dockerfile exists" "test -f nginx/Dockerfile"
run_test "Nginx main config exists" "test -f nginx/conf/nginx.conf"
run_test "Nginx upstream config exists" "test -f nginx/conf/upstream.conf"
run_test "Nginx SSL config exists" "test -f nginx/conf/ssl.conf"
run_test "Nginx security config exists" "test -f nginx/conf/security.conf"
run_test "Nginx site config exists" "test -f nginx/conf/sites-enabled/roa2web.conf"
# Scripts
run_test "Deploy script exists" "test -f scripts/deploy.sh"
run_test "Backup script exists" "test -f scripts/backup.sh"
run_test "Rollback script exists" "test -f scripts/rollback.sh"
run_test "Health check script exists" "test -f scripts/health-check.sh"
# Scripts are executable
run_test "Deploy script executable" "test -x scripts/deploy.sh"
run_test "Backup script executable" "test -x scripts/backup.sh"
run_test "Rollback script executable" "test -x scripts/rollback.sh"
run_test "Health check script executable" "test -x scripts/health-check.sh"
# Environment files
run_test "Environment example exists" "test -f .env.example"
run_test "Development env exists" "test -f .env.development"
run_test "Production env exists" "test -f .env.production"
# Documentation
run_test "Docker setup guide exists" "test -f DOCKER_SETUP.md"
run_test "Deployment guide exists" "test -f DEPLOYMENT_GUIDE.md"
run_test "Production checklist exists" "test -f PRODUCTION_CHECKLIST.md"
}
# Test Docker Compose configuration
test_docker_compose() {
echo -e "${BLUE}=== Testing Docker Compose Configuration ===${NC}"
cd "$PROJECT_DIR"
# Test main compose file
run_test "Main compose config valid" "docker-compose config -q"
# Test production compose
run_test "Production compose config valid" "docker-compose -f docker-compose.yml -f docker-compose.production.yml config -q"
# Test if all required services are defined
run_test "Backend service defined" "docker-compose config | grep -q 'roa-backend:'"
run_test "Frontend service defined" "docker-compose config | grep -q 'roa-frontend:'"
run_test "Gateway service defined" "docker-compose config | grep -q 'roa-gateway:'"
run_test "Redis service defined" "docker-compose config | grep -q 'roa-redis:'"
# Test network configuration
run_test "Custom network defined" "docker-compose config | grep -q 'roa-network:'"
# Test volume configuration
run_test "Nginx logs volume defined" "docker-compose config | grep -q 'nginx-logs:'"
run_test "SSL certs volume defined" "docker-compose config | grep -q 'ssl-certs:'"
run_test "Redis data volume defined" "docker-compose config | grep -q 'redis-data:'"
}
# Test environment configuration
test_environment() {
echo -e "${BLUE}=== Testing Environment Configuration ===${NC}"
cd "$PROJECT_DIR"
# Check if development environment is complete
if [[ -f .env.development ]]; then
run_test "Development Oracle user set" "grep -q 'ORACLE_USER=' .env.development"
run_test "Development JWT secret set" "grep -q 'JWT_SECRET_KEY=' .env.development"
run_test "Development Redis password set" "grep -q 'REDIS_PASSWORD=' .env.development"
fi
# Check if production environment template is complete
if [[ -f .env.production ]]; then
run_test "Production domain configured" "grep -q 'DOMAIN=' .env.production"
run_test "Production SSL email configured" "grep -q 'SSL_EMAIL=' .env.production"
run_test "Production environment set" "grep -q 'ENVIRONMENT=production' .env.production"
fi
# Check secrets directory
run_test "Secrets directory exists" "test -d secrets"
run_test "Secrets gitkeep exists" "test -f secrets/.gitkeep"
}
# Test nginx configuration syntax
test_nginx_config() {
echo -e "${BLUE}=== Testing Nginx Configuration ===${NC}"
cd "$PROJECT_DIR"
# Test nginx config syntax (if nginx is available)
if command -v nginx &>/dev/null; then
run_test "Nginx main config syntax" "nginx -t -c nginx/conf/nginx.conf -p $(pwd)/nginx/"
run_test "Nginx site config syntax" "nginx -t -c nginx/conf/sites-enabled/roa2web.conf -p $(pwd)/nginx/"
else
log "WARNING" "Nginx not available for syntax testing"
fi
# Test config file content
run_test "Nginx upstream config has backend" "grep -q 'roa_backend' nginx/conf/upstream.conf"
run_test "Nginx upstream config has frontend" "grep -q 'roa_frontend' nginx/conf/upstream.conf"
run_test "SSL config has protocols" "grep -q 'ssl_protocols' nginx/conf/ssl.conf"
run_test "Security headers configured" "grep -q 'X-Frame-Options' nginx/conf/security.conf"
}
# Test scripts syntax
test_scripts() {
echo -e "${BLUE}=== Testing Scripts Syntax ===${NC}"
cd "$PROJECT_DIR"
# Test bash script syntax
run_test "Deploy script syntax" "bash -n scripts/deploy.sh"
run_test "Backup script syntax" "bash -n scripts/backup.sh"
run_test "Rollback script syntax" "bash -n scripts/rollback.sh"
run_test "Health check script syntax" "bash -n scripts/health-check.sh"
# Test if scripts have proper shebangs
run_test "Deploy script has shebang" "head -1 scripts/deploy.sh | grep -q '#!/bin/bash'"
run_test "Backup script has shebang" "head -1 scripts/backup.sh | grep -q '#!/bin/bash'"
run_test "Rollback script has shebang" "head -1 scripts/rollback.sh | grep -q '#!/bin/bash'"
run_test "Health check script has shebang" "head -1 scripts/health-check.sh | grep -q '#!/bin/bash'"
}
# Generate test report
generate_report() {
echo ""
echo -e "${BLUE}=== Test Results Summary ===${NC}"
echo ""
local total_tests=$((TESTS_PASSED + TESTS_FAILED))
echo -e "Total tests run: ${BLUE}$total_tests${NC}"
echo -e "Tests passed: ${GREEN}$TESTS_PASSED${NC}"
echo -e "Tests failed: ${RED}$TESTS_FAILED${NC}"
if [[ $TESTS_FAILED -eq 0 ]]; then
echo ""
echo -e "${GREEN}✅ ALL TESTS PASSED! Docker setup is ready for deployment.${NC}"
echo ""
echo -e "${BLUE}Next steps:${NC}"
echo "1. Copy .env.development to .env for local development"
echo "2. Configure your Oracle database credentials"
echo "3. Run: docker-compose up --build"
echo ""
return 0
else
echo ""
echo -e "${RED}❌ Some tests failed. Please fix the following issues:${NC}"
echo ""
for issue in "${ISSUES[@]}"; do
echo -e " ${RED}${NC} $issue"
done
echo ""
echo -e "${YELLOW}Please fix these issues before proceeding with deployment.${NC}"
return 1
fi
}
# Main test execution
main() {
echo -e "${BLUE}ROA2WEB Docker Setup Test Suite${NC}"
echo -e "${BLUE}================================${NC}"
echo ""
test_docker
echo ""
test_file_structure
echo ""
if command -v docker-compose &>/dev/null; then
test_docker_compose
echo ""
else
log "WARNING" "Docker Compose not available, skipping compose tests"
fi
test_environment
echo ""
test_nginx_config
echo ""
test_scripts
echo ""
generate_report
}
# Run main function
main "$@"