Wie stelle ich eine Rails-App auf einem VPS (oder dedizierten Server) bereit?

7

Wie kann ich eine Rails-App auf einem VPS (Virtual Private Server) oder einem dedizierten Server bereitstellen? Es wäre schön, einen leicht zu befolgenden Führer zu haben.

Ich kenne Skripte, um den Prozess zu automatisieren, aber ich denke, es ist besser, alles unter Kontrolle zu haben, um den Prozess besser zu verstehen.

    
David Morales 18.11.2012, 20:10
quelle

2 Antworten

43

Ich habe erfolgreich eine umfangreiche Rails-Anwendung für Linode oder Digital Ocean mithilfe dieser Technologien bereitgestellt:

  • rbenv für die Ruby-Installation
  • nginx + Passagier für den Anwendungsserver
  • PostgreSQL für den Datenbankserver
  • Capistrano um Deploy-Vorgänge zu automatisieren (konfigurieren Sie dies zuerst auf Ihrem Dev-Rechner mit Ihrer Server-IP und Einstellungen, ich werde es hier nicht behandeln)

Dies sind die Schritte, die für mich funktionieren:

Einrichten der virtuellen Maschine

Erstellen Sie eine neue virtuelle Maschine

Befolgen Sie die Installationsanweisungen Ihres Hostings, sei es Linode oder Digital Ocean, um den Knoten zu erstellen und einzurichten.

Einrichtungsdatum

  • dpkg-reconfigure tzdata

Pakete aktualisieren

  • apt-get-Aktualisierung
  • apt-get-Upgrade

Sicherheit

Benutzer erstellen

  • adduser deploy
  • usermod -a -G sudo deploy
  • Abmeldung

Richten Sie die SSH-Schlüsselauthentifizierung ein

Lokal:

  • ssh-keygen
  • kopiere den öffentlichen Schlüssel:

Auf dem Server:

  • ssh [email protected]
  • Aktivieren Sie den Alias ​​zum Auflisten von Dateien:
    • vim ~ / .bashrc
    • alle Aliase auskommentieren
  • mkdir .ssh
  • mv id_rsa.pub .ssh / authorized_keys
  • chown -R Bereitstellung: deploy .ssh
  • chmod 700 .ssh
  • chmod 600 .ssh / authorized_keys
  • Abmeldung (die neue Authentifizierung testen)

Richten Sie SSH ein

  • sudo vim / etc / ssh / sshd_config
  • Schalten Sie PermitRootLogin auf no
  • um
  • sudo-Dienst ssh neustart

Firewall einrichten

  • sudo iptables -L (es sollte eine void-Tabelle anzeigen)
  • sudo vim /etc/iptables.firewall.rules
  • Fügen Sie Folgendes ein: Ссылка
  • sudo iptables-restore & lt; /etc/iptables.firewall.rules
  • sudo iptables -L (jetzt sollte es die konfigurierten Regeln anzeigen)
  • sudo vim /etc/network/if-pre-up.d/firewall
  • Fügen Sie Folgendes ein: Ссылка
  • sudo chmod + x /etc/network/if-pre-up.d/firewall

Richten Sie fail2ban ein

Richten Sie ein, wenn Sie genug freien Speicher haben, weil es dazu neigt, es zu essen.

  • sudo apt-get install -y fail2ban

Setup Ruby

Git installieren

  • sudo apt-get install -y git

Installieren Sie rbenv

  • Git Klon Ссылка ~ .rbenv
  • echo 'export PATH="$ HOME / .rbenv / bin: $ PATH"' & gt; & gt; ~ / .bashrc
  • echo 'eval "$ (rbenv init -)"' & gt; & gt; ~ / .bashrc
  • Quelle ~ / .bashrc
  • Git-Klon Ссылка ~ .rbenv / plugins / ruby-build

Installiere Ruby

  • sudo apt-get installieren -y curl gnupg build-essential
  • rbenv install -l (suche nach der neuesten Version)
  • rbenv install 2.3.3 (oder die neueste verfügbare Version in diesem Moment)
  • rbenv global 2.3.3
  • rbenv rehash
  • vim .gemrc
    • Fügen Sie Folgendes ein: gem: --no-document

Setup-Server

Installieren Sie nginx + Passenger

PostgreSQL installieren

Setup-Bibliotheken

Installieren Sie node.js

Zum Vorkompilieren von Assets erforderlich.

  • sudo apt-get install -y Nodejs

Bundler installieren

  • bekomme Installationspaket
  • rbenv rehash

Richten Sie die Anwendung

ein

Erstellen Sie den Benutzer in PostgreSQL

  • createuser Benutzername --pwprompt
  • createdb -Ousername -Eutf8 db_name
  • Teste es:
    • psql db_name --user Benutzername - Passwort

Stellen Sie den Code bereit    * Auf dem Server:      * sudo mkdir -p /srv/yoursite.com      * sudo chown deploy: deploy /srv/yoursite.com    * Auf deiner Entwicklungsmaschine:      * bundle exec cap production deploy: check (es wird ein Fehler ausgegeben, weil die Datenbank nicht gefunden wird)    * Auf dem Server:      * cd /srv/yoursite.com/shared/config      * vim database.yml (Einfügen der Datenbankkonfiguration)      * vim Geheimnisse.Yml (fügen Sie Ihre geheime Konfiguration ein)    * Auf deiner Entwicklungsmaschine:      * bündeln Sie die Exec Cap Produktion      * bundle exec cap production wann immer: update_contab

Konfigurieren Sie logrotate

David Morales 18.11.2012, 20:10
quelle
1

Ich habe meine Rails-Anwendung auf meinen Produktionsservern (es ist ein Cluster) mit Capistrano eingesetzt, aber ich fand, dass Capistrano ein bisschen komplex ist und manchmal sogar Unruhestifter wurde ... Also schrieb ich mein Deployment-Skript per Bash-Shell-Skript.

Ich habe es mit einer kurzen Anleitung auf github gestellt: deploy_rails

    
tangramor 28.02.2014 02:14
quelle