> 데이터 베이스 > MySQL 튜토리얼 > Raspberry Pi에서 MySQL 및 Prisma를 사용하여 Node.js 애플리케이션 배포

Raspberry Pi에서 MySQL 및 Prisma를 사용하여 Node.js 애플리케이션 배포

Linda Hamilton
풀어 주다: 2025-01-06 04:06:38
원래의
488명이 탐색했습니다.

Deploy a Node.js Application Using MySQL and Prisma on a Raspberry Pi

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 애플리케이션으로 트래픽을 라우팅하는 데 도움이 됩니다.

응록

복잡한 네트워크 구성 없이 로컬에서 호스팅되는 애플리케이션을 인터넷에 안전하게 노출시키는 터널링 도구입니다.


전제 조건

  1. 작동하는 Raspberry Pi - Raspberry Pi에서 SSH가 활성화되어 있고 원격으로 액세스할 수 있는지 확인하세요.
  2. Github 저장소 - Node.js TypeScript 애플리케이션은 간편한 배포를 위해 GitHub 저장소에서 호스팅되어야 합니다.
  3. Ngrok 계정 - Ngrok에서 무료 계정을 만들어 Raspberry Pi 앱을 인터넷에 노출하기 위한 인증 토큰을 받으세요.

라즈베리 파이 설정

  1. OS 설치

    Raspberry Pi OS와 같은 OS로 Raspberry Pi를 설정하세요. Raspberry Pi Imager를 사용하여 Raspberry Pi와 호환되는 다른 OS를 찾아보세요.

  2. IP 주소 찾기

    Angry IP Scanner와 같은 도구를 사용하여 Raspberry Pi의 IP 주소를 알아보세요. Raspberry Pi가 로컬 컴퓨터와 동일한 네트워크에 연결되어 있는지 확인하세요.

  3. 라즈베리 파이 상태 확인

    ping <IP_ADDRESS_OF_RPI>
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  4. SSH를 라즈베리 파이로

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

    <사용자 이름> Raspberry Pi의 사용자 이름 및 IP 주소를 입력한 후 비밀번호를 입력하세요.

  5. 시스템 업데이트

    sudo apt update && sudo apt upgrade
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  6. Git 설치

    git이 설치되어 있는지 확인하세요. 그렇지 않은 경우 아래 명령을 실행하여 git을 설치하세요

    sudo apt install git
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

Node.js 설치

노드 js를 설치하려면 nvm(Node Version Manager)을 사용합니다. 명령줄을 통해 다양한 버전의 노드를 빠르게 설치하고 사용할 수 있습니다.

  1. NVM 설치

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  2. 설치 확인

    nvm --version
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  3. Node.js 최신 LTS 버전 설치

    nvm install --lts
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  4. Node.js 및 npm 설치 확인

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

MySQL(MariaDB) 설정

Raspberry Pi OS의 경우 MariaDB를 설치하겠습니다.

  1. MariaDB SQL Server 설치

    sudo apt install mariadb-server
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  2. MariaDB 보안 설치

    sudo mysql_secure_installation
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

    메시지에 따라 데이터베이스를 보호하세요.

    • 현재 루트 비밀번호 입력: - 루트 사용자의 현재 비밀번호를 입력하라는 메시지가 나타나면 Enter를 누르세요(아직 설정되지 않았으므로).
    • 루트 비밀번호 설정: - 루트 비밀번호를 설정하라는 메시지가 표시되면 n을 입력합니다(나중에 설정합니다).
    • 익명 사용자 제거: - 익명 사용자를 제거하고 보안을 강화하려면 Y를 입력하세요. (테스트 목적으로 n을 입력하여 익명 사용자를 유지할 수 있습니다.)
    • 원격으로 루트 로그인을 허용하지 않습니다: - 원격으로 루트 로그인을 허용하려면 n을 입력합니다(선택 사항이지만 보안 수준은 낮음).
    • 테스트 데이터베이스 제거: - 테스트 데이터베이스를 제거하고 액세스하려면 y를 입력합니다. (보관하고 싶으면 n을 입력하세요.)
  3. MariaDB 클라이언트에 로그인

    sudo mysql
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  4. MariaDB의 루트 비밀번호 설정

    먼저 데이터베이스 서버에 부여 테이블을 다시 로드하라고 지시해야 합니다.

    MariaDB [(none)]> FLUSH PRIVILEGES;
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

    아래 쿼리로 루트 비밀번호를 변경하세요.

    MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
    
    로그인 후 복사
    로그인 후 복사

    나만의 비밀번호로.

    MariaDB CLI를 종료하려면 종료 명령을 사용하세요.

    MariaDB [(none)]> exit;
    Bye
    
    로그인 후 복사
    로그인 후 복사
  5. 루트 사용자로 MariaDB 클라이언트에 로그인

    ping <IP_ADDRESS_OF_RPI>
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

    루트 사용자의 비밀번호를 입력하세요.

데이터베이스 및 사용자 설정

새 데이터베이스와 사용자를 만들어 보겠습니다. 우리가 만든 새 데이터베이스에 대한 모든 권한을 새 사용자에게 부여할 예정입니다.

  1. 데이터베이스 생성

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  2. 비밀번호로 새 사용자 만들기

    sudo apt update && sudo apt upgrade
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  3. 새 사용자 생성 시 권한 부여

    sudo apt install git
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  4. 권한 테이블 플러시

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  5. exit 명령을 사용하여 mysql 클라이언트를 종료합니다.

  6. 신규 사용자로 로그인

    nvm --version
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

    사용자 생성 시 사용한 비밀번호를 입력하세요.

  7. 사용자가 데이터베이스를 나열할 수 있는지 확인

    nvm install --lts
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

그렇습니다! 우리는 애플리케이션에서 이 데이터베이스와 사용자를 사용할 것입니다.


Node.js 애플리케이션 설정

  1. Github 저장소 복제

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  2. 프로젝트 저장소로 이동

    sudo apt install mariadb-server
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  3. 프로젝트 종속성 설치

    sudo mysql_secure_installation
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  4. TypeScript 코드 컴파일

    sudo mysql
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

tsconfig.json 파일에서 outDir 속성을 구성했는지 확인하세요. 이는 컴파일된 JavaScript 코드가 생성될 디렉터리를 지정합니다. 기본적으로 일반적으로 dist로 설정되어 있지만 프로젝트 구조에 따라 맞춤 설정할 수 있습니다.

환경 변수 설정(선택 사항)

프로젝트에서 환경 변수를 사용하는 경우 Raspberry Pi에서 설정해야 합니다. 프로젝트의 루트 디렉터리에 .env 파일을 생성하여 모든 환경 변수를 저장할 수 있습니다.

  1. .env 파일 생성

    MariaDB [(none)]> FLUSH PRIVILEGES;
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  2. .env 파일 업데이트

    MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '<new_password>';
    
    로그인 후 복사
    로그인 후 복사
  3. 환경 변수 입력

    MariaDB [(none)]> exit;
    Bye
    
    로그인 후 복사
    로그인 후 복사

    , 이전 단계에서 생성한 것과 동일합니다.

    Ctrl O를 눌러 파일을 저장한 다음 Enter를 누르고 Ctrl X를 눌러 편집기를 종료하세요.

Prisma 스키마 마이그레이션

Prisma를 사용하는 경우 모든 스키마 파일은 prisma/schema 디렉터리에 위치합니다. 이제 이러한 스키마를 데이터베이스에 배포하겠습니다.

아래 명령어를 실행하세요

sudo mysql -u root -p
로그인 후 복사

이 명령은 .env 파일에 제공된 DATABASE_URL을 사용하여 스키마를 데이터베이스에 배포합니다. MySQL 클라이언트에 로그인하고 SHOW TABLES 명령을 사용하여 배포를 확인할 수 있습니다. 모든 테이블을 나열합니다.


PM2 설정

PM2는 애플리케이션을 온라인으로 관리하고 유지하는 데 도움이 되는 Node.js 애플리케이션의 생산 프로세스 관리자입니다. Node.js 애플리케이션을 관리하려면 PM2를 설치하세요.

ping <IP_ADDRESS_OF_RPI>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

NGINX 구성

  1. NGINX 설치

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  2. 사이트 구성 만들기

    sudo apt update && sudo apt upgrade
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  3. 아래 코드 추가

    sudo apt install git
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

    각 부분에 대한 설명은 다음과 같습니다.

    listen 80; 이 지시어는 NGINX에게 HTTP 트래픽의 기본 포트인 포트 80에서 수신하도록 지시합니다.

    server_name ; 이는 Raspberry Pi의 도메인 이름 또는 IP 주소를 지정합니다. Raspberry Pi의 실제 IP 주소로 바꾸십시오. NGINX는 이 주소로 전송된 요청에 응답합니다.

    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를 눌러 편집기를 종료하세요.

  4. 사이트 구성 활성화

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  5. NGINX 구성 테스트

    nvm --version
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

    테스트가 성공하면 아래와 같은 내용이 표시됩니다.

    ping <IP_ADDRESS_OF_RPI>
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  6. 변경 사항을 적용하려면 NGINX 서버를 다시 시작하세요

    ssh <username>@<IP_ADDRESS_OF_RPI>
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  7. NGINX 서버 상태 확인

    sudo apt update && sudo apt upgrade
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사

애플리케이션 실행

  1. 프로젝트로 이동

  2. 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가 모두 동일한 네트워크에 연결되어 있는지 확인하세요. 그렇지 않으면 작동하지 않습니다.


Ngrok을 사용하여 앱을 세상에 노출하기

이제 앱을 Raspberry Pi에 배포했으므로 Raspberry Pi가 실행되고 있는 동일한 네트워크에서만 앱에 액세스할 수 있습니다. 인터넷에 노출시키기 위해서는 포트포워딩을 이용해야 합니다.

라우터 설정을 사용하여 포트 포워딩을 설정할 수 있지만, 여기서는 ngrok를 사용하겠습니다. Ngrok은 개발에 유용하므로 무료로 테스트 목적으로 앱을 실행할 수 있습니다.

https://dashboard.ngrok.com/login을 방문하여 계정을 만드세요. Raspberry Pi에서 ngrok를 구성하려면 인증 토큰이 필요합니다.

  1. Ngrok 설치

    nvm install --lts
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  2. ngrok 구성 파일에 인증 토큰을 추가하세요

    node --version
    # v22.12.0
    
    npm --version
    # 10.9.0
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  3. 기본 nginx 구성 파일 비활성화

    sudo apt install mariadb-server
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  4. NGINX 구성 테스트

    sudo mysql_secure_installation
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  5. NGINX 서버를 다시 시작하여 변경 사항을 적용하세요

    sudo mysql
    
    로그인 후 복사
    로그인 후 복사
    로그인 후 복사
  6. 온라인으로 앱 배포

    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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿