RIDM Apps アプリホスティング
GitHub リポジトリをつなぐと、push のたびにビルド・デプロイされ、<name>.ridm.ai で公開されます。アプリごとに専用の PostgreSQL データベースが付くので、会員・投稿・記録をすぐに保存できます。四柱推命(サジュ)API で作ったアプリも、API をまったく使わない一般的な Web アプリもホスティングできます。
マイアプリで申し込む デプロイガイド プランと料金 ドメイン検索
AIにアプリを作らせよう — 無料の電子書籍(韓国語)
電子書籍を選ぶ(韓国語)オールインワン占いアプリ(韓国語)キャラクターチャットアプリ(韓国語)会員制Webアプリ(韓国語)
4つのステップでデプロイ
- 申し込み — コンソールのマイアプリで、プランとアドレス(サブドメイン)を選びます。
- GitHub 連携 — GitHub App
ridm-apps-builderをインストールし、リポジトリとブランチを選びます。リポジトリには読み取り権限だけが付与されます。 - Push — つないだブランチに push するたびにビルドが始まります。ビルド履歴と失敗ログはアプリ画面に表示されます。
- 公開 — 成功したビルドは自動チェックを経て、すぐに公開されます。有料プランの課金は、最初のデプロイが公開されるまで始まりません。
HTML・CSS・JS だけの静的サイトも、コンテナ(Dockerfile)として公開します。ファイルを public/ に置き、下の Dockerfile をリポジトリのルートに追加してください。ポート 3000、ユーザー 1000 などの要件はデプロイガイドにあります。
FROM busybox:1.36
COPY --chown=1000:1000 public /www
USER 1000:1000
EXPOSE 3000
CMD ["httpd", "-f", "-p", "3000", "-h", "/www"]
大きな3D・画像中心の静的サイトのホスティング
three.js のゲームのように、数十MBのモデル(.glb)やテクスチャがあるサイトは、busybox ではなく nginx:alpine を使ってください。busybox の httpd はキャッシュヘッダーを設定できず、.glb や .ktx2 を汎用ファイルとして配信します。下の2つのファイルをリポジトリのルートに置くと、ビルド結果(Vite なら dist/)がそのまま配信されます。
# Dockerfile
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:1.27-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build --chown=1000:1000 /app/dist /usr/share/nginx/html
USER 1000:1000
EXPOSE 3000
ENTRYPOINT ["nginx", "-g", "daemon off;"]
# nginx.conf — runs as user 1000 on a read-only file system: only /tmp is writable.
worker_processes 1;
pid /tmp/nginx.pid;
error_log /dev/stderr warn;
events { worker_connections 1024; }
http {
include /etc/nginx/mime.types;
# 3D types missing from the stock mime.types (.wasm is already there).
types {
model/gltf-binary glb;
model/gltf+json gltf;
image/ktx2 ktx2;
}
default_type application/octet-stream;
client_body_temp_path /tmp/client_temp;
proxy_temp_path /tmp/proxy_temp;
fastcgi_temp_path /tmp/fastcgi_temp;
uwsgi_temp_path /tmp/uwsgi_temp;
scgi_temp_path /tmp/scgi_temp;
access_log off;
server_tokens off;
sendfile on;
tcp_nopush on;
# Text formats only. .glb / .ktx2 / images are already compressed.
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_types text/css application/javascript text/javascript application/json
image/svg+xml model/gltf+json application/wasm text/plain;
# /assets/ = bundler output whose names carry a content hash (Vite default).
map $uri $cache_control {
~^/assets/ "public, max-age=31536000, immutable";
~*\.(?:glb|gltf|bin|ktx2|basis|hdr|webp|avif|png|jpe?g|svg|mp3|ogg|wasm|js|css|woff2?)$ "public, max-age=3600";
default "no-cache";
}
# Errors (404 etc.) are never cached, so a file added later shows up at once.
map $status $cache_header {
~^(200|206|304)$ $cache_control;
default "no-store";
}
server {
listen 3000;
root /usr/share/nginx/html;
add_header Cache-Control $cache_header always;
# Keeps the site out of search results. Delete this line to be indexed.
add_header X-Robots-Tag "noindex, nofollow" always;
location / {
try_files $uri $uri/ =404;
}
}
}
- キャッシュ —
/assets/以下のファイル(ハッシュ付きの名前のビルド結果)は1年、その他のモデル・画像・スクリプトは1時間キャッシュされ、index.htmlは毎回再検証されます。コードでimport sceneUrl from './models/scene.glb?url'のようにモデルを読み込むと、Vite がハッシュ付きの名前で/assets/に置きます。public/のファイルは名前が変わらないため、キャッシュは1時間だけです。RIDM Apps は、アプリのCache-Control・Content-Type・X-Robots-Tagをそのまま通します。 - 並列ダウンロード —
/assets/のパスは、訪問者1人あたりの同時ダウンロード数が多めに許可されます。モデルやテクスチャが多い場合は/assets/以下に置いてください。 - 圧縮 — HTML・JS・CSS・JSON・
.gltf・.wasmは、上の設定の gzip とエッジの Brotli で圧縮されます。.glb・.ktx2・画像は転送時にこれ以上小さくならないため、ファイル自体を小さくしてください。メッシュは Draco または meshopt、テクスチャは KTX2(Basis)または WebP です。例:npx @gltf-transform/cli optimize scene.glb scene.opt.glb --compress meshopt --texture-compress webp(three.js ではMeshoptDecoder・DRACOLoader・KTX2LoaderをGLTFLoaderに組み込みます)。 - サイズ — 数十MBのバンドルや15MB前後の単一ファイルも、問題なくアップロード・配信できます。リポジトリは GitHub の制限(1ファイル100MB)に従い、ビルドは20分以内に終わる必要があります。Git LFS で保存したファイルはビルドに含まれないため、通常どおりコミットしてください。
- 月間転送量 — 訪問者に送るものはすべて月間転送量に数えられます。初めての訪問者はすべてのファイルをダウンロードするため(30MBのサイトに初回訪問1,000回で約30GB)、ファイルを小さくするのが最も効果的です。プランごとの転送量は料金ページにあります。
- 検索での表示 — 上の設定は
X-Robots-Tag: noindexでサイトを検索結果に出さないようにしています。検索エンジンにインデックスさせるには、その行を削除してください。
含まれるもの
- アプリごとの専用 PostgreSQL データベース — 接続情報は環境変数(
DATABASE_URLなど)で渡され、接続には証明書検証付きの TLS を使います。 - 暗号化された環境変数 — 保存した値は暗号化して保管され、あとから表示することはできません。保存すると、新しい値でアプリが再起動します。
- データベースのバックアップ — アプリ画面からデータベースのダンプを作成してダウンロードできます(1日3回まで)。
- シークレットのブロック — リポジトリにキー・トークン・パスワードが見つかると、ビルドが止まり、何も公開されません。
- 独自ドメイン — RIDM で購入したドメインは、コンソールの「ドメイン → アプリにつなぐ」で、ルート、
www、またはplay.example.comのようなサブドメイン(1階層、英小文字・数字・ハイフン)を選びます。DNS レコードと証明書は RIDM が作成します。 - どんなスタックでも — 必要なのは、リポジトリのルートにある
Dockerfileと、ポート 3000 で応答するアプリだけです。Next.js 用のスターター Dockerfile はデプロイガイドにあります。
プラン
- 無料プラン — 誰かが訪問すると起動し、リクエストのない状態が15分続くと停止します。停止後の最初の訪問は数秒かかることがあります。パートナーごとに1つです。
- 有料プラン — 常時稼働し、アプリが落ちても自動で再起動します。料金は前払いのクレジットから毎月差し引かれます。
各プランの料金・メモリー・データベース容量・月間転送量は料金ページをご覧ください。解約すると、支払い済みの期間の終わりにアプリが停止し、その後30日間はデータのダウンロードやアプリの復元ができます。
知っておきたい制限
- WebSocket は有料プランで使えます(アプリごとに同時120、1メッセージ64KB)。すべての制限はホスティングドキュメントにあります。
- ファイルシステムは読み取り専用です。残しておくデータはデータベースに保存してください。
- 送信メールのポート(SMTP)はブロックされています。メールは HTTPS API のあるメールサービスから送ってください。
- データベースの同時接続は、アプリごとに3つまでです。
すべての条件はデプロイガイドと利用規約 第3章(韓国語)をご覧ください。
ゼロから作ってみたいですか?
AIで作る会員制Webアプリ(韓国語)は、無料の実践型電子書籍です。AIコーディングツールに最初の1文を渡すだけで、新規登録とログイン、会員専用メモ帳、RIDM Apps での公開までを順に進められます。四柱推命アプリを作るならオールインワン占いAI(韓国語)を、四柱推命APIの連携から始めるなら開発者向けはじめにガイドをご覧ください。
コードなしで作るなら、Baro(ブロック型アプリビルダー)で四柱推命や占いのブロックを組み合わせてアプリを作り、ダウンロードしたデプロイバンドルをそのまま RIDM Apps にアップロードしてください。
制作からサーバー・データベース・ドメインまでをまとめて任せたい場合は、ワンストップアプリ開発をご覧ください。
お問い合わせ:contact@float.do · 運営:FLOAT Co., Ltd.