server
예제
const server = Bun.serve({
// `routes` requires Bun v1.2.3+
routes: {
// Static routes
"/api/status": new Response("OK"),
// Dynamic routes
"/users/:id": req => {
return new Response(`Hello User ${req.params.id}!`);
},
// Per-HTTP method handlers
"/api/posts": {
GET: () => new Response("List posts"),
POST: async req => {
const body = await req.json();
return Response.json({ created: true, ...body });
},
},
// Wildcard route for all routes that start with "/api/" and aren't otherwise matched
"/api/*": Response.json({ message: "Not found" }, { status: 404 }),
// Redirect from /blog/hello to /blog/hello/world
"/blog/hello": Response.redirect("/blog/hello/world"),
// Serve a file by lazily loading it into memory
"/favicon.ico": Bun.file("./favicon.ico"),
},
// (optional) fallback for unmatched routes:
// Required if Bun's version < 1.2.3
fetch(req) {
return new Response("Not Found", { status: 404 });
},
});
console.log(`Server running at ${server.url}`);
실행
# 자동으로 현재위치의 index 파일을 찾아서 실행함
bun .
bun index.ts
# 파일이 변경되면 리로드함
bun --watch index.ts
https 로 만들기
cerbot을 이용해서 인증서를 발급받아 https 로 통신하도록 한다.
공유기를 쓴다면 80포트가 포트포워딩 되어있어야 한다.
sudo apt install certbot -y
sudo certbot certonly --standalone -d dev.sixtick.net
-
sudo: 인증서 파일이 생성되는 경로(/etc/letsencrypt)는 시스템 보안 영역이므로 관리자 권한으로 실행합니다.
-
certbot: Let’s Encrypt의 인증서를 자동으로 발급/갱신해 주는 클라이언트 프로그램 이름입니다.
-
certonly: 인증서만 발급받고, 내 컴퓨터에 설치된 웹 서버(Nginx, Apache 등)의 설정 파일은 자동으로 수정하지 말라는 옵션입니다. (Bun.serve 내부에서 직접 파일 경로를 지정해 불러올 때 필수적입니다.)
-
—standalone: “독립 실행” 방식입니다. Certbot이 임시로 자체 웹 서버(80 포트)를 내 컴퓨터에 잠깐 구동하여, Let’s Encrypt 검증 서버에게 “내가 이 도메인의 진짜 소유자가 맞다”고 증명하는 방식입니다.
-
-d dev.sixtick.net: 인증서를 발급받을 대상 도메인 주소를 지정합니다.
-
Certificate is saved at(인증서): /etc/letsencrypt/live/dev.sixtick.net/fullchain.pem
-
Key is saved at(개인키): /etc/letsencrypt/live/dev.sixtick.net/privkey.pem
// serve 에 적용 코드 . 소유자가 root임... 변경해줘야함
Bun.serve({
port: 3443,
tls: {
cert: Bun.file("/etc/letsencrypt/live/dev.sixtick.net/fullchain.pem"),
key: Bun.file("/etc/letsencrypt/live/dev.sixtick.net/privkey.pem"),
},
fetch(request) {
return new Response("Secure Bun Server");
}
});
만약 도커를 쓴다면 복사본의 소유권을 변경해서 넘겨주자
mkdir ./certs
sudo cp /etc/letsencrypt/live/dev.sixtick.net/fullchain.pem ./certs/
sudo cp /etc/letsencrypt/live/dev.sixtick.net/privkey.pem ./certs/
sudo chown -R 1000:1000 ./certs