Render, AWS, DigitalOcean과 같은 다양한 무료 및 유료 호스팅 옵션을 통해 애플리케이션 배포에 대한 접근성이 점점 높아지고 있습니다. 그러나 반복적인 호스팅 비용 없이 애플리케이션을 배우고, 실험하고, 배포하려는 개발자에게는 Raspberry Pi가 탁월한 대안을 제공합니다. 이 작지만 강력한 장치를 사용하면 웹 애플리케이션 호스팅을 위한 Linux 기반 서버를 직접 만들 수 있습니다.
이 블로그에서는 MySQL(Raspberry Pi의 MariaDB) 및 Prisma ORM을 사용하여 TypeScript Node.js 애플리케이션을 배포하는 방법을 살펴보겠습니다. 라즈베리 파이. 또한 역방향 프록시를 위해 NGINX를 구성하고 Ngrok을 사용하여 애플리케이션을 인터넷에 노출합니다. 뛰어들어 보세요!
라즈베리파이
Linux 기반 운영 체제를 실행하는 저렴한 단일 보드 컴퓨터입니다. IoT 또는 웹 애플리케이션을 위한 자체 서버를 만드는 데 이상적입니다.
Node.js 및 TypeScript
Node.js는 서버에서 JavaScript를 실행하기 위한 런타임 환경이고, TypeScript는 JavaScript에 정적 타이핑을 추가하여 코드베이스를 보다 쉽게 유지 관리할 수 있습니다.
MySQL(Raspberry Pi의 MariaDB)
인기 있는 관계형 데이터베이스 시스템인 MariaDB는 MySQL과 호환되며 Raspberry Pi용으로 충분히 가볍습니다.
프리즈마 ORM
유형이 안전한 쿼리 언어 및 스키마 마이그레이션을 통해 데이터베이스 상호 작용을 단순화하는 ORM(객체 관계형 매핑) 도구입니다.
NGINX
고성능 HTTP 서버 및 역방향 프록시 서버. Node.js 애플리케이션으로 트래픽을 라우팅하는 데 도움이 됩니다.
응록
복잡한 네트워크 구성 없이 로컬에서 호스팅되는 애플리케이션을 인터넷에 안전하게 노출시키는 터널링 도구입니다.
OS 설치
Raspberry Pi OS와 같은 OS로 Raspberry Pi를 설정하세요. Raspberry Pi Imager를 사용하여 Raspberry Pi와 호환되는 다른 OS를 찾아보세요.
IP 주소 찾기
Angry IP Scanner와 같은 도구를 사용하여 Raspberry Pi의 IP 주소를 알아보세요. Raspberry Pi가 로컬 컴퓨터와 동일한 네트워크에 연결되어 있는지 확인하세요.
라즈베리 파이 상태 확인
ping <IP_ADDRESS_OF_RPI>
SSH를 라즈베리 파이로
ssh <username>@<IP_ADDRESS_OF_RPI>
<사용자 이름> Raspberry Pi의 사용자 이름 및
시스템 업데이트
sudo apt update && sudo apt upgrade
Git 설치
git이 설치되어 있는지 확인하세요. 그렇지 않은 경우 아래 명령을 실행하여 git을 설치하세요
sudo apt install git
노드 js를 설치하려면 nvm(Node Version Manager)을 사용합니다. 명령줄을 통해 다양한 버전의 노드를 빠르게 설치하고 사용할 수 있습니다.
NVM 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
설치 확인
nvm --version
Node.js 최신 LTS 버전 설치
nvm install --lts
Node.js 및 npm 설치 확인
node --version # v22.12.0 npm --version # 10.9.0
Raspberry Pi OS의 경우 MariaDB를 설치하겠습니다.
MariaDB SQL Server 설치
sudo apt install mariadb-server
MariaDB 보안 설치
sudo mysql_secure_installation
메시지에 따라 데이터베이스를 보호하세요.
MariaDB 클라이언트에 로그인
sudo mysql
MariaDB의 루트 비밀번호 설정
먼저 데이터베이스 서버에 부여 테이블을 다시 로드하라고 지시해야 합니다.
MariaDB [(none)]> FLUSH PRIVILEGES;
아래 쿼리로 루트 비밀번호를 변경하세요.
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
MariaDB CLI를 종료하려면 종료 명령을 사용하세요.
MariaDB [(none)]> exit; Bye
루트 사용자로 MariaDB 클라이언트에 로그인
ping <IP_ADDRESS_OF_RPI>
루트 사용자의 비밀번호를 입력하세요.
새 데이터베이스와 사용자를 만들어 보겠습니다. 우리가 만든 새 데이터베이스에 대한 모든 권한을 새 사용자에게 부여할 예정입니다.
데이터베이스 생성
ssh <username>@<IP_ADDRESS_OF_RPI>
비밀번호로 새 사용자 만들기
sudo apt update && sudo apt upgrade
새 사용자 생성 시 권한 부여
sudo apt install git
권한 테이블 플러시
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
exit 명령을 사용하여 mysql 클라이언트를 종료합니다.
신규 사용자로 로그인
nvm --version
사용자 생성 시 사용한 비밀번호를 입력하세요.
사용자가 데이터베이스를 나열할 수 있는지 확인
nvm install --lts
그렇습니다! 우리는 애플리케이션에서 이 데이터베이스와 사용자를 사용할 것입니다.
Github 저장소 복제
node --version # v22.12.0 npm --version # 10.9.0
프로젝트 저장소로 이동
sudo apt install mariadb-server
프로젝트 종속성 설치
sudo mysql_secure_installation
TypeScript 코드 컴파일
sudo mysql
tsconfig.json 파일에서 outDir 속성을 구성했는지 확인하세요. 이는 컴파일된 JavaScript 코드가 생성될 디렉터리를 지정합니다. 기본적으로 일반적으로 dist로 설정되어 있지만 프로젝트 구조에 따라 맞춤 설정할 수 있습니다.
프로젝트에서 환경 변수를 사용하는 경우 Raspberry Pi에서 설정해야 합니다. 프로젝트의 루트 디렉터리에 .env 파일을 생성하여 모든 환경 변수를 저장할 수 있습니다.
.env 파일 생성
MariaDB [(none)]> FLUSH PRIVILEGES;
.env 파일 업데이트
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
환경 변수 입력
MariaDB [(none)]> exit; Bye
Ctrl O를 눌러 파일을 저장한 다음 Enter를 누르고 Ctrl X를 눌러 편집기를 종료하세요.
Prisma를 사용하는 경우 모든 스키마 파일은 prisma/schema 디렉터리에 위치합니다. 이제 이러한 스키마를 데이터베이스에 배포하겠습니다.
아래 명령어를 실행하세요
sudo mysql -u root -p
이 명령은 .env 파일에 제공된 DATABASE_URL을 사용하여 스키마를 데이터베이스에 배포합니다. MySQL 클라이언트에 로그인하고 SHOW TABLES 명령을 사용하여 배포를 확인할 수 있습니다. 모든 테이블을 나열합니다.
PM2는 애플리케이션을 온라인으로 관리하고 유지하는 데 도움이 되는 Node.js 애플리케이션의 생산 프로세스 관리자입니다. Node.js 애플리케이션을 관리하려면 PM2를 설치하세요.
ping <IP_ADDRESS_OF_RPI>
NGINX 설치
ssh <username>@<IP_ADDRESS_OF_RPI>
사이트 구성 만들기
sudo apt update && sudo apt upgrade
아래 코드 추가
sudo apt install git
각 부분에 대한 설명은 다음과 같습니다.
listen 80; 이 지시어는 NGINX에게 HTTP 트래픽의 기본 포트인 포트 80에서 수신하도록 지시합니다.
server_name
location / { ... } 이 블록은 NGINX가 루트 URL(/)에 대한 요청을 처리하는 방법을 정의합니다. 기본적으로 이는 요청이 루트에 이루어질 때마다 지정된 포트에서 실행되는 백엔드(Node.js 애플리케이션)로 전달되어야 함을 NGINX에 지시합니다.
proxy_pass http://localhost:YOUR_NODE_JS_PORT; 이는 들어오는 요청을 Node.js 애플리케이션으로 전달하는 핵심 라인입니다. YOUR_NODE_JS_PORT를 Node.js 앱이 실행 중인 실제 포트(예: 5000)로 바꿉니다. 요청은 동일한 시스템(localhost)에서 실행되는 Node.js 애플리케이션으로 전송됩니다.
proxy_http_version 1.1; 이는 프록시 연결을 위해 HTTP 버전을 1.1로 설정하여 WebSocket과 같은 특정 기능을 더 잘 처리할 수 있도록 합니다.
proxy_set_header 업그레이드 $http_upgrade; 이 헤더를 사용하면 WebSocket 연결을 업그레이드할 수 있으며 이는 실시간 애플리케이션에 중요합니다.
proxy_set_header Connection 'upgrade'; 이 헤더는 업그레이드 헤더와 함께 WebSocket 연결을 관리하는 데 사용되어 연결이 HTTP에서 WebSocket으로 올바르게 업그레이드되도록 합니다.
proxy_set_header Host $host; 이는 클라이언트 요청의 원래 Host 헤더를 백엔드 서버로 전달합니다. 이는 원래 Host 헤더를 사용하는 애플리케이션(예: 라우팅 또는 가상 호스팅)에 유용합니다.
proxy_cache_bypass $http_upgrade; 이렇게 하면 WebSocket 연결이 캐싱 메커니즘을 우회하여 캐싱으로 인한 간섭 없이 실시간 통신이 작동하도록 할 수 있습니다.
Ctrl O를 눌러 파일을 저장한 다음 Enter를 누르고 Ctrl X를 눌러 편집기를 종료하세요.
사이트 구성 활성화
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
NGINX 구성 테스트
nvm --version
테스트가 성공하면 아래와 같은 내용이 표시됩니다.
ping <IP_ADDRESS_OF_RPI>
변경 사항을 적용하려면 NGINX 서버를 다시 시작하세요
ssh <username>@<IP_ADDRESS_OF_RPI>
NGINX 서버 상태 확인
sudo apt update && sudo apt upgrade
프로젝트로 이동
PM2를 사용하여 애플리케이션 시작
package.json에 스크립트를 설정한 경우 아래 명령을 사용하세요.
sudo apt install git
또는 dist 디렉터리에 있는 index.js 파일을 사용하여 애플리케이션을 직접 실행할 수도 있습니다.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
아래 명령을 사용하여 로그를 확인할 수도 있습니다.
nvm --version
이제 로컬 컴퓨터의 브라우저에 Raspberry Pi의 IP 주소를 입력하여 앱을 확인하세요. 작동해야합니다. 로컬 컴퓨터와 Raspberry Pi가 모두 동일한 네트워크에 연결되어 있는지 확인하세요. 그렇지 않으면 작동하지 않습니다.
이제 앱을 Raspberry Pi에 배포했으므로 Raspberry Pi가 실행되고 있는 동일한 네트워크에서만 앱에 액세스할 수 있습니다. 인터넷에 노출시키기 위해서는 포트포워딩을 이용해야 합니다.
라우터 설정을 사용하여 포트 포워딩을 설정할 수 있지만, 여기서는 ngrok를 사용하겠습니다. Ngrok은 개발에 유용하므로 무료로 테스트 목적으로 앱을 실행할 수 있습니다.
https://dashboard.ngrok.com/login을 방문하여 계정을 만드세요. Raspberry Pi에서 ngrok를 구성하려면 인증 토큰이 필요합니다.
Ngrok 설치
nvm install --lts
ngrok 구성 파일에 인증 토큰을 추가하세요
node --version # v22.12.0 npm --version # 10.9.0
기본 nginx 구성 파일 비활성화
sudo apt install mariadb-server
NGINX 구성 테스트
sudo mysql_secure_installation
NGINX 서버를 다시 시작하여 변경 사항을 적용하세요
sudo mysql
온라인으로 앱 배포
MariaDB [(none)]> FLUSH PRIVILEGES;
Node.js 앱으로 트래픽을 전달하는 https://xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx.ngrok-free.app/와 같은 URL을 제공해야 합니다. 다른 네트워크에서 이 URL로 이동하여 애플리케이션에 액세스할 수 있습니다.
이 가이드에서는 Raspberry Pi에 MySQL 및 Prisma가 포함된 TypeScript Node.js 애플리케이션을 성공적으로 배포했습니다. 우리는 NGINX를 역방향 프록시로 구성하고 Ngrok를 사용하여 인터넷을 통해 애플리케이션에 액세스할 수 있도록 했습니다. 이 설정을 사용하면 비용 효율적인 자체 호스팅 개발 서버를 갖게 됩니다.
이 접근 방식은 전체 스택 애플리케이션 배포를 학습하고 실험하는 동시에 서버 관리에 대한 귀중한 경험을 얻는 데 적합합니다.
이 가이드를 사용하여 애플리케이션을 배포하는 경우 알려주세요. 여러분의 경험을 듣고 싶습니다! ?
위 내용은 Raspberry Pi에서 MySQL 및 Prisma를 사용하여 Node.js 애플리케이션 배포의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!