November is pretty much here. I guess it’s time to give you some feedback about our devs during last summer, and what we built around the pool.
A feature we wanted to rethink from scratch for a while is our 1‑click install. We offer a simple way to deploy pre-provisioned app in your user space. Unfortunately, our architecture was a bit outdated to easily add new app, so we decided to rewrite it1).
The Marketplace: a new place to start your projects
Deploying new app often follows the same steps:
- Find the archive containing the app or service you want to install
- Download it in your user space, extract it, and navigate into the created folder
- Perform actions, from the installation to configuration, either from the CLI or a (web)GUI
- Create a new database that is missing for your app
- Configure it again
- Enable the %$@! missing extensions
- Configure it hopelessly for the last time
- Create a new site that points to your given app folder
- Fix permission
- Sometimes drop everything and restart from 1/ to fix it (╯°□°)╯︵ ┻━┻
So we built a solution to help you during this process. Using our 1‑click install, you can deploy and automatically provision your app or service in your user space. No more need to configure system requirements, or manually download and install stuff. Just click on a button, and it’s done.
Alas, our initial architecture relied on automating some process through web-UI with interface scripting and some tools like PhantomJS. This latter is deprecated for a while, and all recent projects offer at least a CLI to manage the installation, configuration, and provisioning. It was time to rethink our solution to improve its reliability. This new architecture also allows us to provide you with new app, unable to support previously. Welcome to a new place where everything starts!
Find your preferred app
We just released our first production-ready new 1‑click install platform. After testing it intensively during the last weeks, we’re now confident in its internal stability.
Another (huge) task was to port existing apps to the new platform. Releasing the new platform with fewer applications than before was a no-go. Our team2) did important work on it. Here’s the list of apps and frameworks you can currently deploy with the new 1‑click platform:
- DokuWiki: A simple wiki, ideal for team documentation
- Drupal: A PHP CMS/Framework to manage your website content
- Gitea: A lightweight, self-hostable, Github alternative for your code repositories and issues
- Joomla: A commonly used PHP CMS
- Magento: A well-known PHP e‑Shop platform
- MediaWiki: The most known Wiki, used to power Wikipedia
- NeoFrag: An E‑Sport oriented CMS
- Nextcloud: A personal cloud that offers collaboration capabilities
- PrestaShop: A simple e‑Shop platform
- Thelia: An E‑Shop platform for medium to large businesses
- Wallabag: An open source Read It Later solution
- WordPress: The well-known CMS/Blog engine solution
Note: A few apps disappeared, like phpBB, because they don’t offer an inner solution to deploy them (like a CLI). Because those apps also suffer a lack of interest from the community, we decided to remove them.
What’s in the back, now?
As most recent Web applications offer improved ways to install and configure them, it sounds great to use their built-in capabilities. So we imagined a way to configure and script them easily.
Each script declares an environment and a variable configuration set using a YAML Front Matter.
1 2 3 4 5 6 7 | site: type: php path: '{INSTALL_PATH_RELATIVE}' php_version: '7.2' database: type: mysql |
It allows the provisioning system to automagically create the website type and set it up, configure the interpreter with the needed extensions, preset the databases needed to run the service, and all. The last tarball is fetched3), and extracted in your user space.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/bash set -e composer global require wonderfulapp/console php .composer/vendor/bin/wonderfulapp app:download --www="$INSTALL_PATH" default php .composer/vendor/bin/wonderfulapp app:install --www="$INSTALL_PATH" --mysql-login="$DATABASE_USERNAME":"$DATABASE_PASSWORD" --mysql-host="$DATABASE_HOST" --mysql-database="$DATABASE_NAME" --skip-exists-check --drop default rm -rf .composer shopt -s dotglob nullglob |
Then the script itself is executed to provision the application with the settings specific to your alwaysdata’s account. Generating configuration files, running database migration, fixing permission, and whatever other tedious deployment tasks: everything is automated.
That’s all; your app is now ready to use.
Wow, it sounds great!
Yeah, it is! For us, it offers many advantages:
- It’s just scripting, so it’s easy to write new scripts to add new apps and frameworks to the platform.
- We removed the tricky parts based on automating web-UI configuration, so the scripts are more robust and more testable.
- They’re scripts, so a few basic knowledge of shell commands are sufficient to develop them. Not comfortable with Bash? Use any scripting language you prefer (Python, Ruby, etc.), and it will work as well!
- We use the features offered by the editor to automate complex tasks, leaving the application itself maintaining compatibility between two versions.
- Scripts are Shiny, Scripts are Bright, Scripts are the Children of the Unicorns.
- Handle errors and fix them are a lot easier than with UI automation.
- Did I say it’s just scripting?
Our goal is to provide you with the most common services and application, without breaking the whole install script each time the developer releases a new version. This new platform allows us to give this comfort to you, and we expect to bring you new app regularly.
A word about safety during deployment
Some automated tasks provide you with feedback, and we also handle those use cases. Here are the most important parts relying upon safety during the automated deployment process.
Random Passwords Generator
You often need to provide an admin password for your back end interface when installing new applications. Our script can generate a random password for you, or let you input your own password during the preset step of the process. Whatever you choose, your password is never stored by our platform. You stay the only owner of your own solution.
Note: We don’t store any sensitive information, but if your app relies on an unencrypted password in its configuration file, the password stays in its plain version. As the configuration file is stored in your user space with proper permission, it’s not a big deal about security. But if you consider it as a risk, please fill an issue in the app’s tracker to get encrypted password support ;).
Admin URLs, Custom configuration, and more
Some solutions allow you to customize your admin URL. We made some choices by default, to simply the deployment process. You’re even allowed to customize those URLs as you wish after the installation, to stick to your needs.
Finally, we just provision the deployed app with a safe default configuration. You can modify, update, and customize any settings right after the installation process.
Databases Creation
All mandatory databases are created automatically with a new user dedicated to your app and a random password. We do not store any information related to your database configuration during the process. Your data stays safe.
Logs (coming soon with the next version)
You can access the install logs generated during the automated process from your user space itself. If the install task fails for any reason, you can get more feedback about why it failed. If you want to send the report to anyone, the logs already miss all sensitive information, so neither username, paths, nor password appears in them.
We always want to give you a hosting platform that is simple and full of functionalities. We expect that this new feature will improve your deployment process and help you to deliver your content faster.
This blog post has a companion. In the next few days, we will provide you with a new article that will unleash the whole power of this 1‑click install process #teasing.
During this time, what if you give us the applications you want to see available through this process? Use the comments or wave us by e‑mail at community@alwaysdata.com to suggest new app to add.
Nice one indeed! Keep it up!
If you truly want a “1‑click install”, just run ‘curl ‑sSL https://raw.githubusercontent.com/nextcloud/vm/master/nextcloud_install_production.sh | sudo bash’ from any Ubuntu Server — take a cup of coffee, sit back and relax!
Hi Daniel! I’m pleased to see you here :)
Yeah, of course, the install production script is perfect for self-hosting, and I still recommend this way. In our environment where users don’t have a
sudo
access and where we manage the whole stack, we’re more confident in our self-made scripts ;)Thanks you so much for the cheers!
This is a great feature, and I suggest including also Moodle app. Thanks!
Great idea, thanks! We can include Moodle app, of course. I’m wondering if we can include openedx too, I need to deep dive in their installation instructions, but it can be a nice solution also. Thanks for the suggestions David :)