Geliştirme için Raspberry Pi Sunucusu Nasıl Kurulur
Yayınlanan: 2022-03-11Raspberry Pi, 5 ABD Doları gibi düşük bir fiyata alabileceğiniz ve üzerinde birçok farklı yazılım türünü çalıştırabileceğiniz ve birçok farklı proje oluşturabileceğiniz küçük bir bilgisayardır.
Bu makalede, onu bir ev geliştirme sunucusu olarak kurma ve ağınızın dışından erişebileceğiniz tam yığın bir JavaScript uygulaması dağıtma sürecinde size rehberlik edeceğim. Bu, kendi uzak dijital çalışma alanınızı kurmak veya geliştirme için kullandığınız donanım üzerinde kontrol sahibi olmak için harikadır.
Bu Raspberry Pi Ev Sunucusu için Neye İhtiyacınız Var?
Bu, şu anda özellikle bir Raspberry Pi 3 öğreticisi olsa da, birinci nesle kadar giden modellerle çalışmaya devam etmelidir - daha eski bir modeliniz veya bir Raspberry Pi Zero'nuz varsa, lütfen aşağıdaki yorumlarda deneyiminizi bize bildirin.
Raspberry Pi kartının kendisine ek olarak şunlara ihtiyacınız olacak:
- Mikro USB şarj cihazı
- Ethernet kablosu
- Bir microSD kart (en az 8 GB ve 32 GB'a kadar olan kartlar iyi çalışıyor gibi görünüyor)
Bunlar, ilk kurulum sırasında da kullanışlı olacaktır:
- USB klavye
- Bir HDMI kablosu ve monitör
Raspberry Pi İşletim Sistemi: Raspbian
Raspberry Pi'ye işletim sistemi kurmak basittir. İlk olarak, bilgisayarınızı kullanarak önyükleme görüntüsünü bir microSD karta yükleyin. Ardından kartı Raspberry Pi'ye takın ve oradan önyükleme yapın.
Raspbian, Debian 7.0'dan ( Wheezy ) taşınan bir Linux dağıtımıdır ve cihazın mimarisi için optimize edilmiş Raspberry Pi'nin resmi işletim sistemidir. Favori işletim sisteminizi Pi'de çalıştırmak için başka seçenekler olsa da, basitliği nedeniyle Raspbian'ı kullanacağız.
Bu öğretici, Raspbian'ın bu sürümüyle (veya daha yenisiyle) çalışacak şekilde güncellendi:
Kernel version : #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) Kernel release : 4.9.0-8-amd64
Raspbian'ı kurmak için resmi indirme sayfasına gidin ve zip dosyasını en son Raspbian sürümüyle indirin.
Ardından microSD kartı bilgisayarınızın SD kart yuvasına veya adaptörüne takın. Bilgisayarınızın işletim sistemine bağlı olarak, Raspberry'nin Linux, Mac OS veya Windows web sitesinde sağlanan talimatları izleyin.
İşlem bittiğinde SD kartı bilgisayarınızdan çıkarın ve Raspberry Pi'ye takın. Ahududu Pi'yi Ethernet kablosunu kullanarak yönlendiricinize bağlayın ve Raspberry Pi'nin önyüklemesini başlatacak olan Mikro USB şarj cihazını takın.
İlk yapılandırma için iki seçenek vardır:
- Bir USB klavyeniz ve bir HDMI monitörünüz varsa, ilk kurulum için bunları Raspberry Pi'ye takabilirsiniz.
- Pi'niz bu cihazları fişe takılır takmaz tanıması gerekir.
- Pi ilk kez başlatıldığında, otomatik olarak
raspi-config
çalıştıracaktır. İlk önyüklemeden sonra, cihazı yapılandırmak içinsudo raspi-config
kendiniz çalıştırmanız gerekecektir.
- Bunlara sahip değilseniz, Raspberry Pi'nize SSH kullanırken bağlanabilirsiniz:
- Öncelikle yerel ağınızda Raspberry Pi'nizin IP adresini bulmanız gerekiyor. Bu, yönlendiricinizin yönetici sayfasına bağlanarak veya
nmap
gibi bir ağ aracı kullanılarak yapılabilir. - Aygıtın IP adresini aldıktan sonra, terminalinizden SSH kullanarak (veya Windows kullanıyorsanız Putty aracılığıyla) aygıta bağlanın. Varsayılan kullanıcı
pi
ve varsayılan parolaraspberry
. Yani örneğin IP adresi 192.168.1.16 isessh [email protected]
çalıştırın ve sorulduğunda şifreyi girin. - Bağlandığınızda,
sudo raspi-config
çalıştırın.
- Öncelikle yerel ağınızda Raspberry Pi'nizin IP adresini bulmanız gerekiyor. Bu, yönlendiricinizin yönetici sayfasına bağlanarak veya
raspi-config
, son kurulumda size yol gösterecektir. Tüm seçenekleri yapılandırabilirsiniz, ancak en önemlileri ilk ikisidir: dosya sistemini genişletmek, tüm SD kart depolamasının işletim sistemi için kullanılabilir olmasını sağlamak ve varsayılan Pi kullanıcısının parolasını değiştirmek, böylece sunucunuz davetsiz misafirlerden korunur.
Raspberry Pi'nize bir Web Sunucusu (Nginx) Kurun
Ardından, web sunucusunu kuracaksınız. Nginx'i tercih ediyorum çünkü küçük bir bellek alanı var ve Node.js ile iyi oynuyor (ki bunu daha sonra kuracaksınız). Apache veya lighttpd gibi diğer web sunucuları da işe yarayabilir, ancak bu gösteri için Nginx'i kullanacağız.
Herhangi bir şey yüklemeye başlamadan önce, Pi'de şu komutları çalıştırarak her şeyin güncel olduğundan emin olmanız gerekir:
sudo apt-get update sudo apt-get upgrade
Ardından, apt-get
kullanarak Nginx'i yükleyebilirsiniz:
sudo apt-get install nginx
Kurulum tamamlandıktan sonra, aşağıdakileri çalıştırarak sunucuyu başlatın:
sudo service nginx start
Önceki adımda Raspberry Pi'nizin yerel IP'sini bulmak zorunda kalmadıysanız, ifconfig
çalıştırarak öğrenmenin zamanı geldi. Ethernet bağdaştırıcınızın çıktısı eth0
altında ve yerel IP adresi inet addr
olarak etiketlenmiş olacaktır.
IP adresini öğrendikten sonra, bilgisayarınızın tarayıcısını varsayılan "Nginx'e Hoş Geldiniz" mesajını göreceğiniz yere yönlendirebilirsiniz.
Web'e Açık: Bağlantı Noktası Yönlendirme
Raspberry Pi'nize yerel ağınızın dışından erişmeyi planlamıyorsanız bu adımı atlayabilirsiniz. Ancak sunucularına başka konumlardan erişmek isteyenler için bunun mümkün olduğundan emin olalım.
Tipik bir ev ağında, yönlendiriciye bağlı cihazlar dış dünya tarafından görülmez. Ağınızın harici IP adresini kullanarak dışarıdan yalnızca yönlendiricinize erişilebilir. Yönlendiriciniz, ağa hangi gelen trafiğe izin verildiğini ve hangi cihaza gönderilmesi gerektiğini belirlemekten sorumludur.
Yerel ağdaki bir cihaz bir bağlantı başlattığında (örneğin, tarayıcınızda bir web sitesi açtığınızda), yönlendirici gelen yanıt trafiğini bu bağlantının parçası olarak tanır ve geçmesine izin verir. Ancak, yönlendirici açık bir bağlantının parçası olmayan gelen trafiği alırsa (örneğin, bir dış cihaz bir dahili cihazla bağlantı başlatmaya çalıştığında), gelen trafiğin ağa geçmesini engeller. Bu, ağı korumak için önemli bir güvenlik özelliğidir!
Peki Pi'nize dışarıdan nasıl bağlanabilirsiniz? Cevap, port yönlendirmedir. Yönlendirici, belirli bağlantı noktalarından gelen bağlantıların geçmesine ve doğru cihaza gönderilmesine izin verecek şekilde yapılandırılmalıdır. Varsayılan olarak, HTTP protokolü 80 numaralı bağlantı noktasını ve SSH 22 numaralı bağlantı noktasını kullanır, bu nedenle bunlar web uygulamanıza erişmek ve sunucunuzu yönetmek için güvenli bağlantılara izin vermek için yönlendiricinizde açmanız gereken iki bağlantı noktasıdır.
Yönlendiricinizi bağlantı noktalarını açacak ve iletecek şekilde yapılandırma adımları, internet sağlayıcınıza ve yönlendiricinizin markasına bağlı olarak değişebilir, ancak her durumda, yönlendiricinizin yönetici sayfasının gelişmiş yapılandırma seçenekleri aracılığıyla gerçekleştirebilmelisiniz. “Yönlendirme”, “Port Yönlendirme” veya “Ağ Adresi Çevirisi” gibi bir ada sahip bir seçenek arayın.
HTTP bağlantıları için bir bağlantı noktası ve SSH için başka bir bağlantı noktası açmanız gerekir. Temel fikir, bu iki harici bağlantı noktasına gönderilen verileri, web trafiği Nginx'in dinlediği 80 numaralı bağlantı noktasına ve SSH trafiğinin SSH sunucusunun harici bilgisayarlardan bağlantıları kabul ettiği 22 numaralı bağlantı noktasına gitmesiyle Raspberry Pi'nize iletmektir. Yönlendiricinizin yapılandırma sayfasında bunun nasıl görünebileceğine dair bir örnek:
192.168.1.16
ise port yönlendirme yapılandırması. 80 veya 22 numaralı bağlantı noktalarına bağlı tüm gelen trafik bu dahili adrese iletilir. Yönlendiricinizin harici IP adresini Google'a “ip adresim nedir” yazarak kolayca belirleyebilirsiniz. Daha sonra yönlendiricinizin ağının dışına çıkarsanız, ssh pi@{external IP address}
ile bir SSH bağlantısı açarak bağlantı noktası yönlendirmenin çalıştığını test edebilirsiniz. Aynı şekilde, HTTP bağlantı noktası yönlendirme, harici IP adresini tarayıcınızın adres çubuğuna girerek test edilebilir. Bağlantı noktası yönlendirmenin, yönlendiricinizin harici IP'sini bilen herhangi birinin bu bağlantı noktalarındaki aygıta dışarıdan erişmesine izin verdiğini unutmayın.
Statik bir IP'niz yoksa dinamik DNS ayarlayabilirsiniz. Bu çok basit ve kolay bir adım. Yönlendiricinizden dinamik DNS kurabilir veya Raspberry Pi'nizi bunun için yapılandırabilirsiniz. Burada DDNS'nin nasıl yapılandırılacağını ele almayacağım, ancak gerekirse BitPi.co'nun konuyla ilgili iyi bir öğreticisi var.

Çerçeveyi yükleyin: Tam yığın JavaScript
Çoğu web çerçevesini Nginx'in üzerinde çalıştırabilirsiniz, ancak JavaScript ile tam yığının nasıl kullanılacağını görelim. Bunu yapmak için Node.js ve MongoDB'yi yüklemeniz gerekir.
Günümüzde Node.js, aşağıdakilerle bir Raspberry Pi'ye kolayca yüklenir:
sudo apt-get install nodejs
Yüklemeyi tamamladıktan sonra, node -v
çalıştırarak çalışıp çalışmadığını kontrol edebilirsiniz.
Şimdi sadece şunu yazarak MongoDB'yi kurabilirsiniz:
sudo apt-get install mongodb
Raspberry Pi'yi kapatmanız gerekirse, veritabanı bozulmasını önlemek için önce hizmeti kapatmanız gerektiğini unutmayın:
sudo service mongodb stop
Uygulamanızı Dağıtın
Yerel makinenizde geliştirme yapabilir ve ardından değişikliklerinizi BitBucket'teki Git deposuna aktarabilirsiniz. Raspbian, Git önceden yüklenmiş olarak geldiğinden, en son uygulama kodunuzu cihaza çekip çalıştırabilirsiniz.
Proje İskelesi
Önce bir uygulama kodu ayarlayalım ve onu Git deposuna gönderelim. Bir uygulamayı başlatmanın birçok yolu vardır, ancak favorilerimden biri, hem sunucu hem de istemci kodunu destekleyen jeneratör-açısal-tam yığıntır.
generator-angular-fullstack
bilgisayarınıza kurun:
npm install -g generator-angular-fullstack
Uygulamanız için yeni bir dizin oluşturun:
mkdir my-app cd my-app
Ve uygulamayı iskele:
yo angular-fullstack my-app
Depoyu Oluşturun ve Kodu İtin
Şimdi burada açıklandığı gibi BitBucket'te bir havuz oluşturun. Ardından yerel dizininizi ayarlayın:
git init git remote add origin [email protected]:USER/REPO.git
Böylece kodu taahhüt edebilir ve itebilirsiniz:
git add . git commit -m 'Initial commit' git push -u origin master
Oluşturucu, derleme kodunu deponuzdaki belirli bir şubeye atamanıza olanak tanıyan grunt-build-control eklentisiyle birlikte gelir. BitBucket yapılandırmasını uygulamanızın kök dizinindeki Gruntfile.js
dosyasına eklemeniz yeterlidir:
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' } } }, // ...
Şimdi çalıştırın:
grunt build
…dağıtım klasörünü oluşturmak için bunu takip edin:
grunt buildcontrol:bitbucket
…taahhüt etmek ve kodu deponuzdaki derleme dalına göndermek için.
SSH Anahtarını Oluşturun
Artık kodunuzu barındırdınız. Raspberry Pi'nize dağıtmadan önce, Raspberry Pi için bir SSH anahtarı oluşturmanız ve bunu BitBucket hesabınıza eklemeniz gerekir. Bu adımı hızlı bir şekilde gerçekleştireceğiz, ancak herhangi bir sorun yaşarsanız lütfen BitBucket kılavuzunu takip edin. Bu nedenle, Raspberry Pi terminalinize tekrar giriş yapın ve genel/özel anahtar çiftini oluşturun:
ssh-keygen
Ardından, aracıyı başlatın:
ssh-agent /bin/bash
Ve anahtarı aracıya ekleyin:
ssh-add /home/pi/.ssh/id_rsa
Şimdi ortak anahtarın içeriğini çıkarmanız yeterlidir:
cat /home/pi/.ssh/id_rsa.pub
…böylece kopyalayıp BitBucket'e yapıştırabilirsiniz.
BitBucket'ta profil resminize tıklayın ve Hesabı yönet 'e gidin. GÜVENLİK altında, SSH anahtarlarını bulun ve Anahtar ekle düğmesini tıklayın.
Depoyu Klonla
Uygulamalarınızın kodunu nereye yerleştireceğiniz konusunda bir kural yoktur, ancak bir /var/www
dizini oluşturabilir ve tüm projelerinizi oraya koyabilirsiniz.
cd /var sudo mkdir www
Dosyaları web köküne yerleştirmek istediğinizde sudo
kullanımını önlemek için, sahibini Pi kullanıcınıza ve grubu Nginx tarafından kullanılan www-data
olarak değiştirebilirsiniz:
sudo chown -R pi:www-data www cd www
Artık deponuzun derleme dalını klonlayabilir ve bağımlılıkları yükleyebilirsiniz:
git clone [email protected]:USER/REPO.git --branch build --single-branch cd REPO npm install --production
Tamamlandığında, ortamı üretime ayarlayarak uygulamanızı başlatabilirsiniz:
export NODE_ENV=production; node server/app.js &
Şimdi, çalışıp çalışmadığını kontrol etmek için bilgisayar tarayıcınızı cihazın IP adresine yönlendirin.
Nginx Ters Proxy'yi Yapılandır
Başvurunuzu dışarıdan erişilebilir kılmak için bir adım daha kaldı. Nginx, Pi'niz için HTTP isteklerini alacağı 80 numaralı bağlantı noktasını dinliyor olsa da, Düğüm uygulamasının kendisi farklı bir bağlantı noktasını dinliyor (örneğin, bağlantı noktası 8080). Bu nedenle, Nginx'i ters proxy olarak hareket edecek, uygulamanız için amaçlanan istekleri tanıyacak ve bunları Node.js'ye geçirecek şekilde yapılandırmanız gerekir.
Nginx, sunduğu her uygulama için yapılandırma dosyasını sites-available
klasörde tutar:
cd /etc/nginx/sites-available/
Burada, default
yapılandırma dosyasını kopyalayabilir ve istediğiniz zaman düzenleyebilirsiniz:
sudo cp default my-app sudo nano my-app
Nihai yapılandırma dosyası, Nginx'in Node.js sunucusuna bir proxy görevi görmesiyle şöyle görünmelidir:
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 } }
Bu konfigürasyonu etkinleştirmek için, sites-enabled
olduğu klasörde Nginx'in çalışma zamanı sırasında aktif konfigürasyonları aradığı bir sembolik bağlantı oluşturmanız gerekir:
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/my-app
Ve bu değişiklikleri etkinleştirmek için hizmeti yeniden yükleyin:
sudo service nginx reload
Bu noktada, uygulamanız my-app.dev
etki alanına yönelik HTTP trafiğini almaya hazırdır (yukarıda yapılandırdığınız server_name my-app.dev
yönergesi sayesinde). Çözmeniz gereken son konu ise dışarıdan göndereceğiniz trafiği bu alan adıyla nasıl eşleştireceğinizdir. Bir alan adı satın alıp IP'nize yönlendirebilseniz de, hosts
dosyası kurtarmaya gelir ve bunu gereksiz kılar.
Siteye erişeceğiniz iş istasyonunda, yönlendiricinizin harici IP adresini eklemeniz ve my-app.dev
ana bilgisayar adıyla eşleştirmeniz yeterlidir. my-app.dev
için oluşturduğunuz HTTP trafiği, Host
HTTP başlığında doğru ana bilgisayar adıyla doğrudan yönlendiricinize gönderilir.
Windows'ta yönetici ayrıcalıklarıyla c:\windows\system32\drivers\etc\hosts
içinde bulunan dosyayı not defteri ile düzenleyebilirsiniz. Linux ve Mac'te terminali sırasıyla sudo nano /etc/hosts
ve sudo nano /private/etc/hosts
ile kullanabilirsiniz.
## # 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
Sıradaki ne?
Artık her şey ayarlandığına göre, Raspberry Pi'nize istediğiniz kadar uygulama dağıtabilir ve Node.js sunucularınızı canlı tutmak için sonsuza kadar veya pm2 yükleyebilirsiniz.
Ve bir şeyler ters giderse, SD kartı silip sıfırdan yeniden başlayabileceğinizi unutmayın!