# Инструкция по установке и развертыванию

## Требования

### Frontend
- Node.js 14+ или Python 3+
- Современный браузер (Chrome, Firefox, Safari, Edge)

### Backend
- PHP 7.4+ или 8.0+
- MySQL 5.7+ или MariaDB 10.3+
- Composer (PHP package manager)
- Apache с mod_rewrite или PHP built-in server

## Шаг 1: Клонирование репозитория

```bash
git clone https://github.com/Developer-RU/madagascar-tours.git
cd madagascar-tours
```

## Шаг 2: Установка Frontend

```bash
cd frontend
npm install
```

### Запуск Frontend
```bash
npm start
# или
npm run serve
# Frontend будет доступен на http://localhost:5500
```

## Шаг 3: Установка Backend

```bash
cd backend
composer install
```

## Шаг 4: Конфигурация базы данных

### 4.1 Создать .env файл
```bash
cp .env.example .env
```

### 4.2 Отредактировать .env
```env
DB_HOST=localhost
DB_NAME=madagascar_tours
DB_USER=root
DB_PASS=
```

### 4.3 Создать базу данных (вариант 1: MySQL CLI)
```bash
mysql -u root -p < src/database/migrations/001_init_schema.sql
```

### 4.4 Создать базу данных (вариант 2: Через клиент)
1. Открыть phpMyAdmin, MySQL Workbench или Terminal
2. Создать новую БД: `CREATE DATABASE madagascar_tours;`
3. Импортировать SQL файл: `src/database/migrations/001_init_schema.sql`

### 4.5 Проверить подключение
```php
<?php
// test_db.php
require 'vendor/autoload.php';
$db = new App\Config\Database();
$conn = $db->connect();
echo "Database connected successfully!";
```

## Шаг 5: Запуск Backend API

### Вариант 1: PHP Built-in Server (рекомендуется для dev)
```bash
cd backend
composer serve
# API будет доступен на http://localhost:8001/api/v1
```

### Вариант 2: Apache
1. Скопировать папку `backend` в Apache DocumentRoot:
   ```bash
   cp -r backend /var/www/html/madagascar-tours-api
   ```

2. Создать .htaccess (в папке backend/public):
   ```apache
   <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
   </IfModule>
   ```

3. Настроить VirtualHost в Apache
4. Перезагрузить Apache: `sudo systemctl restart apache2`

### Вариант 3: Nginx
```nginx
server {
    listen 8001;
    server_name localhost;
    root /path/to/backend/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
```

## Шаг 6: Проверка подключения

### Проверить API
```bash
curl http://localhost:8001/api/v1/tours
```

Вы должны получить JSON ответ:
```json
{
  "success": true,
  "message": "Tours retrieved successfully",
  "data": [...]
}
```

### Проверить CORS
Frontend должен иметь доступ к API:
```javascript
fetch('http://localhost:8001/api/v1/tours')
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error('CORS Error:', err))
```

## Шаг 7: Настройка продакшен

### Обновить API URL в frontend
Файл: `frontend/new/assets/js/main.js` или где используется API

```javascript
// Поменять:
const API_BASE = 'http://localhost:8001/api/v1'
// На:
const API_BASE = 'https://api.madagascar-tours.com/api/v1'
```

### Обновить CORS в backend
Файл: `backend/src/config/Config.php`

```php
public const ALLOWED_ORIGINS = [
    'https://madagascar-tours.com',
    'https://www.madagascar-tours.com',
];
```

### SSL/HTTPS
```bash
# Генерировать SSL сертификат (Let's Encrypt)
sudo certbot certonly --standalone -d api.madagascar-tours.com
```

## Шаг 8: Логин в админ-панель

Default credentials:
- **Email**: admin@madagascar-tours.com
- **Password**: admin123

⚠️ **ВАЖНО**: Измените пароль в production!

## Шаг 9: Backup и мониторинг

### Регулярные бекапы БД
```bash
# Ежедневный бекап
mysqldump -u root -p madagascar_tours > backup_$(date +\%Y\%m\%d).sql
```

### Логирование
```bash
# Следить за ошибками
tail -f storage/logs/error.log
```

## Troubleshooting

### Проблема: "No module named 'http.server'"
**Решение**: Используйте `npm start` вместо `npm run serve`

### Проблема: CORS ошибки
**Решение**: Убедитесь что:
1. Backend API запущен
2. Frontend URL добавлен в ALLOWED_ORIGINS
3. Headers правильно установлены

### Проблема: БД не подключается
**Решение**:
```bash
# Проверить статус MySQL
sudo systemctl status mysql

# Проверить credentials в .env
mysql -u root -p -h localhost madagascar_tours -e "SELECT 1"
```

### Проблема: 404 на API endpoints
**Решение**: Убедитесь что URL правильный, например:
- ❌ `http://localhost:8001/api/v1/tours.php`
- ✅ `http://localhost:8001/api/v1/tours`

## Быстрая проверка

```bash
# 1. Frontend работает?
curl http://localhost:5500

# 2. Backend работает?
curl http://localhost:8001/api/v1/tours

# 3. БД работает?
mysql -u root -p madagascar_tours -e "SELECT COUNT(*) FROM tours;"

# 4. API возвращает валидный JSON?
curl http://localhost:8001/api/v1/tours | python -m json.tool
```

## Helpful commands

```bash
# Установка Composer (если не установлен)
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

# Проверить версию PHP
php -v

# Проверить расширения PHP
php -m | grep pdo

# Перезагрузить PHP-FPM
sudo systemctl restart php8.0-fpm  # меняйте версию

# Очистить кэш
rm -rf backend/storage/cache/*
```

## Production Checklist

- [ ] Изменить JWT_SECRET в .env
- [ ] Включить HTTPS
- [ ] Отключить APP_DEBUG
- [ ] Настроить логирование
- [ ] Добавить мониторинг
- [ ] Настроить бекапы БД
- [ ] Настроить email уведомления
- [ ] Добавить rate limiting на API
- [ ] Настроить CDN для статических файлов
- [ ] Тестировать на реальном браузере и устройствах

## Дополнительные ресурсы

- [PHP Documentation](https://www.php.net/docs.php)
- [MySQL Documentation](https://dev.mysql.com/doc/)
- [Bootstrap Documentation](https://getbootstrap.com/docs/)
- [HTTP Server for Node.js](https://nodejs.org/)

---

**Если возникнут проблемы**, обратитесь к нам:
- 📧 Email: support@madagascar-tours.com
- 📱 Phone: +261 32 71 020 12
