# Astro SSR Standalone Server An Astro-based web application configured for server-side rendering (SSR) with standalone Node.js deployment. ## Quick Start ### Development ```bash npm install npm run dev ``` The development server will start at `http://localhost:4321` ### Production ```bash npm run build npm start ``` The production server will start at `http://0.0.0.0:10000` --- ## Deployment This application is configured for standalone Node.js deployment with SSR enabled. > **📋 Domain Migration Documentation** > - **Quick Deploy**: [`QUICK-DEPLOY.md`](./QUICK-DEPLOY.md) - Fast deployment reference for DevOps > - **Full Checklist**: [`DOMAIN-MIGRATION-CHECKLIST.md`](./DOMAIN-MIGRATION-CHECKLIST.md) - Complete deployment checklist > - **Migration Summary**: [`MIGRATION-SUMMARY.md`](./MIGRATION-SUMMARY.md) - Executive summary of changes > - **Deployment Guide**: [`DEPLOYMENT.md`](./DEPLOYMENT.md) - General deployment instructions ### Build Process Build the application for production: ```bash npm run build ``` This command: - Compiles the Astro application with SSR enabled - Generates a standalone Node.js server in the `dist/` directory - Creates the server entry point at `dist/entry.mjs` - Optimizes assets for production ### Running the Server Start the standalone Node server: ```bash npm start ``` The server will: - Bind to `0.0.0.0` (accessible from all network interfaces) - Listen on port `10000` by default - Serve server-side rendered pages with full SSR functionality ### Environment Configuration Environment variables can be configured using a `.env` file. See `.env.example` for available options: | Variable | Description | Default | |----------|-------------|---------| | **HOST** | Server bind address. Use `0.0.0.0` for deployment (all interfaces) or `localhost` for local dev | `0.0.0.0` | | **PORT** | Server port. Can be overridden by platform (e.g., Heroku, Railway) | `10000` | | **NODE_ENV** | Runtime environment (`production`, `development`, `test`) | `production` | #### Example Configuration **For production deployment:** ```env HOST=0.0.0.0 PORT=10000 NODE_ENV=production ``` **For local development:** ```env HOST=localhost PORT=3000 NODE_ENV=development ``` ### Available Scripts | Command | Description | |---------|-------------| | `npm run dev` | Start development server with hot reload | | `npm run build` | Build for production with SSR | | `npm start` | Run production server | | `npm run preview` | Preview production build locally | | `npm run clean` | Remove build artifacts | | `npm run prod` | Full production build and start | --- ## Architecture ### SSR Configuration The application uses: - **Output mode**: `server` (full SSR) - **Adapter**: `@astro/node` in standalone mode - **Server runtime**: Node.js standalone server This configuration ensures: - Server-side rendering for all pages - SEO optimization with pre-rendered HTML - Dynamic content support - No external dependencies for deployment ### Server Entry Point The standalone server is located at `server.mjs` and configures: - Host binding to `0.0.0.0` for deployment accessibility - Port `10000` with environment variable override support - Production-ready server setup --- ## Deployment Platforms ### Generic Node.js Platforms Compatible with any platform that supports Node.js: 1. **Build the application:** ```bash npm run build ``` 2. **Set environment variables** (if needed): ```bash export HOST=0.0.0.0 export PORT=10000 export NODE_ENV=production ``` 3. **Start the server:** ```bash npm start ``` ### Platform-Specific Notes **Railway / Render / Fly.io:** - These platforms automatically set the `PORT` environment variable - The server will use the platform's provided port - Ensure `npm start` is set as the start command **Heroku:** - Uses the `PORT` environment variable automatically - Add `node_modules` to `.gitignore` (already configured) - Ensure `package.json` has `"engines"` field for Node version **Docker:** ```dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --production COPY . . RUN npm run build EXPOSE 10000 CMD ["npm", "start"] ``` --- ## Project Structure ``` . ├── src/ │ ├── pages/ # Astro pages (SSR routes) │ ├── layouts/ # Page layouts │ └── components/ # Reusable components ├── public/ # Static assets ├── dist/ # Production build output │ └── entry.mjs # Server entry point ├── server.mjs # Standalone server configuration ├── astro.config.mjs # Astro configuration ├── .env.example # Environment variables template └── package.json # Project dependencies and scripts ``` --- ## Features - **Server-Side Rendering (SSR)**: Full SSR support for dynamic content and SEO - **Standalone Deployment**: Self-contained Node.js server with no external dependencies - **Environment Configuration**: Flexible configuration via environment variables - **Production-Ready**: Optimized build with asset optimization and performance tuning - **SEO Optimized**: Meta tags, Open Graph, and structured data support - **Performance Optimized**: Image optimization with WebP, lazy loading, and asset optimization --- ## Troubleshooting ### Port Already in Use If you see `EADDRINUSE` error: ```bash # Windows netstat -ano | findstr :10000 taskkill /PID /F # Linux/Mac lsof -ti:10000 | xargs kill -9 ``` ### Server Not Accessible Ensure the server is bound to `0.0.0.0` (not `localhost`) for external access: ```env HOST=0.0.0.0 ``` ### Build Failures Clear the build cache and rebuild: ```bash npm run clean npm run build ``` --- ## License MIT