世界を動かす技術を、日本語で。

Devpush – Vercel、Render、Netlifyのオープンソースで自己ホスティング可能な代替手段

概要

/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権限必須
  • 推奨サーバー :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ライセンス

Hackerたちの意見

これめっちゃスタイリッシュだけど、coolify.ioはオープンソースで、もっと成熟したプロジェクトだと思う。

Coolify.ioは確かにもっと成熟してる。/dev/pushを作ったのは、Vercelの提供するUXに近い、よりスムーズな体験を提供したかったから。もっと多くのランタイムを追加する予定だし(例えばBunのPRもある)、カスタムコンテナやDocker Swarmのサポートも考えてる。これで一つのインスタンスで複数のサーバーを管理できるようになるよ。

Dokployの方が好きかな。Coolifyは時々ランダムなバグが出るし。

すごく快適そうだね。Herokuみたいなデプロイ管理の新しい選択肢がたくさんあるのは嬉しい。2018年の頃は、Herokuの機能レベルを超える良い選択肢を見つけるのが難しかったのを覚えてる。自分でDokkuのラッパーを作って、その方法でデプロイを管理してるけど、最近はそれに満足してる。でも、もっと色んな選択肢が出てきてるのを見るのはいいね。

それ、オープンソースにしたの?

これはHNの意見を聞くいい機会だね:自己管理のハードウェアにデプロイされたコンテナ化サービスの管理をスムーズにするシステムについて。私たちはCapRoverとCoolifyの両方を数年使ってるけど、実際の専用サーバー(HetznerやOVH)を借りるのが好き。クラウドよりずっと安いし、管理の負担も少ない。これらのツールのおかげで、物理サーバーをPaaSのように扱えるのが楽になる。数十のアプリやサービスを大きめのサーバーにデプロイしてバックアップも取ってる。最近のバックエンドは計算量が少なくて、たくさんのコンテナが一緒に快適に動ける。128GBのRAMと64コアはかなりの力を発揮するし、Hetznerでは驚くほど安い。固定の月額費用があると、精神的な負担も減るしね。安くてシンプルで、可用性の問題も人が思ってるよりずっと少ない。年に数回の小さなトラブルはあるけど、スタートアップには大した影響はない。Coolifyはもっと完成度が高くて成熟してるけど、正直言って、両方をたくさん使った結果、今はCapRoverのシンプルさに惹かれてる。DokployもCoolifyの大きな代替手段だって聞いたけど、詳しくは知らない。/dev/pushはどう比較する?この分野で他におすすめのツールはある?それとも、私が言ったツールについての意見は違う?

/dev/pushはVercelのUXを再現しようとしてるから、CapRoverよりもユーザーフレンドリーで見た目もいいかな?さらに、ほとんどの場合、ランタイムを選んでアプリをデプロイするのにDockerの設定がいらない。Python/Go/Node.jsのアプリを簡単な要件でデプロイしたいだけなら、すぐに始められるよ。ただ、カスタムDockerイメージを使えるようにする予定もあるよ。

devpu.shが大好きで、注目されてるのが嬉しい!このプロジェクトについては前から知ってたけど、htmx/pythonで書かれてるっていうのが面白いなと思った。redditのr/htmxで誰かが言及してるのを初めて見たし、その投稿を実際に見かけて面白かった。近い将来、これを試してみるかもしれないけど、正直言ってUIがあんまり好きじゃなくて、手動でコンテナをデプロイする方がいいかな。でも、彼らのアプローチもすごくいいし、いつかHetznerのVPSで試してみたい!このリポジトリにスターを付けたり、手伝えることがあったらぜひ!選択肢が多い方がいいからね(coolify、dockploy、devpu.sh)。個人的には、devpu.shが一番ミニマリストな感じがする。

これめっちゃかっこいいけど、ホスティング版を試すのが簡単じゃないのが残念だね。コメントでVercelのUXについて触れてたけど、ホスティング版のワンクリックインストールがその大事な部分だと思う。EDIT: アクセスが承認された - ありがとう!

自己ホスティングのアイデアは好きだけど、フロントエンドのデプロイについて考えなくていいのは、普段はMLやバックエンドのことしか考えない僕にとって大きな助けになってる。

UIが最近リリースされたLaravel Forgeの新しいUIにすごく似てるね。正直、ほぼ同じだよ。Laravel Forgeからインスパイアされたの?

うん、確かにたくさんインスピレーションをもらったよ。

これ、pikuに似てるけど、もっと複雑でGitHubに限定されてるね。[0] https://piku.github.io/

すごくクールだね。僕はウェブUIの構築に集中してたけど、CLIも追加したいと思ってるから、そのプロジェクトからインスピレーションをもらうつもりだよ。

Typescriptのデプロイを自動化するプロジェクトがあるんだけど…結局、Pythonの山になってる。これで、1つのクラスター **** の依存関係じゃなくて、2つも扱わなきゃいけなくなるのか。

みんなこの分野のお気に入りを挙げてるから、僕もCosmos Cloudを挙げるよ。今のところすごく安定してる。KASMワークスペースみたいな複雑なdocker composeベースのアプリケーションにも問題なく対応してるし(https://hub.docker.com/r/linuxserver/kasm / これはdocker内でdockerを動かす感じ)。インストール手順がメインサイトの方が最新だから、GitHubじゃなくてウェブサイトを貼っておくね: https://cosmos-cloud.io/