Linux Day Torino's website
Content Management System for the Linux Day Torino event, but just from 2016 to 2019 (and beyond we hope!).
The Linux Day is a yearly Italian event were Italian cities organize free conferences for everyone, talking about GNU/Linux, Free software, open source, and we meet amazing new friends.
The Linux Day Torino is just our local implementation, and this project is the related website.
This project allow the centralization of various informations during a set of conferences, while allowing completly different themes for each conference.
This project is designed using GNU/Linux, Apache/nginx, PHP, MySQL/MariaDB and the suckless-php framework.
We use PHP. Because PHP does not suck. PHP it's the best hypertext preprocessor available. It's well-tested; well-known; well-documented; multi-platform; easy to be deployed; powerful; actively developed since 20 years and if you know how to code, it's also drammatically fast and secure.
Note that, thanks to PHP, this website has no third party dependency. I mean we use just a stupid framework made by us (10 files). No Laravel. No therabytes of NodeJS dependencies. No silly crap. Just this website. So, before talking bad about PHP, shut up. You are a troll. Think about your crapware-hipster-NodeJS/whateverbetter project full of shitty dependencies you do not know how to maintain, kiddo.
PHP loves you. Do not be bad with it. :^)
Quick start Hacking
To start hacking on this project we suggest the installation of
vagrant to reproduce our production environment quickly. You should know how to install this package from your favourite GNU/Linux distribution. Then, just run:
Then simply follow the instructions from your terminal.
Keep project up-to-date
Too keep the project updated, just run:
git pull vagrant provision
Quick start on Arch Linux (or anything other than Debian GNU/Linux)
The virtual machine does not work with VirtualBox. It is also incompatible with Vagrant rsync synced folders. You have to install libvirt, any packages required for NFS and firewalld because libvirt requires a firewall for no apparent reason and the firewall has to be firewalld. Which by default blocks libvirt machines from accessing NFS.
You need a few packages and a Vagrant plugin:
pacman -S nfs-utils libvirt firewalld vagrant plugin install vagrant-libvirt
Then, to start the VM:
systemctl start libvirtd firewalld nfs-server rpcbind firewall-cmd --zone=libvirt --add-service=nfs firewall-cmd --zone=libvirt --add-service=mountd firewall-cmd --zone=libvirt --add-service=rpc-bind vagrant up --provider=libvirt
firewall-cmd commands can be made permanent with
If you don't want to use Vagrant, you can just install Apache or nginx and a MySQL server and run this project as you know.
In this case follow the installation instructions for Debian GNU/Linux and adapt it to your needs.
Bare-metal installation (Debian GNU/Linux)
On a Debian GNU/Linux
stable system (actually tested on
stretch) install a webserver (Apache or nginx, is your choice) and a MysQL database server and some other additional packages:
apt install apache2 mariadb-server php php-mysql libapache2-mod-php libjs-jquery libjs-leaflet libmarkdown-php a2enmod rewrite service apache2 reload
Place the project files somewhere, available to your webserver:
cd /var/www/linuxday git clone [https://... this repo]
Remember to change the
DocumentRoot of your Apache configuration file to respect your pathname (e.g.
Create an empty database with a dedicated user. Then copy the load-example.php in a new file called
load.php and type there your database credentials. Populate your database with the database-schema.sql.
Place suckless-php somewhere. It is our laser-cannon framework. It consists in just ~23 files.
You can put it in the
includes directory of the project:
# apt-get install git cd includes git clone https://github.com/valerio-bozzolan/suckless-php
Now everything should work.
Hardening your bare-metal installation
The website can be kept in read-only for the webserver user, and nothing more. E.g.:
chown root:www-data -R /var/www/linuxday chmod o= -R /var/www/linuxday
You may also want to declare the PHP
open_basedir directive to the value of
/var/www/linuxday:/usr/share/php and nothing more to restrict the access to just these files.
Also you can disable all the unused system calls like
Installation in a custom subdirectory
If you want to serve the website from a subdirectory, you can. Just change your
.htaccess file to fit your needs. Example:
# RewriteBase / RewriteBase /linuxday
In this case also change the related project
ROOT from your
# define( 'ROOT', '' ); define( 'ROOT', '/linuxday' );
To just reset your database to the latest version, just run:
git pull vagrant provision
Or just import the database-schema.sql.
When you want to export and commit the database, just run:
vagrant ssh /vagrant/Vagrant/pull-database.sh exit git status # ...
The website exposes some REST-ful APIs.
The one called tagliatella generates a valid XML document containing all the talks/events (in a format that someone call Pentabarf, but it's not the Pentabarf - really, this stupid format has not even an official name). The tagliatella API gives an HTTP Status Code 500 and some other uncaught exceptions if an error raises.
The one called tropical generates a valid
iCal document to import an Event or a Conference in your favourite calendar client.
The website interface (plus some parts of the content) is internationalized thanks to GNU Gettext. GNU Gettext is both a software and a standard. This is not the place to learn GNU Gettext, but this is how you can use it.
Translate a string
You can edit the
.po file with Poedit to translate some strings to a language:
To apply your changes:
vagrant ssh cd /vagrant ./l10n/localize.php . ./l10n/localize.php . exit
Note that if you change the database contents you may also need this command before the above one:
vagrant ssh cd /vagrant ./l10n/mieti.php > ./l10n/trebbia.php
Translate in a new language
Copy the GNU Gettext template in a new pathname similar to the English one, and also rename it to the
Then in the load-post.php file you can add another
To access to the backend follow the instructions on your terminal when running:
Or create an User with:
./cli/add-user.php --uid=root --role=admin --pwd=secret
The login page is actually situated in
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.
Thank you for forking this project!
Contributions are welcome! If you do any non-minor contribution you are welcome to put your name in the copyright header of your touched file.