/ftp-deploy

Deploy websites over FTP with one command line

Primary LanguageTypeScriptMIT LicenseMIT

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

  • Install the npm package using npm install @samkirkland/ftp-deploy --only=dev

  • Run via command line ftp-deploy --server ftp.samkirkland.com --username test@samkirkland.com --password \"CrazyUniquePassword&%123\"

  • Or you can add a script to make deployments easier

  • Add a new key to your package.json file under scripts section. See example below.

  • You can run the script using the following command npm run deploy (run this in the folder that has the package.json file)

Example of package.json:

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

Option 2 - Run programmatically

  • Install the npm package using npm install @samkirkland/ftp-deploy --only=dev
  • Import the code and use it in your code

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 Name Required Example Default Value Description
--server Yes ftp.samkirkland.com Deployment destination server
--username Yes username@samkirkland.com ftp username
--password Yes CrazyUniquePassword&%123 ftp password, be sure to escape quotes and spaces
--port No 990 21 Server port to connect to (read your web hosts docs)
--protocol No ftps ftp ftp: provides no encryption, ftps: full encryption newest standard (aka "explicit" ftps), ftps-legacy: full encryption legacy standard (aka "implicit" ftps)
--local-dir No ./myFolderToPublish/ ./ Path to upload to on the server, must end with trailing slash /
--server-dir No ftp.samkirkland.com/ ./ Folder to upload from, must end with trailing slash /
--state-name No folder/.sync-state.json .ftp-deploy-sync-state.json ftp-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-run No true false Prints which modifications will be made with current config options, but doesn't actually make any changes
--dangerous-clean-slate No true false Deletes ALL contents of server-dir, even items marked as --exclude argument
--exclude No nuclearLaunchCodes.txt **/.git* **/.git*/** **/node_modules/** An array of glob patterns, these files will not be included in the publish/delete process
--log-level No info info minimal: only important info, standard: important info and basic file changes, verbose: print everything the script is doing
--security No strict loose strict: Reject any connection which is not authorized with the list of supplied CAs. loose: Allow connection even when the domain is not in certificate
--timeout No 60000 30000 Timeout in milliseconds for FTP operations