PHPackages                             hoangstark/vessel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [DevOps &amp; Deployment](/categories/devops)
4. /
5. hoangstark/vessel

ActiveLibrary[DevOps &amp; Deployment](/categories/devops)

hoangstark/vessel
=================

Simple Docker dev environments that supports Traefik proxy

v5.0.0(7y ago)017MITShell

Since Sep 20Pushed 7y ago1 watchersCompare

[ Source](https://github.com/hoangstark/vessel)[ Packagist](https://packagist.org/packages/hoangstark/vessel)[ RSS](/packages/hoangstark-vessel/feed)WikiDiscussions master Synced today

READMEChangelog (1)DependenciesVersions (19)Used By (0)

Vessel
======

[](#vessel)

Up and running with small Docker dev environments.

Documentation
-------------

[](#documentation)

Full documentation can be found at .

Post Install
------------

[](#post-install)

Start traefik and mariadb separately

Install
-------

[](#install)

Vessel is just a small set of files that sets up a local Docker-based dev environment per project. There is nothing to install globally, except Docker itself!

This is all there is to using it:

```
composer require shipping-docker/vessel
php artisan vendor:publish --provider="Vessel\VesselServiceProvider"

# Run this once to initialize project
# Must run with "bash" until initialized
bash vessel init

./vessel start
```

Head to `http://localhost` in your browser and see your Laravel site!

Lumen
-----

[](#lumen)

If you're using Lumen, you'll need to copy the Vessel files over manually instead of using `php artisan vendor:publish`. You can do this with this command:

```
cp -R vendor/shipping-docker/vessel/docker-files/{vessel,docker-compose.yml,docker} .

```

and then you'll be able to install and continue as normal.

Multiple Environments
---------------------

[](#multiple-environments)

Vessel attempts to bind to port 80 and 3306 on your machine, so you can simply go to `http://localhost` in your browser.

However, if you run more than one instance of Vessel, you'll get an error when starting it; Each port can only be used once. To get around this, use a different port per project by setting the `APP_PORT` and `MYSQL_PORT` environment variables in one of two ways:

Within the `.env` file:

```
APP_PORT=8080
MYSQL_PORT=33060

```

Or when starting Vessel:

```
APP_PORT=8080 MYSQL_PORT=33060 ./vessel start
```

Then you can view your project at `http://localhost:8080` and access your database locally from port `33060`;

Sequel Pro
----------

[](#sequel-pro)

Since we bind the MySQL to port `3306`, SequelPro can access the database directly.

[![sequel pro access](https://camo.githubusercontent.com/62f4f0320d50788adeb8bb08dcd8185dcd4f6465d30d402289fb4ff93c37e24c/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f7366682d6173736574732f76657373656c2d73657175656c2d70726f2e706e67)](https://camo.githubusercontent.com/62f4f0320d50788adeb8bb08dcd8185dcd4f6465d30d402289fb4ff93c37e24c/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f7366682d6173736574732f76657373656c2d73657175656c2d70726f2e706e67)

The password for user `root` is set by environment variable `DB_PASSWORD` from within the `.env` file.

> The port setting must match the `MYSQL_PORT` environment variable, which defaults to `3306`.

Common Commands
---------------

[](#common-commands)

Here's a list of built-in helpers you can use. Any command not defined in the `vessel` script will default to being passed to the `docker-compose` command. If not command is used, it will run `docker-compose ps` to list the running containers for this environment.

### Show Vessel Version or Help

[](#show-vessel-version-or-help)

```
# shows vessel current version
$ vessel --version # or [ -v | version ]

# shows vessel help
$ vessel --help # or [ -H | help ]
```

### Starting and Stopping Vessel

[](#starting-and-stopping-vessel)

```
# Start the environment
./vessel start

## This is equivalent to
./vessel up -d

# Stop the environment
./vessel stop

## This is equivalent to
./vessel down
```

### Development

[](#development)

```
# Use composer
./vessel composer
./vessel comp  # "comp" is a shortcut to "composer"

# Use artisan
./vessel artisan
./vessel art  # "art" is a shortcut to "artisan"

# Run tinker REPL
./vessel tinker # "tinker" is a shortcut for "artisan tinker"

# Run phpunit tests
./vessel test

## Example: You can pass anything you would to phpunit to this as well
./vessel test --filter=some.phpunit.filter
./vessel test tests/Unit/SpecificTest.php

# Run npm
./vessel npm

## Example: install deps
./vessel npm install

# Run yarn

./vessel yarn

## Example: install deps
./vessel yarn install

# Run gulp
./vessel gulp
```

### Docker Commands

[](#docker-commands)

As mentioned, anything not recognized as a built-in command will be used as an argument for the `docker-compose` command. Here's a few handy tricks:

```
# Both will list currently running containers and their status
./vessel
./vessel ps

# Check log output of a container service
./vessel logs # all container logs
./vessel logs app # nginx | php logs
./vessel logs mysql # mysql logs
./vessel logs redis # redis logs

## Tail the logs to see output as it's generated
./vessel logs -f # all logs
./vessel logs -f app # nginx | php logs

## Tail Laravel Logs
./vessel exec app tail -f /var/www/html/storage/logs/laravel.log

# Start a bash shell inside of a container
# This is just like SSH'ing into a server
# Note that changes to a container made this way will **NOT**
#   survive through stopping and starting the vessel environment
#   To install software or change server configuration, you'll need to
#     edit the Dockerfile and run: ./vessel build
./vessel exec app bash

# Example: mysqldump database "homestead" to local file system
#          We must add the password in the command line this way
#          This creates files "homestead.sql" on your local file system, not
#          inside of the container
# @link https://serversforhackers.com/c/mysql-in-dev-docker
./vessel exec mysql mysqldump -u root -psecret homestead > homestead.sql
```

What's included?
----------------

[](#whats-included)

The aim of this project is simplicity. It includes:

- PHP 7.3
- MySQL 5.7
- Redis ([latest](https://hub.docker.com/_/redis/))
- NodeJS ([latest](https://hub.docker.com/_/node/)), with Yarn &amp; Gulp

How does this work?
-------------------

[](#how-does-this-work)

If you're unfamiliar with Docker, try out this [Docker in Development](https://serversforhackers.com/s/docker-in-development) course, which explains important topics in how this is put together.

If you want to see how this workflow was developed, check out [Shipping Docker](https://serversforhackers.com/shipping-docker) and signup for the free course module which explains building this Docker workflow.

Supported Systems
-----------------

[](#supported-systems)

Vessel requires Docker, and currently only works on Windows, Mac and Linux.

> Windows requires running Hyper-V. Using Git Bash (MINGW64) and WSL are supported. Native Windows is still under development.

MacLinuxWindowsInstall Docker on [Mac](https://docs.docker.com/docker-for-mac/install/)Install Docker on [Debian](https://docs.docker.com/engine/installation/linux/docker-ce/debian/)Install Docker on [Windows](https://docs.docker.com/docker-for-windows/install/)Install Docker on [Ubuntu](https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/)Install Docker on [CentOS](https://docs.docker.com/engine/installation/linux/docker-ce/centos/)

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community17

Small or concentrated contributor base

Maturity72

Established project with proven stability

 Bus Factor1

Top contributor holds 78.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~43 days

Recently: every ~54 days

Total

14

Last Release

2575d ago

Major Versions

1.1.3 → 2.0.02017-11-09

2.1.0 → 3.0.02017-11-16

3.2.0 → 4.0.02019-01-07

4.0.1 → v5.0.02019-04-22

### Community

Maintainers

![](https://www.gravatar.com/avatar/73da927046b5b4b4d54a87463c8515adfdf9b4575650c5e0d9e990ec3a55e484?d=identicon)[hoangstark](/maintainers/hoangstark)

---

Top Contributors

[![fideloper](https://avatars.githubusercontent.com/u/467411?v=4)](https://github.com/fideloper "fideloper (100 commits)")[![dbpolito](https://avatars.githubusercontent.com/u/347400?v=4)](https://github.com/dbpolito "dbpolito (7 commits)")[![cringerjs](https://avatars.githubusercontent.com/u/835448?v=4)](https://github.com/cringerjs "cringerjs (6 commits)")[![gabrielboliveira](https://avatars.githubusercontent.com/u/11093090?v=4)](https://github.com/gabrielboliveira "gabrielboliveira (2 commits)")[![francescomalatesta](https://avatars.githubusercontent.com/u/1940952?v=4)](https://github.com/francescomalatesta "francescomalatesta (1 commits)")[![lbausch](https://avatars.githubusercontent.com/u/5747127?v=4)](https://github.com/lbausch "lbausch (1 commits)")[![mikeerickson](https://avatars.githubusercontent.com/u/183153?v=4)](https://github.com/mikeerickson "mikeerickson (1 commits)")[![rxcod9](https://avatars.githubusercontent.com/u/14928642?v=4)](https://github.com/rxcod9 "rxcod9 (1 commits)")[![ssx](https://avatars.githubusercontent.com/u/254889?v=4)](https://github.com/ssx "ssx (1 commits)")[![toniperic](https://avatars.githubusercontent.com/u/5714104?v=4)](https://github.com/toniperic "toniperic (1 commits)")[![trq](https://avatars.githubusercontent.com/u/32683?v=4)](https://github.com/trq "trq (1 commits)")[![ashokgelal](https://avatars.githubusercontent.com/u/401055?v=4)](https://github.com/ashokgelal "ashokgelal (1 commits)")[![vmitchell85](https://avatars.githubusercontent.com/u/1248035?v=4)](https://github.com/vmitchell85 "vmitchell85 (1 commits)")[![bkatznelson](https://avatars.githubusercontent.com/u/31732645?v=4)](https://github.com/bkatznelson "bkatznelson (1 commits)")[![carlos-lopez-hyve](https://avatars.githubusercontent.com/u/91889079?v=4)](https://github.com/carlos-lopez-hyve "carlos-lopez-hyve (1 commits)")[![ericvanjohnson](https://avatars.githubusercontent.com/u/89408?v=4)](https://github.com/ericvanjohnson "ericvanjohnson (1 commits)")

### Embed Badge

![Health badge](/badges/hoangstark-vessel/health.svg)

```
[![Health](https://phpackages.com/badges/hoangstark-vessel/health.svg)](https://phpackages.com/packages/hoangstark-vessel)
```

###  Alternatives

[deployer/deployer

Deployment Tool

11.0k25.4M206](/packages/deployer-deployer)[appwrite/server-ce

End to end backend server for frontend and mobile apps.

55.3k84.2k](/packages/appwrite-server-ce)[pragmarx/health

Laravel Server &amp; App Health Monitor and Notifier

2.0k1.0M2](/packages/pragmarx-health)[felixfbecker/language-server-protocol

PHP classes for the Language Server Protocol

22476.7M6](/packages/felixfbecker-language-server-protocol)[heroku/heroku-buildpack-php

Toolkit for starting a PHP application locally, with or without foreman, using the same config for PHP and Apache2/Nginx as on Heroku

8161.3M10](/packages/heroku-heroku-buildpack-php)[tiamo/phpas2

PHPAS2 is a php-based implementation of the EDIINT AS2 standard

4674.7k](/packages/tiamo-phpas2)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
