Hướng dẫn deploy
Deploy Go lên TOSE
Biên dịch binary Go tĩnh trong stage build, rồi copy vào image Alpine nhỏ chạy bằng user không phải root.
Trước khi bắt đầu
- Một Go module (go.mod) nằm trong repository GitHub.
- Server đọc cổng từ PORT hoặc lắng nghe cổng 3000.
- 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 golang:1.25-alpine AS build
WORKDIR /src
COPY go.mod ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app .
FROM alpine:3.22
RUN adduser -D app
USER app
COPY --from=build /out/app /app
ENV PORT=3000
EXPOSE 3000
CMD ["/app"]package main
import (
"fmt"
"log"
"net/http"
"os"
)
func main() {
port := os.Getenv("PORT")
if port == "" {
port = "3000"
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello from Go on TOSE")
})
// An empty host listens on every interface, including 0.0.0.0.
log.Fatal(http.ListenAndServe(":"+port, nil))
}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
- CGO_ENABLED=0 tạo binary tĩnh chạy được trên Alpine mà không cần glibc.
- Lắng nghe ":" + port để nhận kết nối trên mọi interface. "localhost:3000" chỉ nhận kết nối từ bên trong container.
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.