M1 맥미니로 서버를 만들어 보자

avatar
🎉
Macbook Pro 16인치 구매 기념

나의 첫 Mac이자
이제는 고인이 된 맥북 R.I.P.
 Macbook Pro (Retina, 13-inch, Late 2013)

Why?

작년 이맘때쯤 M1 맥미니 기본형을 구입했다.

M1 맛보기용 & 16인치 Macbook Pro 출시까지 버티기용

M1칩셋의 저발열, 저전력, 저소음의 강점을 이용해 개인프로젝트 서버용으로 활용해보기로했다.

Docker 컨테이너 실행

독립된 환경을 위해 우분투 이미지를 이용해 컨테이너화

docker run \
--name macmini-server -it \
-p 443:443 \
-v ~/Workspace/MyApp:/app ubuntu:20.04

Let's Encrypt 무료인증서 발급

certbot 으로 발급진행

apt install certbot
certbot certonly --standalone -d [도메인]

웹서버(nginx) 설정

nginx 설치

apt update
apt install nginx

certbot으로 발급받은 인증서 경로를 추가
https(443) 요청시 nodejs(3000) 웹서버로 접근하도록 설정

server {
    listen 443 ssl;

    server_name [도메인];

    ssl_certificate /etc/letsencrypt/live/[도메인]/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/[도메인]/privkey.pem;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://127.0.0.1:3000/;
      proxy_redirect off;
    }
}

nodejs 서버

index.js
const http = require("http");
http.createServer((req, res) => res.end("Hello World!")).listen(3000);

nodejs 서버 실행

$ node /app/index.js

공유기 Router 설정

맥미니의 내부포트를 공유기 외부포트로 포워딩

ASUS 공유기 포트포워딩 설정 화면

후기

NestJS 웹앱과 mysql 컨테이너를 추가로 올려
사이드 프로젝트의 API 서버로 사용하였다

성능은 개인프로젝트로 사용하기에 차고 넘치는 사양이었고
한달간 중단없이 돌렸으나 전기세 역시 크게 체감되지 않았다

소규모 서비스 또는 개인용으로 사용하기에 매우 괜찮은듯 👍🏻

Hello World