概要
/dev/pushは、VercelやRender、Netlifyのようなサービスの オープンソース自ホスティング代替 です。 ゼロダウンタイム更新 やチーム管理、カスタムドメインなど豊富な機能を提供。 Python、Node.js、PHP など多言語対応で、Gitベースのデプロイをサポート。 自己サーバー上で動作 し、MITライセンスで公開。 簡単なセットアップスクリプトと詳細な環境変数管理を備えた開発者向けプラットフォーム。
/dev/pushとは
- Vercel、Render、Netlify 等のクラウドサービスの 自ホスティング型代替
- オープンソース、MITライセンス
- 自己サーバー で稼働可能
- Python、Node.js、PHP 等、Dockerで動作するアプリ全般に対応
- ゼロダウンタイム更新 ・即時ロールバック
- リアルタイムログ ・検索可能なビルド/実行ログ
- チーム管理 (ロールベース権限、招待、アクセス制御)
- カスタムドメイン ・自動SSL(Let's Encrypt)
- 環境変数暗号化 ・複数環境・ブランチマッピング
- GitHub連携 によるプッシュデプロイ
- 自己管理型 でプライバシーとコストコントロール
主な機能
- Gitベースデプロイ :GitHubへのプッシュで自動デプロイ、ゼロダウンタイムロールアウト、即時ロールバック
- 多言語サポート :Python、Node.js、PHPなどDockerで動作可能な言語
- 環境管理 :複数環境、ブランチごとのマッピング、暗号化環境変数
- リアルタイム監視 :ライブ・検索可能なビルド&実行ログ
- チームコラボレーション :ロールベースのアクセス制御、チーム招待・権限
- カスタムドメイン :独自ドメイン、Let's Encrypt自動SSL証明書
- オープンソース・自ホスティング :自身のサーバーで稼働、MITライセンス
サポート・参加方法
- コード貢献 ・バグ報告・スポンサー支援・GitHubスター・Discord参加
- ユーザー向けドキュメント :devpu.sh/docs
- 技術ドキュメント :ARCHITECTURE
クイックスタート
- 対象OS :Ubuntu/Debian(他ディストリは未サポート)
- インストール方法 :
- SSHでサーバーにログインし、以下コマンド実行
curl -fsSL https://raw.githubusercontent.com/hunvreus/devpush/main/scripts/prod/install.sh | sudo bash - sudo権限必須
- SSHでサーバーにログインし、以下コマンド実行
- 推奨サーバー :Hetzner CPX31
- Hetznerサーバー自動プロビジョン :
- Hetznerアカウント作成
- APIトークン生成
- プロビジョンスクリプト実行
curl -fsSL https://raw.githubusercontent.com/hunvreus/devpush/main/scripts/prod/provision-hetzner.sh | bash -s -- --token <hetzner_api_key> [--user <login_user>] [--name <hostname>] [--region <fsn1|nbg1|hel1|ash|hil|sin>] [--type <cpx11|cpx21|cpx31|cpx41|cpx51>] - デフォルト:region hil、type cpx31
- DNS設定 :
- APP_HOSTNAME用Aレコードと、DEPLOY_DOMAIN用ワイルドカードAレコード作成
- Cloudflare利用時はSSL/TLS「Full (strict)」、レコードはproxied
- SSHログイン :プロビジョンスクリプトで作成されたユーザーでSSH接続
- セキュリティ強化 :
- UFW、fail2ban、root SSH無効化など
- 以下で自動化可能
curl -fsSL https://raw.githubusercontent.com/hunvreus/devpush/main/scripts/prod/harden.sh | sudo bash -s -- --ssh
- インストール手順 :
- サーバーにSSH接続
- /dev/pushインストールコマンド実行
- devpushユーザーに切り替え
- .envファイル編集(必須項目:LE_EMAIL, APP_HOSTNAME, DEPLOY_DOMAIN, EMAIL_SENDER_ADDRESS, RESEND_API_KEY, GitHub App設定)
- サービス起動
scripts/prod/start.sh --migrate - アクセスURL確認:https://<APP_HOSTNAME>
アップデート手順
- devpushユーザーで実行
- 通常アップデート
scripts/prod/update.sh --all - フルアップグレード(ダウンタイム有)
scripts/prod/update.sh --full -y - 特定コンポーネントのみ更新
scripts/prod/update.sh --components <component_name>
開発環境構築
- macOS向け開発スクリプト
- Colima、Loki Dockerプラグインのインストール
scripts/dev/install.sh - 環境変数設定
cp .env.dev.example .env - スタック起動(ログ出力)
scripts/dev/start.sh- --prune: ビルド前に不要イメージ削除
- --cache: ビルドキャッシュ利用(デフォルト無効)
- DB初期化
scripts/dev/db-migrate.sh - コード変更は即時反映(SSEエンドポイントはブラウザタブ再読込必要)
- worker再起動
docker-compose restart worker-arq - マイグレーション適用
scripts/dev/db-migrate.sh
スクリプト一覧
| スクリプト | 機能概要 | | --- | --- | | scripts/dev/install.sh | Colima & Lokiプラグインセットアップ | | scripts/dev/start.sh | スタック起動(ログ出力、--prune, --cache対応) | | scripts/dev/build-runners.sh | runnerイメージビルド(--cache対応) | | scripts/dev/db-generate.sh | Alembicマイグレーション生成 | | scripts/dev/db-migrate.sh | Alembicマイグレーション適用 | | scripts/dev/db-reset.sh | DB publicスキーマ初期化 | | scripts/dev/clean.sh | スタック停止・データ削除(--hardで全削除) | | scripts/prod/provision-hetzner.sh | Hetznerサーバープロビジョン | | scripts/prod/install.sh | サーバーセットアップ(Docker, Loki, ユーザー, リポジトリ, .env) | | scripts/prod/harden.sh | システム強化(UFW, fail2ban, 自動アップデート, SSH強化) | | scripts/prod/start.sh | サービス起動(--migrate対応) | | scripts/prod/stop.sh | サービス停止(--downで強制停止) | | scripts/prod/restart.sh | サービス再起動(--migrate対応) | | scripts/prod/update.sh | タグによる更新(--all, --full, --components) | | scripts/prod/db-migrate.sh | 本番DBマイグレーション適用 | | scripts/prod/check-env.sh | .env必須キー検証 | | scripts/prod/update/app.sh | アプリのブルーグリーンアップデート | | scripts/prod/update/worker-arq.sh | worker-arqのドレイン対応ブルーグリーンアップデート | | scripts/prod/update/worker-monitor.sh | worker-monitorのブルーグリーンアップデート |
主要環境変数
- APP_NAME:アプリ名(デフォルト:/dev/push)
- APP_DESCRIPTION:説明
- URL_SCHEME:開発http/本番https
- LE_EMAIL:Let's Encrypt用メールアドレス
- APP_HOSTNAME:アプリ用ドメイン
- DEPLOY_DOMAIN:デプロイ用ドメイン(*.devpush.app等)
- SERVER_IP:サーバー公開IP
- SECRET_KEY:アプリ用シークレット(openssl rand -hex 32で生成)
- ENCRYPTION_KEY:Fernetキー(openssl rand -base64 32 | tr '+/' '-_'で生成)
- EMAIL_SENDER_ADDRESS/NAME:招待・ログイン用送信者情報
- RESEND_API_KEY:Resend用APIキー
- GitHub/Google OAuth設定:各種クライアントID/シークレット等
- POSTGRES_DB/USER/PASSWORD:PostgreSQL設定
- REDIS_URL:Redis接続URL
- DOCKER_HOST:Dockerデーモンアドレス
- TRAEFIK_CONFIG_DIR:Traefik設定ディレクトリ
- DEFAULT_CPU_QUOTA/MEMORY_MB:コンテナリソース制限
- JOB_TIMEOUT/COMPLETION_WAIT/DEPLOYMENT_TIMEOUT:各種タイムアウト
- LOG_LEVEL:ログレベル
- DB_ECHO:SQLログ有効化
- ENV:環境(development/production)
- ACCESS_DENIED_MESSAGE/WEBHOOK:サインイン拒否時のメッセージ・Webhook
- LOGIN_HEADER/TOASTER_HEADER:HTMLカスタマイズ用
GitHub App設定
- 認証コールバックURL :
- https://example.com/api/github/authorize/callback
- https://example.com/auth/github/callback
- Webhook URL :
- https://example.com/api/github/webhook
- 権限 :
- リポジトリ管理、チェック、コミットステータス、内容、デプロイ、イシュー、メタデータ、プルリク、Webhook等
- アカウントメールアドレス
- イベント購読 :インストールターゲット、Push、リポジトリ
サインインアクセス制御
- access.json で許可ユーザー/ドメイン/パターンを定義
- emails: 指定メールアドレス
- domains: 許可ドメイン
- globs: ワイルドカード
- regex: 正規表現
- ファイル未設定時は全メール許可
- ACCESS_DENIED_WEBHOOK設定時、拒否時にWebhookへ通知
- 送信内容:email, provider, ip, user_agent等
ライセンス
- MITライセンス