Files
gh-jamshu-jamshi-marketplac…/commands/add-deployment.md
2025-11-29 18:50:06 +08:00

535 lines
10 KiB
Markdown

Add a new deployment target to your existing Odoo PWA project.
## What this command does:
- Adds deployment configuration for new platforms
- Creates necessary config files
- Sets up CI/CD workflows
- Provides deployment instructions
- Configures environment variables
## Supported Deployment Targets
### Primary (Recommended)
-**Vercel** - Best for full-stack PWAs (API routes work)
-**Netlify** - Great for static + serverless functions
-**Cloudflare Pages** - Fast global CDN, edge functions
### Secondary (Static Only)
- ⚠️ **GitHub Pages** - Free, but no server-side code
- ⚠️ **Cloudflare Pages (Static)** - Without edge functions
- ⚠️ **AWS S3 + CloudFront** - Static hosting only
---
## Prerequisites
Before adding deployment:
```
□ Project builds successfully (npm run build)
□ Odoo connection tested and working
□ Environment variables documented
□ Git repository initialized
□ Code committed to version control
```
---
## Add Vercel Deployment 🔷
### What You'll Get:
- Automatic deployments from Git
- Serverless API routes
- Preview deployments for PRs
- Environment variable management
- Custom domains
- Analytics and logs
### Steps:
#### 1. Install Vercel CLI (Optional)
```bash
npm install -g vercel
```
#### 2. Create `vercel.json`
```json
{
"buildCommand": "npm run build",
"outputDirectory": "build",
"framework": "sveltekit",
"installCommand": "npm install",
"devCommand": "npm run dev",
"env": {
"VITE_ODOO_URL": "@vite_odoo_url",
"VITE_ODOO_DB": "@vite_odoo_db",
"VITE_MODEL_NAME": "@vite_model_name",
"VITE_MODEL_DISPLAY_NAME": "@vite_model_display_name"
},
"build": {
"env": {
"ODOO_API_KEY": "@odoo_api_key",
"ODOO_USERNAME": "@odoo_username"
}
}
}
```
For React/Vue:
```json
{
"buildCommand": "npm run build",
"outputDirectory": "dist",
"framework": "vite"
}
```
#### 3. Create `.vercelignore`
```
node_modules
.env
.env.local
*.log
.DS_Store
```
#### 4. Deployment Options
**Option A: Vercel Dashboard (Recommended for first time)**
1. Go to https://vercel.com/new
2. Connect your Git repository
3. Vercel auto-detects framework
4. Add environment variables:
- `VITE_ODOO_URL`
- `VITE_ODOO_DB`
- `ODOO_API_KEY`
- `ODOO_USERNAME`
- `VITE_MODEL_NAME`
- `VITE_MODEL_DISPLAY_NAME`
5. Click "Deploy"
**Option B: Vercel CLI**
```bash
vercel login
vercel
# Follow prompts
# Add environment variables when asked
# Or add them later in dashboard
```
**Option C: Continuous Deployment**
1. Connect repository to Vercel
2. Every push to `main` auto-deploys
3. PRs get preview deployments
#### 5. Configure Environment Variables
In Vercel Dashboard:
1. Go to Project Settings
2. Environment Variables tab
3. Add each variable:
- Production
- Preview (optional)
- Development (optional)
#### 6. Test Deployment
1. Wait for build to complete
2. Visit deployed URL
3. Test Odoo connection
4. Verify all features work
5. Check browser console for errors
---
## Add Netlify Deployment 🟢
### What You'll Get:
- Git-based deployments
- Serverless functions
- Form handling
- Split testing
- Deploy previews
- Custom domains
### Steps:
#### 1. Create `netlify.toml`
```toml
[build]
command = "npm run build"
publish = "build"
[build.environment]
NODE_VERSION = "18"
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
[functions]
directory = "netlify/functions"
```
For React/Vue:
```toml
[build]
command = "npm run build"
publish = "dist"
```
#### 2. Convert API Routes to Netlify Functions
Create `netlify/functions/odoo.js`:
```javascript
// Copy your API route logic here
// Netlify functions use different format
exports.handler = async (event, context) => {
// Parse request
const body = JSON.parse(event.body);
// Your Odoo logic here
// (copy from src/routes/api/odoo/+server.js)
return {
statusCode: 200,
body: JSON.stringify(result)
};
};
```
#### 3. Update Client to Use Netlify Function
```javascript
// Change API endpoint
const response = await fetch('/.netlify/functions/odoo', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
```
#### 4. Deploy
**Option A: Netlify Dashboard**
1. Go to https://app.netlify.com/start
2. Connect repository
3. Configure build settings
4. Add environment variables
5. Deploy
**Option B: Netlify CLI**
```bash
npm install -g netlify-cli
netlify login
netlify init
netlify deploy --prod
```
---
## Add Cloudflare Pages Deployment 🟠
### What You'll Get:
- Global CDN
- Unlimited bandwidth
- Edge functions
- Preview deployments
- Web Analytics
- Fast performance
### Steps:
#### 1. Create `wrangler.toml` (for edge functions)
```toml
name = "odoo-pwa"
compatibility_date = "2025-01-01"
[build]
command = "npm run build"
[build.upload]
format = "service-worker"
```
#### 2. Convert API Routes to Workers
Create `functions/odoo.js`:
```javascript
export async function onRequest(context) {
const { request, env } = context;
// Parse request
const body = await request.json();
// Odoo logic here
// Access env vars via env.ODOO_API_KEY
return new Response(JSON.stringify(result), {
headers: { 'Content-Type': 'application/json' }
});
}
```
#### 3. Deploy
**Option A: Cloudflare Dashboard**
1. Go to Cloudflare Pages
2. Connect Git repository
3. Configure build:
- Build command: `npm run build`
- Output: `build` or `dist`
4. Add environment variables
5. Deploy
**Option B: Wrangler CLI**
```bash
npm install -g wrangler
wrangler login
wrangler pages project create odoo-pwa
wrangler pages publish build
```
---
## Add GitHub Pages Deployment 📘
### ⚠️ Limitations:
- Static hosting only
- No server-side API routes
- Must modify Odoo client for direct API calls
- CORS issues possible
### When to Use:
- Demo projects
- Public apps (no sensitive data)
- Frontend-only versions
### Steps:
#### 1. Update Base Path
**SvelteKit** (`svelte.config.js`):
```javascript
const config = {
kit: {
adapter: adapter({
pages: 'build',
assets: 'build',
fallback: 'index.html'
}),
paths: {
base: process.env.NODE_ENV === 'production'
? '/your-repo-name'
: ''
}
}
};
```
**React/Vue** (`vite.config.js`):
```javascript
export default {
base: '/your-repo-name/'
};
```
#### 2. Create `.github/workflows/deploy.yml`
```yaml
name: Deploy to GitHub Pages
on:
push:
branches: [main]
permissions:
contents: read
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install
- run: npm run build
env:
VITE_ODOO_URL: ${{ secrets.VITE_ODOO_URL }}
VITE_ODOO_DB: ${{ secrets.VITE_ODOO_DB }}
VITE_MODEL_NAME: ${{ secrets.VITE_MODEL_NAME }}
- uses: actions/upload-pages-artifact@v3
with:
path: build
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/deploy-pages@v4
```
#### 3. Configure Repository
1. Go to Settings → Pages
2. Source: GitHub Actions
3. Save
#### 4. Add Secrets
1. Settings → Secrets and variables → Actions
2. Add each environment variable
#### 5. Push to Deploy
```bash
git add .
git commit -m "Add GitHub Pages deployment"
git push origin main
```
---
## Environment Variables Reference
### Required for All Platforms:
```bash
# Public (VITE_ prefix for client access)
VITE_ODOO_URL=https://yourcompany.odoo.com
VITE_ODOO_DB=yourcompany-main
VITE_MODEL_NAME=x_expense
VITE_MODEL_DISPLAY_NAME=Expense
# Private (server-side only)
ODOO_API_KEY=your_production_api_key
ODOO_USERNAME=your.email@company.com
```
### Platform-Specific:
**Vercel:**
- Add in Project Settings → Environment Variables
- Separate for Production/Preview/Development
**Netlify:**
- Add in Site Settings → Environment Variables
- Or in `netlify.toml`
**Cloudflare:**
- Add in Pages → Settings → Environment Variables
- Or use Wrangler secrets
**GitHub Pages:**
- Add in Repository Settings → Secrets
- Used in GitHub Actions workflow
---
## Post-Deployment Checklist ✅
After deploying to new platform:
```
□ Build completed successfully
□ Application loads at deployment URL
□ Odoo connection works
□ Data syncs correctly
□ CRUD operations work
□ Offline mode functions
□ Service worker registered
□ PWA installs correctly
□ Environment variables set correctly
□ No console errors
□ Tested on mobile
□ Custom domain configured (if needed)
```
---
## Multi-Platform Deployment
### Deploy to Multiple Platforms:
You can deploy the same app to multiple platforms for:
- Redundancy
- A/B testing
- Different regions
- Different audiences
### Example Setup:
```
main branch → Vercel (primary production)
staging branch → Netlify (staging)
PRs → Vercel preview deployments
```
---
## Troubleshooting Deployment
### Build Fails
- Check build logs
- Test `npm run build` locally
- Verify Node version matches
- Check for missing env vars
### App Loads but Doesn't Work
- Check environment variables are set
- Look at browser console errors
- Verify API routes deployed correctly
- Test Odoo connection
### API Routes Not Working
- Verify platform supports server-side code
- Check function logs
- Ensure correct paths used
- Test API endpoint directly
---
## Example prompts to use this command:
- `/add-deployment` - Add new deployment target
- User: "Deploy to Netlify"
- User: "Add Cloudflare deployment"
- User: "Set up continuous deployment"
## Related Commands:
- `/deploy-vercel` - Deploy to Vercel
- `/deploy-github` - Deploy to GitHub Pages
- `/test-connection` - Test before deploying
- `/optimize` - Optimize before production
---
## Best Practices
1. **Use Git-Based Deployment**
- Automatic on push
- Preview deployments
- Easy rollbacks
2. **Separate Environments**
- Development
- Staging
- Production
3. **Secure Secrets**
- Never commit API keys
- Use platform secret management
- Rotate keys regularly
4. **Monitor Deployments**
- Set up error tracking
- Monitor performance
- Watch build times
5. **Test Before Merging**
- Use preview deployments
- Test all features
- Check on real devices