[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-72142":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":15,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},72142,"devpush","hunvreus\u002Fdevpush","hunvreus","Like Vercel, but open source and for all languages.","https:\u002F\u002Fdevpu.sh",null,"Python",4671,179,16,10,0,22,28.77,"MIT License",false,"main",[23,24,25,26,27,28,29,30,31,32,33],"continuous-deployment","deployment","django","fastapi","flask","github","nextjs","nodejs","php","python","vercel","2026-06-12 02:02:59","# \u002Fdev\u002Fpush\n\nAn open-source and self-hostable alternative to Vercel, Render, Netlify and the likes. It allows you to build and deploy any app (Python, Node.js, PHP, ...) with zero-downtime updates, real-time logs, team management, customizable environments and domains, etc.\n\n\u003Cpicture>\n  \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fdevpu.sh\u002Fmedia\u002Fscreenshot-dark.png\">\n  \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fdevpu.sh\u002Fmedia\u002Fscreenshot-light.png\">\n  \u003Cimg alt=\"A screenshot of a deployment in \u002Fdev\u002Fpush.\" src=\"https:\u002F\u002Fdevpu.sh\u002Fmedia\u002Fscreenshot-dark.png\">\n\u003C\u002Fpicture>\n\n## Key features\n\n- **Git-based deployments**: Push to deploy from GitHub with zero-downtime rollouts and instant rollback.\n- **Multi-language support**: Python, Node.js, PHP... basically anything that can run on Docker.\n- **Environment management**: Multiple environments with branch mapping and encrypted environment variables.\n- **Real-time monitoring**: Live and searchable build and runtime logs.\n- **Team collaboration**: Role-based access control with team invitations and permissions.\n- **Custom domains**: Support for custom domain and automatic Let's Encrypt SSL certificates.\n- **Self-hosted and open source**: Run on your own servers, MIT licensed.\n\n## Documentation\n\nSee [devpu.sh\u002Fdocs](https:\u002F\u002Fdevpu.sh\u002Fdocs) for installation, configuration, and usage. For technical details, see [ARCHITECTURE.md](ARCHITECTURE.md).\n\n## Prerequisites\n\n- **Server**: Ubuntu 20.04+ or Debian 11+ with SSH access and sudo privileges. A [Hetzner CPX31](https:\u002F\u002Fdevpu.sh\u002Fdocs\u002Fguides\u002Fcreate-hetzner-server) works well.\n- **DNS**: We recommend [Cloudflare](https:\u002F\u002Fcloudflare.com).\n- **GitHub account**: You'll create a GitHub App for login and repository access.\n- **Email provider**: A [Resend](https:\u002F\u002Fresend.com) account or SMTP credentials for login emails and invitations.\n\n## Quickstart\n\n> ⚠️ Supported on Ubuntu\u002FDebian. Other distros may work but aren't officially supported (yet).\n\n1. **Install** on a fresh server:\n\n```bash\ncurl -fsSL https:\u002F\u002Finstall.devpu.sh | sudo bash\n```\n\n2. **Create a GitHub App** at [devpu.sh\u002Fdocs\u002Fguides\u002Fcreate-github-app](https:\u002F\u002Fdevpu.sh\u002Fdocs\u002Fguides\u002Fcreate-github-app)\n\n3. **Configure** by editing `\u002Fvar\u002Flib\u002Fdevpush\u002F.env` with: `APP_HOSTNAME`, `DEPLOY_DOMAIN`, `LE_EMAIL`, `EMAIL_SENDER_ADDRESS`, `RESEND_API_KEY` (or SMTP settings), and your GitHub App credentials.\n\n4. **Set DNS**:\n   - `A` `example.com` → server IP (app hostname)\n   - `A` `*.example.com` → server IP (deployments)\n\n5. **Start** the service:\n\n```bash\nsudo systemctl start devpush.service\n```\n\nFor more information, including manual installation or updates, refer to [the documentation](https:\u002F\u002Fdevpu.sh\u002Fdocs\u002Finstallation).\n\n## Development\n\n**Prerequisites**: Docker and Docker Compose v2+. On macOS, [Colima](https:\u002F\u002Fgithub.com\u002Fabiosoft\u002Fcolima) works well as an alternative to Docker Desktop.\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fhunvreus\u002Fdevpush.git\ncd devpush\nmkdir -p data\ncp .env.dev.example data\u002F.env\n# Edit data\u002F.env with your GitHub App credentials\n```\n\nStart the stack:\n\n```bash\n.\u002Fscripts\u002Fstart.sh\n```\n\nThe stack auto-detects development mode on macOS and enables hot reloading. Data is stored in `.\u002Fdata\u002F`.\n\n## Registry catalog\n\nDefault runner\u002Fpreset definitions ship in `registry\u002F` and are copied to `DATA_DIR\u002Fregistry\u002F` during install\u002Fupdate.\nSee `registry\u002FREADME.md` for the catalog format and override rules.\n\n**Key scripts**:\n\n- `.\u002Fscripts\u002Fstart.sh` \u002F `stop.sh` \u002F `restart.sh` — manage the full stack or selected components (`--components \u003Ccsv>`)\n- `.\u002Fscripts\u002Fcompose.sh logs -f app` — view logs\n- `.\u002Fscripts\u002Fdb-generate.sh` — create database migration\n- `.\u002Fscripts\u002Fclean.sh` — remove all Docker resources and data\n- `.\u002Fscripts\u002Fupdate.sh` — update by ref (defaults to `app` only; use `--all` \u002F `--components` \u002F `--full` to expand scope)\n\nSee [ARCHITECTURE.md](ARCHITECTURE.md) for codebase structure.\n\n## Scripts\n\n| Script                     | What it does                                                                                                                                                                      |\n| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `scripts\u002Fbackup.sh`        | Create backup of data directory, database, and code metadata (`--output \u003Cfile>`, `--verbose`)                                                                                     |\n| `scripts\u002Fclean.sh`         | Stop stack and remove all Docker resources and data (`--keep-docker`, `--keep-data`, `--yes`)                                                                                     |\n| `scripts\u002Fcompose.sh`       | Docker compose wrapper with correct files\u002Fenv (`--`)                                                                                                                              |\n| `scripts\u002Fdb-generate.sh`   | Generate Alembic migration (prompts for message)                                                                                                                                  |\n| `scripts\u002Fdb-migrate.sh`    | Apply Alembic migrations (`--timeout \u003Csec>`)                                                                                                                                      |\n| `scripts\u002Finstall.sh`       | Server setup: Docker, user, clone repo, .env, systemd (`--repo \u003Curl>`, `--ref \u003Cref>`, `--yes`, `--no-telemetry`, `--verbose`)                                                     |\n| `scripts\u002Frestart.sh`       | Restart services (`--components \u003Ccsv>`, `--no-migrate`)                                                                                                                            |\n| `scripts\u002Frestore.sh`       | Restore from backup archive (`--archive \u003Cfile>`, `--no-db`, `--no-data`, `--no-code`, `--no-restart`, `--no-backup`, `--remove-runners`, `--timeout \u003Csec>`, `--yes`, `--verbose`) |\n| `scripts\u002Fstart.sh`         | Start stack (`--components \u003Ccsv>`, `--no-migrate`, `--timeout \u003Csec>`, `--verbose`)                                                                                                 |\n| `scripts\u002Fstatus.sh`        | Show stack status                                                                                                                                                                 |\n| `scripts\u002Fstop.sh`          | Stop services (`--components \u003Ccsv>`, `--hard`)                                                                                                                                     |\n| `scripts\u002Funinstall.sh`     | Uninstall from server (`--yes`, `--skip-backup`, `--no-telemetry`, `--verbose`)                                                                                                   |\n| `scripts\u002Fupdate.sh`        | Update by tag (default updates `app` only; use `--all`, `--full`, or `--components \u003Ccsv>` to expand scope) (`--ref \u003Ctag>`, `--all`, `--full`, `--components \u003Ccsv>`, `--no-migrate`, `--no-telemetry`, `--yes`, `--verbose`) |\n\n## Environment variables\n\n| Variable                            | Description                                                                                                                              |\n| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| `SECRET_KEY`                        | App secret for sessions\u002FCSRF. Auto-generated by install.sh.                                                                              |\n| `ENCRYPTION_KEY`                    | Fernet key for encrypting secrets. Auto-generated by install.sh.                                                                         |\n| `POSTGRES_PASSWORD`                 | PostgreSQL password. Auto-generated by install.sh.                                                                                       |\n| `SERVICE_UID`                       | Container user UID. Auto-set to match host user.                                                                                         |\n| `SERVICE_GID`                       | Container user GID. Auto-set to match host user.                                                                                         |\n| `SERVER_IP`                         | Public IP of the server. Auto-detected by install.sh.                                                                                    |\n| `CERT_CHALLENGE_PROVIDER`           | ACME challenge provider: `default` (HTTP-01) or `cloudflare`, `route53`, `gcloud`, `digitalocean`, `azure` (DNS-01). Default: `default`. |\n| `GITHUB_APP_ID`                     | GitHub App ID.                                                                                                                           |\n| `GITHUB_APP_NAME`                   | GitHub App name.                                                                                                                         |\n| `GITHUB_APP_PRIVATE_KEY`            | GitHub App private key (PEM format, use `\\n` for newlines).                                                                              |\n| `GITHUB_APP_WEBHOOK_SECRET`         | GitHub webhook secret.                                                                                                                   |\n| `GITHUB_APP_CLIENT_ID`              | GitHub OAuth client ID.                                                                                                                  |\n| `GITHUB_APP_CLIENT_SECRET`          | GitHub OAuth client secret.                                                                                                              |\n| `APP_HOSTNAME`                      | Domain for the app (e.g., `example.com`).                                                                                                |\n| `DEPLOY_DOMAIN`                     | Domain for deployments (wildcard root). No default—set explicitly (e.g., `deploy.example.com`).                                          |\n| `LE_EMAIL`                          | Email for Let's Encrypt notifications.                                                                                                   |\n| `EMAIL_SENDER_ADDRESS`              | Email sender for invites\u002Flogin.                                                                                                          |\n| `RESEND_API_KEY`                    | API key for [Resend](https:\u002F\u002Fresend.com). Optional if SMTP is configured.                                                               |\n| `SMTP_HOST`                         | SMTP host. When set with username\u002Fpassword, SMTP is used instead of Resend.                                                             |\n| `SMTP_PORT`                         | SMTP port. Default: `587`.                                                                                                              |\n| `SMTP_USERNAME`                     | SMTP username. Required when using SMTP.                                                                                                |\n| `SMTP_PASSWORD`                     | SMTP password. Required when using SMTP.                                                                                                |\n| `GOOGLE_CLIENT_ID`                  | Google OAuth client ID (optional).                                                                                                       |\n| `GOOGLE_CLIENT_SECRET`              | Google OAuth client secret (optional).                                                                                                   |\n| `APP_NAME`                          | Display name. Default: `\u002Fdev\u002Fpush`.                                                                                                      |\n| `APP_DESCRIPTION`                   | App description.                                                                                                                         |\n| `EMAIL_SENDER_NAME`                 | Sender display name. Default: `\u002Fdev\u002Fpush`.                                                                                               |\n| `POSTGRES_DB`                       | Database name. Default: `devpush`.                                                                                                       |\n| `POSTGRES_USER`                     | Database user. Default: `devpush-app`.                                                                                                   |\n| `REDIS_URL`                         | Redis URL. Default: `redis:\u002F\u002Fredis:6379`.                                                                                                |\n| `DOCKER_HOST`                       | Docker API. Default: `tcp:\u002F\u002Fdocker-proxy:2375`.                                                                                          |\n| `DATA_DIR`                          | Data directory. Default: `\u002Fvar\u002Flib\u002Fdevpush`.                                                                                             |\n| `APP_DIR`                           | Code directory. Default: `\u002Fopt\u002Fdevpush`.                                                                                                 |\n| `DEFAULT_CPUS`                      | Default CPU limit per deployment. No limit if not provided.                                                                              |\n| `MAX_CPUS`                          | Maximum allowed CPU override per project. Used only when `DEFAULT_CPUS` is set. Required to let user customize CPU.                      |\n| `DEFAULT_MEMORY_MB`                 | Default memory limit (MB) per deployment. No limit if not provided.                                                                      |\n| `MAX_MEMORY_MB`                     | Maximum allowed memory override per project. Used only when `DEFAULT_MEMORY_MB` is set. Required to let user customize memory.           |\n| `JOB_TIMEOUT_SECONDS`               | Job timeout (seconds). Default: `320`.                                                                                                   |\n| `JOB_MAX_TRIES`                     | Max retries per background job. Default: `3`.                                                                                            |\n| `DEPLOYMENT_TIMEOUT_SECONDS`        | Deployment timeout (seconds). Default: `300`.                                                                                            |\n| `CONTAINER_DELETE_GRACE_SECONDS`    | Wait before deleting containers after stop\u002Ffailure to let logs ship. Default: `3`.                                                       |\n| `LOG_STREAM_GRACE_SECONDS`          | Grace window for deployment log streaming (when to connect\u002Fclose SSE around terminal states). Default: `5`.                              |\n| `LOG_LEVEL`                         | Logging level. Default: `WARNING`.                                                                                                       |\n| `MAGIC_LINK_TTL_SECONDS`            | Magic link validity (seconds). Default: `900`.                                                                                           |\n| `AUTH_TOKEN_TTL_DAYS`               | Auth cookie\u002FJWT lifetime (days). Default: `30`.                                                                                          |\n| `AUTH_TOKEN_REFRESH_THRESHOLD_DAYS` | Refresh auth token when expiring within N days. Default: `1`.                                                                            |\n| `AUTH_TOKEN_ISSUER`                 | JWT issuer for auth_token. Default: `devpush-app`.                                                                                       |\n| `AUTH_TOKEN_AUDIENCE`               | JWT audience for auth_token. Default: `devpush-web`.                                                                                     |\n\n## Support the project\n\n- [Contribute code](\u002FCONTRIBUTING.md)\n- [Report issues](https:\u002F\u002Fgithub.com\u002Fhunvreus\u002Fdevpush\u002Fissues)\n- [Sponsor me](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fhunvreus)\n- [Star the project on GitHub](https:\u002F\u002Fgithub.com\u002Fhunvreus\u002Fdevpush)\n- [Join the Discord chat](https:\u002F\u002Fdevpu.sh\u002Fchat)\n\n## License\n\n[MIT](\u002FLICENSE.md)\n","\u002Fdev\u002Fpush 是一个开源的、自托管的替代方案，类似于 Vercel、Render 和 Netlify 等平台，支持多种语言的应用构建与部署。该项目的核心功能包括基于 Git 的零停机部署、多语言支持（如 Python, Node.js, PHP 等）、环境管理（含分支映射和加密环境变量）、实时监控（可搜索的构建和运行日志）、团队协作（基于角色的访问控制）以及自定义域名支持等。特别适合需要灵活部署选项且希望完全控制其应用基础设施的企业或开发者使用。采用 MIT 许可证发布，确保了广泛的可用性和修改自由度。",2,"2026-06-11 03:40:32","high_star"]