Sync system was timing out because discovery endpoints (keyword, changes) also ran schema extraction (~10-15s per tool). Now discovery is fast (npm metadata + DB writes only) and a new /api/sync/enrich endpoint handles schema extraction in time-budgeted chunks. Railway executor was crashing without restarting due to unhandled promise rejections, no restart policy, and no health checks. Added crash protection, graceful shutdown, cache size limits, railway.toml with ALWAYS restart policy, and upgraded Deno from 1.39 to 2.1.9. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
27 lines
820 B
Docker
27 lines
820 B
Docker
# Use latest Deno LTS image for stability
|
|
FROM denoland/deno:2.1.9
|
|
|
|
# Install OpenSSH client for tools that need SSH access (e.g., exe-dev)
|
|
USER root
|
|
RUN apt-get update && apt-get install -y --no-install-recommends openssh-client curl && rm -rf /var/lib/apt/lists/*
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Set Deno cache directory (ephemeral, rebuilds on restart)
|
|
ENV DENO_DIR=/tmp/deno-cache
|
|
|
|
# Copy server file and startup script
|
|
COPY server.ts .
|
|
COPY start.sh .
|
|
RUN chmod +x start.sh
|
|
|
|
# Expose port (Railway will set PORT env var)
|
|
EXPOSE 3002
|
|
|
|
# Docker-level health check as a fallback
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \
|
|
CMD curl -f http://localhost:${PORT:-3002}/health || exit 1
|
|
|
|
# Run startup script that fixes permissions then starts Deno as deno user
|
|
CMD ["./start.sh"]
|