Cara Membangun Server Raspberry Pi untuk Pengembangan
Diterbitkan: 2022-03-11Raspberry Pi adalah komputer kecil yang bisa Anda dapatkan dengan harga serendah USD $5 dan di mana Anda dapat menjalankan berbagai jenis perangkat lunak dan membangun banyak proyek berbeda.
Dalam artikel ini, saya akan memandu Anda melalui proses pengaturannya sebagai server pengembangan rumah dan menerapkan aplikasi JavaScript tumpukan penuh yang dapat Anda akses dari luar jaringan Anda. Ini bagus untuk mengatur ruang kerja digital jarak jauh Anda sendiri, atau hanya untuk mengontrol perangkat keras yang Anda gunakan untuk pengembangan.
Apa yang Anda Butuhkan untuk Server Rumah Raspberry Pi Ini?
Meskipun sekarang ini adalah tutorial Raspberry Pi 3 secara khusus, ini harus tetap bekerja dengan model yang kembali ke generasi pertama — jika Anda memiliki model yang lebih lama atau Raspberry Pi Zero, beri tahu kami pengalaman Anda di komentar di bawah.
Selain papan Raspberry Pi itu sendiri, Anda akan membutuhkan:
- Pengisi daya USB Mikro
- Kabel Ethernet
- Kartu microSD (minimal 8GB, dan kartu hingga 32GB tampaknya berfungsi dengan baik)
Ini juga akan berguna selama pengaturan awal:
- Keyboard USB
- Kabel HDMI dan monitor
OS Raspberry Pi: Raspbian
Menginstal sistem operasi ke Raspberry Pi itu sederhana. Pertama, menggunakan komputer Anda, instal gambar boot ke kartu microSD. Kemudian cukup masukkan kartu ke dalam Raspberry Pi dan boot dari sana.
Raspbian adalah distribusi Linux yang di-porting dari Debian 7.0 ( Wheezy ), dan merupakan OS resmi untuk Raspberry Pi yang dioptimalkan untuk arsitektur perangkat. Meskipun ada opsi lain untuk menjalankan OS favorit Anda di Pi, kami akan menggunakan Raspbian karena kesederhanaannya.
Tutorial ini telah diperbarui agar berfungsi dengan versi Raspbian ini (atau lebih baru):
Kernel version : #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) Kernel release : 4.9.0-8-amd64
Untuk menginstal Raspbian, buka halaman unduhan resmi dan unduh file zip dengan versi Raspbian terbaru.
Kemudian, masukkan kartu microSD ke slot kartu SD atau adaptor komputer Anda. Tergantung pada sistem operasi komputer Anda, ikuti petunjuk yang disediakan di situs web Raspberry untuk Linux, Mac OS, atau Windows.
Setelah proses selesai, keluarkan kartu SD dari komputer Anda dan masukkan ke dalam Raspberry Pi. Hubungkan Raspberry Pi ke router Anda menggunakan kabel Ethernet, dan colokkan pengisi daya Micro USB, yang akan memulai booting Raspberry Pi.
Untuk konfigurasi awal, ada dua opsi:
- Jika Anda memiliki keyboard USB dan monitor HDMI, Anda dapat menghubungkannya ke Raspberry Pi untuk pengaturan awal.
- Pi Anda harus mengenali perangkat ini segera setelah dicolokkan.
- Pertama kali Pi boot, secara otomatis akan menjalankan
raspi-config
. Setelah boot pertama, Anda harus menjalankansudo raspi-config
sendiri untuk mengonfigurasi perangkat.
- Jika Anda tidak memilikinya, Anda dapat terhubung ke Raspberry Pi Anda saat menggunakan SSH:
- Pertama, Anda perlu menemukan alamat IP Raspberry Pi Anda di jaringan lokal Anda. Ini dapat dilakukan dengan menghubungkan ke halaman admin router Anda, atau dengan menggunakan alat jaringan seperti
nmap
. - Setelah Anda memiliki alamat IP perangkat, sambungkan menggunakan SSH dari terminal Anda (atau melalui Putty jika Anda menggunakan Windows). Pengguna default adalah
pi
, dan kata sandi default adalahraspberry
. Jadi, misalnya, jika alamat IP adalah 192.168.1.16, jalankanssh [email protected]
dan masukkan kata sandi saat diminta. - Saat Anda terhubung, jalankan
sudo raspi-config
.
- Pertama, Anda perlu menemukan alamat IP Raspberry Pi Anda di jaringan lokal Anda. Ini dapat dilakukan dengan menghubungkan ke halaman admin router Anda, atau dengan menggunakan alat jaringan seperti
raspi-config
akan memandu Anda melalui pengaturan akhir. Anda dapat mengonfigurasi semua opsi tetapi yang paling penting adalah dua yang pertama: untuk memperluas sistem file, memastikan bahwa semua penyimpanan kartu SD tersedia untuk OS, dan untuk mengubah kata sandi untuk pengguna Pi default, sehingga server Anda akan menjadi dilindungi dari penyusup.
Instal Server Web (Nginx) di Raspberry Pi Anda
Selanjutnya, Anda akan menginstal server web. Saya lebih suka Nginx karena memiliki jejak memori yang kecil, dan karena ia berfungsi baik dengan Node.js (yang akan Anda siapkan nanti). Server web lain, seperti Apache atau lighttpd, akan bekerja dengan baik, tetapi kami akan menggunakan Nginx untuk demonstrasi ini.
Sebelum Anda mulai menginstal apa pun, Anda harus memastikan semuanya mutakhir dengan menjalankan perintah ini di Pi:
sudo apt-get update sudo apt-get upgrade
Kemudian Anda dapat menginstal Nginx menggunakan apt-get
:
sudo apt-get install nginx
Setelah instalasi selesai, mulai server dengan menjalankan:
sudo service nginx start
Jika Anda tidak perlu mengetahui IP lokal Raspberry Pi Anda pada langkah sebelumnya, saatnya untuk mengetahuinya dengan menjalankan ifconfig
. Output untuk adaptor ethernet Anda akan berada di bawah eth0
, dan dengan alamat IP lokalnya berlabel inet addr
.
Setelah Anda mengetahui alamat IP, Anda dapat mengarahkan browser komputer Anda ke sana, di mana Anda akan melihat pesan default "Selamat datang di Nginx".
Buka ke Web: Penerusan Port
Anda dapat melewati langkah ini jika Anda tidak berencana untuk mengakses Raspberry Pi Anda dari luar jaringan lokal Anda. Tetapi bagi mereka yang ingin mengakses server mereka dari lokasi lain, pastikan itu memungkinkan.
Di jaringan rumah biasa, perangkat yang terhubung ke router tidak terlihat oleh dunia luar. Hanya router Anda yang dapat dijangkau dari luar, menggunakan alamat IP eksternal jaringan Anda. Router Anda bertanggung jawab untuk menentukan lalu lintas masuk mana yang diizinkan masuk ke jaringan, dan ke perangkat mana ia harus dikirim.
Saat perangkat di jaringan lokal memulai koneksi (misalnya, saat Anda membuka situs web di browser), router mengenali lalu lintas respons yang masuk sebagai bagian dari koneksi ini, dan mengizinkannya lewat. Namun, jika router menerima lalu lintas masuk yang bukan merupakan bagian dari koneksi terbuka (misalnya, ketika perangkat luar mencoba memulai koneksi dengan perangkat dalam), router akan memblokir lalu lintas masuk agar tidak menyeberang ke jaringan. Ini adalah fitur keamanan penting untuk melindungi jaringan!
Jadi bagaimana Anda bisa terhubung ke Pi Anda dari luar? Jawabannya adalah penerusan port. Router harus dikonfigurasi untuk mengizinkan koneksi masuk pada port tertentu untuk melewatinya, dan dikirim ke perangkat yang benar. Secara default, protokol HTTP menggunakan port 80, dan SSH menggunakan port 22, jadi ini adalah dua port yang perlu Anda buka di router untuk mengakses aplikasi web Anda, dan memungkinkan koneksi aman untuk mengelola server Anda.
Langkah-langkah untuk mengkonfigurasi router Anda untuk membuka dan meneruskan port dapat bervariasi tergantung pada penyedia internet Anda dan merek router Anda, tetapi bagaimanapun juga, Anda harus dapat melakukannya melalui opsi konfigurasi lanjutan dari halaman admin router Anda. Cukup cari opsi dengan nama seperti "Penerusan", "Penerusan Port", atau "Terjemahan Alamat Jaringan".
Anda perlu membuka port untuk koneksi HTTP, dan satu lagi untuk SSH. Ide dasarnya terdiri dari meneruskan data yang ditujukan ke dua port eksternal ini ke Raspberry Pi Anda, dengan lalu lintas web ke port 80 tempat Nginx mendengarkan, dan lalu lintas SSH ke port 22, tempat server SSH menerima koneksi dari komputer eksternal. Berikut adalah contoh tampilannya di halaman konfigurasi router Anda:
192.168.1.16
. Semua lalu lintas masuk yang menuju port 80 atau 22 diteruskan ke alamat internal ini. Anda dapat menentukan alamat IP eksternal router Anda hanya dengan mengetikkan "apa alamat ip saya" ke Google. Jika Anda kemudian pindah ke luar jaringan router, Anda dapat menguji apakah penerusan port berfungsi dengan membuka koneksi SSH dengan ssh pi@{external IP address}
. Demikian juga, penerusan port HTTP dapat diuji dengan memasukkan alamat IP eksternal ke bilah alamat browser Anda. Ingatlah bahwa penerusan port memungkinkan siapa saja dari luar untuk mengakses perangkat pada port ini jika mereka mengetahui IP eksternal router Anda.
Jika Anda tidak memiliki IP statis, Anda dapat mengatur DNS dinamis. Ini adalah langkah yang sangat sederhana dan mudah. Anda dapat mengatur DNS dinamis dari router Anda atau Anda dapat mengkonfigurasi Raspberry Pi Anda untuk itu. Saya tidak akan membahas cara mengkonfigurasi DDNS di sini, tetapi BitPi.co memiliki tutorial yang bagus tentang masalah ini jika diperlukan.

Instal Kerangka: JavaScript tumpukan penuh
Anda dapat menjalankan sebagian besar kerangka kerja web di atas Nginx, tetapi mari kita lihat bagaimana menjadi full-stack dengan JavaScript. Untuk melakukan ini, Anda perlu menginstal Node.js dan MongoDB.
Saat ini, Node.js mudah diinstal ke Raspberry Pi dengan:
sudo apt-get install nodejs
Setelah selesai menginstal, Anda dapat memeriksa apakah itu berfungsi dengan menjalankan node -v
.
Sekarang Anda dapat menginstal MongoDB hanya dengan mengetik:
sudo apt-get install mongodb
Perlu diketahui bahwa jika Anda perlu mematikan Raspberry Pi, Anda harus mematikan layanan terlebih dahulu untuk menghindari kerusakan basis data:
sudo service mongodb stop
Terapkan Aplikasi Anda
Anda dapat mengembangkan di mesin lokal Anda, dan kemudian mendorong perubahan Anda ke repositori Git di BitBucket. Karena Raspbian hadir dengan Git yang sudah diinstal sebelumnya, Anda kemudian dapat menarik kode aplikasi terbaru Anda ke perangkat dan menjalankannya.
Perancah Proyek
Pertama mari kita siapkan beberapa kode aplikasi dan dorong ke repositori Git. Ada banyak cara untuk memulai aplikasi, tetapi salah satu favorit saya adalah generator-angular-fullstack, yang menancah kode server dan klien.
Instal generator-angular-fullstack
di komputer Anda:
npm install -g generator-angular-fullstack
Buat direktori baru untuk aplikasi Anda:
mkdir my-app cd my-app
Dan perancah aplikasi:
yo angular-fullstack my-app
Buat Repositori dan Dorong Kode
Sekarang buat repositori di BitBucket, seperti yang dijelaskan di sini. Kemudian atur direktori lokal Anda:
git init git remote add origin [email protected]:USER/REPO.git
Jadi Anda dapat melakukan dan mendorong kode:
git add . git commit -m 'Initial commit' git push -u origin master
Generator dilengkapi dengan plugin grunt-build-control, yang memungkinkan Anda untuk mengkomit kode build ke cabang tertentu di repositori Anda. Cukup tambahkan konfigurasi untuk BitBucket ke Gruntfile.js
di direktori root aplikasi Anda:
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' } } }, // ...
Sekarang jalankan:
grunt build
…untuk membuat folder distribusi, ikuti ini:
grunt buildcontrol:bitbucket
…untuk mengkomit dan mendorong kode ke cabang build di repositori Anda.
Hasilkan Kunci SSH
Anda sekarang memiliki kode yang dihosting. Sebelum Anda dapat menyebarkannya ke Raspberry Pi Anda, Anda perlu membuat kunci SSH untuk Raspberry Pi dan menambahkannya ke akun BitBucket Anda. Kami akan menjalankan langkah ini dengan cepat, tetapi jika Anda mengalami masalah, ikuti panduan BitBucket. Jadi, masuk kembali ke terminal Raspberry Pi Anda, dan buat pasangan kunci publik/pribadi:
ssh-keygen
Kemudian, mulai agen:
ssh-agent /bin/bash
Dan tambahkan kunci ke agen:
ssh-add /home/pi/.ssh/id_rsa
Sekarang Anda hanya perlu menampilkan konten kunci publik:
cat /home/pi/.ssh/id_rsa.pub
…sehingga Anda dapat menyalin dan menempelkannya ke BitBucket.
Di BitBucket, klik gambar profil Anda dan buka Kelola akun . Di bawah KEAMANAN , temukan kunci SSH , dan klik tombol Tambah kunci .
Mengkloning Repositori
Tidak ada konvensi untuk menempatkan kode aplikasi Anda, tetapi Anda dapat membuat direktori /var/www
dan meletakkan semua proyek Anda di sana.
cd /var sudo mkdir www
Untuk menghindari penggunaan sudo
saat Anda ingin menempatkan file di webroot, Anda dapat mengubah pemilik menjadi pengguna Pi Anda, dan grup menjadi www-data
, yang digunakan oleh Nginx:
sudo chown -R pi:www-data www cd www
Sekarang, Anda dapat mengkloning cabang build dari repositori Anda dan menginstal dependensi:
git clone [email protected]:USER/REPO.git --branch build --single-branch cd REPO npm install --production
Setelah selesai, Anda dapat memulai aplikasi, menyetel lingkungan ke produksi:
export NODE_ENV=production; node server/app.js &
Sekarang, arahkan browser komputer Anda ke alamat IP perangkat untuk memeriksa apakah itu berfungsi.
Konfigurasikan Nginx Reverse Proxy
Ada satu langkah lagi yang tersisa untuk membuat aplikasi Anda dapat diakses dari luar. Meskipun Nginx mendengarkan pada port 80, di mana ia akan menerima permintaan HTTP untuk Pi Anda, aplikasi Node itu sendiri mendengarkan pada port yang berbeda (misalnya, port 8080). Oleh karena itu, Anda perlu mengonfigurasi Nginx untuk bertindak sebagai proxy terbalik, mengenali permintaan yang ditujukan untuk aplikasi Anda, dan meneruskannya ke Node.js.
Nginx menyimpan file konfigurasi untuk setiap aplikasi yang dilayaninya di folder sites-available
:
cd /etc/nginx/sites-available/
Di sini, Anda dapat menyalin file konfigurasi default
dan mengeditnya sesuka Anda:
sudo cp default my-app sudo nano my-app
File konfigurasi akhir akan terlihat seperti ini, dengan Nginx bertindak sebagai proxy ke server 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 } }
Untuk mengaktifkan konfigurasi ini, Anda perlu membuat symlink di folder sites-enabled
, tempat Nginx mencari konfigurasi aktif selama runtime:
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/my-app
Dan muat ulang layanan untuk mengaktifkan perubahan ini:
sudo service nginx reload
Pada titik ini, aplikasi Anda siap menerima lalu lintas HTTP yang ditujukan untuk domain my-app.dev
(berkat perintah server_name my-app.dev
yang Anda konfigurasikan di atas). Masalah terakhir yang perlu Anda pecahkan adalah bagaimana membuat lalu lintas yang Anda kirim dari luar cocok dengan nama domain ini. Meskipun Anda dapat membeli nama domain dan mengarahkannya ke IP Anda, file hosts
datang untuk menyelamatkan dan membuatnya tidak perlu.
Di workstation tempat Anda akan mengakses situs, cukup tambahkan alamat IP eksternal router Anda, dan cocokkan dengan nama host my-app.dev
. Setiap lalu lintas HTTP yang Anda hasilkan untuk my-app.dev
kemudian akan dikirim langsung ke router Anda, dengan nama host yang benar di header HTTP Host
.
Pada Windows, dengan hak administrator, Anda dapat mengedit file yang terletak di c:\windows\system32\drivers\etc\hosts
dengan notepad. Di Linux dan Mac Anda dapat menggunakan terminal dengan masing-masing sudo nano /etc/hosts
dan 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
Apa berikutnya?
Sekarang semuanya sudah diatur, Anda dapat menyebarkan aplikasi sebanyak yang Anda inginkan ke Raspberry Pi Anda, dan menginstal selamanya atau pm2 untuk menjaga server Node.js Anda tetap hidup.
Dan ingatlah bahwa jika terjadi kesalahan, Anda dapat menghapus kartu SD dan memulai lagi dari awal!