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

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>
    </ip_address_of_rpi>
  4. SSH를 라즈베리 파이로

    ssh <username>@<ip_address_of_rpi>
    </ip_address_of_rpi></username>

    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>';
    </new_password>

    나만의 비밀번호로.

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

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

    ping <ip_address_of_rpi>
    </ip_address_of_rpi>

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

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

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

  1. 데이터베이스 생성

    ssh <username>@<ip_address_of_rpi>
    </ip_address_of_rpi></username>
  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>';
    </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>
</ip_address_of_rpi>

NGINX 구성

  1. NGINX 설치

    ssh <username>@<ip_address_of_rpi>
    </ip_address_of_rpi></username>
  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>
    </ip_address_of_rpi>
  6. 변경 사항을 적용하려면 NGINX 서버를 다시 시작하세요

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

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
MySQL에서 뷰를 사용하는 한계는 무엇입니까?MySQL에서 뷰를 사용하는 한계는 무엇입니까?May 14, 2025 am 12:10 AM

mysqlviewshavelimitations : 1) 그들은 upportallsqloperations, datamanipulation throughviewswithjoinsorbqueries를 제한하지 않습니다

MySQL 데이터베이스 확보 : 사용자 추가 및 권한 부여MySQL 데이터베이스 확보 : 사용자 추가 및 권한 부여May 14, 2025 am 12:09 AM

적절한 usermanagementInmysqliscrucialforenhancingsecurityandensuringfefficientDatabaseOperation.1) USECREATEUSERTOWDDUSERS,@'localHost'or@'%'.

MySQL에서 사용할 수있는 트리거 수에 영향을 미치는 요인은 무엇입니까?MySQL에서 사용할 수있는 트리거 수에 영향을 미치는 요인은 무엇입니까?May 14, 2025 am 12:08 AM

mysqldoes notimposeahardlimitontriggers, butpracticalfactorsdeteirefectiveuse : 1) ServerConfigurationimpactStriggerManagement; 2) 복잡한 트리거 스케일 스케일 사이드로드; 3) argertableSlowtriggerTriggerPerformance; 4) High ConconcercencyCancaUspriggerContention; 5) m

MySQL : Blob을 저장하는 것이 안전합니까?MySQL : Blob을 저장하는 것이 안전합니까?May 14, 2025 am 12:07 AM

예, It 'safetostoreBlobdatainmysql, butconsidertheStefactors : 1) StoragesPace : BlobScanconSumeSignificantspace, 잠재적으로 증가하는 CostsandSlownperformance

MySQL : PHP 웹 인터페이스를 통해 사용자 추가MySQL : PHP 웹 인터페이스를 통해 사용자 추가May 14, 2025 am 12:04 AM

PHP 웹 인터페이스를 통해 MySQL 사용자를 추가하면 MySQLI 확장 기능을 사용할 수 있습니다. 단계는 다음과 같습니다. 1. MySQL 데이터베이스에 연결하고 MySQLI 확장자를 사용하십시오. 2. 사용자를 생성하고 CreateUser 문을 사용하고 Password () 함수를 사용하여 암호를 암호화하십시오. 3. SQL 주입 방지 및 MySQLI_REAL_ESCAPE_STRING () 함수를 사용하여 사용자 입력을 처리하십시오. 4. 새 사용자에게 권한을 할당하고 보조금 명세서를 사용하십시오.

MySQL : Blob 및 기타없는 SQL 스토리지, 차이점은 무엇입니까?MySQL : Blob 및 기타없는 SQL 스토리지, 차이점은 무엇입니까?May 13, 2025 am 12:14 AM

mysql'sblobissuilableforstoringbinarydatawithinareldatabase, whilenosqloptionslikemongodb, redis, and cassandraofferflexible, scalablesolutionsforunstuctureddata.blobissimplerbutcanslowwownperformance를 사용하는 것들보업 betterscal randaysand

MySQL 추가 사용자 : 구문, 옵션 및 보안 모범 사례MySQL 추가 사용자 : 구문, 옵션 및 보안 모범 사례May 13, 2025 am 12:12 AM

TOADDAUSERINMYSQL, 사용 : CreateUser'UserName '@'host'IdentifiedBy'Password '; 여기서'showTodoitseciRely : 1) ChoosetheHostCareLyTocon trolaccess.2) setResourcelimitswithOptionslikemax_queries_per_hour.3) Usestrong, iriquepasswords.4) enforcessl/tlsconnectionswith

MySQL : 문자열 데이터 유형을 피하는 방법 일반적인 실수?MySQL : 문자열 데이터 유형을 피하는 방법 일반적인 실수?May 13, 2025 am 12:09 AM

toavoidcommonmistakeswithstringdatatypesinmysql, stroundStringTypenuances, chooseTherightType, andManageEncodingAndCollationSettingSefectively.1) usecharforfixed-lengthstrings, varcharvariable-length, andtext/blobforlargerdata.2) setcarcatter

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기