💾 Archived View for sylvaindurand.org › getting-a-web-server-with-nginx › index.gmi captured on 2022-04-29 at 11:23:38. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2022-04-28)
-=-=-=-=-=-=-
Apache was once the ideal solution for creating a web server. Its great features induced a certain heaviness, and its popularity made him very attacked, and therefore frequently updated.
In recent years, Nginx has established itself as a high quality alternative: although comprehensive features, the software is characterized by great lightness, which allows to run on very modest configurations such as a Raspberry Pi.
We'll see how to install a Nginx able to use PHP, on a Raspberry Pi which is running Arch Linux. However, the procedure will remain very similar to another machine or other configuration (it is essentially the commands `systemctl` and `pacman` which need to be adapted).
Installing Nginx is easily obtained with:
pacman -S nginx
It is then possible to start Nginx with:
systemctl start nginx
By opening the IP address (or the domain name that points to your Raspberry Pi) of your Raspberry Pi, you should see a page showing that Nginx is functional.
We will start by creating a first site entirely static. The files will be located in `/srv/http/mysite`, which will be available at `mysite.tld`.
For this, we edit the Nginx configuration file:
nano /etc/nginx/nginx.conf
Before the latest ending curly bracket of the file, add the following lines for declaring our new website:
server { listen 80; server_name mysite.tld; root /srv/http/mysite; index index.html; }
The `listen` parameter specifies the listening port (we generally chose port 80 for HTTP or 443 for HTTPS), `server_name` allows to wanted URLs, `root` the file locations and `index` the file to be served by default.
We created this folder, and an `index.html` file with the right attributes:
mkdir -p /srv/http/mysite nano /srv/http/index.html
Its configuration has been modified, we restart Nginx to take into account the changes:
systemctl restart nginx
Static websites are great, but being able to create dynamic sites is often helpful. This allows, for example, with a Raspberry Pi, to host web applications at home as an RSS reader or cloud. Examples are presented below.
To install PHP, we use the package `php-fpm` :
pacman -S php-fpm
The we activate it:
systemctl start php-fpm
As before, we edit the Nginx configuration file:
nano /etc/nginx/nginx.conf
Before the latest ending curly bracket of the file, add the following lines for declaring how to handle PHP:
server { listen 80; server_name mysite.tld; root /srv/http/mysite; index index.php; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi.conf; fastcgi_index index.php; fastcgi_pass unix:/run/php-fpm/php-fpm.sock; } }
Again, we restart Nginx:
systemctl restart nginx
A growing number of web applications use `sqlite` as a database. If you need it, install the package `php-sqlite` :
pacman -S php-sqlite
Then tells PHP to use it by adding at the end of file `/etc/php/php.ini` :
extension=pdo_sqlite.so
Then we restart PHP:
systemctl restart php-fpm
If you want to use MySQL, install the `mariadb` package, start `mysqld` then use the installation script:
pacman -S mariadb systemctl start mysqld mysql_secure_installation
As before, we then tells PHP to use by adding at the end of file `/etc/php/php.ini` :
extension = mysql.so
Miniflux is a web application for reading RSS feeds that I particularly appreciated for its simplicity and minimalist design. It is the replacement for Google Reader I've searched for a long time.
As previously stated, creating a dynamic site for the folder `/srv/http/miniflux/` taking care to install sqlite, needed by Miniflux.
Installation is simple: download Miniflux, extract it, and give write access to the folder `data/`.
cd /srv/http/ wget http://miniflux.net/miniflux-latest.zip unzip miniflux-latest.zip rm miniflux-latest.zip cd miniflux chmod 777 data/
Then, to enable monitoring RSS feeds every hour, create a `cron` task with:
crontab -e
Then enter therein:
0 */1 * * * cd /srv/http/miniflux && php cronjob.php >/dev/null 2>&1
Synchronize calendars, contacts and files between different devices - computers, tablets, phones - is very common today. Because these data can be very personal, installing a web application like OwnCloud on its Raspberry Pi.
Again, create a dynamic site for `/srv/http/owncloud/`. Then, we download OwnCloud:
mkdir -p /srv/http/owncloud wget http://download.owncloud.org/community/owncloud-7.0.4.tar.bz2 tar xvf owncloud-7.0.4.tar.bz2 mv owncloud/ /srv/http/ chown -R www-data:www-data /srv/http rm -rf owncloud owncloud-7.0.4.tar.bz2
We then add a `cron` task that will automate the update by running:
crontab -e
Then enter therein:
From our local network, we can access the web interface OwnCloud by going to the address of our Raspberry Pi (the external IP or the domain name).
In Applications uncheck all applications you won’t use, in order to make OwnCloud more fluid. I only keep “Calendar” and “Contacts”.
In Administration, uncheck the share permissions that are not useful, and select `cron` as the update method.
You can start creating address books and calendars from the web interface. It provides links `CardDAV` and `CalDAV` which can then be entered, along with your username and password, on your computers and devices.