Automated deployment for popular content management systems
Currently supported systems:
- Craft CMS - versions 2 and 3.
- ExpressionEngine (2 and 3)
- Laravel 5.x - tested up to 5.8, currently still utilizes the
laravel53
config command however. - WordPress
We've been using extensively for the frameworks mentioned above. If you run into any issues please let us know so that we can get them fixed.
-
Ensure that the
~/.composer/vendor/bin
is available in your terminal PATH.sudo nano ~/.bash_profile
- Make sure you have a line similar to the following:
export PATH="~/.composer/vendor/bin:$PATH"
-
Require
cmsmove
globally by using this command:composer global require sparkison/cmsmove
-
Change to a project directory, such as
~/Sites/mysite.dev
, and runcmsmove config <framework>
where<framework>
is one of the configured CMS for cmsmove*
*See Usage below for more information
After installing either the phar
file or using the global composer
install, ensure you can issue the cmsmove
from the command line.
To use cmsmove you must first add a config file and an ignore file. To bootstrap these items, cd
into your projects root working directory and issue:
cmsmove config <framework>
where<framework>
is one of the supported CMS systems- Currently support options for
<framework>
arecraft
,laravel53
,wordpress
,ee2
andee3
- Currently support options for
This will generate the required moveConfig.json
and rsync.ignore
files. The moveConfig.json
file will contain all the needed variables for pushing and pulling. The rsync.ignore
file will contain a list of files/folders to ignore. Add items to this list as needed.
This is a JSON
file use to get the needed variables for accessing the local installation and database as well the configured remote hosts
Example config file:
{
"type": "craft",
"mappings": {
"app": "craft",
"www": "public",
"config": "config",
"plugins": "plugins",
"templates": "templates",
"custom": {
"uploads": {
"type": "public",
"directory": "uploads"
},
"assets": {
"type": "public",
"directory": "dist"
}
}
},
"environments": {
"local": {
"root": "/Users/MY_USER_NAME/Sites/mysite.dev",
"db": "local_db_dev",
"dbHost": "localhost",
"dbUser": "root",
"dbPass": "root",
"dbPort": "3306"
},
"staging": {
"host": "REMOTE HOST OR IP",
"root" : "/home/user",
"public": "public_html",
"user": "SSH USER NAME",
"password": "SSH PASSWORD",
"keyfile": "SSH KEY FILE (takes precedence over the password field)",
"port": "22",
"db": "REMOTE DATABASE NAME",
"dbHost": "localhost",
"dbUser": "REMOTE DATABASE USER",
"dbPass": "REMOTE DATABASE PASSWORD",
"dbPort": "3306"
},
"production": {
"host": "",
"root" : "/home/mysite",
"public": "public_html",
"user": "",
"password": "",
"keyfile": "",
"port": "22",
"db": "",
"dbHost": "localhost",
"dbUser": "",
"dbPass": "",
"dbPort": "3306"
}
}
}
Required: The following fields are required:
type
tells cmsmove what framework is being used.mappings
contains information for the local setup; this section is typically framework specificapp
the application main folderwww
the public folder- The rest of the items in this list are framework specific
environments
the various environments (e.g. local, staging, production)local
this is the only required environment for accessing the local database, all other environments are optional, and can be named whatever you like
App not above root: If the app and public folder are one in the same simply set mappings.www
as an empty string, and set mappings.app
as the public folder.
Additionally, set the environments.<your_environment>.root
to your remote host public folder and leave environments.<your_environment>.public
as an empty string.
Adding custom directories for syncing:
Within the mappings.custom
array of the config file add a key => array
mapping for your custom directory.
The custom directory must contain two key/value pairs: type
and directory
.
Issuing cmsmove push staging custom
will present you with a prompt of your configured custom directories to choose from
E.g.
...
"custom": {
"uploads": {
"type": "public",
"directory": "uploads"
},
"assets": {
"type": "public",
"directory": "dist"
}
}
...
Using the example above, issuing cmsmove push staging custom
will give a prompt similar to the following:
[0] uploads
[1] assets
>
Entering 0 at the prompt would push the "uploads" directory from the local to the remote configured public directory. While entering 1 would push the assets directory. Additionally, you can specify a specific file as apposed to a directory using the following syntax:
...
"custom": {
...
"env": {
"type": "root",
"file": "y",
"directory": ".env"
}
...
}
...
Note that the file
parameter just needs to be a "truthy" variable. For example "yes", "y" and "true" are all valid.
Simply issue the following command: composer global update sparkison/cmsmove
To view the currently installed version issue: cmsmove --version
Pull requests, contributions, issues and feature requests are always welcome... Although I would prefer a pull request for new features... ;)