hatimeria-hat v6.10.0
HAT - Hatimeria Automation Toolkit
Installs locally php based projects with docker and deploy to remote servers node and php applications.
Requirements
- NodeJS (https://nodejs.org/en/download/current/ - v12.x) - pick any suitable installer from this page.
Optionally for managing local workspace with docker download Docker.
Resources
- Development
- Deployment
- Changelog
- Docker
- Blackfire
- Composer
- Wildcard domains
- FakeSendmail & mailtrap.io
- Known issues
- Custom project-specific commands
- Using HAT events
- Performance
- Magento 2 installation tips
- Using YAML configuration file
- Deploy repositories - working with production/stages servers
- Slack notifications
- Node Versions
- PHP-FPM
Environment setup
HAT may read some environment variables and use them as default values for options. Set them in your .bashrc or .zshrc file.
VAULT_ADDR- default address to vault in formathttps://vault.domain.com:8200VAULT_TOKEN- token to vaultNODE_ENV- used for setting log level, available options aredebugorsillyDEPLOY_REPO_RE- regex used when detecting deploy repository contextDEFAULT_ADMIN- set default admin user name, if not presenthatadminwill be usedDEFAULT_ADMIN_PASS- set admin user password, if not presentpassword123123will be usedDEFAULT_ADMIN_EMAIL- set admin user email, if not presentadmin@mydomain.testwill be used
Deploying projects with HAT
Deploy repository
All deployments are done in deployment repository context. Deploy repo are folders with a specific structure that defines servers
and applications that can be deployed.
By default HAT detectes if given path is a deploy repo according to the following regex:
'\/(deploy-[a-z\-]*|config)\/(prod|stage|feature)\/(.*)$'.
You can change this by setting DEPLOY_REPO_RE environment variable. However, after the match only 2 elements will be
used as projectEnvType and projectEnv so make sure match of your REGEXP provides at least 4 results.
The structure of typical deploy repo looks like this:
- app
- default.yml
- shop.yml
- prod
- alpha
- app
- default.yml
- shop.yml
- app
- alpha
- stage
- alpha
- app
- default.yml
- shop.yml
- app
- beta
- app
- default.yml
shop.yml
- app
- alpha
app- folder contains files with default values of flags. It is read and merged for every commanddefault.yml- optional file with default values for all types and envrironmentsshop.yml- optional file with flag values for shop application; any flags defined here will overwrite the ones find indefult.yml
prod- this folder contains a list of server considered as production. This name is requiredalpha- contains a set of application for the same environment; the name is unrestricted, it also does not mean all application live in the same physical server, this is just a group name that should contain all applications required for your project to run fullydefault.yml- default flags for all applications in prod/alpha context. Overwrites any flags read from files inappfoldershop.yml- default flags for shop application; overwrites flags fromappfolder anddefault.yml
stageorfeature- this folder contains a list of server considered as production. This name is requiredalpha,beta- the same rules apply as in the prod/alpha
Deploy procedure
Deployment is run after executing hat deploy (or hat i for short) command in one of the specific environment folders (ie. prod/alpha, stage/beta).
If no --app param is provided to tell which application to work with the command tries to guest by searching files in the current folders, default.yml file is ommited.
If only 1 file is present it will be used. If more than 1 file is present then and an error will be thrown as HAT cannot determine which application should be deployed.
The second required param is --type which tells what project type the given application is. It can be provided in yml files or passed from cli.
For any additional help call hat i --help or hat i --app shop --help.
More information about deploy repo and deployment process are in:
Loggin deployment
It is possible to send deployment information to external services, ie. New Relic. There are 3 flags that need to be provided for the message to be sent:
--record-deployment- boolean value stating to send information--record-deplyoment-host- host where the information need to be sent--record-deplyoment-path- path in the service
The message is a JSON object:
{
"appName": "${projectName}_${app}",
"user": "system username who calls the command",
"revision": "provided gitTreeish flag",
"description": "Summary of deployment (app type, user, project domain)",
}To utilize it with New Relic you need to build a middleware that will change appName to New Relic application ID. This can be done via AWS lambda function or your own service.
Local project installation
Quick start (clean)
To install a clean project via HAT:
$ cd path/to/your/project/acme
$ hat project li [...options]Command should output acme.test (acme - depends on your target folder name) as domain
and other web credentials when project can be reached in the web browser.
Supported project types (for both - clean installation and installation from DB dump):
- Magento 1
- Magento 2
- WordPress (3.7 or later)
- Symfony
Quick start (from DB dump)
Clone your project repository.
Copy production database dump to your project root dir under prod.sql name.
From your project folder you want to run in Docker - run the following command:
$ cd path/to/your/project/acme
$ hat project li --db-dump prod.sqlProject-specific and DB configuration for your containers is being stored in
~/.hat_config/config_CONTAINER_NAME.json. It will be loaded as your default values so you don't need to use them again.
Available Docker images
hatimeria/php70:latest(PHP 7.0 and MySQL 5.7) - use it like--image-version php70:latest, db user isadmin, no passwordhatimeria/php70:nodb(PHP 7.0) - use it like--image-version php70:nodb, db user isadmin, no passwordhatimeria/php71:latest(PHP 7.1 and MySQL 5.7) - use it like--image-version php71:latest, db user isadmin, no passwordhatimeria/php71:nodb(PHP 7.1) - use it like--image-version php70:nodbhatimeria/php72:latest(PHP 7.2 and MySQL 5.7) - use it like--image-version php72:latest, db user isadmin, no passwordhatimeria/php72:nodb(PHP 7.2) - use it like--image-version php72:nodbhatimeria/php73:latest(PHP 7.3 and MySQL 5.7) - use it like--image-version php73:latest, db user isadmin, no passwordhatimeria/php73:nodb(PHP 7.3) - use it like--image-version php73:nodb
To use one of these images - you need to set with
--image-versionflag like--image-version php71:nodb
Setting up database
There are 3 ways you can set up the database for the project:
- use image with mysql server installed in it and connect through localhost
- use separate container with mysql and connect to it. This option is available when use
--db-use-containerflag. For more info go to DATABASE - start a project with
--docker-composeflag to create separate container just for database for this project. For more info go to DATABASE
Useful commands
- Login to container (under www-data user)
$ hat container ssh- Login to container under root user
$ hat container ssh-root- Resume container after reboot
$ hat container resume- Stop container
$ hat container stopApplication Debug
Magento image has pre-configured XDebug settings:
zend_extension=xdebug.so
xdebug.remote_enable=On
xdebug.remote_port=10000
xdebug.remote_handler=dbgp
xdebug.remote_connect_back=Off
xdebug.remote_host=10.254.254.254It's also required to install a Chrome extension to manage XDebug modes (debugging, profiling and tracing)
You need to set your IDE settings to work with 10000 xdebug port!
If you still can't get XDebug working with Docker Beta - you should try this fix.
As stated you need to run on your host:
sudo ifconfig lo0 alias 10.254.254.254Due to performance all hatimeria images comes with commented zend_extension line so xdebug is not loaded. To start xdebug use command
hat container xdebug-enableTo stop it use
hat container xdebug-disableUpdating HAT
Each developer has to update Magento Docker image along with HAT! It can be done by calling
docker image pullcommand or using--force-image-updateflag onhat project licommand
Extra help
To get extra help on using HAT application or its commands - run one of the following commands:
$ hat -h
$ hat [command] -hTo check available options and check their default values for running project with HAT, run the following command from your project folder:
$ cd path/to/your/project/acme
$ hat project i -hUsing HTTPS
To use HTTPS within your projects - you can use these flags:
--allow-https-domain- this flag shows to "domain-fix" operation to use HTTPS for domain (in Magento case - use HTTPS forsecuredomain)--force-https-domain- (iftrue- sets--allow-https-domain=trueautomatically) mostly applicable for Magento. Setssecureandunsecureto HTTPS for "domain-fix" operation--enable-https-domain- enables Let's encrypt certificates generation for the project (works with Docker containers only)
Debugging HAT
To see more logs switch node env to debug.
export NODE_ENV=debugor
export NODE_ENV=sillyYou can also use --verbose-exec flag to see what commands are executed
Populating the magento instance
Using install script
Each project type offers installation by the native install script:
- Magento 1.X - uses
instal.phpscript in the project root folder - Magento 2 - uses
bin/magento setup:installcommand - Wordpress - uses
wp-clip.php core installcommand - Symfony - uses
doctrine:schema:createcommand (with dropping current schema) - Node - does not offer an installator
From DB dump
Optionally db dump can be used to populate the instance
$ hat project li --db-dump relative/path/to/dump.sql ...options...Running Magerun commands (for Magento-v1 only)
Developers are able to run Magerun commands directly from HAT on the host machine.
In case if Magerun library is not installed - HAT will download it to the project root folder automatically.
To run Magerun command - you need to run it like the following:
$ hat magento run <magerun-command>If you won't specify
<magerun-command>part - you will get a list of available Magerun commands.
The change default HAT settings - you have to specify them BEFORE the Magerun command, for example,
specifying container name should be done like hat magento-run --container magento_name <magerun-command>).
All Magerun-related options MUST be specified after Magerun command, for example,
hat magento-run <hat-options...> <magerun-command> --<magerun-option> ...
(everything after <magerun-command> string will be passed to the Magerun library).
Storing (almost) sensitive data with HAT
If you want to store some credentials, like GitHub token, repo.magento.com auth data etc - you can do it with HAT.
To store simple config data (data will be stored in ~/.hat/config.json file), use it like this:
$ hat container set-config key valueTo store data in a separate file (for example data) - you need to pass an extra --scope [scope] flag:
$ hat container set-config --scope data key valueStoring passwords and tokens with HAT
To store any username/password or token with HAT, you need to provide those values like the following example (auth data will be stored as a string):
$ hat container set-auth-config service-url.com oauth-tokenIf you want to store a username/password pair, just pass another value to HAT command (in this case auth data will be stored as an object):
$ hat container set-auth-config service-url.com username passwordAll the above examples - will be stored for "global" usage. In case, if you have project-specific data - you
can pass --project-domain flag:
$ hat container set-auth-config --project-domain test.com service-url.com username passwordHAT will try to load project-specific data first, if it fails - HAT will try to use auth data from global scope.
3 years ago
3 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
8 years ago
9 years ago