geeks4change / geeky-deploy
Installs: 320
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Forks: 0
pkg:composer/geeks4change/geeky-deploy
Requires
- baraja-core/shutdown-terminator: ^1.0
- brick/varexporter: ^0.5.0
- composer/composer: ^2.8
- cweagans/composer-patches: ^1.7
- geeks4change/geeky-age: ^1.2.0
- psr/log: ^1.0 || ^2.0 || ^3.0
- spatie/ssh: ^1.10
- symfony/console: ^6.0 || ^7.1
- symfony/filesystem: ^6.4 || ^7.0
- symfony/process: ^6.4.14 || ^7.1.7
- symfony/yaml: ^6.4 || ^7.0
Requires (Dev)
- phpunit/phpunit: ^10.5
README
To use:
- (If not on your $PATH, use vendor/bin/gky for gky)
gky initadds a new deploy/targets.php to customize.gky deploy-local --install- After pull,
gky dl(for deploy-local) - For remote,
gky deploy-remote --installandgky dr - If not unique, add the target name, like
gky dr live2
Have fun!
How does it work?
gky deploy-local
- composer install
- build settings.php and friends for local
- (backup database if configured)
- drush deploy = updb / cim
- (post-deploy if configured, like drush tim)
gky deploy-local --install
- composer install
- build settings.php and friends for local
- (backup database if configured)
- drush install --existing-config
- (post-deploy if configured, like drush tim)
gky deploy-remote
- Copy site to sandbox
- composer install
- build settings.php and friends for live
- Copy build to live, continue on live
- (backup database if configured)
- Set maintenance mode
- drush deploy = updb / cim
- (post-deploy if configured, like drush tim)
- Drop maintenance mode
- (warm-caches if configured)
gky deploy-remote --install
- Copy site to sandbox
- composer install
- build settings.php and friends for live
- Copy build to live, continue on live
- (backup database if configured)
- Set maintenance mode
- drush install --existing-config
- (post-deploy if configured, like drush tim)
- Drop maintenance mode
- (warm-caches if configured)
Secrets management
Geeky-deploy has simple and opinionated secrets management:
- Secrets live in (say) deploy/generated/secrets/foo.ext (gitignored!)
- ...and developer / server keys in (say) deploy/secrets/public-keys/devN.pub.
gky encrypt-all-secretsencrypts them into deploy/secrets/encrypted/foo.ext.age.gky deploy-remote livedecrypts them again into deploy/generated//secrets/foo.ext
Decryption
- Decryption in deploy only works when a private keys for one of the public keys is available
- ...either on the current machine in ~/.ssh/
- ...or (for deployment via gitlab) in env variable GEEKY_SECRETS_PRIVATE_KEY
Target-specific secrets
- To have secrets only plaintext on (say) live,
- put them into deploy/generated/secrets/live/foo.ext
gky update-secretsencrypts them into deploy/secrets/encrypted/live/foo.ext.age.gky deploy-remote livedecrypts ONLY the secrets for live again into deploy/generated/secrets/live/foo.ext- ...AND symlinks deploy/generated/secrets/foo.ext to deploy/generated/secrets/live/foo.ext
Updating secrets
- Run
gky decrypt-all-secrets - Change files in deploy/generated/secrets and deploy/generated/secrets/TARGET directory as needed.
- Run
gky encrypt-all-secrets
File layout
Generated files
- deploy/
- generated/
- build-info.env
- secrets/
- secret1.env
- secret2.php
- generated/
- drush/
- drush.yml
- sites/
- self.site.yml
- web/
- sites/
- default/
- settings.php
- services.custom.php
Secrets files
- default/
- sites/
- deploy/
- secrets/
- public-keys/
- developer1.id_rsa.pub
- developer2.id_ecdsa.pub
- gitlab.id_rsa.pub
- encrypted
- secret1.env.age
- secret2.php.age
- public-keys/
- secrets/