mirror of
https://github.com/andrey271192/Domain_web.git
synced 2026-09-20 14:41:58 +00:00
Bundle geoexport-premium (Docker, docs, Next.js) alongside the working static site mirror; production VPS install still uses site/. Co-authored-by: Cursor <cursoragent@cursor.com>
4.3 KiB
4.3 KiB
Deployment
This guide covers deploying GeoExport (geoexport-premium) on a VPS or container platform. For the static mirror that is production-ready today, use andrey271192/Domain_web.
Prerequisites
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 GB | 2 GB+ |
| Disk | 10 GB | 20 GB+ (geo databases grow) |
| OS | Linux (Debian/Ubuntu/Alpine) | Ubuntu 22.04 LTS |
Software:
- Docker 24+ and Docker Compose v2, or
- Node.js 20+ with PostgreSQL 16 and Redis 7
Option 1 — Docker Compose (recommended)
1. Clone and configure
git clone https://github.com/andrey271192/geoexport.git geoexport
cd geoexport
cp .env.example .env
# Edit DATABASE_URL / secrets if not using compose defaults
2. Start stack
docker compose up -d --build
Services:
| Name | Image | Host port |
|---|---|---|
web |
Built from Dockerfile |
3000 |
postgres |
postgres:16-alpine |
5432 |
redis |
redis:7-alpine |
6379 |
Verify:
curl -f http://localhost:3000
docker compose logs -f web
3. Reverse proxy (nginx)
server {
listen 80;
server_name geo.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Add TLS with Certbot or Caddy. Set NEXT_PUBLIC_APP_URL=https://geo.example.com in .env and restart web.
Option 2 — Bare Node.js
git clone https://github.com/andrey271192/geoexport.git geoexport
cd geoexport
cp .env.example .env
# Point DATABASE_URL and REDIS_URL to your instances
npm install
npm run build
NODE_ENV=production npm run start
Use pm2 or systemd for process supervision:
# /etc/systemd/system/geoexport.service
[Unit]
Description=GeoExport Next.js
After=network.target
[Service]
Type=simple
User=geoexport
WorkingDirectory=/opt/geoexport
EnvironmentFile=/opt/geoexport/.env
ExecStart=/usr/bin/npm run start
Restart=on-failure
[Install]
WantedBy=multi-user.target
Option 3 — Domain_web mirror (available now)
One-line install on a fresh VPS:
curl -fsSL https://raw.githubusercontent.com/andrey271192/Domain_web/main/install.sh | sudo bash
- Site files:
/opt/domain_web/site/ - Node service:
geoexport-siteon127.0.0.1:4173 - nginx on port 80
Update cached JSON:
cd /opt/domain_web/site
curl -fsSL https://geoexport.org/api/presets -o data/presets.json
curl -fsSL https://geoexport.org/api/sources -o data/sources.json
curl -fsSL https://geoexport.org/api/last-update -o data/last-update.json
curl -fsSL https://geoexport.org/api/routing/presets -o data/routing-presets.json
sudo systemctl restart geoexport-site
Environment variables
See .env.example. Critical production values:
| Variable | Notes |
|---|---|
NEXT_PUBLIC_APP_URL |
Canonical public URL |
DATABASE_URL |
Required when Prisma is enabled |
REDIS_URL |
Required for cache/rate limits |
GEOEXPORT_UPSTREAM |
Set only for hybrid/mirror mode |
Database migrations (roadmap)
When Prisma lands in this repo:
npx prisma migrate deploy
npx prisma db seed
Until then, Docker Postgres is provisioned but unused by the app.
Updates
Docker:
git pull
docker compose up -d --build
Domain_web:
cd /opt/domain_web && sudo git pull && sudo systemctl restart geoexport-site
Health checks
| Check | Command |
|---|---|
| HTTP | curl -sf http://localhost:3000 |
| Postgres | docker compose exec postgres pg_isready -U geoexport |
| Redis | docker compose exec redis redis-cli ping |
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Export/search 502 | Upstream unreachable | Check GEOEXPORT_UPSTREAM, outbound HTTPS |
| Empty presets | DB not seeded | Use cached JSON or run seed (roadmap) |
| Docker build fails | Missing lockfile | npm install locally, commit package-lock.json |
| Port 3000 in use | Conflict | Set PORT=3001 in .env and compose |