264 lines
7.0 KiB
Markdown
264 lines
7.0 KiB
Markdown
|
|
# 🚀 Quick Start: Deploy to Plesk in 15 Minutes
|
||
|
|
|
||
|
|
This guide will get your Customer Portal deployed to Plesk using **native Git integration** - simple, reliable, and maintenance-free!
|
||
|
|
|
||
|
|
## 🎯 Why This Approach?
|
||
|
|
|
||
|
|
- ✅ **No complex scripts** - Plesk handles everything
|
||
|
|
- ✅ **Auto-deployment** - Push to GitHub → Instant deployment
|
||
|
|
- ✅ **Built-in backups** - Easy rollback if needed
|
||
|
|
- ✅ **Plesk managed** - UI-based configuration
|
||
|
|
- ✅ **15 minutes setup** - Much faster than custom pipelines
|
||
|
|
|
||
|
|
## 📋 Prerequisites
|
||
|
|
|
||
|
|
Before you start, ensure you have:
|
||
|
|
|
||
|
|
- ✅ **Plesk hosting account** with Git support
|
||
|
|
- ✅ **Domain configured** in Plesk
|
||
|
|
- ✅ **GitHub repository** (can be private)
|
||
|
|
- ✅ **Local development environment** set up
|
||
|
|
|
||
|
|
## 🛠️ Step 1: Prepare Your Repository (2 minutes)
|
||
|
|
|
||
|
|
### 1.1 Set Up Local Environment
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Copy environment templates and configure with your values
|
||
|
|
cp apps/bff/.env.example apps/bff/.env
|
||
|
|
cp apps/portal/.env.example apps/portal/.env.local
|
||
|
|
|
||
|
|
# Edit with your actual credentials (these files are git-ignored)
|
||
|
|
nano apps/bff/.env
|
||
|
|
nano apps/portal/.env.local
|
||
|
|
```
|
||
|
|
|
||
|
|
### 1.2 Test Your Build Locally
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install dependencies
|
||
|
|
pnpm install
|
||
|
|
|
||
|
|
# Test build process
|
||
|
|
pnpm build
|
||
|
|
|
||
|
|
# Verify everything works
|
||
|
|
pnpm dev
|
||
|
|
```
|
||
|
|
|
||
|
|
### 1.3 Push to GitHub
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git init
|
||
|
|
git add .
|
||
|
|
git commit -m "Initial Customer Portal setup"
|
||
|
|
git remote add origin https://github.com/yourusername/your-repo.git
|
||
|
|
git push -u origin main
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🌐 Step 2: Configure Plesk Git Integration (8 minutes)
|
||
|
|
|
||
|
|
### 2.1 Access Plesk Git
|
||
|
|
|
||
|
|
1. Log into your **Plesk control panel**
|
||
|
|
2. Navigate to **Websites & Domains**
|
||
|
|
3. Select your domain
|
||
|
|
4. Click **Git** in the left sidebar
|
||
|
|
|
||
|
|
### 2.2 Add Your Repository
|
||
|
|
|
||
|
|
1. Click **Add Repository**
|
||
|
|
2. Choose **Remote Git hosting**
|
||
|
|
3. Fill in details:
|
||
|
|
|
||
|
|
```
|
||
|
|
Repository URL: https://github.com/yourusername/your-repo.git
|
||
|
|
Repository name: customer-portal
|
||
|
|
Branch: main
|
||
|
|
Deployment mode: ☑️ Automatic deployment
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2.3 Configure Paths
|
||
|
|
|
||
|
|
```
|
||
|
|
Repository path: /var/www/vhosts/yourdomain.com/git/customer-portal
|
||
|
|
Document root: /var/www/vhosts/yourdomain.com/httpdocs
|
||
|
|
Actions: ☑️ Pull updates automatically
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2.4 Set Up Authentication (If Private Repo)
|
||
|
|
|
||
|
|
1. Plesk will generate an **SSH public key**
|
||
|
|
2. Copy this key
|
||
|
|
3. Go to GitHub: **Repo → Settings → Deploy keys**
|
||
|
|
4. Click **Add deploy key**
|
||
|
|
5. Paste the key, give it a name: "Plesk Deploy Key"
|
||
|
|
6. ✅ **Allow write access** (if you want Plesk to push back)
|
||
|
|
7. **Save**
|
||
|
|
|
||
|
|
## 🔗 Step 3: Configure GitHub Webhook (3 minutes)
|
||
|
|
|
||
|
|
### 3.1 Get Webhook URL from Plesk
|
||
|
|
|
||
|
|
1. In Plesk Git settings, find the **webhook URL**
|
||
|
|
2. Copy it (looks like: `https://yourserver.com:8443/git/webhook/...`)
|
||
|
|
|
||
|
|
### 3.2 Add Webhook to GitHub
|
||
|
|
|
||
|
|
1. GitHub repo → **Settings** → **Webhooks**
|
||
|
|
2. Click **Add webhook**
|
||
|
|
3. Configure:
|
||
|
|
|
||
|
|
```
|
||
|
|
Payload URL: [Paste Plesk webhook URL]
|
||
|
|
Content type: application/json
|
||
|
|
Secret: [Leave empty]
|
||
|
|
Events: ☑️ Just the push event
|
||
|
|
Active: ☑️ Enabled
|
||
|
|
```
|
||
|
|
|
||
|
|
4. **Add webhook**
|
||
|
|
|
||
|
|
## 🔧 Step 4: Configure Build Process (2 minutes)
|
||
|
|
|
||
|
|
### Option A: Simple File Copy (Recommended for Start)
|
||
|
|
|
||
|
|
In Plesk Git settings, add **Additional deployment actions**:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Copy built files to web root
|
||
|
|
cp -r apps/portal/out/* /var/www/vhosts/yourdomain.com/httpdocs/ 2>/dev/null || true
|
||
|
|
cp -r apps/portal/public/* /var/www/vhosts/yourdomain.com/httpdocs/ 2>/dev/null || true
|
||
|
|
|
||
|
|
# Set proper permissions
|
||
|
|
chmod -R 755 /var/www/vhosts/yourdomain.com/httpdocs/
|
||
|
|
```
|
||
|
|
|
||
|
|
### Option B: Full Build Process (If You Need Server-Side Building)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Navigate to repository
|
||
|
|
cd /var/www/vhosts/yourdomain.com/git/customer-portal
|
||
|
|
|
||
|
|
# Install PNPM if not available
|
||
|
|
curl -fsSL https://get.pnpm.io/install.sh | sh -
|
||
|
|
export PATH="$HOME/.local/share/pnpm:$PATH"
|
||
|
|
|
||
|
|
# Install dependencies and build
|
||
|
|
pnpm install --frozen-lockfile
|
||
|
|
pnpm build
|
||
|
|
|
||
|
|
# Deploy built files
|
||
|
|
cp -r apps/portal/dist/* /var/www/vhosts/yourdomain.com/httpdocs/
|
||
|
|
mkdir -p /var/www/vhosts/yourdomain.com/httpdocs/api
|
||
|
|
cp -r apps/bff/dist/* /var/www/vhosts/yourdomain.com/httpdocs/api/
|
||
|
|
|
||
|
|
# Set permissions
|
||
|
|
chmod -R 755 /var/www/vhosts/yourdomain.com/httpdocs/
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🚀 Step 5: First Deployment Test
|
||
|
|
|
||
|
|
### 5.1 Trigger Deployment
|
||
|
|
|
||
|
|
Make a small change and push:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
echo "# Customer Portal" > README.md
|
||
|
|
git add README.md
|
||
|
|
git commit -m "Test deployment"
|
||
|
|
git push origin main
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5.2 Monitor Deployment
|
||
|
|
|
||
|
|
1. **GitHub**: Check webhook delivery in repo settings
|
||
|
|
2. **Plesk**: Watch Git logs for deployment progress
|
||
|
|
3. **Website**: Visit your domain to see if it's live!
|
||
|
|
|
||
|
|
## 🎯 Step 6: Production Configuration
|
||
|
|
|
||
|
|
### 6.1 Environment Variables
|
||
|
|
|
||
|
|
In Plesk, set up your production environment:
|
||
|
|
|
||
|
|
1. **Websites & Domains** → **PHP Settings**
|
||
|
|
2. Add environment variables:
|
||
|
|
|
||
|
|
```
|
||
|
|
NEXT_PUBLIC_API_BASE=https://yourdomain.com/api
|
||
|
|
NODE_ENV=production
|
||
|
|
DATABASE_URL=your_production_db_url
|
||
|
|
REDIS_URL=your_production_redis_url
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.2 SSL Certificate
|
||
|
|
|
||
|
|
1. **Websites & Domains** → **SSL/TLS Certificates**
|
||
|
|
2. **Get free certificate** (Let's Encrypt)
|
||
|
|
3. **Install** and **Secure the domain**
|
||
|
|
|
||
|
|
## ✅ Verification Checklist
|
||
|
|
|
||
|
|
After setup, verify everything works:
|
||
|
|
|
||
|
|
- [ ] **Website loads**: Visit `https://yourdomain.com`
|
||
|
|
- [ ] **API responds**: Test `https://yourdomain.com/api/health`
|
||
|
|
- [ ] **Auto-deployment**: Push a change and see it deploy
|
||
|
|
- [ ] **Webhook active**: Check GitHub webhook shows recent deliveries
|
||
|
|
- [ ] **SSL enabled**: Site shows green lock in browser
|
||
|
|
|
||
|
|
## 🔄 Daily Workflow
|
||
|
|
|
||
|
|
Your new deployment process is now:
|
||
|
|
|
||
|
|
1. **Develop locally**: Make changes, test with `pnpm dev`
|
||
|
|
2. **Commit & push**: `git add . && git commit -m "Your change" && git push`
|
||
|
|
3. **Auto-deploy**: Plesk automatically deploys within 1-2 minutes
|
||
|
|
4. **Verify**: Check your live site
|
||
|
|
|
||
|
|
**That's it!** No complex pipelines, no maintenance, no headaches! 🎉
|
||
|
|
|
||
|
|
## 🆘 Troubleshooting
|
||
|
|
|
||
|
|
### Deployment Not Working?
|
||
|
|
|
||
|
|
1. **Check webhook**: GitHub repo → Settings → Webhooks → Recent deliveries
|
||
|
|
2. **Check Plesk logs**: Git → Repository → View logs
|
||
|
|
3. **Test manually**: Plesk → Git → Pull Updates button
|
||
|
|
|
||
|
|
### Build Failing?
|
||
|
|
|
||
|
|
1. **Check build locally**: Run `pnpm build` on your machine
|
||
|
|
2. **Check server logs**: Plesk → Git → Deployment logs
|
||
|
|
3. **Simplify build**: Start with Option A (file copy only)
|
||
|
|
|
||
|
|
### Site Not Loading?
|
||
|
|
|
||
|
|
1. **Check file permissions**: Should be 755 for directories, 644 for files
|
||
|
|
2. **Check document root**: Files should be in `/httpdocs/`
|
||
|
|
3. **Check DNS**: Domain should point to your Plesk server
|
||
|
|
|
||
|
|
## 📚 What's Next?
|
||
|
|
|
||
|
|
- **Database setup**: Configure PostgreSQL in Plesk
|
||
|
|
- **Email setup**: Configure SMTP for notifications
|
||
|
|
- **Monitoring**: Set up Plesk monitoring alerts
|
||
|
|
- **Backups**: Configure automatic backups
|
||
|
|
- **CDN setup**: Configure Cloudflare for better performance
|
||
|
|
|
||
|
|
## 🎊 Congratulations!
|
||
|
|
|
||
|
|
You now have a **professional, automated deployment pipeline** that:
|
||
|
|
|
||
|
|
- ✅ Deploys automatically on every push
|
||
|
|
- ✅ Requires zero maintenance
|
||
|
|
- ✅ Has built-in rollback capability
|
||
|
|
- ✅ Is managed through Plesk's intuitive UI
|
||
|
|
- ✅ Scales with your team
|
||
|
|
|
||
|
|
**Much simpler than complex GitHub Actions, right?** 😊
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Need help?** Check out [PLESK_DEPLOYMENT.md](./PLESK_DEPLOYMENT.md) for detailed technical information.
|