Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy and maintain. Automate everything from code deployment to network configuration to cloud management, in a language that approaches plain English, using SSH, with no agents to install on remote systems. https://docs.ansible.com.

Overview

PyPI version Docs badge Chat badge Build Status Ansible Code of Conduct Ansible mailing lists Repository License Ansible CII Best Practices certification

Ansible

Ansible is a radically simple IT automation system. It handles configuration management, application deployment, cloud provisioning, ad-hoc task execution, network automation, and multi-node orchestration. Ansible makes complex changes like zero-downtime rolling updates with load balancers easy. More information on the Ansible website.

Design Principles

  • Have a dead-simple setup process with a minimal learning curve.
  • Manage machines very quickly and in parallel.
  • Avoid custom-agents and additional open ports, be agentless by leveraging the existing SSH daemon.
  • Describe infrastructure in a language that is both machine and human friendly.
  • Focus on security and easy auditability/review/rewriting of content.
  • Manage new remote machines instantly, without bootstrapping any software.
  • Allow module development in any dynamic language, not just Python.
  • Be usable as non-root.
  • Be the easiest IT automation system to use, ever.

Use Ansible

You can install a released version of Ansible with pip or a package manager. See our installation guide for details on installing Ansible on a variety of platforms.

Red Hat offers supported builds of Ansible Engine.

Power users and developers can run the devel branch, which has the latest features and fixes, directly. Although it is reasonably stable, you are more likely to encounter breaking changes when running the devel branch. We recommend getting involved in the Ansible community if you want to run the devel branch.

Get Involved

  • Read Community Information for all kinds of ways to contribute to and interact with the project, including mailing list information and how to submit bug reports and code to Ansible.
  • Join a Working Group, an organized community devoted to a specific technology domain or platform.
  • Submit a proposed code update through a pull request to the devel branch.
  • Talk to us before making larger changes to avoid duplicate efforts. This not only helps everyone know what is going on, but it also helps save time and effort if we decide some changes are needed.
  • For a list of email lists, IRC channels and Working Groups, see the Communication page

Coding Guidelines

We document our Coding Guidelines in the Developer Guide. We particularly suggest you review:

Branch Info

  • The devel branch corresponds to the release actively under development.
  • The stable-2.X branches correspond to stable releases.
  • Create a branch based on devel and set up a dev environment if you want to open a PR.
  • See the Ansible release and maintenance page for information about active branches.

Roadmap

Based on team and community feedback, an initial roadmap will be published for a major or minor version (ex: 2.7, 2.8). The Ansible Roadmap page details what is planned and how to influence the roadmap.

Authors

Ansible was created by Michael DeHaan and has contributions from over 5000 users (and growing). Thanks everyone!

Ansible is sponsored by Red Hat, Inc.

License

GNU General Public License v3.0 or later

See COPYING to see the full text.

Comments
  • systemd: suppress daemon_reload and daemon_reexec when running in a chroot

    systemd: suppress daemon_reload and daemon_reexec when running in a chroot

    SUMMARY

    This turns the systemd module's daemon_reload and daemon_reexec commands into no-ops when the target is a chroot.

    This is needed as the chroot doesn't run systemd, which will make any module invocation containing one of those two commands fail with something like "systemd isn't active". This is what you get without this PR.

    ISSUE TYPE
    • Bugfix Pull Request
    COMPONENT NAME

    systemd module

    ADDITIONAL INFORMATION

    The patch assumes that if the target is a chroot, it doesn't run systemd. I'm not sure if this is always the case; there might be people out there that somehow run systemd in a chroot, if this is at all possible/feasible. For those people, daemon_reload and daemon_reexec would work properly without this PR, and do nothing with the PR. So a cleaner solution that would cover this case might be to actually detect a running/active systemd rather than a chroot. Still, without this PR, the much more common case of someone trying to run systemd daemon_reload against a chroot will fail, which seems to be the more severe problem for me (my use case was https://github.com/multi-io/armbox, which uses Armbian to debootstrap a Debian system for ARM boards in a chroot, then uses Ansible to provision it).

    module needs_triage new_contributor bug small_patch affects_2.15 
    opened by multi-io 0
  • Fix issue #79639

    Fix issue #79639

    Closes #79639

    SUMMARY

    This pull request fixes #79639 by re ordering chdir in codes

    ISSUE TYPE
    • Bugfix Pull Request
    COMPONENT NAME

    except.py from lib/ansible/modules/expect.py

    module needs_triage new_contributor bug affects_2.15 
    opened by itspooya 0
  • Fix typo

    Fix typo

    SUMMARY

    Fix Typo in Arch Linux name

    ISSUE TYPE
    • Docs Pull Request

    +label: docsite_pr

    SUMMARY
    ISSUE TYPE
    • Bugfix Pull Request
    • Docs Pull Request
    • Feature Pull Request
    • Test Pull Request
    COMPONENT NAME
    ADDITIONAL INFORMATION
    
    
    needs_triage new_contributor docs small_patch docs_only affects_2.15 
    opened by KristopherKram 1
  • Ansible Galaxy installation fail on some AWS IP

    Ansible Galaxy installation fail on some AWS IP

    Summary

    Hi,

    I'm struggling while tring to install some collections. After looking for many diffrents bugs I finally end on an issue that looks like coming from AWS. As a difference, here is on lect what has succeeded from a french localisation and on the right what failed in an OVH DataCenter image

    It doesn't failed always on the same collection nor IP. I've tried with --pre with a deletion of all the collection folder etc... It failed frequently but not on the same servers/collection

    Please tell me what can I do to help for the analysis.

    Thanks for the time spent on this issue,

    Regards

    Issue Type

    Bug Report

    Component Name

    ansible-galaxy

    Ansible Version

    $ ansible --version
    ansible [core 2.14.1]
      config file = /var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg
      configured module search path = ['/var/lib/rundeck/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
      ansible python module location = /var/lib/rundeck/.local/lib/python3.9/site-packages/ansible
      ansible collection location = /var/lib/rundeck/ansible_folder/all-ansible-tools/ansible_collections
      executable location = /var/lib/rundeck/.local/bin/ansible
      python version = 3.9.14 (main, Nov  7 2022, 00:00:00) [GCC 11.3.1 20220421 (Red Hat 11.3.1-2)] (/usr/bin/python3)
      jinja version = 3.1.2
      libyaml = True
    

    Configuration

    # if using a version older than ansible-core 2.12 you should omit the '-t all'
    $ ansible-config dump --only-changed -t all
    ansible-config dump --only-changed -t all
    COLLECTIONS_PATHS(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = ['/var/lib/rundeck/ansible_folder/all-ansible-tools/ansible_collections']
    CONFIG_FILE() = /var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg
    DEFAULT_GATHERING(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = smart
    DEFAULT_HOST_LIST(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = ['/var/lib/rundeck/ansible_folder/all-ansible-tools/ansible-inventories/mindandgo-ansible-inventory/inventory->
    DEFAULT_ROLES_PATH(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = ['/var/lib/rundeck/ansible_folder/all-ansible-tools/ansible-roles', '/var/lib/rundeck/ansible_folder/infra-an>
    DEFAULT_TRANSPORT(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = ssh
    HOST_KEY_CHECKING(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = False
    
    CONNECTION:
    ==========
    
    paramiko_ssh:
    ____________
    host_key_checking(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = False
    ssh_args(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = -C -o ControlMaster=auto -o ControlPersist=30m
    
    ssh:
    ___
    host_key_checking(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = True
    pipelining(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = True
    ssh_args(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = -C -o ControlMaster=auto -o ControlPersist=30m
    timeout(/var/lib/rundeck/ansible_folder/infra-ansible-tools/infra-ansible-serverplaybooks/ansible.cfg) = 30
    

    OS / Environment

    Rocky 9

    Steps to Reproduce

    ansible-galaxy collection install community.crypto  -vvvvv => failed
    wget https://galaxy.ansible.com/download/community-crypto-2.9.0.tar.gz => failed
    
    

    also failed with other collections import

    Expected Results

    collection installation succeed

    Actual Results

    failed after the end of the installation process :
    
    .../...
    Starting galaxy collection install process
    Process install dependency map
    Initial connection to galaxy_server: https://galaxy.ansible.com
    Found API version 'v1, v2' with Galaxy server default (https://galaxy.ansible.com/api/)
    Opened /var/lib/rundeck/.ansible/galaxy_token
    Calling Galaxy at https://galaxy.ansible.com/api/v2/collections/community/crypto/
    Starting collection install process
    Fetching a collection tarball for 'community.crypto:2.9.0' from Ansible Galaxy
    Downloading https://galaxy.ansible.com/download/community-crypto-2.9.0.tar.gz to /var/lib/rundeck/.ansible/tmp/ansible-local-105300o0tcll1u/tmpq37itu93/community-crypto-2.9.0-buczfrep
    ERROR! Failed to download collection tar from 'default': <urlopen error TLS/SSL connection has been closed (EOF) (_ssl.c:1129)>
    
    
    
    
    ### Code of Conduct
    
    - [X] I agree to follow the Ansible Code of Conduct
    needs_triage bug affects_2.14 
    opened by flotho 4
  • `expect` module tries to chdir before checking `removes` condition

    `expect` module tries to chdir before checking `removes` condition

    Summary

    ansible.builtin.expect supports two parameters:

    • chdir - change to a directory before executing the command
    • removes - prevent the task from running if the file/directory does not exist

    Technically nothing prevents me from setting both parameters to the same value. For example, I want to make a task that uninstalls a piece of software which requires admin password interactively when launched:

    - tasks:
      name: Uninstall My Product
      ansible.builtin.expect:
        command: ./uninstall
        chdir: /opt/my_product
        removes: /opt/my_product
        responses:
          password: "{{ admin_password }}"
    

    I would expect that if the product has already been uninstalled, the task won't even start. However, in fact it first tries to chdir, and only then checks for other conditions - which results in the task failure.

    From the code it seems pretty easy to fix: just reorder the checks and put if chdir after if removes.

    Issue Type

    Bug Report

    Component Name

    expect

    Ansible Version

    $ ansible --version
    ansible [core 2.14.1]
      executable location = /home/go/.local/bin/ansible
      python version = 3.10.5 (main, Jul 25 2022, 15:52:08) [GCC 11.2.1 20220219] (/usr/bin/python3)
      jinja version = 3.1.2
      libyaml = False
    

    Configuration

    # if using a version older than ansible-core 2.12 you should omit the '-t all'
    $ ansible-config dump --only-changed -t all
    CONFIG_FILE() = /home/ansible.cfg
    DEFAULT_GATHERING(/home/ansible.cfg) = explicit
    DEFAULT_REMOTE_USER(/home/ansible.cfg) = codemaster
    HOST_KEY_CHECKING(/home/ansible.cfg) = False
    

    OS / Environment

    Alpine Linux 3.16 (in Docker)

    Steps to Reproduce

    Run the following task, making sure /opt/my_product does not exist:

    - tasks:
      name: Uninstall My Product
      ansible.builtin.expect:
        command: ./uninstall
        chdir: /opt/my_product
        removes: /opt/my_product
        responses:
          password: "{{ admin_password }}"
    

    Expected Results

    The task doesn't start.

    Actual Results

    The task fails with the following error:
    
    An exception occurred during task execution. To see the full traceback, use -vvv. The error was: FileNotFoundError: [Errno 2] No such file or directory: '/opt/my_product'
    fatal: [10.10.10.10]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"}, "changed": false, "module_stderr": "Shared connection to 10.10.10.10 closed.\r\n", "module_stdout": "Traceback (most recent call last):\r\n  File \"/home/.ansible/tmp/ansible-tmp-1672400758.9359515-1033-89246968079234/AnsiballZ_expect.py\", line 107, in <module>\r\n    _ansiballz_main()\r\n  File \"/home/.ansible/tmp/ansible-tmp-1672400758.9359515-1033-89246968079234/AnsiballZ_expect.py\", line 99, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/home/.ansible/tmp/ansible-tmp-1672400758.9359515-1033-89246968079234/AnsiballZ_expect.py\", line 47, in invoke_module\r\n    runpy.run_module(mod_name='ansible.modules.expect', init_globals=dict(_module_fqn='ansible.modules.expect', _modlib_path=modlib_path),\r\n  File \"/usr/lib/python3.10/runpy.py\", line 224, in run_module\r\n    return _run_module_code(code, init_globals, run_name, mod_spec)\r\n  File \"/usr/lib/python3.10/runpy.py\", line 96, in _run_module_code\r\n    _run_code(code, mod_globals, init_globals,\r\n  File \"/usr/lib/python3.10/runpy.py\", line 86, in _run_code\r\n    exec(code, run_globals)\r\n  File \"/tmp/ansible_ansible.builtin.expect_payload_mgdqffya/ansible_ansible.builtin.expect_payload.zip/ansible/modules/expect.py\", line 258, in <module>\r\n  File \"/tmp/ansible_ansible.builtin.expect_payload_mgdqffya/ansible_ansible.builtin.expect_payload.zip/ansible/modules/expect.py\", line 179, in main\r\nFileNotFoundError: [Errno 2] No such file or directory: '/opt/my_product'\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
    
    
    
    ### Code of Conduct
    
    - [X] I agree to follow the Ansible Code of Conduct
    module needs_triage bug has_pr traceback affects_2.14 
    opened by ostankin 1
  • inventory variable replace failed

    inventory variable replace failed

    Summary

    Variables in inventory after version 2.13. x can not be replaced with actual values when execute task, because of this MR: https://github.com/ansible/ansible/pull/76590

    config: primaryIp: 'aa.aa.aa.aa' standbyIp: 'bb.bb.bb.bb' user_name: xx

    inventory: [xx] primary ansible_ssh_user={{user_name}} ansible_ssh_host={{primaryIp}} standby ansible_ssh_user={{user_name}} ansible_ssh_host={{standbyIp}}

    expected result: image Actual Results: image

    Issue Type

    Bug Report

    Component Name

    lib/ansible/executor/task_executor.py

    Ansible Version

    $ ansible --version
    ansible [core 2.13.6]
      config file = /etc/ansible/ansible.cfg
      configured module search path = ['/home/xxx/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
      ansible python module location = /opt/ansible/lib64/python3.9/site-packages/ansible
      ansible collection location = /home/xxx/.ansible/collections:/usr/share/ansible/collections
      executable location = /opt/ansible/bin/ansible
      python version = 3.9.9 (main, Sep 21 2022, 09:00:34) [GCC 10.3.1]
      jinja version = 3.0.3
      libyaml = True
    

    Configuration

    # if using a version older than ansible-core 2.12 you should omit the '-t all'
    $ ansible-config dump --only-changed -t all
    CACHE_PLUGIN(/etc/ansible/ansible.cfg) = memory
    COMMAND_WARNINGS(/etc/ansible/ansible.cfg) = False
    DEFAULT_FORKS(/etc/ansible/ansible.cfg) = 20
    DEFAULT_GATHERING(/etc/ansible/ansible.cfg) = smart
    DEFAULT_HOST_LIST(/etc/ansible/ansible.cfg) = ['/etc/ansible/hosts']
    DEFAULT_MANAGED_STR(/etc/ansible/ansible.cfg) = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
    DEFAULT_NO_TARGET_SYSLOG(/etc/ansible/ansible.cfg) = True
    DEFAULT_POLL_INTERVAL(/etc/ansible/ansible.cfg) = 15
    DEFAULT_TIMEOUT(/etc/ansible/ansible.cfg) = 60
    DEFAULT_TRANSPORT(/etc/ansible/ansible.cfg) = paramiko
    DEPRECATION_WARNINGS(/etc/ansible/ansible.cfg) = False
    HOST_KEY_CHECKING(/etc/ansible/ansible.cfg) = False
    INTERPRETER_PYTHON(/etc/ansible/ansible.cfg) = auto_legacy_silent
    PARAMIKO_HOST_KEY_AUTO_ADD(/etc/ansible/ansible.cfg) = True
    PARAMIKO_LOOK_FOR_KEYS(/etc/ansible/ansible.cfg) = False
    RETRY_FILES_ENABLED(/etc/ansible/ansible.cfg) = True
    SYSTEM_WARNINGS(/etc/ansible/ansible.cfg) = False
    
    CONNECTION:
    ==========
    
    paramiko_ssh:
    ____________
    host_key_auto_add(/etc/ansible/ansible.cfg) = True
    host_key_checking(/etc/ansible/ansible.cfg) = False
    look_for_keys(/etc/ansible/ansible.cfg) = False
    ssh_args(/etc/ansible/ansible.cfg) = -C -o ControlMaster=auto -o ControlPersist=1800s
    
    ssh:
    ___
    host_key_checking(/etc/ansible/ansible.cfg) = False
    pipelining(/etc/ansible/ansible.cfg) = True
    scp_if_ssh(/etc/ansible/ansible.cfg) = smart
    ssh_args(/etc/ansible/ansible.cfg) = -C -o ControlMaster=auto -o ControlPersist=1800s
    timeout(/etc/ansible/ansible.cfg) = 60
    
    SHELL:
    =====
    
    sh:
    __
    remote_tmp(/etc/ansible/ansible.cfg) = ~/.ansible/tmp
    

    OS / Environment

    EulerOS

    Steps to Reproduce

    any
    

    config: primaryIp: 'aa.aa.aa.aa' standbyIp: 'bb.bb.bb.bb' user_name: xx

    inventory: [xx] primary ansible_ssh_user={{user_name}} ansible_ssh_host={{primaryIp}} standby ansible_ssh_user={{user_name}} ansible_ssh_host={{standbyIp}}

    Expected Results

    ssh normal: image

    Actual Results

    version after 2.13.x:
    
    ansible_ssh_host can not be replaced with actual IP,ssh {{primaryIp}} or {{standbyip}}, so failed with:
    
    <{{standbyIp}}> ESTABLISH PARAMIKO SSH CONNECTION FOR USER: {{user_name}} on PORT 22 TO {{standbyIp}}
    fatal: [primary]: UNREACHABLE! => {
        "changed": false,
        "msg": "[Errno -2] Name or service not known",
        "unreachable": true
    }
    Traceback (most recent call last):
      File "/opt/ansible/lib64/python3.9/site-packages/ansible/plugins/connection/paramiko_ssh.py", line 345, in _connect_uncached
        ssh.connect(
      File "/opt/ansible/lib64/python3.9/site-packages/paramiko/client.py", line 340, in connect
        to_try = list(self._families_and_addresses(hostname, port))
      File "/opt/ansible/lib64/python3.9/site-packages/paramiko/client.py", line 203, in _families_and_addresses
        addrinfos = socket.getaddrinfo(
      File "/usr/lib64/python3.9/socket.py", line 954, in getaddrinfo
        for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
    socket.gaierror: [Errno -2] Name or service not known
    fatal: [standby]: UNREACHABLE! => {
        "changed": false,
        "msg": "[Errno -2] Name or service not known",
        "unreachable": true
    }
    

    Code of Conduct

    • [X] I agree to follow the Ansible Code of Conduct
    needs_triage bug traceback affects_2.13 
    opened by sean-npu 2
Releases(v2.5.0b1)
Phansible - generate Vagrant + Ansible dev environments for PHP

Phansible Phansible is a simple generator for Vagrant projects, targeting PHP development environments, using Ansible as Provisioner. It was inspired

phansible 639 Nov 1, 2022
Quickly deploy a seedbox with self-hosted services and a web portal using Docker and docker-compose.

Seedbox Quickly deploy and configure a seedbox with self-hosted services and a web portal using Docker and a single docker-compose.yml file. Screensho

null 6 Dec 7, 2022
Vagrant-boxes - Setup scripts and docs for my vagrant boxes, primarily aimed at Web/SilverStripe developement

zauberfisch's vagrant boxes zauberfisch/silverstripe-debian64 Debian 10 x86_64 LAMP Box with many extra features, pre-configured for SilverStripe Sour

null 6 Jan 24, 2020
Server automation framework and application

Puppet Puppet, an automated administrative engine for your Linux, Unix, and Windows systems, performs administrative tasks (such as adding users, inst

Puppet 6.8k Dec 31, 2022
Demo of how you can run your Laravel app with Docker Compose. Look at docker-compose.yml and the docker folder. The rest is just a clean Laravel + Horizon install.

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Matt 5 Oct 22, 2021
🎲Neard is a portable WAMP software stack involving useful binaries, tools and applications for your web development.

About Neard is a portable WAMP software stack involving useful binaries, tools and applications for your web development. It also offers several versi

Neard 335 Dec 22, 2022
Docker-based workflow management system for Laravel

DevOption Workflows Workflows is a Docker-based workflow management system for Laravel applications. Installation You can install the package via comp

devoption.io 1 Jan 5, 2022
A package that allows you to generate simple and fast Docker configurations for your Laravel application!

A package that allows you to generate simple and fast Docker configurations for your Laravel application!

Lucas Nepomuceno 3 Oct 8, 2022
Brew PHP switcher is a simple shell script to switch your apache and CLI quickly between major versions of PHP

Brew PHP switcher is a simple shell script to switch your apache and CLI quickly between major versions of PHP. If you support multiple products/projects that are built using either brand new or old legacy PHP functionality. For users of Homebrew (or brew for short) currently only.

Phil Cook 872 Dec 22, 2022
Laravel 5 with Dockerized Gulp, PHP-FPM, MySQL and nginx using docker-compose

docker-laravel Laravel 5 with Dockerized PHP-FPM, MySQL and nginx using docker-compose Usage Get Composer docker-compose run --rm phpnginx curl -O htt

Harsh Vakharia 83 Feb 8, 2022
Docker Containers for simple Laravel development.

Docker containers of Laravel development. Docker Containers for simple Laravel development. Prerequisites This package only works for Linux users righ

Steve Azzopardi 14 May 19, 2022
Finally a sane way to register available commands and arguments and match your command line in PHP

clue/commander Finally a sane way to register available commands and arguments and match your command line in PHP. You want to build a command line in

Christian Lück 172 Nov 27, 2022
Monitor for any changes in your php application and automatically restart it (suitable for async apps).

PHP-watcher PHP-watcher helps develop long-running PHP applications by automatically restarting them when file changes in the directory are detected.

Sergey Zhuk 373 Dec 21, 2022
A development tool for all your projects that is fast, easy, powerful and liberating

Lando A Liberating Dev Tool For All Your Projects The local development and DevOps tool trusted by professional developers across the galaxy. Free you

Lando 3.6k Jan 7, 2023
Vagrant is a tool for building and distributing development environments.

Vagrant Website: https://www.vagrantup.com/ Source: https://github.com/hashicorp/vagrant HashiCorp Discuss: https://discuss.hashicorp.com/c/vagrant/24

HashiCorp 24.8k Jan 2, 2023
A modern Docker LAMP stack and MEAN stack for local development

The Devilbox Usage | Architecture | Community | Features | Intranet | Screenshots | Contributing | Logos | License Support for valid https out of the

cytopia 4k Jan 8, 2023
Up and running with small Docker environments

Vessel Up and running with small Docker dev environments. Documentation Full documentation can be found at https://vessel.shippingdocker.com. Install

Shipping Docker 1.1k Dec 17, 2022
Oxygen Builder's better workflow and environment

Oxygen Builder's better workflow and environment Built with ❤️ Official Website | Documentation | Change Log Supporting Artifact is an open source pro

AncientWorks 10 Dec 3, 2022
Docker with PHP 7.4 fpm, Nginx, Composer, PhpUnit and MaridaDB

Clean Docker with PHP Docker with PHP 7.4 fpm, Nginx, Composer, PhpUnit and MariaDB Starting app docker-compose up -d Main page

Grzegorz Bielski 7 Nov 17, 2022