Y a-t-il un avantage à une installation Docker ?

Je sais que la documentation et de nombreux fils de discussion ici suggèrent que Docker est la seule (bonne) voie à suivre, mais je voulais connaître le raisonnement. J’ai obtenu une boîte Debian Amazon Lightsail à 3,50 $/mois et j’ai installé Discourse en 20 minutes. J’ai utilisé rbenv pour installer Ruby 3.2.2, et le reste a été facile. J’ai trouvé que Discourse ne suivait pas non plus les conventions de Rails, par exemple pourquoi y a-t-il un ./config/discourse.conf et GlobalSetting au lieu de config/environments/production.rb spécifiant ces valeurs - est-ce ce que les images Docker finissent par créer (également sidekiq.yml n’ayant pas les valeurs de l’environnement de production).

Y a-t-il un avantage à exécuter cela sur Docker ? Je me demande si je rate quelque chose…

La version très courte est que si vous n’utilisez pas l’installation standard, nous ne pouvons pas vous offrir d’aide ici. Trop de choses peuvent mal tourner si vous vous écartez de cette voie.

4 « J'aime »

Ah, je comprends, oui, différents systèmes d’exploitation et ainsi de suite. J’ai déjà quelqu’un qui demande comment j’ai fait - je posterai ici au cas où.

Il faut Ruby 3.2.x (via rbenv, pour ne pas dépendre du système d’exploitation), Node v16.19.x/npm 8.19.x, et PostgreSQL (probablement toute version supérieure à 11).

  1. J’ai créé un fichier .ruby-version, qui spécifiait la version de Ruby que j’ai installée (3.2.2).
  2. J’ai fait un bundle et toutes les gems se sont compilées sans problème.
  3. Dans PostgreSQL lui-même, j’ai dû configurer la base de données :
CREATE DATABASE discourse;
CREATE USER discourse WITH password 'fA....';
GRANT ALL PRIVILEGES ON DATABASE discourse TO discourse;
\c discourse
GRANT ALL ON SCHEMA public TO discourse;

J’ai été surpris que database.yml ne prenne pas les variables production (cela semble très contraire aux conventions Rails). Tous les paramètres de la base de données se trouvaient dans config/discourse.conf, ainsi que les valeurs SMTP. Je les ai remplies.

Ensuite, j’ai exécuté les migrations de la base de données :

bundle exec rails db:migrate

Tout a fonctionné correctement et les migrations ont été réussies.

  1. Dans config/sidekiq.yml, après la section development, j’ai ajouté :
production:
  :concurrency: 2
  :queues:
    - [critical, 2]
    - [default, 1]
    - [low]
    - [ultra_low]
  1. Ensuite, modifiez lib/tasks/assets.rake, autour de la ligne 151, ajoutez :
harmony: true,

pour que cela ressemble à :

  uglified, map =
    Uglifier.new(
      comments: :none,
      harmony: true,
      source_map: {
        filename: File.basename(from),
        output_filename: File.basename(to),
      },
    ).comp

Et installez les packages npm suivants :

npm install terser
npm install -g uglify-js@"<3"

Ensuite, compilez les assets :

RAILS_ENV=production bundle exec rake assets:precompile

Et voilà ! Maintenant, cela devrait fonctionner :

bundle exec sidekiq -e production -C config/sidekiq.yml
bundle exec puma --config config/puma.rb -e production

Cela lance sidekiq et le serveur web puma.

(beaucoup moins cher, et plus de contrôle, c’est-à-dire que j’ai déjà Ruby 3.2.2 en cours d’exécution). La plupart du temps a été passé à contourner les particularités (comme la recherche des valeurs production car elles n’étaient pas là où elles devaient être). Mais à part cela, c’était assez rapide !

2 « J'aime »

C’est assez impressionnant. Le problème, comme mentionné, est que si vous rencontrez un problème qui fait planter votre site. Vous êtes potentiellement bloqué avec un nombre très limité de membres de la communauté qui pourraient vous aider à résoudre les problèmes. Le plus grand risque/inconvénient est donc une interruption potentiellement longue, voire catastrophique, qui pourrait nécessiter une réinstallation complète.

Plus un site reste hors service, plus il risque de perdre en réputation et en membres.

Si vous expérimentez simplement et que vous ne dépendez pas vraiment d’un site de production stable. Alors vous ne risquez pas grand-chose, sauf du temps.

1 « J'aime »