Send your projects up in the clouds

Last update: Jun 25, 2022

Rocketeer is unfortunately not maintained anymore and this repository is archived

I recommend to pivot to Deployer and/or CD pipelines

The Gitter chat will stay open for discussions and helping each other if you're locked into Rocketeer. You can also send me the occasional mail but keep in mind I haven't worked on this project in years and probably won't be able to solve your issue

Rocketeer

Gitter

Build Status Latest Stable Version Total Downloads Scrutinizer Quality Score Code Coverage Dependency Status Support via Gittip

Rocketeer is a modern PHP task runner and deployment package. It is inspired by the Laravel Framework philosophy and thus aims to be fast, elegant, and more importantly easy to use.

Like the latter, emphasis is put on smart defaults and modern development. While it is coded in PHP, it can deploy any project from small HTML/CSS websites to large Rails applications.

Main features

  • Versatile, support for multiple connections, multiserver connections, multiple stages per server, etc.
  • Fast, queue tasks and run them in parallel across all your servers and stages
  • Modulable, not only can you add custom tasks and components, every core part of Rocketeer can be hot swapped, extended, hacked to bits, etc.
  • Preconfigured, tired of defining the same routines again and again ? Rocketeer is made for modern development and comes with smart defaults and built-in tasks such as installing your application's dependencies
  • Powerful, releases management, server checks, rollbacks, etc. Every feature you'd expect from a deployment tool is there

Installation

The fastest way is to grab the binary:

$ wget http://rocketeer.autopergamene.eu/versions/rocketeer.phar
$ chmod +x rocketeer.phar
$ mv rocketeer.phar /usr/local/bin/rocketeer

More ways to setup Rocketeer can be found in the official documentation.

Usage

The available commands in Rocketeer are :

$ php rocketeer
  check        Check if the server is ready to receive the application
  cleanup      Clean up old releases from the server
  current      Display what the current release is
  deploy       Deploys the website
  flush        Flushes Rocketeer's cache of credentials
  help         Displays help for a command
  ignite       Creates Rocketeer's configuration
  list         Lists commands
  rollback     Rollback to the previous release, or to a specific one
  setup        Set up the remote server for deployment
  strategies   Lists the available options for each strategy
  teardown     Remove the remote applications and existing caches
  test         Run the tests on the server and displays the output
  update       Update the remote server without doing a new release

Documentation can be found here

Testing

$ composer test

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email :author_email instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.


Available plugins and integrations

Why not Capistrano?

That's a question that's been asked to me, why not simply use Capistrano? I've used Capistrano in the past, it does everything you want it to do, that's a given.

But, it remains a Ruby package and one that's tightly coupled to Rails in some ways; Rocketeer makes it so that you don't have Ruby files hanging around your app. That way you configure it once and can use it wherever you want in the realm of your application, even outside of the deploy routine. It's also meant to be a lot easier to comprehend, for first-time users or novices, Capistrano is a lot to take in at once – Rocketeer aims to be as simple as possible by providing smart defaults and speeding up the time between installing it and first hitting deploy.

It's also more thought out for the PHP world – although you can configure Capistrano to run Composer and PHPUnit, that's not something it expects from the get go, while those tasks that are a part of every PHP developer are integrated in Rocketeer's core deploy process.

GitHub

https://github.com/rocketeers/rocketeer
Comments
  • 1. Deploy hooks not firing

    I'm deploying my app using the 'deploy' command, and expecting my hooks to run, as defined in my hooks.php file

    for example:

    'after'  => array(
            'setup'   => array(),
            'deploy'  => array(
                'composer5.6-sp install',
                'ln -s /var/sites/laraveltest/current /srv/users/serverpilot/apps/laraveltest'
            ),
            'cleanup' => array(),
        ),
    

    However, these commands don't fire. Am I doing this wrong, or is there an issue here?

    Reviewed by richardhawthorn at 2014-09-20 13:28
  • 2. The Composer package manager could not be found

    When running rocketeer check -vvv the following is output:

    | Check (Check if the server is ready to receive the application) [~5.56s]
    |-- Check/Php (Checks if the server is ready to receive a PHP application)
    |=> Checking presence of git
    $ git --version
    [[email protected]] (production) git version 1.8.2.1
    |=> Checking presence of Composer
    $ [ -e "/home/thasmo/example.com/current/composer.json" ] && echo "true"
    |=> Checking PHP version
    |=> Checking presence of required extensions
    $ /package/host/localhost/php-5.5/bin/php -r="print defined('HHVM_VERSION') ? HHVM_VERSION : PHP_VERSION;"
    $ /package/host/localhost/php-5.5/bin/php -m
    [[email protected]] (production) PHP Warning:  PHP Startup: Unable to load dynamic library '/home/thasmo/pecl/apc.so' - /home/thasmo/pecl/apc.so: cannot open shared object file: No such file or directory in Unknown on line 0
    PHP Warning:  PHP Startup: Unable to load dynamic library '/home/thasmo/pecl/memcache.so' - /home/thasmo/pecl/memcache.so: cannot open shared object file: No such file or directory in Unknown on line 0
    [[email protected]] (production) [PHP Modules]
    [[email protected]] (production) bcmath
    calendar
    Core
    ctype
    curl
    [[email protected]] (production) date
    dom
    ereg
    exif
    fileinfo
    filter
    ftp
    gd
    gettext
    hash
    iconv
    imap
    intl
    [[email protected]] (production) json
    ldap
    libxml
    mbstring
    mcrypt
    mysql
    mysqli
    mysqlnd
    openssl
    pcntl
    [[email protected]] (production) pcre
    PDO
    pdo_mysql
    pdo_pgsql
    pdo_sqlite
    pgsql
    Phar
    posix
    pspell
    Reflection
    [[email protected]] (production) session
    shmop
    SimpleXML
    soap
    sockets
    SPL
    sqlite3
    standard
    sysvmsg
    sysvsem
    [[email protected]] (production) sysvshm
    tidy
    tokenizer
    xml
    xmlreader
    xmlrpc
    xmlwriter
    xsl
    zip
    zlib
    [[email protected]] (production) [Zend Modules]
    |=> Checking presence of required drivers
    The Composer package manager could not be found
    The tasks queue was canceled by task "Check"
    Execution time: 4.5499s
    Saved logs to /cygdrive/s/Project/web/example.com/.rocketeer/logs/production--20150118.log
    

    When logging in via SSH manually to the server composer is in the path and I can easily run it by typing composer.

    Why can't rocketeer find Composer? Any idea?

    Reviewed by thasmo at 2015-01-18 14:40
  • 3. Redis extension not loaded

    When I run 'php artisan deploy:check' I get the following message:

    Checking presence of redis extension The redis extension does not seem to be loaded on the server

    I am not using the Redis php module (not listed in php -m).

    I am using redis for caching and pub/sub (not for sessions) and is working as expected. Why do I still get this message?

    Laravel 4.1.12 / Redis 2.6.14

    Reviewed by stefandroog at 2014-01-08 20:53
  • 4. Parallell deploying to multiple servers

    Hey there!

    I wanted to know if you have any plans to support parallel deploying?

    There's a few PHP scripts that does it out there - if you don't plan it anytime soon, I might be able to do it and send you a pull request

    The only problem I see is the config .. Obviously I don't want to break existing configs.

    I was thinking of something like ...

    'connections' => array(
        'production' => array(
            'multi' => array(
                array(
                    'host' => 'hello1.server.com'
                ),
                array(
                    'host' => 'hello2.server.com'
                )
            ),
        ),
    ),
    

    So, if there's a key named "multi", it will fork the process and run it at the same time.

    It would also be useful for

    // The default remote connection(s) to execute tasks on
    'default' => array('sandbox', 'staging'),
    

    To be able to deploy to my sandbox and staging at the same time.

    Tell me what you think!

    Cheers ;) (nice package btw!)

    Reviewed by maktouch at 2014-01-27 19:29
  • 5. PHP Version

    I was trying out Rocketeer today to see if I could get it setup for a Symfony app. I am getting the following error:

    Checking presence of git
    Checking PHP version
    Checking presence of Composer
    Checking presence of mcrypt extension
    The version of PHP on the server does not match Laravel's requirements
    Deployment was canceled by task "Check"
    

    I am assuming that the Rocketeer is built ontop of Lavarel? If so, what version does it require?

    Reviewed by trsteel88 at 2014-02-12 23:02
  • 6. Cannot overwrite directory `/data/www/rocketeer_test/current' with non-directory

    Using latest develop, running rocketeer deploy, this line:

    $ mv -Tf /data/www/rocketeer_test/current-temp /data/www/rocketeer_test/current
    

    Gives the following error message in the log file:

    cannot overwrite directory `/data/www/rocketeer_test/current' with non-directory
    

    The directory /data/www/rocketeer_test/current already exists, because it was created earlier by the same command:

    $ mkdir /data/www/rocketeer_test/
    mkdir /data/www/rocketeer_test/
    
    $ mkdir -p /data/www/rocketeer_test/releases
    mkdir -p /data/www/rocketeer_test/releases
    
    $ mkdir -p /data/www/rocketeer_test/current
    mkdir -p /data/www/rocketeer_test/current
    
    $ mkdir -p /data/www/rocketeer_test/shared
    mkdir -p /data/www/rocketeer_test/shared
    

    If the (empty) directory /data/www/rocketeer_test/current is removed before executing the move command, all is fine.

    Reviewed by marcovtwout at 2014-10-28 11:58
  • 7. Support to use agent forwarding

    These are changes to support agent forwarding linked with the following changes:

    https://github.com/phpseclib/phpseclib/pull/518 change in phpseclib/phpseclib

    https://github.com/illuminate/remote/pull/6 change in illuminate/remote

    Reviewed by montdidier at 2014-12-04 06:01
  • 8. Configuration files not created on Mac OSX Mavericks

    I just followed the guide and installed it globally using the command, which used curl.

    Now I'm attempting to "ignite" my test directory and no matter what I do, it keeps telling me the configuration has been created but it does not exist!

    How is this happening? I'm pretty sure it's a bug, as I've also tried the "loca to the folderl" version, and both the local and global composer versions. Nothing works! It keeps telling me the files are there, but they are not.

    Screenshot of bug

    (I've shutdown the droplet and created another one - just a quick one to try it out so no worries)

    Also your documentation seems a little bit frustrating. I will help write something more friendly when I get up and running myself.. I'm so tired of Capistrano that you wouldn't even believe, so please help me get away!! :fearful:

    Reviewed by HSPDev at 2014-10-21 19:05
  • 9. New release directory not updating timestamp

    I'm running Rocketeer version 1.2.0 and I'm getting an issue when trying to deploy where rocketeer doesn't seem to be updating the release timestamp. The timestamp below is from almost a week ago. I'm obviously able to do a deploy:update to pull changes, but cannot deploy new releases.

    fatal: destination path '.../releases/20140408221009' already exists and is not an empty directory.
    

    I've run artisan's cache clear command. I've also gone in to look at how rocketeer is getting this timestamp. It appears it is being done in Traits/BashModules/Core.php in the getTimestamp method. This just runs the date command on the server. Running this manually gives the correct timestamp.

    Has anyone else run into this issue?

    Reviewed by cmbirk at 2014-04-14 16:33
  • 10. SVN username and password not passed to `svn co`

    I have setup Rocketeer to deploy using my svn repository. When I execute rocketeer deploy, I run into the following error:

    Cloning repository in "/data/www/xxx/releases/20140318163638"
    Unable to clone the repository
    svn: E170001: Unable to connect to a repository at URL 'svn://localhost/test/trunk'
    

    Final lines from logs/production--xxx.log:

    [2014-03-18 20:36:39] rocketeer.INFO: ["svn co --non-interactive svn:\/\/localhost\/xxx\/trunk \/data\/www\/xxx\/releases\/20140318163638"] [] []
    [2014-03-18 20:36:39] rocketeer.INFO: svn: E170001: Unable to connect to a repository at URL 'svn://localhost/test/trunk'
    svn: E170001: Can't get username or password [] []
    

    My scm.php looks like this:

    <?php return array(
        'scm' => 'svn',
        'repository' => 'svn://localhost/test',
        'username'   => 'xxx',
        'password'   => 'xxx',
            (...)
    );
    

    When I look at the source code, the username and password should be passed to the checkout command, but as you can see in the log file, they are being omitted. https://github.com/Anahkiasen/rocketeer/blob/3591b74208e632ce5ffe090ffcd19330785feb77/src/Rocketeer/Scm/Svn.php#L80

    Reviewed by marcovtwout at 2014-03-18 20:57
  • 11. Permission issue

    I deploy a Laravel App with root user.

    After I run artisan migrate in deploy.after event,here create a log file in storage/logs owned by root. (some sql logs)

    I add storage path to permissions config but it not work.

    how to make the log file owned by www-data

    Need help!

    Reviewed by lokielse at 2014-10-21 10:29
  • 12. Text color on the site documentation

    Please would you use visible color i see you are using gray color but i can barely see it when i am trying to read your documentation. on official site. i will be so grateful if you will find your to make this adjustment.

    Reviewed by mwangaben at 2019-12-04 05:27
  • 13. VirtualAlloc() failed: not enough memory

    when i run rocketeer check or deploy the second time i got this error :

    VirualAlloc() failed: Not enough memory resources are available to process this command.
    

    I have changed the memory_limit in php.ini to -1(unlimited) but nothing changed. Any help

    Reviewed by BechirAhmed at 2019-03-11 14:12
  • 14. cd: command not found

    I've discovered a strange behaviour that I cannot explain. I have recently added Rocketeer to a new project of mine that is failing with the message cd: command not found due to it trying to run sudo -u root cd /var/www/....

    The reason it's failing is because you cannot run cd as sudo. The confusing part is that I have Rocketeer installed globally as per the instructions and this is the only project (of many) that this is happening to - all legacy projects are running correctly and I can see in the log that the are not running the same command. They are simply running cd /var/www/...

    I am running Rocketeer 2.2.5 on Mojave, deploying to Ubuntu 16. I have deleted the .rocketeer directory in the project in question and re-run rocketeer ignite.

    Any help greatly appreciated!

    Reviewed by nathanpurcell at 2018-11-12 21:28
  • 15. Permission denied error on deployment

    Hello!

    I am currently getting the following errors upon trying to deploy a new project to staging branch.

    In the deep end with Rocketeer and this is my first time deploying a new project with it. Existing projects deploy fine, it's just this new project that is giving hassle.

    I can git clone the repo into the directory fine.

    Was wondering if anyone can baby me through the issue, thanks.

    |=> Server is not ready, running Setup task
    |-- Setup (Set up the remote server for deployment) [~1.4s]
    |---- Check (Check if the server is ready to receive the application) [~0.93s]
    |------ Check/Php (Checks if the server is ready to receive a PHP application)
    |=====> Checking presence of git
    $ git --version
    [[email protected][IP.00.000.000:PORT] ([server]) git version 2.7.4
    |=====> Checking presence of Composer
    |=====> Checking PHP version
    |=====> Checking presence of required extensions
    |=====> Checking presence of required drivers
    |=====> Your server is ready to deploy
    $ mkdir /var/www/folder/
    [[email protected][IP.00.000.000:PORT] ([server]) mkdir:
    [[email protected][IP.00.000.000:PORT] ([server]) cannot create directory ‘/var/www/folder/’
    [[email protected][IP.00.000.000:PORT] ([server]) : File exists
    [[email protected][IP.00.000.000:PORT] ([server]) 
    $ mkdir -p /var/www/folder/releases
    [[email protected][IP.00.000.000:PORT] ([server]) mkdir:
    [[email protected][IP.00.000.000:PORT] ([server]) cannot create directory ‘/var/www/folder/releases’
    [[email protected][IP.00.000.000:PORT] ([server]) : Permission denied
    [[email protected][IP.00.000.000:PORT] ([server]) 
    $ mkdir -p /var/www/folder/current
    [[email protected][IP.00.000.000:PORT] ([server]) mkdir:
    [[email protected][IP.00.000.000:PORT] ([server]) cannot create directory ‘/var/www/folder/current’
    [[email protected][IP.00.000.000:PORT] ([server]) : Permission denied
    [[email protected][IP.00.000.000:PORT] ([server]) 
    $ mkdir -p /var/www/folder/shared
    [[email protected][IP.00.000.000:PORT] ([server]) mkdir:
    [[email protected][IP.00.000.000:PORT] ([server]) cannot create directory ‘/var/www/folder/shared’
    [[email protected][IP.00.000.000:PORT] ([server]) : Permission denied
    [[email protected][IP.00.000.000:PORT] ([server]) 
    |===> Getting some informations about the server
    |===> Successfully setup "folder" at "/var/www/folder"
    |-- Primer (Run local checks to ensure deploy can proceed)
    |-- CreateRelease (Creates a new release on the server) [~0.2s]
    |---- Deploy/Clone (Clones a fresh instance of the repository by SCM)
    |===> Cloning repository in "/var/www/folder/releases/20181105104212"
    $ git clone "https://[user]:[password]@bitbucket.org/folder/folder2018.git" "/var/www/folder/releases/20181105104212" --branch="master" --depth="1"
    [[email protected][IP.00.000.000:PORT] ([server]) fatal: could not create leading directories of '/var/www/folder/releases/20181105104212': Permission denied
    |===> An error occured: "Unable to clone the repository", while running:
    fatal: could not create leading directories of '/var/www/folder/releases/20181105104212': Permission denied
    The tasks queue was canceled by task "Deploy"
    
    Reviewed by AllyRobins at 2018-11-05 09:51
  • 16. nginx symlink caching issue

    After each deploy i run php -r "opcache_reset();" and i've added

    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT $realpath_root;
    

    to /etc/nginx/fastcgi.conf

    But it still redirects to the old release. What is the best way to solve this?

    Reviewed by sweebee at 2018-09-18 07:50
A simple way to deploy your application to a remote location.

Deploy Plugin A simple way to deploy your application to a remote location. Currently in Active Development This plugin is incomplete. This plugin is

Apr 30, 2022
YCOM Impersonate. Login as selected YCOM user 🧙‍♂️in frontend.

YCOM Impersonate Login as selected YCOM user in frontend. Features: Backend users with admin rights or YCOM[] rights, can be automatically logged in v

Jan 19, 2022
FacEssential is a Core for PMMP, it gathers all kind of plugins needed to create a faction server. It was created from scratch by Clouds#0667.
FacEssential is a Core for PMMP, it gathers all kind of plugins needed to create a faction server. It was created from scratch by Clouds#0667.

FacEssential FacEssential is a Core for PMMP, it gathers all kind of plugins needed to create a faction server. It was created from scratch by Clouds#

Jun 13, 2022
:computer: Send notifications to your desktop directly from your PHP script
:computer: Send notifications to your desktop directly from your PHP script

About JoliNotif JoliNotif is a cross-platform PHP library to display desktop notifications. It works on Linux, Windows or MacOS. Requires PHP >= 7.2 (

Jun 26, 2022
Llum illuminates your Laravel projects speeding up your Github/Laravel development workflow
Llum illuminates your Laravel projects speeding up your Github/Laravel development workflow

Llum illuminates your Laravel projects speeding up your Github/Laravel development workflow

Dec 29, 2021
This composer plugin allows you to share your selected packages between your projects by creating symlinks
This composer plugin allows you to share your selected packages between your projects by creating symlinks

Composer - Shared Package Plugin This composer plugin allows you to share your selected packages between your projects by creating symlinks. All share

Jun 21, 2022
Developers tool for WordPress plugins: Wraps all your projects dependencies in your own namespace

Developers tool for WordPress plugins: Wraps all your projects dependencies in your own namespace, in order to prevent conflicts with other plugins loading the same dependencies in different versions.

Jun 21, 2022
A CLI program that helps you check your endpoints by requesting the given servers and send a report message in any supported channel like Telegram

API Monitor A CLI program that help you check your endpoints by requesting the given servers and send a report message in any supported channel ( Tele

Feb 17, 2022
Send your laravel apps to the moon with web3 enabled 🚀

Laravel Web3 ?? ?? Laravel Web3 helps you to kickstart your web3 apps. No more headache with handling wallet changing address and sync with laravel ba

May 26, 2022
Trigger email failures to assert what happens on your Laravel Application when an email fails to send

Laravel Email Failer composer require --dev rogervila/laravel-email-failer About Trigger email failures to assert what happens on your Laravel Applica

Nov 24, 2021
Laravel SMS allows you to send SMS from your Laravel application using multiple sms providers, allow to add custom sms provider

Laravel SMS Laravel SMS allows you to send SMS from your Laravel application using multiple sms providers, allow to add custom sms provider Requiremen

May 7, 2022
myV - Send valentine to Your love!

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

Feb 14, 2022
Ask your friends to send you an anonymous message without knowing them

Ask your friends to send you an anonymous message without knowing them. ????????

Apr 16, 2022
A simple Lumen web app to send basic commands and fetch the current status to your Ford vehicle with Sync 3 enabled

FordPass Access This is a simple Lumen web app to send basic commands and fetch the current status to your Ford vehicle with Sync 3 enabled. Local dev

Apr 27, 2022
Takes care of Apple push notifications (APNS) in your PHP projects.

Notificato Notificato takes care of push notifications in your PHP projects. Italian: notificato è: participio passato English: notified Why use Notif

Jun 27, 2022
👀 Manage your views in Laravel projects through artisan
👀 Manage your views in Laravel projects through artisan

Artisan View This package adds a handful of view-related commands to Artisan in your Laravel project. Generate blade files that extend other views, sc

Jun 24, 2022
A development tool for all your projects that is fast, easy, powerful and liberating
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

Jun 25, 2022
Plug and play flat file markdown blog for your Laravel-projects
Plug and play flat file markdown blog for your Laravel-projects

Ampersand Plug-and-play flat file markdown blog tool for your Laravel-project. Create an article or blog-section on your site without the hassle of se

Apr 26, 2022