Cum să construiți un server Raspberry Pi pentru dezvoltare

Publicat: 2022-03-11

Raspberry Pi este un mic computer pe care îl puteți obține la prețuri de până la 5 USD și pe care puteți rula multe tipuri diferite de software și puteți construi multe proiecte diferite.

În acest articol, vă voi ghida prin procesul de configurare ca server de dezvoltare acasă și de implementare a unei aplicații JavaScript full-stack pe care o puteți accesa din afara rețelei dvs. Acest lucru este excelent pentru configurarea propriului spațiu de lucru digital la distanță sau pur și simplu pentru a avea control asupra hardware-ului pe care îl utilizați pentru dezvoltare.

De ce aveți nevoie pentru acest server Raspberry Pi Home?

Deși acesta este acum un tutorial Raspberry Pi 3 în special, ar trebui să funcționeze în continuare cu modele care revin la prima generație - dacă aveți un model mai vechi sau un Raspberry Pi Zero, vă rugăm să ne spuneți experiența dvs. în comentariile de mai jos.

Pe lângă placa Raspberry Pi în sine, veți avea nevoie de:

  • Un încărcător Micro USB
  • Un cablu Ethernet
  • Un card microSD (minim 8 GB și cardurile de până la 32 GB par să funcționeze bine)

Acestea vor fi utile și în timpul configurării inițiale:

  • O tastatură USB
  • Un cablu HDMI și un monitor

Sistemul de operare Raspberry Pi: Raspbian

Instalarea unui sistem de operare pe un Raspberry Pi este simplă. Mai întâi, folosind computerul, instalați imaginea de pornire pe un card microSD. Apoi, pur și simplu introduceți cardul în Raspberry Pi și porniți de acolo.

Raspbian este o distribuție Linux portată din Debian 7.0 ( Wheezy ) și este sistemul de operare oficial pentru Raspberry Pi optimizat pentru arhitectura dispozitivului. Deși există și alte opțiuni pentru rularea sistemului de operare preferat pe Pi, vom folosi Raspbian datorită simplității sale.

Acest tutorial a fost actualizat pentru a funcționa cu această versiune (sau o versiune ulterioară) de Raspbian:

 Kernel version : #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) Kernel release : 4.9.0-8-amd64

Pentru a instala Raspbian, mergeți la pagina oficială de descărcare și descărcați fișierul zip cu cea mai recentă versiune Raspbian.

Apoi, introduceți cardul microSD în slotul sau adaptorul pentru card SD al computerului. În funcție de sistemul de operare al computerului dvs., urmați instrucțiunile furnizate pe site-ul web Raspberry pentru Linux, Mac OS sau Windows.

Odată ce procesul s-a încheiat, scoateți cardul SD din computer și introduceți-l în Raspberry Pi. Conectați Raspberry Pi la router folosind cablul Ethernet și conectați încărcătorul Micro USB, care va porni pornirea Raspberry Pi.

Pentru configurația inițială, există două opțiuni:

  • Dacă aveți o tastatură USB și un monitor HDMI, le puteți conecta la Raspberry Pi pentru configurarea inițială.
    • Pi-ul dvs. ar trebui să recunoască aceste dispozitive de îndată ce sunt conectate.
    • Prima dată când pornește Pi, va rula automat raspi-config . După prima pornire, va trebui să rulați sudo raspi-config pentru a configura dispozitivul.
  • Dacă nu le aveți, vă puteți conecta la Raspberry Pi în timp ce acesta este pornit folosind SSH:
    • În primul rând, trebuie să găsiți adresa IP a Raspberry Pi în rețeaua locală. Acest lucru se poate face prin conectarea la pagina de administrare a routerului sau prin utilizarea unui instrument de rețea precum nmap .
    • Odată ce aveți adresa IP a dispozitivului, conectați-vă la acesta folosind SSH de pe terminal (sau prin Putty dacă utilizați Windows). Utilizatorul implicit este pi , iar parola implicită este raspberry . Deci, de exemplu, dacă adresa IP este 192.168.1.16, rulați ssh [email protected] și introduceți parola când vi se solicită.
    • Când sunteți conectat, rulați sudo raspi-config .

raspi-config vă va ghida prin configurarea finală. Puteți configura toate opțiunile, dar cele mai importante sunt primele două: să extindeți sistemul de fișiere, asigurându-vă că toată stocarea cardului SD este disponibilă pentru sistemul de operare și să schimbați parola pentru utilizatorul implicit Pi, astfel încât serverul dvs. să fie ferit de intruși.

Raspi-config

Instalați un server web (Nginx) pe Raspberry Pi

Apoi, veți instala serverul web. Prefer Nginx pentru că are o amprentă mică de memorie și pentru că se joacă bine cu Node.js (pe care îl veți configura mai târziu). Alte servere web, cum ar fi Apache sau lighttpd, ar funcționa de asemenea, dar vom folosi Nginx pentru această demonstrație.

Înainte de a începe să instalați ceva, trebuie să vă asigurați că totul este actualizat, rulând aceste comenzi pe Pi:

 sudo apt-get update sudo apt-get upgrade

Apoi puteți instala Nginx folosind apt-get :

 sudo apt-get install nginx

Odată ce instalarea este finalizată, porniți serverul rulând:

 sudo service nginx start

Dacă nu a trebuit să aflați IP-ul local al Raspberry Pi-ul dvs. în pasul anterior, este timpul să aflați rulând ifconfig . Ieșirea pentru adaptorul dvs. Ethernet va fi sub eth0 și cu adresa IP locală etichetată inet addr .

Odată ce cunoașteți adresa IP, puteți îndrepta browserul computerului spre ea, unde ar trebui să vedeți mesajul implicit „Bine ați venit la Nginx”.

Deschidere pe Web: redirecționare porturi

Puteți sări peste acest pas dacă nu intenționați să vă accesați Raspberry Pi din afara rețelei locale. Dar pentru cei care doresc să-și acceseze serverul din alte locații, să ne asigurăm că este posibil.

Într-o rețea de acasă tipică, dispozitivele conectate la router sunt invizibile pentru lumea exterioară. Numai routerul dvs. poate fi accesat din exterior, folosind adresa IP externă a rețelei. Routerul dumneavoastră este responsabil pentru determinarea traficului de intrare permis în rețea și la ce dispozitiv ar trebui trimis.

Când un dispozitiv din rețeaua locală inițiază o conexiune (de exemplu, când deschideți un site web în browser), routerul recunoaște traficul de răspuns de intrare ca făcând parte din această conexiune și îi permite să treacă. Cu toate acestea, dacă routerul primește trafic care nu face parte dintr-o conexiune deschisă (de exemplu, când un dispozitiv exterior încearcă să inițieze o conexiune cu un dispozitiv din interior), acesta va bloca traficul de intrare în rețea. Aceasta este o caracteristică de securitate importantă pentru a proteja rețeaua!

Deci, cum vă puteți conecta la Pi din exterior? Răspunsul este redirecționarea portului. Routerul trebuie configurat astfel încât să permită trecerea conexiunilor de intrare pe anumite porturi și să fie trimis la dispozitivul corect. Implicit, protocolul HTTP folosește portul 80, iar SSH folosește portul 22, așa că acestea sunt cele două porturi pe care trebuie să le deschideți pe router pentru a accesa aplicația dvs. web și pentru a permite conexiuni sigure pentru gestionarea serverului.

Port forwarding.

Pașii de configurare a routerului pentru a deschide și a redirecționa porturile pot varia în funcție de furnizorul dvs. de internet și de marca routerului, dar, în orice caz, ar trebui să puteți realiza acest lucru prin opțiunile avansate de configurare ale paginii de administrare a routerului. Căutați doar o opțiune cu un nume precum „Redirecționare”, „Redirecționare porturi” sau „Traducere adrese de rețea”.

Trebuie să deschideți un port pentru conexiunile HTTP și altul pentru SSH. Ideea de bază constă în redirecționarea datelor adresate acestor două porturi externe către Raspberry Pi, cu traficul web mergând către portul 80, unde ascultă Nginx, iar traficul SSH către portul 22, unde serverul SSH acceptă conexiuni de la computere externe. Iată un exemplu despre cum ar putea arăta acest lucru în pagina de configurare a routerului dvs.:

Tabelul de configurare a redirecționării portului.

Configurarea redirecționării portului dacă adresa IP internă a Raspberry Pi este 192.168.1.16 . Tot traficul de intrare legat de porturile 80 sau 22 este redirecționat la această adresă internă.

Puteți determina adresa IP externă a routerului dvs. introducând pur și simplu „care este adresa mea ip” în Google. Dacă apoi vă mutați în afara rețelei routerului, puteți testa că redirecționarea portului funcționează deschizând o conexiune SSH cu ssh pi@{external IP address} . De asemenea, redirecționarea portului HTTP poate fi testată introducând adresa IP externă în bara de adrese a browserului. Rețineți că redirecționarea portului permite oricui din exterior să acceseze dispozitivul pe aceste porturi dacă cunosc IP-ul extern al routerului dvs.

Dacă nu aveți un IP static, atunci puteți configura DNS dinamic. Este un pas foarte simplu și ușor. Puteți configura DNS dinamic de pe router sau vă puteți configura Raspberry Pi pentru acesta. Nu voi trata aici cum să configurați DDNS, dar BitPi.co are un tutorial bun pe acest subiect, dacă este necesar.

Instalați cadrul: JavaScript full-stack

Puteți rula majoritatea cadrelor web pe Nginx, dar haideți să vedem cum să mergeți full-stack cu JavaScript. Pentru a face acest lucru, trebuie să instalați Node.js și MongoDB.

În zilele noastre, Node.js este ușor de instalat pe un Raspberry Pi cu:

 sudo apt-get install nodejs

După ce se termină instalarea, puteți verifica dacă funcționează rulând node -v .

Acum puteți instala MongoDB doar tastând:

 sudo apt-get install mongodb

Trebuie doar să știți că, dacă vreodată trebuie să opriți Raspberry Pi, trebuie să închideți mai întâi serviciul pentru a evita coruperea bazei de date:

 sudo service mongodb stop

Implementați aplicația dvs

Puteți dezvolta pe mașina dvs. locală și apoi împingeți modificările într-un depozit Git de pe BitBucket. Deoarece Raspbian vine cu Git preinstalat, apoi puteți trage cel mai recent cod de aplicație pe dispozitiv și îl puteți rula.

Scala proiectul

Mai întâi, să setăm un cod de aplicație și să-l împingem într-un depozit Git. Există multe modalități de a porni o aplicație, dar una dintre preferatele mele este generator-angular-fullstack, care schelete atât codul serverului, cât și codul clientului.

Instalați generator-angular-fullstack pe computerul dvs.:

 npm install -g generator-angular-fullstack

Creați un director nou pentru aplicația dvs.:

 mkdir my-app cd my-app

Și schelete aplicația:

 yo angular-fullstack my-app

Creați depozitul și împingeți codul

Acum creați un depozit în BitBucket, așa cum este descris aici. Apoi configurați directorul local:

 git init git remote add origin [email protected]:USER/REPO.git

Deci, puteți să comiteți și să împingeți codul:

 git add . git commit -m 'Initial commit' git push -u origin master

Generatorul vine cu pluginul grunt-build-control, care vă permite să trimiteți codul de compilare într-o anumită ramură din depozitul dvs. Doar adăugați configurația pentru BitBucket la Gruntfile.js în directorul rădăcină al aplicației dvs.:

 buildcontrol: { options: { dir: 'dist', commit: true, push: true, connectCommits: false, message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%' }, bitbucket: { options: { remote: '[email protected]:USER/REPO.git', branch: 'build' } } }, // ...

Acum rulați:

 grunt build

... pentru a crea folderul de distribuție, urmat de aceasta:

 grunt buildcontrol:bitbucket

... pentru a comite și a împinge codul în ramura de compilare din depozitul dvs.

Generați cheia SSH

Acum aveți codul găzduit. Înainte de a-l putea implementa pe Raspberry Pi, trebuie să generați o cheie SSH pentru Raspberry Pi și să o adăugați la contul BitBucket. Vom parcurge acest pas rapid, dar dacă aveți probleme, vă rugăm să urmați ghidul BitBucket. Așadar, conectați-vă din nou la terminalul Raspberry Pi și generați perechea de chei publice/private:

 ssh-keygen

Apoi, porniți agentul:

 ssh-agent /bin/bash

Și adăugați cheia agentului:

 ssh-add /home/pi/.ssh/id_rsa

Acum trebuie doar să scoateți conținutul cheii publice:

 cat /home/pi/.ssh/id_rsa.pub

… astfel încât să îl puteți copia și lipi în BitBucket.

În BitBucket, faceți clic pe fotografia de profil și accesați Gestionați contul . În SECURITATE , găsiți cheile SSH și faceți clic pe butonul Adăugați cheie .

Clonează depozitul

Nu există o convenție pentru unde să plasați codul aplicațiilor dvs., dar puteți crea un director /var/www și puteți pune toate proiectele acolo.

 cd /var sudo mkdir www

Pentru a evita utilizarea sudo atunci când doriți să plasați fișiere în webroot, puteți schimba proprietarul în utilizatorul dvs. Pi și grupul în www-data , care este folosit de Nginx:

 sudo chown -R pi:www-data www cd www

Acum, puteți clona ramura de compilare a depozitului dvs. și puteți instala dependențele:

 git clone [email protected]:USER/REPO.git --branch build --single-branch cd REPO npm install --production

După ce ați terminat, puteți porni aplicația, setând mediul la producție:

 export NODE_ENV=production; node server/app.js &

Acum, îndreptați browserul computerului către adresa IP a dispozitivului pentru a verifica dacă funcționează.

Ați vrea să aveți un server de dezvoltare pe care să îl numiți al dvs.? Puteți, cu un #RaspberryPi.
Tweet

Configurați proxy invers Nginx

Mai rămâne un pas pentru a vă face aplicația accesibilă din exterior. Deși Nginx ascultă pe portul 80, unde va primi solicitări HTTP pentru Pi-ul dvs., aplicația Node în sine ascultă pe un alt port (de exemplu, portul 8080). Prin urmare, trebuie să configurați Nginx să acționeze ca un proxy invers, recunoscând cererile destinate aplicației dvs. și transmițându-le către Node.

Nginx păstrează fișierul de configurare pentru fiecare aplicație pe care o servește în folderul sites-available :

 cd /etc/nginx/sites-available/

Aici, puteți copia fișierul de configurare default și editați după convenție:

 sudo cp default my-app sudo nano my-app

Fișierul final de configurare ar trebui să arate astfel, cu Nginx acționând ca un proxy pentru serverul Node.js:

 server { listen 80; root /var/www/my-app/; # identifies the location of the application you are configuring server_name my-app.dev; # identifies the hostname used by this application's traffic location / { proxy_pass http://localhost:8080/; # configures the back-end destination for this traffic } }

Pentru a activa această configurație, trebuie să creați un link simbolic în folderul sites-enabled , unde Nginx caută configurații active în timpul rulării:

 sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/my-app

Și reîncărcați serviciul pentru a activa aceste modificări:

 sudo service nginx reload

În acest moment, aplicația dvs. este pregătită să primească trafic HTTP destinat domeniului my-app.dev (mulțumită directivei server_name my-app.dev pe care ați configurat-o mai sus). Ultima problemă pe care trebuie să o rezolvați este cum să faceți ca traficul pe care îl trimiteți din exterior să se potrivească cu acest nume de domeniu. Deși ați putea cumpăra un nume de domeniu și să-l îndreptați către IP-ul dvs., fișierul hosts vine în ajutor și face acest lucru inutil.

Pe stația de lucru de pe care veți accesa site-ul, adăugați pur și simplu adresa IP externă a routerului și potriviți-o cu numele de gazdă my-app.dev . Orice trafic HTTP pe care îl generați pentru my-app.dev va fi apoi trimis direct către router, cu numele de gazdă corect în antetul Host HTTP.

Pe Windows, cu privilegii de administrator, puteți edita fișierul aflat în c:\windows\system32\drivers\etc\hosts cu notepad. Pe Linux și Mac puteți utiliza terminalul cu sudo nano /etc/hosts și respectiv sudo nano /private/etc/hosts .

 ## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 212.124.126.242 my-app.dev # add your host name to the list

Ce urmeaza?

Acum că totul este configurat, puteți implementa câte aplicații doriți în Raspberry Pi și puteți instala pentru totdeauna sau pm2 pentru a vă menține în viață serverele Node.js.

Și amintiți-vă că, dacă ceva nu merge bine, puteți pur și simplu să ștergeți cardul SD și să începeți din nou de la zero!

Server de dezvoltare Raspberry Pi în acțiune.

Înrudit: Controlați-vă clima cu acest tutorial pentru termostat Raspberry Pi