{"id":14984650,"url":"https://github.com/zeroc0d3/deploy-laravel","last_synced_at":"2025-04-10T21:21:01.385Z","repository":{"id":56538168,"uuid":"306511469","full_name":"zeroc0d3/deploy-laravel","owner":"zeroc0d3","description":"Zero downtime deployment Laravel with Capistrano","archived":false,"fork":false,"pushed_at":"2020-12-15T19:48:24.000Z","size":2489,"stargazers_count":19,"open_issues_count":0,"forks_count":13,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-24T18:49:38.508Z","etag":null,"topics":["bitbucket-pipelines","capistrano","capistrano-deployment","cicd","cicd-pipeline","circleci","deploy","deployment","docker","docker-compose","gitlab","hacktoberfest","hacktoberfest2020","jenkins","jenkins-ci","jenkins-pipeline","laravel","openshift"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zeroc0d3.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-23T02:40:26.000Z","updated_at":"2024-04-14T12:13:17.000Z","dependencies_parsed_at":"2022-08-15T20:31:41.778Z","dependency_job_id":null,"html_url":"https://github.com/zeroc0d3/deploy-laravel","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeroc0d3%2Fdeploy-laravel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeroc0d3%2Fdeploy-laravel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeroc0d3%2Fdeploy-laravel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeroc0d3%2Fdeploy-laravel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zeroc0d3","download_url":"https://codeload.github.com/zeroc0d3/deploy-laravel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248298927,"owners_count":21080434,"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":["bitbucket-pipelines","capistrano","capistrano-deployment","cicd","cicd-pipeline","circleci","deploy","deployment","docker","docker-compose","gitlab","hacktoberfest","hacktoberfest2020","jenkins","jenkins-ci","jenkins-pipeline","laravel","openshift"],"created_at":"2024-09-24T14:09:27.825Z","updated_at":"2025-04-10T21:21:01.364Z","avatar_url":"https://github.com/zeroc0d3.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Deploy Laravel (with Capistrano)\n\n![all contributors](https://img.shields.io/github/contributors/zeroc0d3/deploy-laravel)\n![tags](https://img.shields.io/github/v/tag/zeroc0d3/deploy-laravel?sort=semver)\n![issues](https://img.shields.io/github/issues/zeroc0d3/deploy-laravel)\n![pull requests](https://img.shields.io/github/issues-pr/zeroc0d3/deploy-laravel)\n![forks](https://img.shields.io/github/forks/zeroc0d3/deploy-laravel)\n![stars](https://img.shields.io/github/stars/zeroc0d3/deploy-laravel)\n![license](https://img.shields.io/github/license/zeroc0d3/deploy-laravel)\n\nZero downtime deployment Laravel with Capistrano\n\n## Prerequirements\n* Ruby Environment (RBENV) or Ruby Version Manager (RVM)\n\n* Clone this repo\n  ```\n  git clone git@github.com:zeroc0d3/deploy-laravel.git\n  ```\n* Running bundle\n  ```\n  cd deploy-laravel\n  bundle install\n  ```\n* Edit Laravel source target in `config/deploy.rb`\n  ```\n  set :repo_url, \"[YOUR_LARAVEL_REPO]\"\n  ```\n* Edit target server environment in `config/deploy/[environment].rb`\n  ```\n  server '[YOUR_TARGET_SERVER]'\n  ```\n* Upload your shared files \u0026 folders in your server / VPS\n  ```\n  /data/[laravel-project]/[environment]/shared/src\n  ---\n  .env\n  composer.json\n  composer.lock\n  node_modules\n  package.json\n  storage/debugbar\n  storage/framework\n  storage/logs\n  vendor\n  yarn.lock\n  ```\n\n* Setup number of release folder in `config/deploy.rb`\n  ```\n  set :keep_releases, 5    ## keep 5 release folder\n  ```\n\n## Symlink Files (Default)\n```\nappend :linked_files, \"#{fetch(:source)}/.env\", \"#{fetch(:source)}/composer.json\", \"#{fetch(:source)}/composer.lock\", \"#{fetch(:source)}/package.json\", \"#{fetch(:source)}/yarn.lock\",\n---\n.env\ncomposer.json\ncomposer.lock\npackage.json\nyarn.lock\n```\n\n## Symlink Folders (Default)\n```\nappend :linked_dirs, \"#{fetch(:source)}/vendor\", \"#{fetch(:source)}/node_modules\", \"#{fetch(:source)}/storage\"\n---\nvendor\nnode_modules\nstorage\n```\n\n## Folder Structure\n```\n[laravel-project]\n├── staging\n│   ├── current -\u003e /data/[laravel-project]/staging/releases/20200823134641/\n│   ├── releases\n│   │   ├── 20200823081119\n│   │   └── 20200823134641   ## the latest symlink\n│   │       ├── .env -\u003e /data/[laravel-project]/staging/shared/src/.env\n│   │       ├── composer.json -\u003e /data/[laravel-project]/staging/shared/src/composer.json\n│   │       ├── composer.lock -\u003e /data/[laravel-project]/staging/shared/src/composer.lock\n│   │       ├── vendor -\u003e /data/[laravel-project]/staging/shared/src/vendor/\n│   │       ├── node_modules -\u003e /data/[laravel-project]/staging/shared/src/node_modules/\n│   │       ├── storage -\u003e /data/[laravel-project]/staging/shared/src/storage/\n│   │       └── yarn.lock -\u003e /data/[laravel-project]/staging/shared/src/yarn.lock\n│   ├── shared\n│   │   ├── log\n│   │   └── src\n│   │       ├── .env\n│   │       ├── composer.json\n│   │       ├── vendor\n│   │       ├── node_modules\n│   │       └── storage\n│   │           ├── debugbar\n│   │           ├── framework\n│   │           │   ├── cache\n│   │           │   ├── sessions\n│   │           │   └── views\n│   │           ├── logs\n│   │           └── users\n│   └── tmp\n└── [environments]\n```\n\n## Deployment\n* Staging\n  ```\n  cap staging deploy\n  ```\n* Production\n  ```\n  cap production deploy\n  ```\n\n## Manual Trigger\n* Reload / Restart NGINX\n  ```\n  cap [environment] nginx:[manual_reload|manual_restart]\n  ---\n  cap staging nginx:manual_reload\n  cap staging nginx:manual_restart\n  ```\n* Reload / Restart PHP-FPM (php7.4-fpm)\n  ```\n  cap [environment] phpfpm:[manual_reload|manual_restart]\n  ---\n  cap staging phpfpm:manual_reload\n  cap staging phpfpm:manual_restart\n  ```\n* Install / Dump Autoload Composer\n  ```\n  cap [environment] composer:[install|dumpautoload|initialize]\n  ---\n  cap staging composer:install\n  cap staging composer:dumpautoload\n  cap staging composer:initialize      ## (will run install \u0026 dumpautoload)\n  ```\n* Clear View / Clear Cache Framework\n  ```\n  cap [environment] artisan:[clear_view|clear_cache|clear_all]\n  ---\n  cap staging artisan:clear_view\n  cap staging artisan:clear_cache\n  cap staging artisan:clear_all        ## (will run clear_view \u0026 clear_cache)\n  ```\n* NPM Package Dependencies\n  ```\n  cap [environment] npm:[install|update|cleanup|reinstall]\n  ---\n  cap staging npm:install\n  cap staging npm:update\n  cap staging npm:cleanup\n  cap staging npm:reinstall            ## (will run cleanup \u0026 install)\n  ```\n* Yarn Package Dependencies\n  ```\n  cap [environment] yarn:[install|update|cleanup|reinstall]\n  ---\n  cap staging yarn:install\n  cap staging yarn:update\n  cap staging yarn:cleanup\n  cap staging yarn:reinstall           ## (will run cleanup \u0026 install)\n  ```\n\n## How to Use Docker\n### Running All Docker Compose\n* Set environment `.env`\n  ```\n  cp .env.example .env\n  ```\n* Running script docker container\n  ```\n  ./run-docker.sh\n  ```\n* Running for container deployment only\n  ```\n  ./run-deploy.sh\n  ```\n\n### Running with Makefile\n* Running docker compose\n  ```\n  make run-docker\n  make run-deploy\n  ```\n* Stop docker compose\n  ```\n  make stop-docker\n  make stop-deploy\n  ```\n* Remove docker compose\n  ```\n  make remove-docker\n  make remove-deploy\n  ```\n\n## Cleanup Environment\n* Remove all container\n  ```\n  docker-compose -f compose/app-compose.yml down\n  --- or ---\n  make remove\n  ```\n* Remove container deployment only\n  ```\n  docker-compose -f compose/app-compose-deploy.yml down\n  --- or ---\n  make remove-deploy\n  ```\n\n## Git Pipeline CI/CD\n* Create secure PEM file for deployment\n  ```\n  openssl rsa -in id_rsa -outform pem \u003e ~/.ssh/id_rsa.pem\n  --- or ---\n  ./run-encode.sh\n  ```\n* Added PEM file (myapp.pem) in `keys` folder\n  ```\n  cp ~/.ssh/id_rsa.pem keys/myapp.pem\n  ```\n* GitLab Configuration Variable\n  : [.gitlab-ci.yml](.gitlab-ci.yml)\n  ```\n  MYAPP_SSH_PRIVATE_KEY=\n  MYAPP_SSH_PUBLIC_KEY=\n  MYAPP_KNOWN_HOSTS=\n  ```\n* BitBucket Configuration Variable (base64 encode)\n  : [bitbucket-pipelines.yml](bitbucket-pipelines.yml)\n  ```\n  MYAPP_SSH_PRIVATE_KEY=\n  MYAPP_SSH_PUBLIC_KEY=\n  MYAPP_KNOWN_HOSTS=\n  ```\n* CircleCI Configuration Variable\n  : [.circleci/config.yml](.circleci/config.yml)\n  ```\n  MYAPP_SSH_PRIVATE_KEY=\n  MYAPP_SSH_PUBLIC_KEY=\n  MYAPP_KNOWN_HOSTS=\n  ```\n* OpenShift Configuration\n  : [.openshift/action_hooks](.openshift/action_hooks)\n* Jenkins Configuration\n  : [jenkins/staging/Jenkinsfile](jenkins/staging/Jenkinsfile) for Staging and\n  [jenkins/production/Jenkinsfile](jenkins/production/Jenkinsfile) for Production, detail documentation refer to this\n  [link](jenkins/README.md)\n\n* Trigger Pipeline CI/CD\n  ```\n  - Commit\n    git commit -m \"[messages]\"\n\n  - Merge / Checkout Branch `dev-master` for production\n    git checkout dev-master\n    git merge [from_branch]\n    --- or ---\n    git branch -D dev-master    # delete dev-master branch\n    git branch dev-master\n\n  - Merge / Checkout Branch `dev-staging` for staging\n    git checkout dev-staging\n    git merge [from_branch]\n    --- or ---\n    git branch -D dev-staging   # delete dev-staging branch\n    git branch dev-staging\n\n  - Push all branch \u0026 tags\n    git push --all -u \u0026\u0026 git push --tags\n  ```\n\n## Tested Environment\n### Versioning\n* Docker version\n  ```\n  Docker version 19.03.13, build 4484c46d9d\n  ```\n* Docker-Compose version\n  ```\n  docker-compose version 1.27.4, build 40524192\n  ```\n* Jenkins version\n  ```\n  Jenkins 2.249.2\n  ```\n\n## TODO\n* [X] Pipeline CI/CD using Jenkins\n* [ ] Provisioning with Terraform \u0026 Terragrunt\n* [ ] Deployment with Helm Chart\n* [ ] Deployment with K8S\n* [ ] Add K8S Playground Sample\n\n## Properties\n* Author  : **Dwi Fahni Denni (@zeroc0d3)**\n* License : **Apache ver-2**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeroc0d3%2Fdeploy-laravel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzeroc0d3%2Fdeploy-laravel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeroc0d3%2Fdeploy-laravel/lists"}