نشر تطبيقات Backend — نشر المواقع والدومينات
نشر تطبيقات Backend
للتطبيقات التي تحتاج سيرفر وقاعدة بيانات.
خيارات الاستضافة
1. Railway (الأسهل)
# تثبيت CLI
npm install -g @railway/cli
# تسجيل الدخول
railway login
# إنشاء مشروع
railway init
# النشر
railway up
# إضافة قاعدة بيانات
railway add postgres2. Render
- ربط GitHub
- اختيار Web Service
- تحديد Build Command
- تلقائي!
3. Fly.io
# تثبيت
curl -L https://fly.io/install.sh | sh
# تسجيل
fly auth signup
# نشر
fly launch
fly deployDockerfile للنشر
# Node.js
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]# Python
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]إعدادات شائعة
package.json
{
"scripts": {
"start": "node server.js",
"build": "npm run compile"
},
"engines": {
"node": ">=18"
}
}Procfile (Heroku/Railway)
web: node server.js
worker: node worker.jsالمنافذ
// استخدم PORT من البيئة
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server on port ${PORT}`);
});قواعد البيانات
PostgreSQL
// الاتصال
const { Pool } = require('pg');
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: { rejectUnauthorized: false }
});MongoDB
const mongoose = require('mongoose');
mongoose.connect(process.env.MONGODB_URI);خدمات قواعد بيانات
- Supabase - PostgreSQL مجاني
- PlanetScale - MySQL serverless
- MongoDB Atlas - MongoDB مجاني
- Neon - PostgreSQL serverless
- Upstash - Redis serverless
متغيرات البيئة
# .env (محلياً فقط!)
DATABASE_URL=postgres://...
JWT_SECRET=your-secret
API_KEY=xxx
# في الـ deployment
# أضفها من لوحة التحكم أو CLICI/CD مع GitHub Actions
name: Deploy Backend
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to Railway
uses: bervProject/railway-deploy@main
with:
railway_token: ${{ secrets.RAILWAY_TOKEN }}
service: backendنصائح للـ Production
1. استخدم HTTPS دائماً
2. لا تُخزن secrets في الكود
3. فعّل Rate Limiting
4. استخدم Health Checks
5. راقب الـ Logs
6. أضف Error Tracking (Sentry)
7. استخدم CDN للـ static assets
// ملف: server.js - Express App جاهز للنشر
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const rateLimit = require('express-rate-limit');
const app = express();
// Security
app.use(helmet());
app.use(cors({
origin: process.env.ALLOWED_ORIGINS?.split(',') || '*'
}));
// Rate limiting
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests
});
app.use('/api', limiter);
// Body parsing
app.use(express.json());
// Health check (مهم للاستضافة!)
app.get('/health', (req, res) => {
res.status(200).json({ status: 'ok' });
});
// Routes
app.get('/api/hello', (req, res) => {
res.json({ message: 'Hello World!' });
});
// Error handling
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Something broke!' });
});
// Start
const PORT = process.env.PORT || 3000;
app.listen(PORT, '0.0.0.0', () => {
console.log(`Server running on port ${PORT}`);
});اختبر فهمك