Hướng dẫn deploy
Deploy mọi ứng dụng có Dockerfile lên TOSE
Mọi ngôn ngữ đều chạy được trên TOSE khi repository có Dockerfile. TOSE build Dockerfile đó và chạy container trên cổng của project.
Trước khi bắt đầu
- Một repository GitHub có file tên Dockerfile ở thư mục gốc.
- Container phục vụ HTTP trên một cổng, mặc định 3000 nếu bạn không đổi cổng của project.
- Tài khoản TOSE và một workspace trên app.tose.sh, repository đã kết nối qua TOSE GitHub App.
- Node.js để cài TOSE CLI: npm install -g @tosesh/tose. Bạn cũng có thể làm mọi bước trên dashboard.
Ví dụ
Đây là các file của ứng dụng mẫu trong repository tose-web. Bài test của nó build image cho linux/amd64, chạy container và gọi thử trang.
FROM node:22-alpine
WORKDIR /app
COPY server.js ./
USER node
ENV PORT=3000
EXPOSE 3000
CMD ["node", "server.js"]const http = require('node:http');
const port = Number(process.env.PORT || 3000);
http
.createServer((req, res) => {
res.writeHead(200, { 'content-type': 'text/plain' });
res.end('Hello from a Dockerfile on TOSE\n');
})
.listen(port, '0.0.0.0', () => console.log(`listening on 0.0.0.0:${port}`));Deploy
1. Đặt Dockerfile ở thư mục gốc của repository
TOSE build file tên Dockerfile ở thư mục gốc của repository.
2. Kiểm tra image trên máy
TOSE build cho linux/amd64. Hãy build cho cùng nền tảng rồi mở http://localhost:3000.
docker build --platform linux/amd64 -t my-app . docker run --rm -p 3000:3000 my-app3. Tạo project
Trên dashboard, tạo project từ repository GitHub và giữ cổng 3000, hoặc chạy tose up trong repository và trả lời các câu hỏi. Bước này chỉ làm một lần.
tose up4. Deploy và kiểm tra
Các lần deploy sau chỉ cần một lệnh. Xem log build khi build lỗi, xem log đang chạy khi ứng dụng không phản hồi.
tose deploy my-workspace/my-app --json tose status my-workspace/my-app --json tose logs my-workspace/my-app --build -n 200 tose logs my-workspace/my-app -n 1005. Đặt biến môi trường
Chọn project, đặt biến rồi redeploy để container khởi động với các biến đó. Không commit secret vào repository.
tose use my-workspace/my-app tose env set DATABASE_URL=… API_BASE_URL=… tose redeploy
Lưu ý cho stack này
- Ví dụ là server Node.js, nhưng quy tắc giống nhau với Python, Ruby, PHP, Rust hay Java: bind 0.0.0.0, lắng nghe cổng của project và lưu dữ liệu cần giữ trên ổ đĩa lưu trữ lâu dài.
- Khi không có Dockerfile, TOSE nhận diện các stack phổ biến (package.json, go.mod và các loại khác) và tự tạo Dockerfile. Hãy commit Dockerfile của riêng bạn khi cần build ổn định.
Kích thước và chi phí
- Project mới có 1 vCPU, 2 GB RAM và 1 replica. Bạn có thể đổi vCPU và RAM trên dashboard trong các mức 0.5, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 16.
- Khi ví của workspace chưa có số dư dương, mỗi project dùng tối đa 2 vCPU và 2 GB RAM.
- Với giá cơ bản, kích thước mặc định tốn $29.20 cho một tháng 730 giờ.
Khi có lỗi
- "no Dockerfile in project and OPENROUTER_KEY not configured for AI generation"
- TOSE không tìm thấy Dockerfile. Thêm file tên đúng là Dockerfile ở thư mục gốc của repository.
- "AI Dockerfile generation failed"
- TOSE không tự tạo được Dockerfile cho repository này. Hãy commit Dockerfile của bạn, bắt đầu từ ví dụ trên trang này.
- Deploy xong nhưng ứng dụng không phản hồi hoặc liên tục khởi động lại
- Ứng dụng phải lắng nghe trên 0.0.0.0 và đúng cổng của project (mặc định 3000). TOSE không tự đặt PORT; hãy đặt trong Dockerfile hoặc bằng tose env set. Xem tose logs để biết lỗi.
- Build dừng mà code của bạn không báo lỗi
- Mỗi lần build có 2 GB bộ nhớ, 2 CPU và 45 phút. Giảm bộ nhớ khi build (ví dụ ít job song song hơn) hoặc cài ít dependency hơn.
- "exec format error" khi container khởi động
- Image hoặc binary bên trong không dành cho linux/amd64. Dùng base image có bản amd64 và không ép nền tảng khác.