Skip to content

Commit

Permalink
Merge pull request #22 from Ph3nol/dev
Browse files Browse the repository at this point in the history
CustomService + CapistranoService + Fixes/Improvements
  • Loading branch information
Ph3nol authored Oct 8, 2017
2 parents 5f55e72 + 5fff59f commit 0fe1a96
Show file tree
Hide file tree
Showing 25 changed files with 295 additions and 13 deletions.
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,6 @@ test:
clean-examples:
@find examples -type d -name ".docker-arch" | xargs rm -rf
@find examples -type d -name "vendor" | xargs rm -rf
@find examples -type d -name ".bundle" | xargs rm -rf
@find examples -type d -name "log" | xargs rm -rf
@find examples -type d -name "logs" | xargs rm -rf
31 changes: 31 additions & 0 deletions examples/capistrano-project/.docker-arch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Docker Arch - Capistrano Project
services:
# Nginx Container
- type: nginx
path: ../app
host: localhost
# Capistrano
- type: capistrano
options:
version: "3.9.1"
zsh: true
# dotfiles: true # Use this instead of this example volumes to fake SSH key access
container:
volumes:
- "../docker:/root/.ssh:ro"
working_dir: /apps/nginx
# Custom SSH image (deploy server destination)
- type: custom
options:
image: ncc0706/alpine-sshd
package_manager: apk
container:
volumes:
- "../docker/authorized_keys:/root/.ssh/authorized_keys:ro"
packages:
- git
commands:
- "mkdir ~/.ssh"
- "echo 'Host *' >> ~/.ssh/config"
- "echo ' ForwardAgent yes' >> ~/.ssh/config"
working_dir: /var/www/docker-arch
2 changes: 2 additions & 0 deletions examples/capistrano-project/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
app*/log
app*/.bundle
5 changes: 5 additions & 0 deletions examples/capistrano-project/app/Capfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
require "capistrano/setup"
require "capistrano/deploy"

require "capistrano/scm/git"
install_plugin Capistrano::SCM::Git
7 changes: 7 additions & 0 deletions examples/capistrano-project/app/config/deploy.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
lock "3.9.1"

set :application, "docker-arch-app"
set :repo_url, 'https://github.com/Ph3nol/Docker-Arch.git'
set :keep_releases, 1

set :ssh_options, { :forward_agent => true }
5 changes: 5 additions & 0 deletions examples/capistrano-project/app/config/deploy/example.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
set :stage, :staging

server 'custom', user: 'root', roles: %w{web app}, port: 22

set :deploy_to, '/var/www/docker-arch'
16 changes: 16 additions & 0 deletions examples/capistrano-project/app/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<title>Capistrano</title>
</head>
<body>
<h1>Capistrano</h1>

<p>
This is an example app.<br>
Just go to Capistrano instance shell (from <i>.docker-arch/do shell</i> for example) and run
<i>cap example deploy</i> to deploy fake application (Docker-Arch Git project)
to fake destination server instance through SSH.
</p>
</body>
</html>
1 change: 1 addition & 0 deletions examples/capistrano-project/docker/authorized_keys
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC+rrm4Vz2ue7oVcmaYuqDWOR+jWqIRJv/JMEIYkUV1V7Agu8zrqd5FUG931HeqnYVeSMOMSD9tYQTQkbFks1OC+leUU8enlnR/ZYqBkROQ03PMyJfNqjGvOTx+cKXkzyCHt7SXHwnsabvD81/5tpN54CmdvWScXf+BtrNcbJBxNDw0pxK/SxBmwBdEJYuhjRW7L1uQkLM2LQ515iAk4BsX+XzlnaYDI5Ul099gpa+17bmDKSdETRM/AhetUWflXZjmchwoVNw5S/jzRvL3QcZfq+Z/PHMiM2VxsTe7YCZSv8VSTKGFOQK1Gn7bSAQ9wm2RU4Qh3lVCv2LKd08wv1kB5WK0XxKd/yT3tXftoqPnpb98SVcyjf4M0dRYqaEZ/ZZDfojx0eLn/yK3KLFwKWUfumR0RoB+eeoY2XinyQ1u1rjc8KVHjeYON7jsvovDOSBwTgBg3IvSXo+7gRMUQAK5YI1uq3Lr3xtHvzMO+xkqr1OdaMPPlOg4ZkIOhhMM5LxWnlQK14XVtBNpEp5u3VDIKsL/o6JmlAbpx/HxFUnbrjdjPD2BUAWPiL+7obmaj7v3ZTeytawouUK3RYA685PD4gVboPnYWNU7k7oG6u/LVVw1cHmqmXbbSMZ3DdxEsgC7HT/dLJ50+2y7vC9GSPXwlCrN0TibVdfgrDDXfXeqoQ== hello@localhost
51 changes: 51 additions & 0 deletions examples/capistrano-project/docker/id_rsa
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
1 change: 1 addition & 0 deletions examples/capistrano-project/docker/id_rsa.pub
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC+rrm4Vz2ue7oVcmaYuqDWOR+jWqIRJv/JMEIYkUV1V7Agu8zrqd5FUG931HeqnYVeSMOMSD9tYQTQkbFks1OC+leUU8enlnR/ZYqBkROQ03PMyJfNqjGvOTx+cKXkzyCHt7SXHwnsabvD81/5tpN54CmdvWScXf+BtrNcbJBxNDw0pxK/SxBmwBdEJYuhjRW7L1uQkLM2LQ515iAk4BsX+XzlnaYDI5Ul099gpa+17bmDKSdETRM/AhetUWflXZjmchwoVNw5S/jzRvL3QcZfq+Z/PHMiM2VxsTe7YCZSv8VSTKGFOQK1Gn7bSAQ9wm2RU4Qh3lVCv2LKd08wv1kB5WK0XxKd/yT3tXftoqPnpb98SVcyjf4M0dRYqaEZ/ZZDfojx0eLn/yK3KLFwKWUfumR0RoB+eeoY2XinyQ1u1rjc8KVHjeYON7jsvovDOSBwTgBg3IvSXo+7gRMUQAK5YI1uq3Lr3xtHvzMO+xkqr1OdaMPPlOg4ZkIOhhMM5LxWnlQK14XVtBNpEp5u3VDIKsL/o6JmlAbpx/HxFUnbrjdjPD2BUAWPiL+7obmaj7v3ZTeytawouUK3RYA685PD4gVboPnYWNU7k7oG6u/LVVw1cHmqmXbbSMZ3DdxEsgC7HT/dLJ50+2y7vC9GSPXwlCrN0TibVdfgrDDXfXeqoQ== hello@localhost
12 changes: 12 additions & 0 deletions examples/custom-image-project/.docker-arch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: Docker Arch - Custom Image Project
services:
# SFTP Container (connect from `sftp -P 2222 docker-arch@localhost`, password: unicorn)
- type: custom
options:
image: "atmoz/sftp:alpine"
package_manager: apk
container:
cmd:
- "docker-arch:unicorn:1001"
ports:
- "2222:22"
38 changes: 38 additions & 0 deletions src/Application/DockerContainer/CapistranoDockerContainer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace Ph3\DockerArch\Application\DockerContainer;

use Ph3\DockerArch\Domain\DockerContainer\Model\DockerContainer;
use Ph3\DockerArch\Domain\DockerContainer\Model\DockerContainerInterface;

/**
* @author Cédric Dugat <[email protected]>
*/
class CapistranoDockerContainer extends DockerContainer
{
/**
* {@inheritdoc}
*/
public function getPackageManager(): string
{
return DockerContainerInterface::PACKAGE_MANAGER_TYPE_APK;
}

/**
* {@inheritdoc}
*/
public function execute(): void
{
$this->setFrom('ruby:2-alpine3.6');

$service = $this->getService();

$this->applyDotfiles();
$this->applyShellConfiguration();
$this->setWorkingDir('/apps');

$this
->addCommand('gem install capistrano --version='.$service->getOptions()['version'])
->addCommand('gem install capistrano-scm-local');
}
}
28 changes: 28 additions & 0 deletions src/Application/DockerContainer/CustomDockerContainer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace Ph3\DockerArch\Application\DockerContainer;

use Ph3\DockerArch\Domain\DockerContainer\Model\DockerContainer;
use Ph3\DockerArch\Domain\DockerContainer\Model\DockerContainerInterface;

/**
* @author Cédric Dugat <[email protected]>
*/
class CustomDockerContainer extends DockerContainer
{
/**
* {@inheritdoc}
*/
public function getPackageManager(): string
{
return $this->getService()->getOptions()['package_manager'];
}

/**
* {@inheritdoc}
*/
public function execute(): void
{
$this->setFrom($this->getService()->getOptions()['image']);
}
}
2 changes: 1 addition & 1 deletion src/Application/DockerContainer/NginxDockerContainer.php
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public function execute(): void
/**
* {@inheritdoc}
*/
public function postEecute(): void
public function postExecute(): void
{
// UI.
$port = reset($this->getService()->getDockerContainer()->getPorts());
Expand Down
2 changes: 1 addition & 1 deletion src/Application/DockerContainer/PhpDockerContainer.php
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ private function addOwnCommands(): void
foreach ($service->getOptions()['config'] as $key => $value) {
$this->addCommand('echo "'.$key.' = '.$value.'" >> /usr/local/etc/php/conf.d/php.ini');

if (true === $service->getOptions()['cli_only']) {
if (true === $service->isCliOnly()) {
continue;
}

Expand Down
3 changes: 2 additions & 1 deletion src/Application/Resources/views/Base/do.twig
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ create_volumes
$DOCKER_SYNC_COMMAND start
{% endif %}
$DOCKER_COMPOSE_COMMAND up --build -d
ui
read -p "---> Launch {{ constant('\\Ph3\\DockerArch\\Application\\Architect::PROJECT_NAME') }} UI? " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then ui; fi
terminate
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ services:
{% if service.dockerContainer.workingDir %}
working_dir: {{ service.dockerContainer.workingDir }}
{% endif %}
{% if true == service.isCli or true == service.options.cli_only|default(false) %}
{% if true == service.isCliOnly %}
stdin_open: true
tty: true
{% endif %}
Expand Down
10 changes: 7 additions & 3 deletions src/Application/Resources/views/Service/Common/shell.config.twig
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ antigen apply
) %}
### --- Alpine tricks.

unalias grep
unalias grep 2>/dev/null
{% endif %}

### --- Envs.
Expand All @@ -45,12 +45,16 @@ POWERLEVEL9K_CUSTOM_DOCKER_CONTAINER_BACKGROUND=""
POWERLEVEL9K_CUSTOM_DOCKER_CONTAINER_FOREGROUND="black"
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(custom_docker_container context dir rbenv vcs)
{% else %}
export PROMPT="🐳 {{ service.identifier }} @ {{ service.project.identifier }} ... "$PROMPT
if [ -z "$PS1" ]; then
export PS1="🐳 {{ service.identifier }} @ {{ service.project.identifier }} ... "$PS1
else
export PROMPT="🐳 {{ service.identifier }} @ {{ service.project.identifier }} ... "$PROMPT
fi
{% endif %}

### --- SSH

eval `ssh-agent -s` &> /dev/null
eval `ssh-agent -s` 2>/dev/null
if [ -d ~/.ssh ]; then
ssh-add $(find ~/.ssh -maxdepth 1 -type f -printf '%p\n' | grep id_ | grep -v .pub) &> /dev/null
fi
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ set -e
chown -R www-data:www-data {{ service.dockerContainer.workingDir }}
{% endif %}

{% if service.options.cli_only == true %}
{% if service.isCliOnly == true %}
docker-php-entrypoint php -a
{% else %}
docker-php-entrypoint php-fpm
Expand Down
37 changes: 37 additions & 0 deletions src/Application/Service/CapistranoService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

namespace Ph3\DockerArch\Application\Service;

use Ph3\DockerArch\Domain\Service\Model\AbstractService;
use Symfony\Component\OptionsResolver\Options;
use Symfony\Component\OptionsResolver\OptionsResolver;

/**
* @author Cédric Dugat <[email protected]>
*/
class CapistranoService extends AbstractService
{
/**
* {@inheritdoc}
*/
public function getOptionsResolver(): Options
{
$resolver = new OptionsResolver();
$resolver->setRequired(['version']);
$resolver->setDefaults([
'version' => '3.9.1',
'zsh' => true,
'dotfiles' => true,
]);

return $resolver;
}

/**
* {@inheritdoc}
*/
public function isCliOnly(): bool
{
return true;
}
}
30 changes: 30 additions & 0 deletions src/Application/Service/CustomService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Ph3\DockerArch\Application\Service;

use Ph3\DockerArch\Domain\DockerContainer\Model\DockerContainerInterface;
use Ph3\DockerArch\Domain\Service\Model\AbstractService;
use Symfony\Component\OptionsResolver\Options;
use Symfony\Component\OptionsResolver\OptionsResolver;

/**
* @author Cédric Dugat <[email protected]>
*/
class CustomService extends AbstractService
{
/**
* {@inheritdoc}
*/
public function getOptionsResolver(): Options
{
$resolver = new OptionsResolver();
$resolver->setRequired(['image', 'package_manager']);
$resolver->setAllowedValues('package_manager', [
DockerContainerInterface::PACKAGE_MANAGER_TYPE_APT,
DockerContainerInterface::PACKAGE_MANAGER_TYPE_APTITUTDE,
DockerContainerInterface::PACKAGE_MANAGER_TYPE_APK,
]);

return $resolver;
}
}
2 changes: 1 addition & 1 deletion src/Application/Service/NodejsService.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public function isVhostService(): bool
/**
* {@inheritdoc}
*/
public function isCli(): bool
public function isCliOnly(): bool
{
return true;
}
Expand Down
7 changes: 4 additions & 3 deletions src/Domain/DockerContainer/Model/DockerContainer.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,9 @@ private function init(): void
->addEnv('DEBIAN_FRONTEND', 'noninteractive')
->addNetwork(self::DOCKER_MAIN_NETWORK);

$this->addPackage('vim');
$this
->addPackage('openssh-client')
->addPackage('vim');

if (true === $this->getService()->isWebService()) {
$this
Expand All @@ -61,8 +63,7 @@ private function init(): void
->addPackage('git')
->addPackage('less')
->addPackage('wget')
->addPackage('curl')
->addPackage('openssh-client');
->addPackage('curl');
}

if (true === $this->isPackageManager(self::PACKAGE_MANAGER_TYPE_APK)) {
Expand Down
Loading

0 comments on commit 0fe1a96

Please sign in to comment.