Some notes about the Raspberry Pi server
Here some notes & descriptions which packages are installed and what are the important things to be considered.
It’s based on standard Raspberry Pi packages. The hardware you can buy at amazon.
You have to setup the SD card first. I don’t use a keyboard and a screen, so SSH must work from the beginning. In the Raspberry Pi image the SSH daemon is enabled by default.
Therefor after downloading the package and installing it on the SD card, only the raspberry Pi image (Raspbian.xz) must be available in the /images folder. This guarantees that the system is booting with the first start into Raspbian Linux system.
You should either define a fixed IP address for the Pi or make sure in the router that it always gets the same IP.
Then you have to configure the port forwarding in the router to the PIs IP address for port 80 (http).
For accessing the Pi from a Windows system with SSH you can use Putty, for file transfer WinSCP.
While I experienced big problems with the SD card, I installed now a hard disk. The SD card is used for booting only. The root file system is on the hard disk. Only with that setup the system can handle the huge amount of file accesses due to the mail server, feed server, contact/calendar server, analytics server.
1.) Format SD
Download and install the SD Association’s Formatting tool from https://www.sdcard.org/downloads/formatter_4/eula_windows/
Open the Application you have just installed
Set „FORMAT SIZE ADJUSTMENT“ to ON in the Options menu.
Make sure you have selected the Drive your SD Card is inserted in
2.) Install Raspian on SD
Download the distribution from the raspberrypi.org downloads page or from a mirror or torrent.
Insert the SD card into your SD card reader and check what drive letter it was assigned. You can easily see the drive letter (for example G:) by looking in the left column of Windows Explorer. You can use the SD Card slot (if you have one) or a cheap Adapter in a USB slot.
Download the Win32DiskImager utility http://sourceforge.net/projects/win32diskimager
Extract the executable from the zip file and run the Win32DiskImager utility; you may need to run the utility as Administrator! Right-click on the file, and select ‚Run as Administrator‘
Select the image file you extracted above.
Select the drive letter of the SD card in the device box. Be careful to select the correct drive; if you get the wrong one you can destroy your data on the computer’s hard disk! If you are using an SD Card slot in your computer (if you have one) and can’t see the drive in the Win32DiskImager window, try using a cheap Adapter in a USB slot.
Click Write and wait for the write to complete.
Exit the imager and eject the SD card.
3.) Raspi-Config timezone, password, expand the file system
4.) apt-get update & upgrade
sudo apt-get update
sudo apt-get upgrade
5.) Install HardDisk
sudo apt-get -y install ntfs-3g hfsutils hfsprogs
sudo mkdir /media/usbstick
tail -f /var/log/messages
sudo mount -t ntfs-3g -o uid=pi,gid=pi /dev/sda /media/usbstick/
sudo umount /media/usbstick
sudo blkid /dev/sda
sudo nano -Bw /etc/fstab
UUID=88740B44740B350A /media/usbhdd/ ntfs-3g defaults,auto,umask=000,users,rw 0
6.) Copy the rootfs to the hard disk
sudo umount /dev/sda1
sudo fdisk /dev/sda1
sudo mkfs.ext4 /dev/sda1
sudo e2fsck /dev/sda1
sudo mount /dev/sda1 /media/usbstick
sudo rsync -ahHAX --exclude=media/usbhdd / /media/usbhdd
sudo nano /media/usbstick/etc/fstab
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/sda1 / ext4 defaults,noatime 0 1
sudo nano /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait
7.) Dynamic IP
As the IP address from the ISP is switched during the night we need to make the domain available with the help of a dynamic IP service provider.
tar xf noip-duc-linux.tar.gz
Script noip-DUC in /etc/init.d, must run as a boot service
sudo rcupdate.d noip-DUC defaults
For no-ip you can check the status with
sudo /usr/local/bin/noip2 -S
Dynamic IP providers:
8.) Apache, MySql, phpmyadmin, apc
sudo apt-get install apache2 php5 libapache2-mod-php5
Adapt apache config for RPi.
Enable rewrite module for wordpress.
sudo apt-get install mysql-server mysql-client php5-mysql
sudo apt-get install phpmyadmin
sudo apt-get install php-apc
I’m using the standard web server Apache. It also has the possibility to define multiple hosts.
As I’m owning the server I have the possibility to setup as much databases as I want. For most of the applications it would be possible to set them up together in one database as the tables would get a prefix.
When creating a new database take care to always define the char set utf8_general_ci.
It’s sometime much easier to use this as a web based management system of the mysql database.
Necessary for most of the server applications.
For performance enhancements it’s very much recommended to use PHP5-apc.
PHP5-curl is necessary for the piwik archive script.
For the WordPress cache W3C the PHP cache APC is necessary.
Needs apache2, php, apc, mysql with a db.
The wordpress standard is installed with the standard theme, so far.
The following plugins are important:
Needs the API code provided by piwik.
- W3C Cache, speeding up the system
- Awesome Flickr gallery
Nice to have plugins:
- NextGen Gallery, for picture galeries
- CaptionPix, to set a nice caption under an image
- Social Icons, to give the users to share on social networks
Some folder rights must be set by hand.
10.) Mail server
It’s not a real mail server, as one still needs a mail account at any provider, where the e-mails are originally are sent to and also that is addressed for the outgoing mails. Nevertheless it’s quite a nice solution to store the e-mails on your own server, although you also have to care for a backup then.
The solution consists of a few components as layed out in an article of the c’t magazine.
Mail transfer agent, exim4
sudo apt-get install exim4
sudo dpkg-reconfigure exim4-config
Configure as Smarthost, add RPi IP address to incoming IP adresses.
Machines to relay from: 192.168.178.0/24.
Mail format: mbox format in /var/mail
MAIN_TLS_ENABLE = 1
echo „Smarthost-Test“ | mail Smarthost-Test email@example.com
IMAP server dovecot
sudo modprobe ipv6
otherwise dovecot will not install.
For diasabling IPV6 add in the file /etc/dovecot/dovecot.conf
listen = *
Very important is the format of the mailbox, defined in /etc/dovecot/conf.d/10-mail.conf with
mail_location = mbox:~/mail:LAYOUT=maildir++:INBOX=/var/mail/%u:CONTROL=~/mail/control
Otherwise you can not create folders in your mailbox!
Grab your mails from different e-mail hosters and setup either a local or a central /etc/fetchmailrc file with:
poll imap.gmail.com proto IMAP user "firstname.lastname@example.org" there is mmuster here password "123456" folder INBOX ssl
mda 'formail -c >> ~/mail/.INBOX.Gmail'
Remove the „keep“ option when everything works.
Either run it with a daemon or configure a cron job.
Adapt /etc/default/fetchmailrc to run fetchmail as daemon.
sudo apt-get install roundcube-core roundcube-mysql
For https you need SSL enabled in apache.
In the file /etc/apache2/conf.d/roundcube
enter the two alias
Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/
Alias /roundcube /var/lib/roundcube
On Windows I use the thunderbird client, on Android the K9.
11.) Baikal contact & calendar server
Adapt the httpd.conf.
You can use the following clients:
If I once really need file sharing and collaboration seafile sounds like a very good option.
12.) tt-rss feed reader
Tiny tiny RSS is an open source RSS feed aggregator and news reader.
You have to enable the API so that mobile apps can access it. There is an app from the developer, and also a fork now. And it works with the greader app. All are only available for Android.
Install the cronjob for automatic update within another user, not for root.
*/30 * * * * /usr/bin/php /var/www/tt-rss/update.php --feeds --quiet
Important: As the raspberry pi server has low performance you have to switch off the „on the fly calculations“ in „Preferences/General Preferences/Archiv in Browser: Off“
Set „Reports“ to 3600 seconds.
It can happen that the server is too slow and the PHP maximum execution time is reached. So first you have to set this to „0“ in php.ini and restart apache with „sudo service apache2 restart“.
To make the calculations in the background configure a cron job with:
sudo crontab -e
5 * * * * /usr/bin/php5 /var/www/piwik/misc/cron/archive.php -- url=http://hardy.no-ip.biz/piwik/ > /var/log/piwik-archive.log
Then you can check the log file at /var/log/piwik-archive.log if it’s running correctly every hour + 5min.
14.) URL setting
The URL that the Dynamic IP service provider delivers must be set in the following files/packages
- WordPress: In the General preferences, WordPress URL
- No-Ip: Configure with
sudo /usr/local/bin/noip2 -C
- Piwik: In the GUI at general preferences/web sites and in the cron job
- tt-rss: In the file config.php file at
15.) Port forwarding
For HTTPS forward the TCP port 443, for secure IMAP the TCP port 993.