You can easily create your own composer repository using Satis and Gitlab. I will use global but it should be most useful for private corporate Gitlab installations. You will need CI and Pages

Our repo should contain only 2 files: satis.json and .gitlab-ci.yml


satis.json should describe the repo you want. It is very close by structure to composer.json. Refer to Satis documentation for advanced use cases, I will go with the simplest one: add some packages from Github and require all of them

    "name": "My Satis Repo",
    "homepage": "",
    "repositories": [{
        "type": "vcs",
        "url": ""
    }, {
        "type": "vcs",
        "url": ""
    "require-all": true


Now the tricky part that took me quite some time to debug, but you probably can just copy-paste my solution. You need to set a private variable AUTH_JSON which should contain the content of your auth.json like Github Oauth Token or access data for your private Gitlab instance. (Set it to {} if you need none of it)

# The only image where dind works on
image: gitlab/dind

# So we can use Docker inside build script
- docker:dind

# Task for GitHub Pages
  stage: deploy
  # cache composer data (especially useful if you set up Satis to download packages) 
    - composer
  - if [ ! -d composer ]; then mkdir composer; fi
  # create auth.json from variable
  - echo "$AUTH_JSON" > composer/auth.json
  # run satis from docker image
  - docker run --rm -i -v `pwd`:/build -v `pwd`/composer:/composer composer/satis
  # gitlab requires directory to be named public for whatever reason
  - mv output public 
  # don't store auth in cache
  - rm -f composer/auth.json
  # artifacts for Pages
    - public
  # do this only on master branch  
  -  master


You can find my example repo project at and generated Satis repo at