There are many things to do with computers. We browse the internet, watch videos or listen music, create documents/spreadsheets/presentations with office applications... And the software we are using is remarkable. However, we may need to access our computer when we are away from it, or host our services in home/office network or even to the whole internet. We may want to access to the files, which we created using that remarkable software. And there are remarkable services for that too, we have secure shell, probably the best thing over the world, and extremely powerful commands to run through secure shell.
The problem is, there are lots commands, and their different flags/parameters, and their configuration files in different formats, and the settings in those files... Oh, God! It is overwhelming, even for a full time Linux system administrator. A typical end user should not need to learn all that stuff. Let’s create the most amazing graphical control panel to manage and configure the system using only a pointer (mouse will work perfectly) and a keyboard (to type words, not commands), just like the control panel we are already using on our computers locally.
The problem is not a new one, and it has been tried to be solved for years. The most common practice is to create a web application. However, available alternatives are either not-free (both as in free beer and in freedom), not so easy-to-use, messes the system a lot, or outdated, or all! So, I am intended to develop a revolutionary web application, not only has beautiful, user-friendly interfaces; but also have RESTful API to communicate with other applications, responsive designs for best view on almost every possible device.
I am not thinking this to be a just a “web hosting control panel”, I want this to be a general control panel for home and office users, web developers, and system administrators to use on desktop computers, servers or cool ARM devices such as a Raspberry Pi! I want to cover management and configurations of web servers (Apache and Nginx), DNS server (bind), database servers (MySQL, PostgreSQL, MariaDB and MongoDB), mail servers (postfix and dovecot), file sharing (FTP, SSH, NFS, Samba and Apple Filing Protocol), version control systems (git and subversion), DLNA media sharing, cronjobs, users, network (wired, wireless, vpn), firewall, etc.
I will create wrappers for low-level service configurations and a high-level API that uses these wrappers. Furthermore, these will be a Python module that is going to be installed to the system. Thus, users will be able to create their own Python scripts to manage the system.
I am planning to develop the web interface using Django framework. In order to simplify the design process, I may use Bootstrap by Twitter. My other plan is to create a command-line tool which has the same capabilities with the web interface.
The application will be in three packages. The first one will include Python module and the command-line tool. This will be enough to manage system without learning complex commands or configurations.
Wrappers are going to read, generate, and save the configuration files. But they will also save a copy of the configuration to a database. This database will prevent parsing of configuration files every time. However, I want this application to be lightweight and running a database server conflicts with my priorities. For this reason, I preferred to use SQLite.
I will also store modification dates of the configuration files in this database. By tracking changes on these files, the application will be able to tell if there is manual changes on files, or unsaved changes in database.
The second and the third packages will be the web interface and the RESTful API service respectively. They will both depend on the first package, but not each other. Also they will be served by gunicorn, so the application won't need / depend on any web server, either.
The RESTful API service will help other applications to be developed, such as a desktop interface or a mobile application.
I know that preparing wrappers for all those services will not be easy. My expectation is to finish wrappers and API in the first 10 weeks. Then, I can spent 5 weeks with Django, and the last week for packaging.
- June 17 - June 23: cronjobs, users, network
- June 24 - June 30: firewall, version control systems
- July 1 - July 7: file sharing, dlna
- July 8 - July 14: dns
- July 15 - July 28: web servers
- July 29 - August 4: database and mail servers
- August 5 - August 11: Django RESTful API
- August 12 - August 25: Django application
- August 26 - September 8: Frontend tweaks
- September 9 - September 15: Packaging