Raspberry Pi에서 MySQL 및 Prisma를 사용하여 Node.js 애플리케이션 배포
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 애플리케이션으로 트래픽을 라우팅하는 데 도움이 됩니다.
응록
복잡한 네트워크 구성 없이 로컬에서 호스팅되는 애플리케이션을 인터넷에 안전하게 노출시키는 터널링 도구입니다.
전제 조건
- 작동하는 Raspberry Pi - Raspberry Pi에서 SSH가 활성화되어 있고 원격으로 액세스할 수 있는지 확인하세요.
- Github 저장소 - Node.js TypeScript 애플리케이션은 간편한 배포를 위해 GitHub 저장소에서 호스팅되어야 합니다.
- Ngrok 계정 - Ngrok에서 무료 계정을 만들어 Raspberry Pi 앱을 인터넷에 노출하기 위한 인증 토큰을 받으세요.
라즈베리 파이 설정
-
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의 사용자 이름 및
IP 주소를 입력한 후 비밀번호를 입력하세요. -
시스템 업데이트
sudo apt update && sudo apt upgrade
로그인 후 복사로그인 후 복사로그인 후 복사로그인 후 복사 -
Git 설치
git이 설치되어 있는지 확인하세요. 그렇지 않은 경우 아래 명령을 실행하여 git을 설치하세요
sudo apt install git
로그인 후 복사로그인 후 복사로그인 후 복사로그인 후 복사
Node.js 설치
노드 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
로그인 후 복사로그인 후 복사로그인 후 복사
MySQL(MariaDB) 설정
Raspberry Pi OS의 경우 MariaDB를 설치하겠습니다.
-
MariaDB SQL Server 설치
sudo apt install mariadb-server
로그인 후 복사로그인 후 복사로그인 후 복사 -
MariaDB 보안 설치
sudo mysql_secure_installation
로그인 후 복사로그인 후 복사로그인 후 복사메시지에 따라 데이터베이스를 보호하세요.
- 현재 루트 비밀번호 입력: - 루트 사용자의 현재 비밀번호를 입력하라는 메시지가 나타나면 Enter를 누르세요(아직 설정되지 않았으므로).
- 루트 비밀번호 설정: - 루트 비밀번호를 설정하라는 메시지가 표시되면 n을 입력합니다(나중에 설정합니다).
- 익명 사용자 제거: - 익명 사용자를 제거하고 보안을 강화하려면 Y를 입력하세요. (테스트 목적으로 n을 입력하여 익명 사용자를 유지할 수 있습니다.)
- 원격으로 루트 로그인을 허용하지 않습니다: - 원격으로 루트 로그인을 허용하려면 n을 입력합니다(선택 사항이지만 보안 수준은 낮음).
- 테스트 데이터베이스 제거: - 테스트 데이터베이스를 제거하고 액세스하려면 y를 입력합니다. (보관하고 싶으면 n을 입력하세요.)
-
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
로그인 후 복사로그인 후 복사로그인 후 복사
그렇습니다! 우리는 애플리케이션에서 이 데이터베이스와 사용자를 사용할 것입니다.
Node.js 애플리케이션 설정
-
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를 사용하는 경우 모든 스키마 파일은 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 구성
-
NGINX 설치
ssh <username>@<IP_ADDRESS_OF_RPI>
로그인 후 복사로그인 후 복사로그인 후 복사로그인 후 복사 -
사이트 구성 만들기
sudo apt update && sudo apt upgrade
로그인 후 복사로그인 후 복사로그인 후 복사로그인 후 복사 -
아래 코드 추가
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를 눌러 편집기를 종료하세요.
-
사이트 구성 활성화
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가 모두 동일한 네트워크에 연결되어 있는지 확인하세요. 그렇지 않으면 작동하지 않습니다.
Ngrok을 사용하여 앱을 세상에 노출하기
이제 앱을 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











전체 테이블 스캔은 MySQL에서 인덱스를 사용하는 것보다 빠를 수 있습니다. 특정 사례는 다음과 같습니다. 1) 데이터 볼륨은 작습니다. 2) 쿼리가 많은 양의 데이터를 반환 할 때; 3) 인덱스 열이 매우 선택적이지 않은 경우; 4) 복잡한 쿼리시. 쿼리 계획을 분석하고 인덱스 최적화, 과도한 인덱스를 피하고 정기적으로 테이블을 유지 관리하면 실제 응용 프로그램에서 최상의 선택을 할 수 있습니다.

예, MySQL은 Windows 7에 설치 될 수 있으며 Microsoft는 Windows 7 지원을 중단했지만 MySQL은 여전히 호환됩니다. 그러나 설치 프로세스 중에 다음 지점이 표시되어야합니다. Windows 용 MySQL 설치 프로그램을 다운로드하십시오. MySQL의 적절한 버전 (커뮤니티 또는 기업)을 선택하십시오. 설치 프로세스 중에 적절한 설치 디렉토리 및 문자를 선택하십시오. 루트 사용자 비밀번호를 설정하고 올바르게 유지하십시오. 테스트를 위해 데이터베이스에 연결하십시오. Windows 7의 호환성 및 보안 문제에 주목하고 지원되는 운영 체제로 업그레이드하는 것이 좋습니다.

InnoDB의 전체 텍스트 검색 기능은 매우 강력하여 데이터베이스 쿼리 효율성과 대량의 텍스트 데이터를 처리 할 수있는 능력을 크게 향상시킬 수 있습니다. 1) InnoDB는 기본 및 고급 검색 쿼리를 지원하는 역 색인화를 통해 전체 텍스트 검색을 구현합니다. 2) 매치 및 키워드를 사용하여 검색, 부울 모드 및 문구 검색을 지원합니다. 3) 최적화 방법에는 워드 세분화 기술 사용, 인덱스의 주기적 재건 및 캐시 크기 조정, 성능과 정확도를 향상시키는 것이 포함됩니다.

클러스터 인덱스와 비 클러스터 인덱스의 차이점은 1. 클러스터 된 인덱스는 인덱스 구조에 데이터 행을 저장하며, 이는 기본 키 및 범위별로 쿼리에 적합합니다. 2. 클러스터되지 않은 인덱스는 인덱스 키 값과 포인터를 데이터 행으로 저장하며 비 예산 키 열 쿼리에 적합합니다.

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) 데이터베이스 및 테이블 작성 : CreateAbase 및 CreateTable 명령을 사용하십시오. 2) 기본 작업 : 삽입, 업데이트, 삭제 및 선택. 3) 고급 운영 : 가입, 하위 쿼리 및 거래 처리. 4) 디버깅 기술 : 확인, 데이터 유형 및 권한을 확인하십시오. 5) 최적화 제안 : 인덱스 사용, 선택을 피하고 거래를 사용하십시오.

MySQL 데이터베이스에서 사용자와 데이터베이스 간의 관계는 권한과 테이블로 정의됩니다. 사용자는 데이터베이스에 액세스 할 수있는 사용자 이름과 비밀번호가 있습니다. 권한은 보조금 명령을 통해 부여되며 테이블은 Create Table 명령에 의해 생성됩니다. 사용자와 데이터베이스 간의 관계를 설정하려면 데이터베이스를 작성하고 사용자를 생성 한 다음 권한을 부여해야합니다.

MySQL은 B-Tree, Hash, Full-Text 및 Spatial의 4 가지 인덱스 유형을 지원합니다. 1.B- 트리 색인은 동일한 값 검색, 범위 쿼리 및 정렬에 적합합니다. 2. 해시 인덱스는 동일한 값 검색에 적합하지만 범위 쿼리 및 정렬을 지원하지 않습니다. 3. 전체 텍스트 색인은 전체 텍스트 검색에 사용되며 다량의 텍스트 데이터를 처리하는 데 적합합니다. 4. 공간 지수는 지리 공간 데이터 쿼리에 사용되며 GIS 응용 프로그램에 적합합니다.

MySQL 및 MariaDB는 공존 할 수 있지만주의해서 구성해야합니다. 열쇠는 각 데이터베이스에 다른 포트 번호와 데이터 디렉토리를 할당하고 메모리 할당 및 캐시 크기와 같은 매개 변수를 조정하는 것입니다. 연결 풀링, 애플리케이션 구성 및 버전 차이도 고려해야하며 함정을 피하기 위해 신중하게 테스트하고 계획해야합니다. 두 개의 데이터베이스를 동시에 실행하면 리소스가 제한되는 상황에서 성능 문제가 발생할 수 있습니다.
