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> </ip_address_of_rpi>
-
SSH를 라즈베리 파이로
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
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>'; </new_password>
나만의 비밀번호로. MariaDB CLI를 종료하려면 종료 명령을 사용하세요.
MariaDB [(none)]> exit; Bye
-
루트 사용자로 MariaDB 클라이언트에 로그인
ping <ip_address_of_rpi> </ip_address_of_rpi>
루트 사용자의 비밀번호를 입력하세요.
데이터베이스 및 사용자 설정
새 데이터베이스와 사용자를 만들어 보겠습니다. 우리가 만든 새 데이터베이스에 대한 모든 권한을 새 사용자에게 부여할 예정입니다.
-
데이터베이스 생성
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
비밀번호로 새 사용자 만들기
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>'; </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> </ip_address_of_rpi>
NGINX 구성
-
NGINX 설치
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
사이트 구성 만들기
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> </ip_address_of_rpi>
-
변경 사항을 적용하려면 NGINX 서버를 다시 시작하세요
ssh <username>@<ip_address_of_rpi> </ip_address_of_rpi></username>
-
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

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

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

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

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

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

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

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


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

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

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

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