{"id":22462579,"url":"https://github.com/gaboreszaki/northwebdeployer","last_synced_at":"2026-04-11T17:47:48.534Z","repository":{"id":212477381,"uuid":"731586841","full_name":"gaboreszaki/NorthWebDeployer","owner":"gaboreszaki","description":"Zero Downtime Deployer for Laravel \u0026 Vuejs on Ubunutu server 18.04+ ","archived":false,"fork":false,"pushed_at":"2026-03-24T13:56:30.000Z","size":64,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-25T17:56:01.553Z","etag":null,"topics":["ci-cd","github-actions","laravel","remote-access-tool","ssh","vuejs"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/gaboreszaki.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-12-14T12:15:29.000Z","updated_at":"2026-03-24T13:56:34.000Z","dependencies_parsed_at":"2024-11-27T17:20:42.632Z","dependency_job_id":"be553a1d-e4e1-488b-a2bf-909bcc156680","html_url":"https://github.com/gaboreszaki/NorthWebDeployer","commit_stats":null,"previous_names":["gaboreszaki/deployer","gaboreszaki/northwebdeployer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gaboreszaki/NorthWebDeployer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaboreszaki%2FNorthWebDeployer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaboreszaki%2FNorthWebDeployer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaboreszaki%2FNorthWebDeployer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaboreszaki%2FNorthWebDeployer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gaboreszaki","download_url":"https://codeload.github.com/gaboreszaki/NorthWebDeployer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaboreszaki%2FNorthWebDeployer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31689762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T13:07:20.380Z","status":"ssl_error","status_checked_at":"2026-04-11T13:06:47.903Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["ci-cd","github-actions","laravel","remote-access-tool","ssh","vuejs"],"created_at":"2024-12-06T09:10:13.869Z","updated_at":"2026-04-11T17:47:48.527Z","avatar_url":"https://github.com/gaboreszaki.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"```text\n _____         _   _   _ _ _     _   \n|   | |___ ___| |_| |_| | | |___| |_\n| | | | . |  _|  _|   | | | | -_| . |\n|_|___|___|_| |_| |_|_|_____|___|___|\n\nNorth Web Deployer v0.7\n```                                  \n\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/53ae4c1170184b909ea9f89475164ede)](https://app.codacy.com/gh/gaboreszaki/deployer/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n\n### What is the 'North Web Deployer':\n\nThe __NWD__ is a continuous deployment(CD) pipeline tool for automate build \u0026 deployment in Ubuntu-server \u0026 Apache2 environment.\nThis application is utilizing symlinks to achive Zero-Downtime.\n\nSupported Deployment types: `Laravel`, `Vue`\n\n\u003e _Easy setup, Easy configuration, Zero downtime_\n\n__In short, what it is doing?__\n\n`checks \u0026 cleanup \u003e git clone \u003e change git branch \u003e build prod \u003e copy to destination \u003e create symlink`\n\n### Features:\n\n- [x] Automatic Directory Checks and Creations\n- [x] Automatic Cleanup\n- [x] Git clone repo (public \u0026 private)\n- [x] Git select branch\n- [x] Symlink generation\n- [x] Custom 'After Build' Commands\n- [x] Rollback\n- [x] Optional - Persistent Images\n- [ ] Self Update\n- [ ] Config generator\n\nBuilders:\n\n- [x] Laravel Build process\n- [x] Vue Build process\n\nFeature Flags:\n\n- [ ] Is_production\n\n___\n\n### Requirements:\n\n- Ubuntu 18.04 or later\n- Builder requirements:\n    - User on the target system with access to the targeted repository.\n    - Composer\n    - NPM\n    - Bash\n\n### Installation:\n\n__Before you start the installation, we are highly recommend to create a user on your target system without sudo permissions, but with write access to the destination folder.__\n\nAfter you created and logged in to the user, please follow this steps:\n\n1. __Get the deployer app__\n\n   Clone the project into your user's folder on the target system.\n    ```bash\n       git clone https://github.com/gaboreszaki/deployer.git\n    ```\n2. __Create Config files__\n\n   Create a file called `YOUR_DOMAIN_NAME.config.sh` in the `/config` directory.\n   \u003e examples: `cv.northweb.dev.config.sh`, `example.com.config.sh`, `dev.example.com.config.sh`\n\n   Template for config files:\n    ```bash\n    #!/usr/bin/env bash\n\n    DEPLOYMENT_NAME=\"xy.example.com\" \n    DEPLOYMENT_TYPE=\"vue\" #[vue, laravel]\n\n    GIT_url=\"YOUR_GITHUB_URL\" # SSL link for github public project like: \"git@github.com:gaboreszaki/NorthWebDeployer.git\"\n    GIT_branch=\"TARGET_BRANCH\" # main, dev... depends on your repository\n    GIT_target_folder=\"/var/www/YOUR_PROJECT_FOLDER\" # destination for the built files (RW required)\n    GIT_temp_folder=\"$APP_user_home_dir/deployment_temp\" # temp location for create build (RW required)\n\n\n    ACTIVE_folder=\"$GIT_target_folder/active\" # symlink folder for host like Apache or Nginx \n    ACTIVE_version=\"$GIT_target_folder/$APP_build_date\" #naming convention for the folders\n    ACTIVE_env=\"$GIT_target_folder/env/.env\" #laravel .env file location, for symlink\n   \n    \n   #OPTIONAL\n   ACTIVE_permanent_images_folder=\"$GIT_target_folder/ext_storage\"\n   $GIT_DEPLOYMENT_KEY_PATH=\"/home/user/.ssh/id_rsa\"\n   \n   \n   #OPTIONAL\n   RUNNER_AFTER=('php artisan xy', 'php XY_COMMAND') #Array with all items runnable after build \n   \n   ```\n\n3. Change file mode\n   Change the file mod on the `deploy.sh` to be executable\n   ```bash\n   chmod +x deploy.sh\n   ```\n\n### Usage:\n\nAfter setup, just run the `deploy` command with the deployment name,\nAlternatively you can add config files to the config folder to extend the tool with new deployments.\n\n__deploy.sh__ _[deployment_name]_\n\n```bash\n./deploy.sh xy.example.com\n```\n\n## How to Deploy from private repository:\n\nRequirements: **v0.7 or higher**\n\n### Steps:\n\n#### Create a private key on your server\n``` bash\nssh-keygen -t rsa -b 4096 -C \"deploy-key-for-xy-project@myserver.xy\" -f ~/.ssh/xy-project\n```\n\u003e Important: Don't add  a passphrase.\n\n\n\nAdd to GitHub as a deploy key:\nGo to your repository -\u003e settings -\u003e deployment keys.\n\nHere press 'add deploy key', a form will open.\n\nadd a name, and from your terminal copy the results of this command to the key input :\n\n```bash\ncat ~/.ssh/xy-project.pub\n```\nor just copy the content of your public file into the key form imput.\n\n\u003e NOTE: It is very important to protect this key, and you only share the `.pub` of your key pair.\n\n## Add your key path to the config file:\n\n```bash \nGIT_DEPLOYMENT_KEY_PATH=\"~/.ssh/xy-project\"\n```\n\nTo verify the changes you should run de deployment as normal, but in therminal you sould be able to see the following: \"Key found! Utilising identity for ssh.\" and \"Cloning started from private repository\"\n\n## Breaking changes:\nv0.7 - git url in the config must be an ssh \n\n# Github Actions\n## Steps to create the CD pipeline:\n- Install/clone deployer to your server (read above)\n- Create config files (read above)\n- Create environment on GitHub (repository settings)\n- Add workflow files to your source-code\n\n\n## Environment - Secrets and variables\n\n(` Repository \u003e Settings \u003e Secrets \u0026 variables \u003e actions`)\n\nCreate a new environment:\n\n1. Name your environment (like prod, dev, etc)\n2. (optional) select deployment protection rules\n3. select branch and tags, i recommend to \"selected branches and tags\" and choose like main branch for prod environment\n4. add environment secrets \u0026 variables:\n\n**Secrets**:\n`SSH_HOST` = \"yourdomin.com\" this is the domain or ip where you are hosting your website\n`SSH_PORT` = \"22\" or your SSH port\n`SSH_USER` = \"Username\" the \"deployer\" user with access to write in the destination directory\n`SSH_KEY` = \"RSA KEY (private) \" - Make sure you generate a dedicated key for deployment, and register the public key with the user in your  `~/.ssh/authorized_keys`\n\n**Variables**:\n`TARGET_DOMAIN` = \"your.domain.com\" this is the identification for triggering the deployer.\nthe workflow will run the `cd deployer \u0026\u0026 ./deploy.sh ${{ vars.TARGET_DOMAIN }}` command\n\n# Workflow file\n\nChange the name / run-name / branches and the environment to match with your settings / your likings\n\n\u003e `environment:` environment's name in your repo settings (like prod, dev, etc)\n\u003e make sure its an exact match!\n\n### Production example : ( `.github/workflows/production.yaml` )\n\n``` yaml\nname: Production\nrun-name: ${{ github.actor }} deploying ${{ vars.TARGET_DOMAIN }} to production\non:\n  push:\n    branches:\n      - main\njobs:\n  deploy:\n    environment: ***YOUR_ENVIROMENT_NAME***\n    name: \"Triggering Remote Deployer\"\n    runs-on: ubuntu-latest\n    # needs: test\n    steps:\n      - name: Configure SSH\n        run: |\n          mkdir -p ~/.ssh/\n          echo \"$SSH_KEY\" \u003e ~/.ssh/staging.key\n          cat ~/.ssh/staging.key\n          chmod 600 ~/.ssh/staging.key\n          cat \u003e\u003e~/.ssh/config \u003c\u003cEND\n          Host staging\n            HostName $SSH_HOST\n            User $SSH_USER\n            Port $SSH_PORT\n            IdentityFile ~/.ssh/staging.key\n            StrictHostKeyChecking no\n          END\n        env:\n          SSH_USER: ${{ secrets.SSH_USER }}\n          SSH_KEY: ${{ secrets.SSH_KEY }}\n          SSH_HOST: ${{ secrets.SSH_HOST }}\n          SSH_PORT: ${{ secrets.SSH_PORT }}\n\n      - name: Check out the source\n        run: ssh staging \"cd deployer \u0026\u0026 ./deploy.sh ${{ vars.TARGET_DOMAIN }}\"\n\n\n\n```\n\n### Development example : ( `.github/workflows/development.yaml` )\n\n``` yaml\nname: Development\nrun-name: ${{ github.actor }} deploying ${{ vars.TARGET_DOMAIN }} to development\non:\n  push:\n    branches:\n      - dev\njobs:\n  deploy:\n    environment: (dev) gabor.northweb.dev\n    name: \"Triggering Remote Deployer\"\n    runs-on: ubuntu-latest\n    # needs: test\n    steps:\n      - name: Configure SSH\n        run: |\n          mkdir -p ~/.ssh/\n          echo \"$SSH_KEY\" \u003e ~/.ssh/staging.key\n          cat ~/.ssh/staging.key\n          chmod 600 ~/.ssh/staging.key\n          cat \u003e\u003e~/.ssh/config \u003c\u003cEND\n          Host staging\n            HostName $SSH_HOST\n            User $SSH_USER\n            Port $SSH_PORT\n            IdentityFile ~/.ssh/staging.key\n            StrictHostKeyChecking no\n          END\n        env:\n          SSH_USER: ${{ secrets.SSH_USER }}\n          SSH_KEY: ${{ secrets.SSH_KEY }}\n          SSH_HOST: ${{ secrets.SSH_HOST }}\n          SSH_PORT: ${{ secrets.SSH_PORT }}\n\n      - name: Check out the source\n        run: ssh staging \"cd deployer \u0026\u0026 ./deploy.sh ${{ vars.TARGET_DOMAIN }}\"\n\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaboreszaki%2Fnorthwebdeployer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgaboreszaki%2Fnorthwebdeployer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaboreszaki%2Fnorthwebdeployer/lists"}