# IQON Static Deployment — reg.ru

Purpose: пошаговая инструкция для замены WordPress-сайта `iqon.com` на статический прототип через reg.ru файловый менеджер.

## Contents

- [Prerequisites](#prerequisites)
- [Deployment Steps](#deployment-steps)
- [Post-Deploy Verification](#post-deploy-verification)
- [Rollback](#rollback)
- [File Inventory](#file-inventory)

## Prerequisites

- [ ] Backup live site files and database completed (`server-backup-20260518/`)
- [ ] Database archive `u0012812_iqon` confirmed as downloaded
- [ ] Access to reg.ru hosting panel (ISPmanager or file manager)
- [ ] All prototype pages pass local visual QA (`python3 -m http.server 8061`)

## Deployment Steps

### Step 1: Backup Current Live Site

Before any changes, create a dated backup of the live site through the reg.ru panel:

1. Log in to https://www.reg.ru/ → Hosting → Backup
2. Create full backup of `iqon.com` files + `u0012812_iqon` database
3. Confirm backup is downloadable before proceeding

### Step 2: Upload Static Files

Upload the following files to `/var/www/u0012812/data/www/iqon.com/` via reg.ru file manager:

**Root level:**
```
.htaccess          ← NEW (from deploy/)
403.html           ← NEW (from deploy/)
404.html           ← NEW (from deploy/)
index.html         ← from repo root
styles.css         ← from repo root
script.js          ← from repo root
sitemap.xml        ← from repo root
robots.txt         ← from repo root
```

**Subdirectories:**
```
services/index.html
services/strategy-governance/index.html
services/enterprise-architecture/index.html
services/data-analytics/index.html
services/infrastructure-cloud/index.html
services/security-continuity/index.html
industries/index.html
case-studies/index.html
contact/index.html
```

**Assets (if any):**
```
assets/            ← from repo assets/
```

### Step 3: Remove WordPress Files

After static files are uploaded and verified:

1. **Do NOT delete yet** — first verify the static site loads correctly
2. Once verified, move (not delete) WordPress files to a `_wordpress_backup/` subdirectory:
   - `wp-admin/`
   - `wp-includes/`
   - `wp-content/`
   - `wp-login.php`
   - `wp-cron.php`
   - `wp-settings.php`
   - `wp-config.php` (move to `_wordpress_backup/`)
   - All other `.php` files in root except `.htaccess`
3. Keep `_wordpress_backup/` for 30 days, then delete

### Step 4: Upload .htaccess

1. Upload `deploy/.htaccess` to the site root
2. This replaces the WordPress `.htaccess`
3. Verify redirect behavior immediately (see below)

### Step 5: Remove WordPress Database User (Later)

The `u0012812_iqon` database can be kept as archive. It is not accessed by the static site.

## Post-Deploy Verification

Run these checks after deployment:

```bash
# 1. Homepage loads
curl -I -L https://iqon.com/
# Expected: 200, security headers present, no WordPress signals

# 2. Security headers present
curl -I https://iqon.com/ | grep -i "X-Content-Type-Options\|X-Frame-Options\|Referrer-Policy\|Content-Security-Policy"
# Expected: all four headers present

# 3. WordPress surfaces blocked
curl -I https://iqon.com/wp-json/
# Expected: 403 Forbidden

curl -I https://iqon.com/xmlrpc.php
# Expected: 403 Forbidden

curl -I https://iqon.com/readme.html
# Expected: 403 Forbidden

# 4. 301 redirects work
curl -I -L https://iqon.com/services-solutions/
# Expected: 301 → https://iqon.com/services/

curl -I -L https://iqon.com/homepage/
# Expected: 301 → https://iqon.com/

# 5. All target pages return 200
for path in / /services/ /services/strategy-governance/ /services/enterprise-architecture/ /services/data-analytics/ /services/infrastructure-cloud/ /services/security-continuity/ /industries/ /case-studies/ /contact/; do
  code=$(curl -o /dev/null -s -w "%{http_code}" "https://iqon.com${path}")
  echo "${path} → ${code}"
done
# Expected: all 200

# 6. Contact page has @infobidgebot, no phone/fax
curl -sS https://iqon.com/contact/ | grep -c "infobidgebot"
# Expected: ≥ 2

curl -sS https://iqon.com/contact/ | grep -c "261 2600\|261 2608\|Fax\|fax"
# Expected: 0

# 7. Mixed content check
curl -sS https://iqon.com/ | grep -c "http://www\.iqon\|http://iqon\|http://maps\.google"
# Expected: 0

# 8. Sitemap accessible
curl -I https://iqon.com/sitemap.xml
# Expected: 200

curl -I https://iqon.com/robots.txt
# Expected: 200
```

## Rollback

If the static deployment has issues:

1. Restore the pre-static files from `/private/tmp/iqon-remote-prestatic-20260520-ftp/` if only root entry files changed
2. Log in to reg.ru hosting panel if a full restore is required
3. If only `.htaccess` caused the issue: restore the original WordPress `.htaccess` from `server-backup-20260518/.htaccess`
4. The WordPress database and theme files in `_wordpress_backup/` can be restored

The original WordPress `.htaccess` is preserved in `server-backup-20260518/.htaccess`.

## File Inventory

| Source File | Target Path | Action |
|------------|-------------|--------|
| `deploy/.htaccess` | `/` root | Upload (replaces WP .htaccess) |
| `deploy/404.html` | `/` root | Upload |
| `deploy/403.html` | `/` root | Upload |
| `index.html` | `/` root | Upload |
| `styles.css` | `/` root | Upload |
| `script.js` | `/` root | Upload |
| `sitemap.xml` | `/` root | Upload |
| `robots.txt` | `/` root | Upload |
| `services/index.html` | `/services/` | Upload |
| `services/strategy-governance/index.html` | `/services/strategy-governance/` | Upload |
| `services/enterprise-architecture/index.html` | `/services/enterprise-architecture/` | Upload |
| `services/data-analytics/index.html` | `/services/data-analytics/` | Upload |
| `services/infrastructure-cloud/index.html` | `/services/infrastructure-cloud/` | Upload |
| `services/security-continuity/index.html` | `/services/security-continuity/` | Upload |
| `industries/index.html` | `/industries/` | Upload |
| `case-studies/index.html` | `/case-studies/` | Upload |
| `contact/index.html` | `/contact/` | Upload |
| `assets/*` | `/assets/` | Upload (if any) |

---

*Created: 2026-05-20*
*Updated: 2026-05-20*
