{"id":20504461,"url":"https://github.com/tiknil/skipper","last_synced_at":"2025-12-02T23:02:27.575Z","repository":{"id":168575869,"uuid":"644314829","full_name":"tiknil/skipper","owner":"tiknil","description":"Tool for managing multiple local Laravel docker-compose deployment","archived":false,"fork":false,"pushed_at":"2024-03-15T11:38:55.000Z","size":62,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-03-15T12:54:40.682Z","etag":null,"topics":["dev-ops","docker-compose","laravel","localhost"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tiknil.png","metadata":{"files":{"readme":"Readme.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-23T09:07:25.000Z","updated_at":"2024-08-22T07:36:12.326Z","dependencies_parsed_at":"2024-03-15T12:45:41.183Z","dependency_job_id":"fde5aba9-0ea4-4b6d-878b-af5f92eee4a8","html_url":"https://github.com/tiknil/skipper","commit_stats":null,"previous_names":["tiknil/skipper"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiknil%2Fskipper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiknil%2Fskipper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiknil%2Fskipper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiknil%2Fskipper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tiknil","download_url":"https://codeload.github.com/tiknil/skipper/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242101945,"owners_count":20071978,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dev-ops","docker-compose","laravel","localhost"],"created_at":"2024-11-15T19:38:07.994Z","updated_at":"2025-12-02T23:02:27.563Z","avatar_url":"https://github.com/tiknil.png","language":"PHP","readme":"[Skipper](https://github.com/tiknil/skipper) is a tool for managing multiple local Laravel docker-compose deployment.\n\nIt is strongly opinionated towards the patterns used by [Tiknil](https://www.tiknil.com) while building a laravel\napplication.\n\n- [Install \u0026 Update](#installation)\n- [Usage](#usage)\n- [Architecture](#architecture)\n- [Mailpit for local emails](#mailpit)\n- [Docker compose commands](#docker-compose-commands)\n- [Project fields](#project)\n- [Development](#development)\n- [Troubleshooting](#troubleshooting)\n\n### Installation\n\n```\ncomposer global require tiknil/skipper\n```\n\nMake sure that the composer binaries directory is in your `$PATH`\n\nYou can update Skipper to the latest version by running\n\n```\ncomposer global update tiknil/skipper\n```\n\n### Usage\n\nRegister the current path as a skipper project:\n\n```bash\n# No options, sane defaults will be used and you will be asked to confirm the main fields\nskipper init\n\n# All fields can also be set via command line options\nskipper init --host=[host] --name=[name] \\\n        --compose-file=docker/docker-compose.yml \\\n        --env-file=docker/.env \\\n        --http-container=nginx\n        --php-container=php-fpm\n```\n\nYou will be asked to automatically install the default\n[laravel docker compose](https://github.com/tiknil/laravel-docker-compose) files.\n\nSee [Project](#project) for details about each field.\n\n---\n\nStart the project containers\n\n```bash\nskipper sail\n```\n\n---\n\nStops the project containers\n\n```bash\nskipper dock\n```\n\n---\n\nInstall caddy root certificate\n\n```bash\nskipper proxy:certs\n```\n\n---\n\nOnce a project is running, skipper provides some useful commands to directly interact with it.\n\n```bash\nskipper bash                  # Start a new bash shell inside the PHP container\nskipper composer [command...] # Run a composer command (use instead of composer [command]\nskipper artisan [command...]  # Run an artisan command (use instead of php artisan [command]\nskipper tinker                # Start a new Laravel Tinker shell\nskipper backup                # Create a new MySQL backup\nskipper restore --file [file] # Restore a MySQL backup\n```\n\nRun `skipper` without arguments for a complete list of available commands\n\n### Architecture\n\nSkipper runs a [Caddy](https://caddyserver.com/) container, running as reverse proxy and forwarding\nrequests to the corresponding project instance. Caddy is also able to generate HTTPS certificates for local domains,\nenabling a local environment very similar to a production deployment.\n\nSkipper install its files inside the `~/.skipper` directory.\n\n### Mailpit\n\nSkipper also runs a [Mailpit](https://github.com/axllent/mailpit) container by default. You can see the web\ndashboard at [localhost:8025](http://localhost:8025)\n\nLaravel should use the host `host.docker.internal` and port `1025` with driver SMTP:\n\n```\nMAIL_MAILER=smtp\nMAIL_HOST=host.docker.internal\nMAIL_PORT=1025\n```\n\nThis avoids running a separate mailpit/mailhog instance for each project.\n\n### Docker compose commands\n\nYou may need to run custom docker compose command for a project, e.g. `ps` to see running containers.\n\nYou can use the `compose` command:\n\n```\nskipper compose [command]\n```\n\nBasically, replace each `docker-compose [command]` with `skipper compose [command]`.\nThis is _required_ because skipper attaches some options to the docker-compose command that are required, such as the\nname or the env file path.\n\n### Project\n\nFor the reverse proxy to work, skipper need to know about a project and update the caddy configuration file.\nA new project is registered using the `init` command.\n\n\u003e All available projects are registered inside the `~/.skipper/config.yaml` configuration file.\n\n- **name**: The project name is used as the docker compose prefix for each container, volume or network related to the\n  project. As a consequence, it must be unique and an update can result in data loss (new docker volumes will be used).\n- **host**: The domain to register in the reverse proxy\n- **path**: The path to the project root\n- **composeFile**: relative path to the docker-compose file.\n- **envFile**: relative path to the .env file for the docker-compose file\n- **httpContainer**: name of the http container, where caddy should forward the requests\n- **phpContainer**: name of the php container, where the utility commands should be run.\n\n### Development\n\nSkipper leverages strongly the Symfony [console](https://symfony.com/doc/current/components/console.html)\nand [process](https://symfony.com/doc/current/components/process.html) components.\n\nIf you are developing skipper and you need to test your edits, you have two choices:\n\n- Run the `bin/skipper` binary directly (e.g. `bin/skipper list`)\n- Update your global composer.json file with a reference to the local project:\n\n```\n\"repositories\": [\n    {\n        \"type\": \"path\",\n        \"url\": \"path/to/your/local/project\"\n    }\n],\n```\n\nNow running `composer global require tiknil/skipper` your local version will be used instead of the published version.\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for additional technical informations.\n\n### Troubleshooting\n\n#### Invalid SSL certificates on a new project\n\nIn case of ssl errors after launching a new project, you probably need to install the Caddy root certificate into your\nsystem.\n\n```bash\nskipper proxy:certs\n```\n\nNote that the browser may cache the ssl error, you may need to wait a while after installing the certificate for the\nbrowser to stop showing warnings\n\n#### Invalid SSL certificates on a running project (INVALID_DATE)\n\nIn case ssl errors start occurring after the project is running for a while, it is probably caused by\na [time drift](https://github.com/docker/for-mac/issues/1260) between your PC datetime and the container internal clock.\nYou can reload the caddy container to resolve:\n\n```bash\nskipper proxy:reload\n```\n\n#### command not found: skipper\n\nIf your shell does not find the skipper command after the [global installation with composer](#installation), you\nprobably do not have the composer `bin` directory into your `$PATH`.\n\nAdd the following line to your `~/.zshrc`:\n\n```\nexport PATH=$PATH:$HOME/.composer/vendor/bin\n```\n\nThen reload the file:\n\n```bash\nsource ~/.zshrc\n```\n\n\u003e If you are not using zsh as your shell, refer to your preferred shell configuration file instead of ~/.zshrc\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiknil%2Fskipper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftiknil%2Fskipper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiknil%2Fskipper/lists"}