“You see things; and you say, ‘Why?’ But I dream things that never were; and I say, ‘Why not?” — George Bernard Shaw
Drupal 8 will soon celebrate 1 year since its release. One interesting fact about this version of the popular PHP CMS is that the release cycles are smaller and feature-focused. This makes everybody happier than previous major versions and I will focus on developers’ experience. It’s been steadily improving since the focused adoption of popular and well-maintained projects from the wide PHP community. Composer, Drupal Console (an implementation of Symfony Console) and adopting PHP OOP design patterns in overall are some of the highlights in this article.
On the other hand, Cloud9 Editor is an interesting project to my personal experience as a developer. I’ve shared some enthusiasm about it before, summarizing some of my favorite features, and going deeper into debugging applications in the cloud. At this step, I start to dream about scenarios where this cloud editor will be THE editor for massive amount of open source contributors, experimenters and agile practitioners alike. I also visualize scenarios where it could fill in the gap in the hearts of many who use tools like dreditor. Dreditor on steroids: git, drush, mysql, php, etc — all the tools a developer needs to start, test, develop and deploy!
Drupal Composer’s drupal-project seems like a really interesting repository which can enable me to start a Drupal 8 project and make an installation. Also it will provide me with a door of opportunities to manage all my project-global dependencies via composer.
Here’s what I can do to start a Cloud9 workspace linked my own fork repository of the drupal-project.
This should look similar to:
Creating my new development environment
At the end of this process, I have an Ubuntu-based docker container. In it, there is a local repository linked to my upstream repository on the origin. I’m ready to use the tools I know in Linux because composer, npm, node, etc. are already installed, and I also have a command line interface to run or install anything I need on top of this initial setup. As a side note, custom templates will soon make this initial setup even more flexible and personalized.
As the terminal is already open for you, run git remote -v
to ensure this origin linking if you like.
Now that the workspace is ready, you have to select a branch for the Drupal version you are going to work with. I’m going to do git checkout 8.x
in the ternimal to use the 8.x version of the the repository files in the container machine. When you do that, you’ll see the files in the tree.
Drupal 8 branch of the repository
These are the source files I can use to build the project with the dependencies and the tools of my personal preference.
The dependencies can be managed globally for the project via the composer.json file. What interests me the most are the Drupal, Drupal Console and Drush which are already required.
Drupal-specific initial dependencies.
As the readme file of the repo points out, additional dependencies can be added later by installing dependencies through the composer.
Run composer install
in the terminal to download all the dependencies and run all the composer special things defined in the composer.json file.
When all downloads are finished — you can just run the Run button and start the apache server in the machine to open the project in the project browser or your own browser:
Open the project in the browser after the dependencies installation.
If you resist your perfectionist nature and expectations on domain names, now you can open the project at https://{projectname}-{username}.c9users.io/web/core/install.php replacing the variables of course. And there you go, you have Drupal 8 ready for your install!
Yep, the wizard is ready!
I deliberately left this out from the previous one. You can, of course, continue with the installation in the most user-friendly way with the wizard above. Classical and easy and you don’t worry even for file permissions. If you are a databases guy, probably you’ll be interested to check the tutorial for setting up mysql and/or setting up a database.
Another option for making the installation is using the command line interface and Drupal Console. If you’re a non-idealist developer, you can directly run the binary from the vendor folder like /vendor/bin/drupal
.
Drupal Console initialization
This will hint you to run an initial setup for the tool, just do it and then you can have vendor/bin/drupal site:install
.
For more ideas around this installation step, check this tutorial which also includes steps to download the project if it was not done by Composer.
Shooting some ideas of a quick-start yml file for the [chain][29]
.
commands:
# Install Drupal
- command: site:install
options:
langcode: "en"
db-type: "%{{db_type|mysql}}"
db-host: "%{{db_host|127.0.0.1}}"
db-name: "%{{db_name|c9}}"
db-user: "%{{db_user|root}}"
db-pass: "%{{db_pass|}}"
db-port: "%{{db_port|3306}}"
site-name: "Drupal 8 site"
site-mail: "admin@example.org" # default email
account-name: "admin" # default account
account-mail: "admin@example.org" # default email
account-pass: "admin" # default pass
arguments:
profile: "standard"
A small helper subject after the setup — since xdebug is available in the docker in “Apache & PHP” runner, there is a way to debug apps.
The green debugger button is the important detail to notice.
The app can be run either in preview in the IDE or in another tab.
Use the inspector for observing both global and local scopes.
Note that the runner properties can be edited:
Runners are editable.
// This file overrides the built-in Apache httpd (PHP, HTML) runner
// For more information see http://docs.c9.io:8080/#!/api/run-method-run
{
"cmd": [
"run-apache2",
"${debug?debug}"
],
"cmdStop": [
"run-apache2",
"stop"
],
"debugger": "xdebug",
"debugport": 9000,
"$debugDefaultState": false,
"selector": "^.*\\.(php|phtml|html|shtml)$",
"env": {
"XDEBUG_CONFIG": "xdebug.remote_enable=1 idekey=cloud9ide remote_host=localhost remote_port=9000 remote_mode=req"
},
"info": "Starting Apache httpd, serving \\033[01;34m$hostname_path\\033[00m."
}
It’s an ambitious initiative/dream to work with Drupal 8 projects in the cloud but you see that it’s possible and easy. In the end of this tutorial you have a working instance built out of a composer-based dependency management system, your custom repository, and the vital tools to help you develop well: Drupal Console, Drush and any other script you can think of that run on an Ubuntu machine.
Now it’s up to you to use these tools to your best interest: teaching Drupal 8 interactively, pair-programming, triage issues by making/testing patches or just experimenting with features you’re interested in anywhere, anytime.