# PeyzajArt — cPanel Deploy Rehberi

## Ön Hazırlık (Yerel Makine)

### 1. Kilitli Dosyaları Düzelt

macOS com.apple.provenance nedeniyle bazı dosyalar kilitlenmiş olabilir. Terminal'de çalıştır:

```bash
xattr -cr /Users/evren/Desktop/peyzaj-art/
```

### 2. Değiştirilen Dosyaları Yerleştir

Proje kökünde bu komutları çalıştır:

```bash
# Prisma schema (binaryTargets eklenmiş)
mv packages/db/schema.prisma packages/db/schema.prisma.bak
mv packages/db/schema.prisma.new packages/db/schema.prisma

# Seed dosyası (Admin2024!, BAYI-001, 2 blog post)
mv packages/db/seed.ts packages/db/seed.ts.bak
mv packages/db/seed.new.ts packages/db/seed.ts

# Upload route (Türkçe karakter normalizasyonu eklenmiş)
mv apps/panel/app/api/admin/upload/route.ts apps/panel/app/api/admin/upload/route.ts.bak
mv apps/panel/app/api/admin/upload/route.new.ts apps/panel/app/api/admin/upload/route.ts
```

### 3. Build Öncesi Kontroller

```bash
cd /Users/evren/Desktop/peyzaj-art

# Bağımlılıklar
npm install

# Prisma client üret
npx prisma generate --schema=packages/db/schema.prisma

# TypeScript kontrolü
cd apps/web && npx tsc --noEmit; cd ../..
cd apps/panel && npx tsc --noEmit; cd ../..
```

### 4. .env Dosyalarını Oluştur

`apps/web/.env.local`:
```env
DATABASE_URL="mysql://KULLANICI:SIFRE@localhost:3306/peyzajart"
NEXT_PUBLIC_SITE_URL="https://peyzajart.com"
NEXT_PUBLIC_PANEL_URL="https://panel.peyzajart.com"
```

`apps/panel/.env.local`:
```env
DATABASE_URL="mysql://KULLANICI:SIFRE@localhost:3306/peyzajart"
NEXTAUTH_SECRET="EN_AZ_32_KARAKTER_GUCLU_RASTGELE_DEGER"
NEXTAUTH_URL="https://panel.peyzajart.com"
IYZICO_API_KEY="sandbox-..."
IYZICO_SECRET_KEY="sandbox-..."
IYZICO_BASE_URL="https://sandbox-api.iyzipay.com"
SMTP_HOST="mail.peyzajart.com"
SMTP_PORT=465
SMTP_USER="noreply@peyzajart.com"
SMTP_PASS="SMTP_SIFRESI"
ADMIN_EMAIL="info@peyzajart.com"
NEXT_PUBLIC_BANK_NAME="Ziraat Bankası"
NEXT_PUBLIC_BANK_IBAN="TR00 0000 0000 0000 0000 0000 00"
NEXT_PUBLIC_BANK_BRANCH="Merkez Şubesi"
NEXT_PUBLIC_BANK_ACCOUNT_HOLDER="PeyzajArt Dış Ticaret A.Ş."
```

### 5. Build

```bash
npm run build --workspace=apps/web
npm run build --workspace=apps/panel
```

---

## cPanel Kurulumu

### MySQL Veritabanı

1. cPanel → MySQL Databases
2. Yeni veritabanı oluştur: `peyzajart`
3. Kullanıcı oluştur, veritabanına "All Privileges" ver
4. `.env` dosyalarındaki `DATABASE_URL`'i güncelle

### Node.js Uygulamaları

cPanel → Setup Node.js App → Create Application

**Kurumsal Site:**
| Alan | Değer |
|---|---|
| Node.js version | 20.x |
| Application mode | Production |
| Application root | `apps/web` |
| Application URL | `peyzajart.com` |
| Application startup file | `server.js` |

**B2B Panel:**
| Alan | Değer |
|---|---|
| Node.js version | 20.x |
| Application mode | Production |
| Application root | `apps/panel` |
| Application URL | `panel.peyzajart.com` |
| Application startup file | `server.js` |

### server.js (Her İki App İçin)

`apps/web/server.js` ve `apps/panel/server.js` olarak oluştur:

```js
const { createServer } = require('http')
const { parse } = require('url')
const next = require('next')

const port = process.env.PORT || 3000
const app = next({ dev: false, dir: __dirname })
const handle = app.getRequestHandler()

app.prepare().then(() => {
  createServer((req, res) => {
    const parsedUrl = parse(req.url, true)
    handle(req, res, parsedUrl)
  }).listen(port, () => {
    console.log(`> Ready on port ${port}`)
  })
})
```

### Dosya Yükleme (cPanel File Manager veya SFTP)

```
/home/user/peyzajart.com/
├── apps/web/.next/          ← build output
├── apps/web/public/         ← statik dosyalar
├── apps/web/.env.local      ← ortam değişkenleri
├── apps/web/server.js       ← başlangıç dosyası
├── apps/web/package.json
└── apps/web/node_modules/   ← cPanel'de npm install ile oluşur

/home/user/panel.peyzajart.com/
├── apps/panel/.next/
├── apps/panel/.env.local
├── apps/panel/server.js
├── apps/panel/package.json
└── apps/panel/node_modules/
```

### İlk Deploy Adımları

```bash
# cPanel terminal'inde:

# 1. Web sitesi
cd ~/peyzajart.com
npm install --production
NODE_ENV=production node server.js &

# 2. Panel
cd ~/panel.peyzajart.com
npm install --production
NODE_ENV=production node server.js &

# 3. Veritabanı oluştur + seed
DATABASE_URL="mysql://..." npx prisma db push --schema=packages/db/schema.prisma
DATABASE_URL="..." npx prisma db seed --schema=packages/db/schema.prisma
```

---

## Sonraki Deploylar

cPanel → Node.js App → Restart (iki uygulama için ayrı ayrı)

```bash
# Sadece build output yükle + restart
npm run build --workspace=apps/web
npm run build --workspace=apps/panel
# cPanel'de her iki app için "Restart" tıkla
```

---

## SSL / HTTPS

cPanel → SSL/TLS → AutoSSL

Her iki subdomain için ayrı AutoSSL sertifikası oluştur:
- `peyzajart.com` + `www.peyzajart.com`
- `panel.peyzajart.com`

---

## İyzico Production'a Geçiş

1. iyzico.com'dan production API key al
2. `apps/panel/.env.local` güncelle:
   ```env
   IYZICO_API_KEY="production-key"
   IYZICO_SECRET_KEY="production-secret"
   IYZICO_BASE_URL="https://api.iyzipay.com"
   ```
3. Panel uygulamasını restart et

---

## Tahmini Deploy Süresi

| Adım | Süre |
|---|---|
| Dosyaları kilitli dosya düzeltme | 5 dk |
| Build (web + panel) | 5-10 dk |
| cPanel Node.js app kurulumu | 15 dk |
| Dosya yükleme (SFTP) | 10-20 dk |
| Veritabanı + seed | 5 dk |
| SSL kurulumu | 5 dk |
| **Toplam** | **~1 saat** |

---

## Manuel Yapılması Gerekenler

- [ ] MySQL veritabanı ve kullanıcısı oluştur
- [ ] `.env.local` dosyalarını cPanel'e yükle (git'e commit etme!)
- [ ] `server.js` dosyalarını oluştur
- [ ] İyzico sandbox → production geçişi için key al
- [ ] SMTP şifresi: cPanel → Email → Email Accounts
- [ ] `public/uploads/` dizinine write izni ver: `chmod 755 public/uploads`
- [ ] Admin panel: `panel.peyzajart.com/admin` → ürün görselleri yükle
- [ ] İyzico test ödemesi yap (sandbox ile)
