GSOC 2014/Student Application niqmat/WHCP
Web hosting control panel for Fedora
Project is about creating web hosting control panel for Fedora. It will allow users to easily create domains, databases, DNS records and mail accounts. It will be written in Python. Panel will also offer its users an easy way to track daemons with possibility to restart them.
Why I think it's needed?
When I started using my own server in 2006, it was not easy to maintain domains and emails with little Linux knowledge. Direct admin and Plesk were offered by the server provider and it was quite easy to perform the most needed operations, however those panels are usually extra paid. Beginner needs simple and free control panel to start with.
My relevant experience
I've been maintaining my own server for almost 8 years, I went through configuring everything (domains, DNS records, databases, mail accounts etc.) on different distributions with and without control panels. I was a Linux administrator during three contests of Polish Olympiad in Informatics. I was preparing algorithmic games in C++ and a part of servers configuration to use during PIZZA programming contest (with strong network and servers reliability needs), whose I'm co-founder. Writing scripts for Linux is nothing new to me.
I was working for two companies (one is the maintainer of the biggest social networking service in Poland), where I was able to create parts of control panels. Additionaly, I was responsible for creating software that used big web frameworks (also company-proprietary) with object oriented programming. This software is used by millions of people worldwide.
Last semester I completed extended Python course at the university with the highest grade and a maximum number of points from programming excersises.
What do we need? (And what I want to implement. Options: when there will be time left.)
Domains. CRUD of domains. Reponsible daemon: BIND
- support for all types of records (A, CNAME, MX, …),
- option to activate or deactivate domain (or one record) temporarily.
Websites. CRUD of websites. Responsible daemon: apache
- adding website as a virtual host,
- directory creation,
- separate logs (option: preview of latest logs in CP as text or using some graphical tool, text search in logs),
- option: show directory tree for subdomains instead of flat listing (including proper directory organization),
- option: add traffic control.
FTP access. CRUD of accounts and connected directories. Responsible daemon: proftpd
- managing users,
- giving users access to directories,
- anonymous ftp.
Databases. CRUD of accounts and databases, privileges granting. Responsible daemon: MySQL. Option: PostgreSQL
- maintaining users,
- maintaining databases,
- grant privileges to users for databases,
- download content of the database (each db separately: sql, zipped, all databases),
- option: backup databases to a local/remote directory,
- option: backup at a specified time every day/week (CRON).
Emails. CRUD of email accounts, aliases (option: and mailing lists). Responsible daemons: postfix, dovecot
- mail accounts (normal mailbox or forwarding account),
- option: defining quota,
- option: mailing lists,
- option: black and whitelists (if working with SpamAssassin).
Miscellaneous. Useful options regarding more than one service.
- servers status (+ managing runlevels),
- server monitoring,
- logging actions.
What are the challanges and how do I want to solve them?
Updating configuration We have to store information about domains, websites, accounts, etc. I will use relational database to store all records. Most daemons configuration will be updated by generating the content of the configuration files. After each update (for a specific daemon), proper file will be generated from the database content (with warning for the user that he shouldn't modify it manualy). I will write helper modules for each daemon. MySQL (and PostgreSQL) will require to execute some queries to create or alter databases, users and permissions.
Simple usage It is necessary to simplify the process of installing this control panel. I will prepare an RPM package for yum, so it will be sufficient to install CP with one simple command.
Testing It's about managing services that needs to be working all the time. It's really important to have this panel tested well. I'll use a BDD approach in each phase.
It will be great to have a webmail available within panel. I'd really like to implement all additional features, however it might be too big for three months and I want to focus on stability for the most important options. I'd like to use django as the web framework and bootstrap for layout, however I'm willing to accept any other propositions from mentor. I can learn new technologies before the coding period begins and start coding a little bit earlier.
- week 1-2: preparing control panel layout and database schema.
- week 3-4: creating helpers for filling configuration files with database content, start adding support for BIND.
- week 5-6: finishing support for BIND, adding support for apache
- week 7-8: support for managing ftp accounts and MySQL databases.
- week 9-10: support for email accounts.
- week 11-12: implementing optional features, final testing, deployment.
Contact with mentor
I contacted Eduardo Echeverria.