Aller au contenu

Déploiement vers d'autres plateformes d'hébergement

Publiez des sites web Silex sur Netlify, Vercel, AWS ou tout hébergeur statique.

Aperçu

Bien que Silex inclue des connecteurs pour GitLab Pages et le FTP, vous pouvez publier sur n'importe quelle plateforme d'hébergement statique en téléchargeant le site web compilé et en le déployant manuellement, ou en configurant des pipelines CI/CD personnalisés.

Trois approches :

  1. Télécharger le ZIP et déployer manuellement — Universel, fonctionne partout
  2. Intégration CI/CD personnalisée — Automatiser avec les outils spécifiques à la plateforme
  3. Connecteur d'hébergement personnalisé — Écrire un plugin pour votre plateforme

Prérequis

  • Compréhension des transformateurs de publication
  • Connaissance du processus de déploiement de votre plateforme d'hébergement
  • Familiarité de base avec Git et CI/CD

Approche 1 : Téléchargement et déploiement manuel

L'approche la plus simple : les utilisateurs téléchargent et déploient eux-mêmes.

Installation

Activez le connecteur de téléchargement :

HOSTING_CONNECTORS=download

Flux utilisateur

  1. Dans Silex, cliquez sur Publish
  2. Sélectionnez Download comme hébergement
  3. Cliquez sur Download website
  4. Extrayez le fichier ZIP
  5. Envoyez le contenu vers votre hébergeur

Déploiement vers Netlify

Après le téléchargement :

  1. Allez sur netlify.com
  2. Créez un nouveau site : Add new siteDeploy manually
  3. Glissez-déposez le dossier extrait, ou :
npm install -g netlify-cli
cd my-silex-website
netlify deploy --prod

Déploiement vers Vercel

Après le téléchargement :

npm install -g vercel
cd my-silex-website
vercel --prod

Ou poussez sur GitHub et connectez le dépôt à Vercel.

Déploiement vers AWS S3

Après le téléchargement :

# Install AWS CLI
npm install -g aws-cli

# Configure credentials
aws configure

# Upload to S3
aws s3 sync . s3://my-bucket-name --delete

Activez l'hébergement de site web dans S3 :

  1. Bucket → PropertiesStatic website hostingEnable
  2. Index document : index.html
  3. Error document : 404.html (si disponible)

Approche 2 : Intégration CI/CD personnalisée

Automatisez le déploiement en configurant un pipeline CI/CD sur votre plateforme.

Netlify via intégration Git

Connectez votre dépôt Silex à Netlify :

  1. Poussez le code source du site web sur GitHub/GitLab
  2. Allez sur netlify.com
  3. Add new siteImport an existing project
  4. Connectez votre fournisseur Git
  5. Configurez les paramètres de construction :
  6. Build command : npm run build
  7. Publish directory : _site ou public

Ou créez un netlify.toml :

[build]
  command = "npm run build"
  publish = "_site"

[build.environment]
  NODE_VERSION = "18"

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

Déploiement Vercel

Poussez sur GitHub et connectez Vercel :

  1. Poussez le site web sur GitHub
  2. Allez sur vercel.com
  3. Import Project → Sélectionnez le dépôt
  4. Configurez :
  5. Build command : npm run build
  6. Output directory : _site
  7. Déployez

Ou utilisez la CLI Vercel :

vercel --prod

GitHub Pages

Publiez depuis un dépôt GitHub :

  1. Poussez le site web sur GitHub (branche main ou dossier /docs)
  2. Allez dans SettingsPages
  3. Sélectionnez la source : GitHub Actions ou main branch /docs folder
  4. Ajoutez éventuellement un domaine personnalisé

Si vous utilisez GitHub Actions, créez .github/workflows/deploy.yml :

name: Deploy to GitHub Pages

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '18'
      - run: npm ci
      - run: npm run build
      - uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./_site

Cloudflare Pages

Déployez via Git ou la CLI Wrangler.

Via Git :

  1. Poussez sur GitHub/GitLab
  2. Allez dans Cloudflare PagesCreate a project
  3. Connectez le dépôt Git
  4. Configurez :
  5. Build command : npm run build
  6. Build output directory : _site
  7. Déployez

Via CLI :

npm install -g wrangler
wrangler pages publish _site

AWS Amplify

Déployez depuis Git :

  1. Poussez sur GitHub/CodeCommit/GitLab
  2. Allez dans AWS AmplifyNew appHost web app
  3. Connectez le dépôt Git
  4. Configurez les paramètres de construction :
version: 1
frontend:
  phases:
    preBuild:
      commands:
        - npm ci
    build:
      commands:
        - npm run build
  artifacts:
    baseDirectory: _site
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*

Approche 3 : Connecteur d'hébergement personnalisé

Pour les plateformes sans support intégré, écrivez un plugin de connecteur personnalisé.

Structure de base

// plugins/my-hosting-connector.js
const { HostingConnector, Connector } = require('@silexlabs/silex-plugins')

class MyHostingConnector extends HostingConnector {
  connectorId = 'my-hosting'
  displayName = 'My Hosting'
  color = '#0066cc'
  background = '#e6f2ff'
  icon = 'data:image/svg+xml,...'

  async isLoggedIn(session) {
    return !!session.myHostingToken
  }

  async getOAuthUrl(session) {
    return `https://my-platform.com/oauth?client_id=${this.options.clientId}`
  }

  async setToken(session, token) {
    session.myHostingToken = token.access_token
  }

  async publish(session, websiteId, files, jobManager) {
    try {
      // Upload files to your platform
      for (const file of files) {
        await this.uploadFile(session, websiteId, file)
        jobManager.setJobData(websiteId, {
          status: 'uploading',
          message: `Uploaded ${file.name}`,
        })
      }

      // Return job data with public URL
      return {
        id: Date.now().toString(),
        status: 'success',
        message: 'Website published',
      }
    } catch (error) {
      return {
        id: Date.now().toString(),
        status: 'error',
        message: error.message,
      }
    }
  }

  async getUrl(session, websiteId) {
    return `https://my-platform.com/${websiteId}`
  }

  async uploadFile(session, websiteId, file) {
    const formData = new FormData()
    formData.append('file', file.content)
    formData.append('path', file.path)

    const response = await fetch(
      `https://api.my-platform.com/upload/${websiteId}`,
      {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${session.myHostingToken}`,
        },
        body: formData,
      }
    )

    if (!response.ok) {
      throw new Error(`Upload failed: ${response.statusText}`)
    }
  }

  async getLoginForm(session, redirectTo) {
    return `
      <form action="https://my-platform.com/auth" method="POST">
        <input type="hidden" name="redirect" value="${redirectTo}">
        <input type="text" name="username" placeholder="Username" required>
        <input type="password" name="password" placeholder="Password" required>
        <button type="submit">Log in</button>
      </form>
    `
  }

  getOptions(formData) {
    return {
      username: formData.username,
    }
  }
}

module.exports = {
  name: 'MyHostingConnectorPlugin',
  async init(config, options) {
    config.addHostingConnector(
      new MyHostingConnector(config, options)
    )
  },
}

Enregistrer le plugin

Dans votre configuration serveur (.silex.js) :

const myHostingConnector = require('./plugins/my-hosting-connector')

module.exports = async function (config) {
  await config.addPlugin(myHostingConnector, {
    clientId: process.env.MY_HOSTING_CLIENT_ID,
    clientSecret: process.env.MY_HOSTING_CLIENT_SECRET,
  })
}

Redirections et réécritures

De nombreuses plateformes nécessitent des règles de redirection personnalisées. Exemples :

Redirections Netlify

Créez un fichier _redirects :

# Redirect /old-page to /new-page
/old-page /new-page 301

# SPA: redirect 404s to index.html
/*  /index.html  200

Ou utilisez netlify.toml :

[[redirects]]
  from = "/old-page"
  to = "/new-page"
  status = 301

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

Redirections Vercel

Créez vercel.json :

{
  "redirects": [
    { "source": "/old/:path*", "destination": "/new/:path*" }
  ],
  "rewrites": [
    { "source": "/:path*", "destination": "/index.html" }
  ]
}

Configuration de domaine personnalisé

Toutes les plateformes prennent en charge les domaines personnalisés. Étapes générales :

  1. Pointez l'enregistrement DNS A de votre domaine vers l'IP de la plateforme
  2. Dans les paramètres de la plateforme, ajoutez le domaine
  3. Attendez la propagation DNS (5 à 24 heures)
  4. Activez le HTTPS (automatique sur la plupart des plateformes)

Variables d'environnement

Passez des secrets aux processus de construction :

Netlify : 1. Site settingsBuild & deployEnvironment 2. Ajoutez des variables (par ex. API_KEY=...)

Vercel : 1. SettingsEnvironment Variables 2. Ajoutez des variables

GitHub Actions : 1. SettingsSecrets and variablesActions 2. Ajoutez des secrets de dépôt 3. Utilisez dans le workflow : ${{ secrets.MY_SECRET }}

Optimisation des performances

La plupart des plateformes offrent : - Optimisation des images - Compression automatique - En-têtes de cache - Distribution via CDN

Configurez dans votre construction :

// Add cache-busting to asset names
config.cmsConfig.cacheBuster = true

// Set cache headers in netlify.toml
[[headers]]
  for = "/assets/*"
  [headers.values]
    Cache-Control = "public, max-age=31536000, immutable"

[[headers]]
  for = "/*.html"
  [headers.values]
    Cache-Control = "public, max-age=0, must-revalidate"

Comparaison des plateformes

Plateforme Facilité Offre gratuite Domaine personnalisé Analytics CDN
Netlify Très facile Oui Oui Oui Oui
Vercel Très facile Oui Oui Oui Oui
GitHub Pages Facile Oui Oui (avec Pro) Via tiers Oui
Cloudflare Pages Facile Oui Oui Via Analytics Oui
AWS Amplify Moyen Offre gratuite Oui Via CloudWatch Oui
AWS S3 + CloudFront Moyen Non Oui Via CloudTrail Oui

Voir aussi

Éditer cette page sur GitLab