RIDM Apps 應用程式託管
連結 GitHub 儲存庫後,每次 push 都會自動建置、部署,並以 <name>.ridm.ai 網址公開。每個應用程式都附有專屬的 PostgreSQL 資料庫,可以立即儲存會員、文章與紀錄。無論是用八字 API 做的應用程式,還是完全不用 API 的一般網頁應用程式,都能放上來。
交給 AI 打造應用程式 — 免費電子書(韓文)
部署只要四個步驟
- 申請 — 在主控台的「我的應用程式」選擇方案與網址(子網域)。
- 連結 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 遊戲這樣模型(.glb)與材質達數十 MB 的網站,請改用 nginx:alpine 而非 busybox。busybox 的 httpd 無法設定快取標頭,而且會把 .glb、.ktx2 當成一般檔案格式傳送。把下面兩個檔案放在儲存庫根目錄,建置結果(以 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 小時,index.html則每次重新確認。在程式碼中以import sceneUrl from './models/scene.glb?url'的方式載入模型,Vite 就會以雜湊檔名放進/assets/。放在public/的檔案名稱不變,因此只快取 1 小時。應用程式送出的Cache-Control、Content-Type、X-Robots-Tag,RIDM Apps 不會更動,原樣傳遞。 - 同時下載的檔案 — 一位訪客可同時下載的檔案數,
/assets/路徑的額度較寬。模型、材質較多時,請集中放到/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 的上限(單一檔案 100MB),建置須在 20 分鐘內完成。以 Git LFS 上傳的檔案不會進入建置,請以一般 commit 放入。
- 每月傳輸量 — 傳給訪客的檔案大小全部計入每月傳輸量。第一次來的訪客會下載全部檔案(30MB 的網站被 1,000 人第一次開啟,約 30GB),因此縮小檔案的效果最大。各方案的傳輸量請見 價格頁面。
- 搜尋曝光 — 上述設定以
X-Robots-Tag: noindex讓網站不出現在搜尋結果。若要出現在搜尋結果,請刪除那一行。
包含的功能
- 每個應用程式專屬 PostgreSQL 資料庫 — 連線資訊以環境變數(
DATABASE_URL等)提供,並以連憑證都會驗證的 TLS 連線。 - 加密的環境變數 — 儲存的值會加密保管,之後無法再次檢視。儲存後,應用程式會以新值重新啟動。
- 資料庫備份 — 可在應用程式畫面建立資料庫傾印並下載(每天最多 3 次)。
- 阻擋機密值 — 若在儲存庫中發現金鑰、token、密碼,就會停止建置,不會公開。
- 連結自己的網域 — 在 RIDM 購買的網域,可在主控台的「網域管理 → 連結應用程式」選擇根網域、
www,或play.example.com這類子網址(一層,英文小寫、數字、連字號)來連結。DNS 記錄與憑證由 RIDM 建立。 - 任何技術堆疊都可以 — 只要儲存庫根目錄有
Dockerfile,且應用程式在連接埠 3000 回應即可。Next.js 的入門 Dockerfile 請見 部署指南。
方案
- 免費方案 — 有人造訪時啟動,15 分鐘沒有請求就會停止。停止後的第一次造訪可能會慢幾秒。每個合作夥伴 1 個。
- 付費方案 — 常時執行,應用程式當掉時會自動重新啟動。費用每月從儲值的點數中扣除。
各方案的價格、記憶體、資料庫容量、每月傳輸量請見 價格頁面。解約後,應用程式會在已付款期間結束當天停止,之後 30 天內仍可下載資料或還原。
需要知道的限制
- WebSocket 在付費方案中可以使用(每個應用程式同時 120 個,訊息 64KB)。詳細上限請見 託管文件。
- 檔案系統為唯讀,需要永久保存的資料請存進資料庫。
- 寄信用的連接埠(SMTP)已封鎖。請透過提供 HTTPS API 的郵件服務寄送郵件。
- 資料庫連線每個應用程式最多同時 3 個。
完整條件請見 部署指南 與 服務條款 第3章(韓文)。
想從零開始做做看?
用 AI 打造會員制網頁應用程式(韓文)是一本免費的實作型電子書:只要給 AI 程式開發工具一句起始指令,就能一路引導您完成註冊與登入、會員專屬記事本,直到在 RIDM Apps 上公開。想做八字應用程式,請見 整合運勢 AI 解決方案(韓文);想從八字 API 串接開始,請見 開發者入門指南。
想不寫程式就做出來,可以在 Baro(組合式應用程式製作) 挑選八字、運勢積木組合出應用程式,再把下載的部署套件直接上傳到 RIDM Apps。
若想一次搞定製作、伺服器、資料庫與網域,請見 一站式應用程式開發。
聯絡我們:contact@float.do · 營運:FLOAT Co., Ltd.