✅ 53 pages (34 products + corporate) ✅ All logo images ✅ Nginx Dockerfile (production-ready) ✅ PDPA compliant (cookie consent) ✅ Modern design with Kanit font ✅ Line + Phone buttons on products Built: 2026-03-13
272 lines
5.3 KiB
Markdown
272 lines
5.3 KiB
Markdown
# Deployment Guide - Deal Plus Tech Astro Website
|
|
|
|
## 📋 Pre-Deployment Checklist
|
|
|
|
- [ ] All pages build successfully (`npm run build`)
|
|
- [ ] Images copied to `public/images/`
|
|
- [ ] Environment variables configured
|
|
- [ ] Umami Analytics set up
|
|
- [ ] Admin password changed from default
|
|
- [ ] Cookie consent tested
|
|
- [ ] Mobile responsiveness verified
|
|
- [ ] SEO meta tags on all pages
|
|
|
|
## 🚀 Deployment Steps
|
|
|
|
### Step 1: Initialize Git Repository
|
|
|
|
```bash
|
|
cd dealplustech-astro
|
|
git init
|
|
git add .
|
|
git commit -m "Initial commit - Deal Plus Tech migration to Astro"
|
|
```
|
|
|
|
### Step 2: Push to Gitea
|
|
|
|
```bash
|
|
# Add remote (replace with your actual Gitea URL)
|
|
git remote add origin https://git.moreminimore.com/{username}/dealplustech-astro.git
|
|
|
|
# Push to main
|
|
git push -u origin main
|
|
```
|
|
|
|
### Step 3: Deploy on Easypanel
|
|
|
|
1. **Login to Easypanel**: https://panelwebsite.moreminimore.com
|
|
|
|
2. **Create New Project**:
|
|
- Project Name: `dealplustech`
|
|
- Click "Create Project"
|
|
|
|
3. **Create New Service**:
|
|
- Service Name: `dealplustech-astro`
|
|
- Select "Git Repository"
|
|
- Repository: `dealplustech-astro`
|
|
- Branch: `main`
|
|
|
|
4. **Configure Build**:
|
|
- Build Command: `npm run build`
|
|
- Output Directory: `dist`
|
|
- Port: `80`
|
|
- Node Version: `20`
|
|
|
|
5. **Environment Variables**:
|
|
```
|
|
UMAMI_WEBSITE_ID=xxx-xxx-xxx
|
|
ADMIN_PASSWORD=YourSecurePassword123!
|
|
NODE_ENV=production
|
|
```
|
|
|
|
6. **Deploy**:
|
|
- Click "Deploy"
|
|
- Wait for build to complete (~2-3 minutes)
|
|
- Check deployment status
|
|
|
|
### Step 4: Verify Deployment
|
|
|
|
1. **Check Website**:
|
|
- Visit your Easypanel URL
|
|
- Test homepage
|
|
- Test product pages (Thai URLs)
|
|
- Test contact page
|
|
|
|
2. **Test Cookie Consent**:
|
|
- Clear browser cookies
|
|
- Reload page
|
|
- Verify consent banner appears
|
|
- Test accept/reject buttons
|
|
|
|
3. **Test Analytics**:
|
|
- Accept analytics cookies
|
|
- Check Umami dashboard for visits
|
|
|
|
4. **Mobile Testing**:
|
|
- Test on mobile device
|
|
- Verify responsive design
|
|
- Check navigation menu
|
|
|
|
## 🔄 Auto-Deploy Workflow
|
|
|
|
Easypanel auto-deploys on every push to `main` branch:
|
|
|
|
```bash
|
|
# Make changes
|
|
git add .
|
|
git commit -m "Update product page"
|
|
git push
|
|
|
|
# Easypanel automatically:
|
|
# 1. Detects push
|
|
# 2. Runs npm install
|
|
# 3. Runs npm run build
|
|
# 4. Deploys new version
|
|
# 5. Shows deployment status
|
|
```
|
|
|
|
## 📊 Monitoring
|
|
|
|
### Deployment Status
|
|
|
|
Check Easypanel dashboard for:
|
|
- Build logs
|
|
- Deployment status
|
|
- Resource usage
|
|
- Error logs
|
|
|
|
### Analytics
|
|
|
|
Check Umami dashboard at: `https://analytics.dealplustech.co.th`
|
|
|
|
- Real-time visitors
|
|
- Page views
|
|
- Referrer sources
|
|
- Device breakdown
|
|
|
|
### Consent Logs
|
|
|
|
Access consent logs: `https://dealplustech.co.th/admin/consent-logs`
|
|
|
|
- Login with `ADMIN_PASSWORD`
|
|
- View all consent records
|
|
- Export to CSV
|
|
- Delete records (right to be forgotten)
|
|
|
|
## 🛠️ Maintenance
|
|
|
|
### Update Content
|
|
|
|
1. **Edit Markdown/Files**:
|
|
- Blog posts: `src/content/blog/`
|
|
- Product pages: `src/pages/[url]/index.astro`
|
|
|
|
2. **Commit and Push**:
|
|
```bash
|
|
git add .
|
|
git commit -m "Update content"
|
|
git push
|
|
```
|
|
|
|
3. **Auto-deploy**: Wait ~2-3 minutes
|
|
|
|
### Update Dependencies
|
|
|
|
```bash
|
|
npm update
|
|
npm run build # Test locally first
|
|
git add package.json
|
|
git commit -m "Update dependencies"
|
|
git push
|
|
```
|
|
|
|
### Database Backup
|
|
|
|
Consent logs stored in SQLite (or Turso if configured):
|
|
|
|
```bash
|
|
# Local backup
|
|
cp db/consent.db backup-$(date +%Y%m%d).db
|
|
|
|
# Production (via Easypanel console)
|
|
# Download consent.db file
|
|
```
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### Build Fails
|
|
|
|
1. **Check logs** in Easypanel
|
|
2. **Test locally**: `npm run build`
|
|
3. **Common issues**:
|
|
- Missing dependencies: `npm install`
|
|
- Syntax errors: Check recent changes
|
|
- TypeScript errors: `npm run check`
|
|
|
|
### Page Not Found
|
|
|
|
1. **Verify URL structure** matches file path
|
|
2. **Check Thai URL encoding**
|
|
3. **Clear cache**: Hard refresh (Ctrl+Shift+R)
|
|
|
|
### Cookie Consent Not Working
|
|
|
|
1. **Check localStorage**: Open DevTools → Application → Local Storage
|
|
2. **Verify script loading**: Check Network tab for errors
|
|
3. **Test in incognito**: Clear all cookies first
|
|
|
|
### Analytics Not Tracking
|
|
|
|
1. **Check Umami Website ID** in `.env`
|
|
2. **Verify consent given** for analytics
|
|
3. **Check browser console** for errors
|
|
|
|
## 📈 Performance Optimization
|
|
|
|
### Image Optimization (Recommended)
|
|
|
|
Convert images to WebP:
|
|
|
|
```bash
|
|
# Install sharp
|
|
npm install -g sharp-cli
|
|
|
|
# Convert all images
|
|
sharp public/images/**/*.jpg -o public/images/ -f webp -q 80
|
|
```
|
|
|
|
### Enable Compression
|
|
|
|
Easypanel handles compression automatically.
|
|
|
|
### CDN (Optional)
|
|
|
|
For better performance:
|
|
|
|
1. Set up Cloudflare CDN
|
|
2. Point DNS to Cloudflare
|
|
3. Enable caching
|
|
4. Configure page rules
|
|
|
|
## 🔐 Security
|
|
|
|
### Environment Variables
|
|
|
|
- NEVER commit `.env` file
|
|
- Use strong passwords
|
|
- Rotate passwords periodically
|
|
|
|
### HTTPS
|
|
|
|
Easypanel provides HTTPS automatically.
|
|
|
|
### Rate Limiting
|
|
|
|
Consider adding rate limiting for API endpoints:
|
|
|
|
```javascript
|
|
// src/pages/api/consent/POST.ts
|
|
import rateLimit from 'express-rate-limit';
|
|
|
|
const limiter = rateLimit({
|
|
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
max: 100 // limit each IP to 100 requests per windowMs
|
|
});
|
|
```
|
|
|
|
## 📞 Support
|
|
|
|
**Issues?**
|
|
1. Check Easypanel logs
|
|
2. Review Astro docs: https://docs.astro.build
|
|
3. Check this guide
|
|
|
|
**Emergency Contact**:
|
|
- Admin: [Your contact]
|
|
- Developer: [Your contact]
|
|
|
|
---
|
|
|
|
**Last Updated**: 2026-03-12
|
|
**Version**: 1.0
|