Files
dealplustech/EASYPANEL_SKILL.md
Kunthawat Greethong 443c3377e2 refactor: Move Astro to root, use PORT env (default 80), allow all hosts
- Move Astro files from dealplustech-astro/ to project root
- Update Dockerfile: PORT environment variable (default 80)
- Add vite.config.ts with allowedHosts: true
- Matches nixpacks behavior for Easypanel deployment
- No hardcoded ports or domains
2026-03-03 11:40:50 +07:00

311 lines
5.9 KiB
Markdown

# Easypanel Deployment Skill
**Skill Name:** `easypanel-deploy`
**Description:** Deploy Astro/Next.js/Vite apps to Easypanel with Docker
**Version:** 1.0.0
**Author:** Deal Plus Tech DevOps
---
## Overview
This skill provides a complete deployment workflow for static site generators (Astro, Next.js, Vite) to Easypanel using Docker containers.
---
## Capabilities
-**Dockerfile Generation** - Optimized multi-stage Dockerfile
-**Easypanel Configuration** - Pre-configured for Easypanel deployment
-**Git Integration** - Auto-deploy on push
-**Environment Setup** - Environment variables and secrets
-**Domain Configuration** - Custom domain + SSL setup
-**Health Checks** - Container health monitoring
-**Resource Optimization** - Recommended resource allocation
---
## Usage
### Prerequisites
1. Easypanel instance (self-hosted or cloud)
2. Git repository with Astro/Next.js/Vite project
3. Docker installed (for local testing)
### Step 1: Prepare Project
```bash
# Navigate to project
cd your-project
# Ensure build script exists
npm run build
# Test production build
npm run preview
```
### Step 2: Add Deployment Files
Create these files in project root:
**Dockerfile:**
```dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/public ./public
EXPOSE 4321
CMD ["npm", "run", "preview", "--", "--host", "0.0.0.0", "--port", "4321"]
```
**.dockerignore:**
```
node_modules
dist
*.log
.git
.env
```
### Step 3: Deploy to Easypanel
#### Option A: Git Repository (Recommended)
1. Login to Easypanel
2. **New Service****Git Repository**
3. Select repository and branch
4. Configure:
- **Build Command:** `npm run build`
- **Publish Directory:** `dist`
- **Port:** `4321`
5. Click **Deploy**
#### Option B: Docker Image
1. Build image:
```bash
docker build -t your-app:latest .
docker push your-registry.com/your-app:latest
```
2. Deploy on Easypanel:
- **New Service** → **Docker Image**
- Enter image URL
- Set port: `4321`
- Click **Deploy**
### Step 4: Configure Domain (Optional)
1. Go to Service Settings → **Domains**
2. Add domain: `your-domain.com`
3. Update DNS:
```
Type: CNAME
Name: @
Value: your-service.easypanel.app
```
4. Enable SSL
---
## Environment Variables
| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `NODE_ENV` | No | `production` | Node environment |
| `PORT` | No | `4321` | Server port |
| `HOST` | No | `0.0.0.0` | Bind address |
---
## Resource Recommendations
| Project Size | CPU | Memory | Storage |
|--------------|-----|--------|---------|
| **Small** (< 100MB) | 0.5 vCPU | 512MB | 1GB |
| **Medium** (< 500MB) | 1 vCPU | 1GB | 2GB |
| **Large** (> 500MB) | 2 vCPU | 2GB | 5GB |
---
## Health Check
**Endpoint:** `GET /`
**Expected:** HTTP 200 OK
**Timeout:** 3 seconds
**Interval:** 30 seconds
### Manual Health Check
```bash
curl http://your-service:4321/
```
### Docker Health Check
```bash
docker inspect --format='{{.State.Health.Status}}' your-container
```
---
## Troubleshooting
### Build Fails
**Symptoms:** Build command returns error
**Solutions:**
1. Check build logs
2. Verify `package.json` scripts
3. Test locally: `npm run build`
4. Check Node version compatibility
### Container Crashes
**Symptoms:** Container exits immediately
**Solutions:**
1. Check container logs: `docker logs <container>`
2. Verify port configuration
3. Check environment variables
4. Review Dockerfile CMD instruction
### 502 Bad Gateway
**Symptoms:** Service returns 502 error
**Solutions:**
1. Verify container is running
2. Check port mapping
3. Review health check status
4. Inspect application logs
---
## Best Practices
### Security
- ✅ Use `.dockerignore` to exclude sensitive files
- ✅ Run as non-root user (add `USER node` to Dockerfile)
- ✅ Use production dependencies only
- ✅ Enable SSL for custom domains
- ✅ Regular security updates
### Performance
- ✅ Multi-stage Docker builds
- ✅ Minimize Docker image size
- ✅ Enable compression (Easypanel default)
- ✅ Use CDN for static assets
- ✅ Configure proper caching
### Monitoring
- ✅ Enable health checks
- ✅ Monitor resource usage
- ✅ Set up log aggregation
- ✅ Configure alerts for failures
- ✅ Regular backup strategy
---
## Examples
### Astro Project
```bash
# Astro specific configuration
npm create astro@latest
npm run build # Output: dist/
npm run preview # Port: 4321
```
### Next.js Project
```bash
# Next.js specific configuration
npx create-next-app
npm run build # Output: .next/
npm run start # Port: 3000
```
Update Dockerfile PORT to 3000 for Next.js.
### Vite Project
```bash
# Vite specific configuration
npm create vite@latest
npm run build # Output: dist/
npx serve dist # Port: 3000
```
---
## Integration with CI/CD
### GitHub Actions Example
```yaml
name: Deploy to Easypanel
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Docker Image
run: docker build -t my-app:latest .
- name: Push to Registry
run: docker push registry.com/my-app:latest
- name: Deploy to Easypanel
run: |
# Use Easypanel API or CLI
easypanel deploy my-app:latest
```
---
## Resources
- **Easypanel Docs:** https://docs.easypanel.io
- **Docker Docs:** https://docs.docker.com
- **Astro Docs:** https://docs.astro.build
- **Node.js Docker Best Practices:** https://github.com/nodejs/docker-node
---
## Support
For issues or questions:
1. Check troubleshooting section
2. Review Easypanel documentation
3. Check project logs
4. Contact DevOps team
---
**Last Updated:** 2026-03-02
**Skill Version:** 1.0.0
**Status:** ✅ Production Ready