24748
netweters
|
152265
antwoorden
|
20686
vragen
|
Ik weet dat het mogelijk is, maar hoe moeilijk (makkelijk?) is het om op te zetten? Heeft iemand er persoonlijke ervaring mee? Is het aan te raden? Af te raden? Voor- en nadelen?
Opgelost! Ga naar oplossing.
Het hangt met name af van wat je met de webserver wilt doen. Ik heb een rpi in gebruik als domotica server. De gebruikers interface is via een website, zoals dit ook voor veel netwerk apparatuur (routers, switches...) het geval is.
Ik heb voorheen al een LAMP server opgezet op een RPI, met daarop de software TNG voor genealogie (stamboom-onderzoek). Later ben ik overgestapt op een VPS bij een provider in Frankfurt.
Waarschijnlijk wordt het problematisch wannneer je de RPI-webserver bijvoorbeeld als photo-server wilt gebruiken, en de foto-bewerkingen met behulp van de GD library) op de server wilt doen, mutli-user. Of wanneer je een soort van eigen SharePoint wilt bouwen met LibreOffice-Online).
Dus kort samengevat - ja, webserver is prima mogelijk, ook met apache, php en mysql-server, maar of het naar wens werkt zal afhankelijk zijn van load (gebruikers en processen).
Voor mij mag het heel simpel zijn. Geen interface, gewoon een simpele HTML5 website, HTTPS zou leuk zijn. Ik heb een eigen domeinnaam en zou die willen koppelen, vandaar.
@sb Het is mogelijk om een webserver op je R pi te configureren, maar het is niet aan te raden.
Je moet rekening houden als er enkele gebruikers op je webpagina geconnecteerd zijn, is het laden van de sites traag. Als het de bedoeling is om deze alleen te gebruiken , dus niet met meerdere mensen geconnecteerd is het perfect mogelijk. (weinig load)
Alles hangt af van wat je op de webserver gaat draaien. Puur alleen een website met weinig inhoud of een website met veel filmpjes, links en bewegende beelden. Dit zijn allemaal de factoren die meespelen in de keuze.
Puur een simpele website, zeker niet bedoeld voor 100 bezoekers per dag, zelfs niet voor 10. Geen scripts en dergelijke. Misschien om te gebruiken om bepaalde bestanden (text) te downloaden.
Dat werkt heel goed. Mijn RPI is mediaserver, fileserver en webserver. Ik ben de enkel gebruiker hiervn. De webserver laar me toe om om het even waar toegang te hebben tot mijn bestanden. Het is niet de bedoeling dat ik deze bestanden van op afstand bewerk. Wel om te consulteren. Op de aangeloten schijf staat mijn tweede backup. De enige toegang tot het internet is via https, maar niet via poort 443. Ik gebruik hiervoor een poort die ik in geen enkel lijst tegenkom. Toegang enkel met een sterk wachtwoord.
Dat klinkt héél interessant. Kan je me vertellen met welke RPI je werkt en hoe je dit hebt opgezet?
Update 2020-12-12 zie teksten in het rood
Een RPI 3b+.
Voor je tweede deel zie ik twee mogelijkheden:
Ik ga voor de tweed optie.
Hier volgt de inleiding en het opzetten van de fileserver.
Dit document heb ik opgesteld bij de eerste installatie. Bij elke latere installatie zijn er zaken die niet werken. Het is altijd een beetje prutsen. De versie van de rpi, nu Raspberry PI OS, de oude benaming Raspbian, is steeds een variante van Debian. Op de site van Raspberry zie ik dat de voorbereiding nu anders kan en dat met de download de image direct op de sd geschreven wordt.
Nieuw:
Download (onder Windows, MacOs of Ubuntu) van op https://www.raspberrypi.org/software/ Raspberry Pi Imager en voer uit.
Mogelijk krijg je eerst enkel de optie om te formateren of een image te installeren. Kies dan formateren (komt overeen met SD Card Formatter). Na formatteren sluit je Raspberry Pi Imager en voer die opnieuw uit.
Je krijgt de keuze tussen verschillende images die je kan installeren, kies de door u gewenste. Indien er meerdere SD cards of USB sticks aangesloten zijn, kies dan het gewenste medium en voer uit.
Meestal hoeft je dus op voorhand geen image te downloaden. Als je bijvoorbeeld Noobs wil, dan moet je die image nog wel eerst downloaden.
Download https://www.raspberrypi.org/downloads/raspbian/
Gekozen RASPBIAN STRETCH WITH DESKTOP AND RECOMMENDED SOFTWARE
Mogelijk moet de sd kaart eerst geformateerd worden met SD Card Formatter
Gebruik ETCHER https://www.balena.io/etcher/ om het gedownloade bestand naar de usb-stick over te brengen. Kies het gedownloade bestand en kies het medium waarop het moet komen (micro SD voor RaspberryPi, USB stick voor pc of mac.
SD kaart in Raspberry, HDMI, Toetsenbord en muis aansluiten en dan aanzetten
Raspbian start nu voor de eerste keer op. Je krijgt een eerste scherm waar je het land kiest. Je kan ook taal en tijdzone aanpassen. Je kan een nieuw wachtwoord voor de gebruiker pi instellen.
Country: Belgium
[Language: Flemish]
[Time Zone: Brussels]
Nieuw wachtwoord voor pi: xxxxxxxx gebruik een lang en gemakkelijke te onthouden wachtwoord
Wachtwoord voor indien enkel draadloos verbonden.
Automatische herstart van Raspberry
Op het raspberrypi iconntje klikken, voorkeuren, Raspberrypi Configuratie programma
Onder de tab Systeem: Hostname aanpassen (optioneel) MijnRPI
Onder de tab Interfaces: SSH en VNC op aanzetten
Onderaan het venster op OK drukken
Rebooten
sudo nano /etc/dhcpcd.conf
Toevoegen
interface eth0
static ip_address=192.168.0.11
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
interface wlan0
static ip_address=192.168.0.21
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
Opmerking: de lijn static_ip_address is verdwenen en vervangen door: inform 192.168.0.21
sudo ip link set eth0 down
sudo ip link set eth0 up
of
sudo ip link set wlan0 down
sudo ip link set wlan0 up
Om geen problemen te hebben is de reboot aanbevolen
Indien na het uit- en terug aanzetten het ip adres niet veranderd is in de vaste waarde dan:
sudo reboot
sudo mkdir /share
sudo mkdir /share/disk1 # eventueel ook met disk2, 3, …
sudo chmod 1775 /share
sudo chmod 1775 /share/disk1 # idem
sudo apt-get install ntfs-3g
Opmerking: zodra een ntfs schijf aangesloten wordt, wordt deze onmiddellijk herkend en gemount onder /media/pi/naam_schijf Deze schijf is enkel leesbaar (filesystem = ntfs).
Ik wens de shared schijven steeds op dezelfde dev te mounten. Daarom gebruik ik de UUID van de schijf. (Om de label te gebuiken wordt by-uuid vervangen door by-label en UUID door LABEL).
ls /dev/disk/by-uuid/ -l
extract van de uitvoer:
lrwxrwxrwx 1 root root 10 nov 17 21:31 4C4623D14623BB1A -> ../../sda1
sudo nano /etc/fstab
toevoegen van:
UUID=4C4623D14623BB1A /share/disk1 ntfs-3g auto,users,permissions,nofail 0 0
sudo umount /dev/disk1
sudo mount /share/disk1
sudo chown pi:pi /share/disk1
sudo chown pi:pi /share/disk1/Jean
sudo apt-get install samba samba-common-bin
sudo nano /etc/samba/smb.conf
verander workgroup = WORKGROUP in
workgroup = STREEK Ik denk dat dit met Win10 niet meer nodig is, ik gebruikte een andere naam dan de verstekwaarde van Windows: WORKGROUP
toevoegen of aanpassen onder [homes]
# browseable = no
admin users = jean
browseabble = yes
security=user
achteraan toevoegen:
[Jean]
Path=/share/disk1/Jean
Read only=no
Browseable=yes
Writable=yes
Guest ok=no
Valid users=jean
Create mask=0777
Directory mask=0777
[Naam2]
Path=/share/disk1/Naam2
Read only=no
Browseable=yes
Writable=yes
Guest ok=no
Valid users=user2,jean
Create mask=0777
Directory mask=0777
Er kunnen enkel smb users aangemaakt worden als ze ook als rasbian user bestaan.
sudo adduser jean
xxxxxxxx een lang wachtwoord en moeilijk wachtwoord
sudo adduser user2
xxxxxxxx een lang wachtwoord en moeilijk wachtwoord
sudo smbpasswd –a jean
xxxxxxxx als het binnen eigen netwerk is, kan een gemakkelijk wachtwoord gebruikt worden
sudo smbpasswd –a user2
xxxxxxxx als het binnen eigen netwerk is, kan een gemakkelijk wachtwoord gebruikt worden
sudo /etc/init.d/samba restart
In C:\Windows\System32\drivers\etc\hosts (doen als administrator)
Toevoegen:
# Om met één gebruiker meerdere shared verbindingen te hebben met MijnRPI
# moet telkens een andere hostnaam gebruikt worden. Op het internet vond ik
# het advies om de tweede keer het ip-adres te gebruiken. NT-servers hebben
# de mogelijkheid om aliassen te geven. Ik heb dan eens geprobeerd om
# meerdere keren het zelfde ip te gebruiken, steeds met een andere naam.
# De meest algemene naam is dit:
192.168.0.21 MijnRPI
192.168.0.21 MijnRPI1
192.168.0.21 MijnRPI2
192.168.0.21 MijnRPI3
sudo apt-get install minidlna
sudo nano /etc/minidlna.conf
toevoegen:
user minidlna
in commentaar zetten
#media_dir=/var/lib/minidlna
toevoegen:
media_dir=/share/disk1
media_dir=A,/share/disk1/Muziek
media_dir=PV,/share/disk1/Beeld
…
friendly_name= MijnRPI
achteraf toegevoegd om enkel te browsen via mappenstructuur:
root_container=B
sudo service minidlna start
sudo service minidlna force-reload
Voor een nieuwe scan: sudo minidlna –R opgelet nu sudo minidlnad -R
daarna herstarten: sudo service minidlna restart
In de crontab toegevoegd:
0 0 * * 1 sudo /usr/local/bin/minidlna
Het bestand naar waar verwezen wordt bevat de twee lijntjes voor de nieuwe scan.
sudo apt-get install apache2
Een zelf ondertekend certificaat maken gaat nu automatisch
Door het eigen certificaat is er wel versluiering, doch doordat het niet ondersteunt is door een hoger niveau zal de webbrowser een melding geven dat de verbinding niet veilig is. Men kan toch doorgaan met de browser.
sudo a2enmod ssl
sudo a2ensite default-ssl
systemctl restart apache2
sudo service apache2 reload
sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
ingegeven waarden:
BE,,,certificaat,zelf_ondertekend, nascoke, onbekend@e-mail.adres
sudo chmod 600 /etc/apache2/ssl/*
sudo nano /etc/apache2/sites-enabled/000-default.conf
In commentaar zetten:
#<VirtualHost *:80>
Toevoegen:
<VirtualHost *:443 *:12345 zelf_gekozen_poortnummer>
toevoegen na ServerAdmin webmaster@localhos
ServerName MijnRPI
Deze twee lijnen aanpassen:
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
Service achter poort 80 stoppen
sudo nano /etc/apache2/ports.conf
In commentaar zetten:
#Listen 80
Waar nu Listen 443 staat ook Listen 12345 met zelfgekozen poortnummer toevoegen.
sudo service apache2 reload
Elke webserver reageert op zijn manier op een zelfondertekend certificaat. Allen geven een melding dat er gevaar dreigt.
Voor iemand anders:
sudo mkdir /var/www/html/andere
sudo ln -s /share/disk1/Jean/Beeld /var/www/html/andere/Beeld
sudo ln -s /share/disk1/Jean/Klank /var/www/html/andere/Klank
sudo mv /var/www/html/index.html /var/www/html/apacheX_html
sudo nano /var/www/html/index.html (opslaan zonder iets in te geven)
Voor mij (en gedeeltelijk voor user2):
sudo mkdir /var/www/html/gemakkelijk te onthouden lange naam
sudo ln -s /share/disk1 /var/www/html/Voor mij
sudo htpasswd -c /etc/apache2/.htpasswd Jean
wachtwoord : xxxxxxxx een lang gemakkelijk te onthouden wachtwoord
sudo htpasswd /etc/apache2/.htpasswd iemand_anders
wachtwoord : xxxxxxxx een lang gemakkelijk te onthouden wachtwoord
sudo nano /var/www/html/.htaccess
nieuw
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
AuthName "Enter password"
Require valid-user
sudo nano /etc/apache2/sites-enabled/000-default.conf
toevoegen
<Directory /var/www/html >
AllowOverride All
</Directory>
sudo chmod 755 /var/www/html/.htaccess
sudo chmod 755 /etc/apache2/.htpasswd
/etc/init.d/apache2 restart
Mijn thuisnetwerk, Modem anderes, Geavanceerde instellingen, IP4 Firewall & Poort forwarding
Enkel poort 12345 forwarden naar 192.168.0.21 met TCP protocol.
Mijn site op MijnRPI (de Raspberry) is dus extern enkel bereikbaar met https.
Om te beletten dat gebruikersidentificatie en wachtwoord zouden doorgegeven worden met een onbeveiligde verbinding, is er geen service achter poort 443.
Opmerking: Vermits ik over geen certificaat beschik dat gevalideerd is door een erkend organisme, maar door mijn eigen, zullen de meeste browsers een foutmelding geven dat de site niet veilig is. Men kan doorgaan en niettegenstaande deze melding is de verbinding op zich volledig beveiligd. Het onveilige komt enkel door het ‘onveilig’ certificaat.
Inloggen met voorbeeld@hotmail.com of met xxxxx
Ik heb daar twee hostnames:
Naam1.ddns.net en naam1.hopto.org (ik heb de tweed niet emeer, maar wel een tweede op ddns.net
Dit programma controleert regelmatig of het ip-adres veranderd is. Indien wel, dan wordt de DNS van NO-IP bijgewerkt.
mkdir noip
cd noip
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar vzxf noip-duc-linux.tar.gz
cd noip-2.1.9-1
sudo make
sudo make install
https://MijnRPI/ ddns.net:12345/ geeft een blanco scherm
https://MijnRPI/ ddns.net:12345/apacheX_html geeft het apache scherm
https://MijnRPI/ ddns.net:12345/andere geeft beeld en klank
https://MijnRPI/ ddns.net:12345/voor mij geeft alles
De eerste keer krijgt men altijd eerst het inlogscherm.
Waarom geen echt gratis certificaat:
Ik wilde dit doen, maar dan moeten mijn poorten 80 en 443 open zijn. Dus ik kies. Ik weet welke verwittiging ik krijg van de browser en twee andere personen die dit soms eens gebruiken weten dat ook.
Dit gaat enkel over uitgaande mail.
Ik heb eerst nullmailer geprobeerd omdat er bij dit programma veel minder te configureren valt. Het lukte niet. Dan ben ik overgeschakeld naar postfix.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install postfix
sudo nano /etc/postfix/mailname
voorbeeld@telenet.be
sudo nano /etc/postfix/main.cf
compatibility_level = 2
inet_interfaces = loopback-only
relayhost = smtp.telenet.be:587
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_CApath = /etc/ssl/certs
sudo nano /etc/postfix/sasl_passwd
smtp.telenet.be:587 voorbeeld@telenet.be:wachtwoord
sudo postmap /etc/postfix/sasl_passwd
sudo service postfix reload
sendmail -f van_voorbeeld@telenet.be -t naar_voorbeeld@telenet.be
Subject: Test mail van MijnRPI
Dit is een testmail
.
Het alleenstaande punt van de laatste lijn niet vergeten.
mailq
sudo postsuper -d ALL deferred
De logbestanden van de mail zijn:
/var/log/mail.err
/var/log/mail.log
/var/log/mail.info
/var/log/mail.warn
Nog wat anderde zaken.
sudo nano /usr/local/bin/schijf
# de sleep $1 is toegevoegd omdat bij een koude start het iets langer duurt eer de schijven gemount zijn.
# oproep van deze script: /usr/local/bin <getal>
# het <getal> is de slaaptijd alvorens gecontroleerd wordt op de schijf of schijven gemount zijn
# deze wachttij is van belang in het opstartproces
# $t is de bestemmeling van de mail
# $f is de verzender van de mail
# $1 is de slaaptijd
t=naar_voorbeeld@telenet.be
f=`cat /etc/mailname`
sleep $1
DATUM=`date "+%Y-%m-%d om %H:%M"`
for n in /share/*
do test -z "`ls $n`" && printf "From: $f \nSubject: [`hostname`] Op $DATUM is $n ontbrekend. Einde. \n. \n" |sendmail -f $f -t $t
done
Opgelet!: de tekst beginnende met ‘test’ is één lijn. De volgende lijn is de tekst ‘done’.
sudo chmod +x /usr/local/bin/schijf
Ik wens dat deze controle gebeurt telkens als opgestart wordt. Dit is vooral van belang als er een strommonderbreking geweest is.
crontab -e
@reboot sudo /usr/local/bin/schijf 30
sudo wpa_cli wps_pbc
Voor het installeren een update doen van hetgeen reeds geïnstallerd is.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install packagenaam
Controleren of een package geïnstalleerd is
dpkg --get-selections packagenaam
Om een package en zijn configuratie bestanden te wissen
apt-get --purge remove packagenaam of
sudo apt autoremove
Vanuit Windows in cmd of PowerShell (niet in een SSH venster):
scp pi@MijnRPI:Documents/test.txt d:\temp\framboos.txt
scp d:\temp\framboos.txt pi@MijnRPI:Documents/test.txt
https://MijnRPI.ddns.net/andere of https://MijnRPI.hopto.org/andere
of
https://MijnRPI.ddns.net/Andere of https://MijnRPI.hopto.org/Andere
sudo apt install python3-gpiozero
sudo nano /usr/local/bin/shutdown_button.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# example gpiozero code that could be used to have a reboot
# and a shutdown function on one GPIO button
# scruss - 2017-10
use_button=27 # lowest button on PiTFT+
from gpiozero import Button
from signal import pause
from subprocess import check_call
held_for=0.0
def rls():
global held_for
if (held_for > 5.0):
check_call(['/sbin/poweroff'])
elif (held_for > 2.0):
check_call(['/sbin/reboot'])
else:
held_for = 0.0
def hld():
# callback for when button is held
# is called every hold_time seconds
global held_for
# need to use max() as held_time resets to zero on last callback
held_for = max(held_for, button.held_time + button.hold_time)
button=Button(use_button, hold_time=1.0, hold_repeat=True)
button.when_held = hld
button.when_released = rls
pause() # wait forever
sudo chmod +x /usr/local/bin/shutdown_button.py
sudo nano /etc/systemd/system/shutdown_button.service
[Unit]
Description=GPIO shutdown button
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/bin/python3 /usr/local/bin/shutdown_button.py
[Install]
WantedBy=multi-user.target
sudo systemctl enable shutdown_button.service
sudo systemctl start shutdown_button.service
Het komt voor dat de raspberry blijft hangen in de opstart. Dit kan voorkomen doordat de mount van de schijf of schijven niet gelukt is.
Oplossing 1. Ik start de pc op met een raspbian of ander unix systeem. Ik sluit de micro sd van de Raspberry aan op de pc. Ik zet de fstab lijntjes in commentaar. Shutdown van pc. Kaartje terug in Raspberry en die terug opstarten. Vervolgens de geplaatste commentaartekens uit de fstab halen. Umount van de schijven en nieuwe mount doen.
Oplossing 2. fstab aanpassen
# achteraf toegevoegde argumenten in vierde parameter:
# nofail zodat het systeem bij het booten niet vastloopt als het niet lukt
# x-systemd.device-timeout=4 deverstekwaarde zou 90 seconden zijn, hierdoor wordt het 4 seconden
LABEL=Fram1 /share/disk1 ntfs-3g auto,user,permissions,nofail,x-systemd.device-timeout=4 0 0
sudo mount -t cifs //192.168.0.21/Jean /mnt/d/test -o user=Jean
Dit werkt van de ene RaspberryPi naar de andere, maar niet in de Linux omgeving onder Windows 10.
sudo nano /boot/config.txt
# jdk hdmi Cec uitzetten
hdmi_ignore_cec=1
sudo apt install kid3
sudo nano /etc/ssh/sshd_config
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
Port 23456
/etc/init.d/ssh restart
Op andere computer: ssh pi@192.168.0.12 –p 23456
Hier en daar kan er een naam staan die niet consistent is. Dit komt omdat ik bij de eerste keer ander namen gebruikt heb en later mogelijk ergens een naam niet aangepast heb. Bovendien heb ik nu (overbodige reactie) toch nog enkel gegevens aangepast.
Normaal zou het met alle bovenstaande uitleg moeten lukken om de rpi deftig aan de praat te krijgen.
Ik ga binnenkort nog eens opnieuw installeren en proberen alles in mijn document goed aan te passen.
EDIT 20:25
Nog een opmerking over de webserver. Eigenlijk heb ik geen pagina's, maar maak ik gebruik van de mappenstructuur van mijn bestanden. Ik kan dus door alles heen wandelen. Voor mij is dat voldoende. Ik kan ergens foto's tonen of een oude familieopname laten horen of gewoon een bestand raadplegen. Hiervoor heb ik dus geen html nodig.
Bedankt, @janne_man ! Een hele boterham. (-: Ik heb een bladwijzer gezet, zodat ik deze op mijn gemak kan raadplegen als ik het nodig heb.