Home

Awesome

ftp deploy 🚀

Syncs a local folder with a remote folder over ftp.

After the initial sync only differences are synced, making deployments super fast!

Latest Stable Version NPM Downloads


How to Run

Option 1 - Run via command line

Example of package.json:

{
  "scripts": {
    "deploy": "ftp-deploy --server ftp.samkirkland.com --username test@samkirkland.com --password \"CrazyUniquePassword&%123\"",
  },
}

Option 2 - Run programmatically

Example of myCustomDeployment.js:

import { deploy, excludeDefaults } from "@samkirkland/ftp-deploy";

async function deployMyCode() {
  console.log("🚚 Deploy started");
  await deploy({
    server: "ftp.samkirkland.com",
    username: "username@samkirkland.com",
    password: `CrazyUniquePassword&%123`, // note: I'm using backticks here ` so I don't have to escape quotes
    exclude: [...excludeDefaults, "dontDeployThisFolder/**"] // excludeDefaults will exclude .git files and node_modules
  });
  console.log("🚀 Deploy done!");
}

deployMyCode();

Automatically Deploying

If you use github as source control you can automatically re-deploy your site on every git commit. Read more


Settings

To list all commands with examples simply run ftp-deploy without any options.

Key NameRequiredExampleDefault ValueDescription
--serverYesftp.samkirkland.comDeployment destination server
--usernameYesusername@samkirkland.comftp username
--passwordYesCrazyUniquePassword&%123ftp password, be sure to escape quotes and spaces
--portNo99021Server port to connect to (read your web hosts docs)
--protocolNoftpsftpftp: provides no encryption, ftps: full encryption newest standard (aka "explicit" ftps), ftps-legacy: full encryption legacy standard (aka "implicit" ftps)
--local-dirNo./myFolderToPublish/./Path to upload to on the server, must end with trailing slash /
--server-dirNoftp.samkirkland.com/./Folder to upload from, must end with trailing slash /
--state-nameNofolder/.sync-state.json.ftp-deploy-sync-state.jsonftp-deploy uses this file to track what's been deployed already, so only differences can be published. If you don't like the name or location you can customize it
--dry-runNotruefalsePrints which modifications will be made with current config options, but doesn't actually make any changes
--dangerous-clean-slateNotruefalseDeletes ALL contents of server-dir, even items marked as --exclude argument
--excludeNonuclearLaunchCodes.txt**/.git* **/.git*/** **/node_modules/**An array of glob patterns, these files will not be included in the publish/delete process
--log-levelNoinfoinfominimal: only important info, standard: important info and basic file changes, verbose: print everything the script is doing
--securityNostrictloosestrict: Reject any connection which is not authorized with the list of supplied CAs. loose: Allow connection even when the domain is not in certificate
--timeoutNo6000030000Timeout in milliseconds for FTP operations