Git- och hemserver med Raspberry Pi
Postat: 8 oktober 2016, 20:20:34
Att Git är ett otroligt smidigt verktyg när man utvecklar kod vet nog många här. Github finns och fungerar bra, men ibland kan man önska att ha sin egen privata server. Med en Raspberry Pi liggandes är det lätt gjort att ställa upp en ny Git-server. Nätverksanslutna hårddiskar är ju också trevligt.
Projekt mål:
* Gitserver för versionshantering av mina egna projekt på mina datorer oavsett var jag befinner mig.
* Nätverksansluten lagring som jag kan komma åt via internet för att avlasta den kanske snålt tilltagna SSD'n i laptoppen.
* Automatisk backup och syncning av bilder osv på telefonen när den är ansluten via WiFi där hemma.
* Hemautomation övervakning osv...
Hårdvarubiten:
Hårdvaran som behövs är inte mycket, en Raspberry Pi (jag kör med min gamla version 1, det är inte så tunga program som används), ett minneskort till operativsystemet och en USB-ansluten hårddisk.
Raspberry Pi 1 har problem med att strömförsörja USB tillbehör och en hårddisk är ju inte direkt snål. Kopplingsschemat för hela raspberryn finns HÄR. Första försöket var en fullösning, helt enkelt brygga F1, en 1,1A polyfuse som sitter på ingången till matningsspänningen. Detta löste inte problemet. Troligtvis är det alltså tunna ledningsbanor bort till USB kontakterna som skapar ett för stort spänningsfall. Nästa försök var att löda på en matningskabel direkt på USB-porten som hårddisken kopplades i. Detta fungerade toppen. Värt att kolla upp också vilken adapter man använder för 5V, körde på en kinesisk först som skulle klara av 2A men det räckte inte. Nu kör jag på en Asus 2A adapter istället. Verkar vara stabilt efter 1 dag drift utan omstarter.
Väldigt dålig bild tyvärr, men det är allt jag har. Strömmatningskabel är den vita till vänster. Ett annat alternativ är kanske att köpa en USB-kabel för extra strömmatning till externa hårddiskar på Kjell, borde fungera bra också. Artikelnummer 38016. Istället för ett IKEA-bord fullt med kabelhärvor köpte jag mig ett gammalt pottskåp som efter lite inoljning såg rätt trevligt ut. Det nedre skåpet passade perfekt till router, grenkabel och Raspberryn med sin lilla HDD. Mjukvara:
Steg 1 är att få hårddisken redo för bruk. Jag formaterade min disk som en enda 1TB partition i NTFS. Anledningen till NTFS är kompatibilitet med Windowsdatorer ifall jag skulle få för mig att röra vid en sådan någon gång. För att Pi'en skall klara av detta får man installera ntfs-3g. Sen är det bara att skapa ett directory att mounta till, kolla upp UUID för hårddisken och lägga in den i /etc/fstab så att den mountar automatiskt vid uppstart. (Glöm inte köra sudo mount -a efter om du inte vill starta om Raspberryn)
Att ställa upp en enkel server för Git kunde knappast vara lättare. Installera Git, skapa en egen användare för Git och en symlink från Git's hemmapp till en mapp på den externa disken. Nya projekt måste nu skapas via tex ssh, skapa bara en mapp till projektet (ofta döpt med ändelsen .git) och initiera Git med --bare argumentet. Sen är det bara att lägga in Pi som remote host på en klient dator och push'a projektet. Att skapa ett nyckelpar med ssh-keygen är ju smidigt och säkert också, så det kan ju rekommenderas.
Nästa steg är att installera resten av LAMP-stacken, dvs Apache, MySQL och PHP. Detta är ju rätt rakt fram, inte mycket att skriva om.
MySQL lägger databasen i /var/lib/mysql vilket är på minneskortet. Eftersom en databas lätt kan bli stor vill jag ha in denna på hårddisken. Detta löste jag genom att stänga av mysql daemon, kopiera över hela innehållet till en mapp på hårddisken och sen ändra datadir i /etc/mysql/my.conf filen samt att uppdatera adressen i /etc/apparmor.d/usr.sbin.mysqld. Sen är det bara att starta upp mysql igen.
Apache lägger rooten till http-servern i /var/www/html, det vill säga på minneskortet. Denna rooten vill jag inte flytta till hårddisken eftersom det skulle bli knas om hårddisken inte mountas som den skall vid en omstart. Istället gjorde jag en symlink i /var/www/html till en http-mapp på hårddisken och lade in en index.php i www-rooten:
Detta gör alltså att jag får ett felmeddelande som startsida om hårddisken inte är mountad som den skall. Annars laddas min andra index.php-fil.
Forwarding av portarna för SSH, FTP och HTTP löst. Nästa steg blir att implementera en egen service för dynamisk IP-hantering.
Projekt mål:
* Gitserver för versionshantering av mina egna projekt på mina datorer oavsett var jag befinner mig.
* Nätverksansluten lagring som jag kan komma åt via internet för att avlasta den kanske snålt tilltagna SSD'n i laptoppen.
* Automatisk backup och syncning av bilder osv på telefonen när den är ansluten via WiFi där hemma.
* Hemautomation övervakning osv...
Hårdvarubiten:
Hårdvaran som behövs är inte mycket, en Raspberry Pi (jag kör med min gamla version 1, det är inte så tunga program som används), ett minneskort till operativsystemet och en USB-ansluten hårddisk.
Raspberry Pi 1 har problem med att strömförsörja USB tillbehör och en hårddisk är ju inte direkt snål. Kopplingsschemat för hela raspberryn finns HÄR. Första försöket var en fullösning, helt enkelt brygga F1, en 1,1A polyfuse som sitter på ingången till matningsspänningen. Detta löste inte problemet. Troligtvis är det alltså tunna ledningsbanor bort till USB kontakterna som skapar ett för stort spänningsfall. Nästa försök var att löda på en matningskabel direkt på USB-porten som hårddisken kopplades i. Detta fungerade toppen. Värt att kolla upp också vilken adapter man använder för 5V, körde på en kinesisk först som skulle klara av 2A men det räckte inte. Nu kör jag på en Asus 2A adapter istället. Verkar vara stabilt efter 1 dag drift utan omstarter.
Väldigt dålig bild tyvärr, men det är allt jag har. Strömmatningskabel är den vita till vänster. Ett annat alternativ är kanske att köpa en USB-kabel för extra strömmatning till externa hårddiskar på Kjell, borde fungera bra också. Artikelnummer 38016. Istället för ett IKEA-bord fullt med kabelhärvor köpte jag mig ett gammalt pottskåp som efter lite inoljning såg rätt trevligt ut. Det nedre skåpet passade perfekt till router, grenkabel och Raspberryn med sin lilla HDD. Mjukvara:
Steg 1 är att få hårddisken redo för bruk. Jag formaterade min disk som en enda 1TB partition i NTFS. Anledningen till NTFS är kompatibilitet med Windowsdatorer ifall jag skulle få för mig att röra vid en sådan någon gång. För att Pi'en skall klara av detta får man installera ntfs-3g. Sen är det bara att skapa ett directory att mounta till, kolla upp UUID för hårddisken och lägga in den i /etc/fstab så att den mountar automatiskt vid uppstart. (Glöm inte köra sudo mount -a efter om du inte vill starta om Raspberryn)
Kod: Markera allt
# Mount the external harddrive automatically
UUID=4304BBD00A146EF9 /mnt/externhdd ntfs-3g defaults 0 0
Kod: Markera allt
pi@raspberrypi:~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
└─sda1 8:1 0 931.5G 0 part /mnt/externhdd
mmcblk0 179:0 0 7.4G 0 disk
├─mmcblk0p1 179:1 0 63M 0 part /boot
└─mmcblk0p2 179:2 0 7.3G 0 part /
Nästa steg är att installera resten av LAMP-stacken, dvs Apache, MySQL och PHP. Detta är ju rätt rakt fram, inte mycket att skriva om.
MySQL lägger databasen i /var/lib/mysql vilket är på minneskortet. Eftersom en databas lätt kan bli stor vill jag ha in denna på hårddisken. Detta löste jag genom att stänga av mysql daemon, kopiera över hela innehållet till en mapp på hårddisken och sen ändra datadir i /etc/mysql/my.conf filen samt att uppdatera adressen i /etc/apparmor.d/usr.sbin.mysqld. Sen är det bara att starta upp mysql igen.
Apache lägger rooten till http-servern i /var/www/html, det vill säga på minneskortet. Denna rooten vill jag inte flytta till hårddisken eftersom det skulle bli knas om hårddisken inte mountas som den skall vid en omstart. Istället gjorde jag en symlink i /var/www/html till en http-mapp på hårddisken och lade in en index.php i www-rooten:
Kod: Markera allt
<?php
$external_file = "extwww/index.php";
if (file_exists($external_file)) {
include $external_file;
} else {
echo "SERVER ERROR: External data drive not mounted, or no index.php file present";
}
?>
Forwarding av portarna för SSH, FTP och HTTP löst. Nästa steg blir att implementera en egen service för dynamisk IP-hantering.