See More

--- title: "Multi-environment" description: "Drive staging and production from the same repo with separate config files." --- ShipNode treats environments as separate config files. There is no `--profile` flag — you point `--config` at the file you want. ## Layout ``` shipnode.config.ts # production (default) shipnode.staging.config.ts # staging ``` ## Staging config ```ts 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(); ``` ## Run a command against staging ```bash 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: ```json { "scripts": { "deploy:staging": "shipnode deploy --config shipnode.staging.config.ts", "deploy:prod": "shipnode deploy" } } ```