Update
sfp server update
sfp server update
Update a tenant's services to the latest version
sfp server update
sfp server update
Update the SFP server services for a specified tenant to the latest or a specific version.
USAGE
$ sfp server update -t <value> [-j] [--skip-backup] [--base-dir <value>]
[--supabase-working-dir <value>] [--passphrase <value> [--identity-file
<value> --ssh-connection <value>]] [-r <value>] [--docker-tag <value>]
[--restart] [--config-file <value>] [--infisical-token <value>
--secrets-provider infisical|aws-secretsmanager|custom] [--aws-region
<value>] [--aws-access-key-id <value>] [--aws-secret-access-key <value>]
[-g <value>...] [--loglevel
trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL]
FLAGS
-t, --tenant=<value> (required) Name of the tenant to update
-j, --[no-]json Output in JSON format
-r, --cadence=<value> [default: latest] The default cadence to use for updates
--docker-tag=<value> Docker image tag to deploy (overrides cadence)
--[no-]restart Restart services after update
--skip-backup Skip backing up current configuration
--base-dir=<value> [default: ./sfp-server] Base Directory which contains the sfp-server
--supabase-working-dir=<value> Working directory which contains supabase configuration
--config-file=<value> Path to JSON config file containing server configuration values
SSH OPTIONS
--ssh-connection=<value> SSH connection string in the format user@host[:port]
--identity-file=<value> Path to SSH private key file
--passphrase=<value> Passphrase for the SSH private key if required
SECRETS MANAGEMENT
--secrets-provider=<option> [default: custom] Secret provider to use for managing secrets
<options: infisical|aws-secretsmanager|custom>
--infisical-token=<value> Infisical API token (required when secrets-provider is "infisical")
--aws-region=<value> AWS region for Secrets Manager (required when secrets-provider is "aws-secretsmanager")
--aws-access-key-id=<value> AWS access key ID (optional, can use instance profile)
--aws-secret-access-key=<value> AWS secret access key (optional, can use instance profile)
OTHER OPTIONS
-g, --logsgroupsymbol=<value>... Symbol used by CICD platform to group/collapse logs
--loglevel=<option> [default: info] logging level for this command invocation
<options: trace|debug|info|warn|error|fatal|TRACE|DEBUG|INFO|WARN|ERROR|FATAL>
DESCRIPTION
Update a tenant's services to the latest version
This command performs:
1. Backs up current configuration (unless --skip-backup is used)
2. Pulls latest Docker images
3. Updates configuration files
4. Applies database migrations if needed
5. Optionally restarts services
Secrets Management:
This command supports multiple options for secrets management:
- infisical: Use Infisical as a dedicated secrets manager
- aws-secretsmanager: Use AWS Secrets Manager
- custom: Use environment variables (recommended when using tools like "infisical run" or AWS CLI)
EXAMPLES
$ sfp server update --tenant my-tenant
$ sfp server update --tenant my-tenant --skip-backup
$ sfp server update --tenant my-tenant --docker-tag pr-123-dev
$ sfp server update --tenant my-tenant --restart
$ sfp server update --tenant my-tenant --ssh-connection user@remote-server --identity-file ~/.ssh/id_rsa
$ infisical run -- sfp server update --tenant my-app --secrets-provider custom
Update Strategies
Latest Version (Default)
Update to the latest stable release:
sfp server update --tenant my-tenant
Specific Version
Update to a specific Docker tag:
sfp server update --tenant my-tenant --docker-tag v2.3.1
Preview/Development Version
Update to a preview build:
sfp server update --tenant my-tenant --docker-tag pr-123-dev
Update Options
With Automatic Restart
Update and restart services automatically:
sfp server update --tenant my-tenant --restart
Skip Backup
Update without creating a backup (use with caution):
sfp server update --tenant my-tenant --skip-backup
Update Process
The update process follows these steps:
Backup Creation (unless skipped)
Configuration files
Environment variables
Docker compose files
Image Updates
Pull latest Docker images
Verify image integrity
Configuration Updates
Update docker-compose.yml
Update Caddy configuration
Apply environment changes
Database Migrations
Check for pending migrations
Apply migrations if needed
Service Restart (if requested)
Gracefully stop services
Start with new configuration
Remote Server Updates
Update a tenant on a remote server:
sfp server update --tenant my-tenant \
--ssh-connection [email protected] \
--identity-file ~/.ssh/production_key \
--restart
Rollback Procedure
If an update fails, restore from backup:
# Backups are stored in ./sfp-server/tenants/<tenant>/backups/
cd ./sfp-server/tenants/my-tenant/backups/
# Find the latest backup
ls -la
# Restore configuration
cp backup-2024-01-15/*.yml ../
cp backup-2024-01-15/.env ../
# Restart with previous configuration
sfp server start --tenant my-tenant --restart
Best Practices
Production Updates
Always create a backup (default behavior)
Test updates in staging first
Schedule updates during maintenance windows
Monitor services after update
# Full production update workflow
sfp server update --tenant production
sfp server status --tenant production --json
sfp server health --detailed
Zero-Downtime Updates
For minimal disruption:
# Scale up workers before update
sfp server scale --tenant my-app --normal-workers 4
# Update without restart
sfp server update --tenant my-app
# Rolling restart of workers
sfp server scale --tenant my-app --normal-workers 2
Output Format
Standard Output
Updating tenant: my-tenant
✓ Created backup at ./sfp-server/tenants/my-tenant/backups/backup-2024-01-15
✓ Pulled latest Docker images
✓ Updated configuration files
✓ Applied 2 database migrations
✓ Services restarted successfully
Update completed successfully
JSON Output
{
"tenant": "my-tenant",
"status": "success",
"backup": "./sfp-server/tenants/my-tenant/backups/backup-2024-01-15",
"version": {
"previous": "v2.2.0",
"current": "v2.3.0"
},
"migrations": {
"applied": 2,
"pending": 0
},
"services": "restarted",
"timestamp": "2024-01-15T10:30:00Z"
}
Warning: Always ensure you have a recent backup before updating production servers.
Note: The
--skip-backup
flag should only be used when disk space is limited or when you have external backup procedures.
Last updated
Was this helpful?