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!
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 underscripts
section. See example below. -
You can run the script using the following command
npm run deploy
(run this in the folder that has thepackage.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 |