zephir / kirby-contentsync
Kirby contentsync plugin
Installs: 281
Dependents: 0
Suggesters: 0
Security: 0
Stars: 51
Watchers: 4
Forks: 1
Open Issues: 1
Type:kirby-plugin
Requires
- getkirby/cli: ^1.1
- getkirby/composer-installer: ^1.2
- php-curl-class/php-curl-class: ^9.19
Requires (Dev)
- getkirby/cms: 4.0-beta.2
README
Tired of manual and cumbersome methods like git push/pull, scp, rsync, or sftp to synchronize content between your server and local development environment?
Embrace a seamless and efficient syncing solution with Contentsync.
This plugin requires Kirby 3/4, Kirby CLI and PHP 8 or higher to work.
Table of Contents
1. Installation
The recommended way of installing is by using Composer.
1.1 Composer
composer require zephir/kirby-contentsync
1.2 Download
Download and copy this repository to /site/plugins/kirby-contentsync
.
1.3 Git submodule
git submodule add https://github.com/zephir/kirby-contentsync.git site/plugins/kirby-contentsync
2. Setup
After installation, you simply have to configure the Options, deploy the updated site to the server, and use the Kirby command.
3. Options
3.1 enabledRoots
To support different types of folder structures we use the kirby()->roots()
function (hence the name of the option).
The plugin supports synchronizing all Kirby root paths.
By default, the plugin is configured to sync the accounts
and content
roots.
[ 'accounts' => true, 'content' => true ]
3.2 Example config entry
'zephir.contentsync' => [ 'source' => 'https://getkirby.com', 'token' => 'abc123', 'enabledRoots' => [ 'license' => true // also sync license ] ]
4. Usage
Kirby CLI Command:
kirby content:sync
With verbose logging:
kirby content:sync -v
5. How does it work?
The plugin creates 2 endpoints (routes):
/contentsync/files
: Returns a list of all files in the enabled roots./contentsync/file/:fileId
: Returns the contents of the requested file.
If you don't set up a token the endpoints won't work.
Each file returned by files
has an ID (sha1 hash of root name + path), a path (relative to Kirby root), a Kirby root name, and a checksum of the file contents.
The plugin compares the retrieved file list with a file list of local files. It automatically deletes local files that aren't in the server list, creates the ones that aren't local but in the server list, and updates the ones with different checksums.
It doesn't sync files that haven't changed.
6. Caveats
- Since we download each file individually, it is possible that a WAF / Firewall will block the requests. You can add an exception for the endpoints.
- Generating the checksum can put a bit of load on the server, especially for large files. But for "normal" websites it should be fine - even if you have several gigabytes of data / many files.
- Because we serve all files through PHP and a web endpoint, downloads of large files (200MB+) may be stopped by the server hoster (especially with shared hosting).
License
MIT