Skip to content

Multi-environment

ShipNode treats environments as separate config files. There is no --profile flag — you point --config at the file you want.

shipnode.config.ts # production (default)
shipnode.staging.config.ts # staging
import { shipnode } from '@devalade/shipnode';
export default shipnode
.backend()
.ssh({ host: 'staging.example.com', user: 'deploy' })
.deployTo('/var/www/api-staging')
.pm2('api-staging', { instances: 1 })
.port(3000)
.domain('staging-api.example.com')
.nodeVersion('22')
.pkgManager('pnpm')
.build();
Terminal window
npx shipnode deploy --config shipnode.staging.config.ts
npx shipnode status --config shipnode.staging.config.ts
npx shipnode logs --config shipnode.staging.config.ts

Every command that touches the server takes --config. Use it consistently or wrap it in npm scripts:

{
"scripts": {
"deploy:staging": "shipnode deploy --config shipnode.staging.config.ts",
"deploy:prod": "shipnode deploy"
}
}