Deploy to Production / Build & Verify (push) Failing after 5m56s
Ping Search Engines / Notify Search Engines (push) Successful in 2s
Deploy to Production / Pre-Deploy Tests (push) Has been skipped
Deploy to Production / Deploy to Railway (push) Has been skipped
Deploy to Production / Deploy to Render (push) Has been skipped
Deploy to Production / Deploy to VPS (PM2) (push) Has been skipped
Deploy to Production / Deploy to Fly.io (push) Has been skipped
Deploy to Production / Post-Deploy Verification (push) Has been skipped
Deploy to Production / Notify on Failure (push) Successful in 2s
E2E Test Suite / Critical User Journeys (push) Has been skipped
E2E Test Suite / API Integration Tests (push) Has been skipped
E2E Test Suite / Smoke Tests (P0) (push) Failing after 11m26s
E2E Test Suite / Form Interaction Tests (push) Failing after 11m42s
E2E Test Suite / Destructive & Chaos Tests (push) Failing after 12m2s
E2E Test Suite / Cross-Browser Regression (chromium) (push) Failing after 16m14s
E2E Test Suite / Cross-Browser Regression (webkit) (push) Failing after 17m45s
E2E Test Suite / Cross-Browser Regression (firefox) (push) Failing after 25m23s
E2E Test Suite / Security Header Tests (push) Failing after 7m55s
E2E Test Suite / Test Report Summary (push) Failing after 20s
E2E Test Suite / Mobile Device Tests (push) Failing after 2h49m9s
Uptime Monitor / Health & Response Time (push) Failing after 2s
Uptime Monitor / SSL Certificate (push) Successful in 2s
Uptime Monitor / Send Alerts (push) Failing after 3s
Uptime Monitor / Record Uptime Success (push) Has been skipped
243 lines
5.7 KiB
Markdown
243 lines
5.7 KiB
Markdown
# 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 <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
|