Wie man ReactJS mit Nginx auf Ubuntu 22.04 installiert

React.js ist ein freies und quelloffenes JavaScript-Framework, das 2011 von Facebook entwickelt wurde. Es dient zur Erstellung wiederverwendbarer UI-Komponenten und hilft Nutzern, mit minimalem Programmieraufwand schnell und effizient reichhaltige und ansprechende Webanwendungen zu erstellen. Mit React kannst du eine interaktive Weboberfläche erstellen und komplexe Benutzeroberflächen aus kleinen und isolierten Teilen zusammensetzen. Es nutzt Virtual DOM, was die App schnell macht. Es bietet viele Funktionen wie Virtual DOM, One-way Data Binding, Components, JSX, Conditional Statements und viele mehr.

In diesem Lernprogramm zeigen wir dir, wie du React.js auf Ubuntu 22.04 installierst.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 22.04 läuft.
  • Ein gültiger Domainname, der auf die IP deines Servers zeigt.
  • Ein Root-Passwort ist auf dem Server eingerichtet.

Erste Schritte

Zuerst musst du deine Systempakete auf die neueste Version aktualisieren. Du kannst sie mit dem folgenden Befehl aktualisieren:

apt-get update -y
apt-get upgrade -y

Sobald alle Pakete auf dem neuesten Stand sind, führst du den folgenden Befehl aus, um andere erforderliche Abhängigkeiten zu installieren:

apt-get install curl gnupg2 -y

Sobald alle Abhängigkeiten installiert sind, kannst du mit dem nächsten Schritt fortfahren.

Node.js installieren

Als Nächstes musst du Node.js auf deinem Server installieren. Standardmäßig ist die neueste Version von Node.js nicht im Standard-Repository von Ubuntu 22.04 verfügbar. Daher musst du Node.js aus dem offiziellen Repository von Node.js installieren.

Füge zunächst das Node.js-Repository mit dem folgenden Befehl hinzu:

curl -sL https://deb.nodesource.com/setup_18.x | bash -

Als Nächstes führst du den folgenden Befehl aus, um Node.js auf deinem System zu installieren:

apt-get install nodejs -y

Nach der Installation von Node.js aktualisierst du den NPM mit dem folgenden Befehl auf die neueste Version:

npm install [email protected] -g

Du solltest die folgende Ausgabe erhalten:

removed 14 packages, changed 73 packages, and audited 223 packages in 3s

14 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

Als Nächstes überprüfst du die installierte Version von Node.js mit dem folgenden Befehl:

node -v

Du solltest die folgende Ausgabe erhalten:

v18.12.1

Wenn du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.

Create React App Tool installieren

Create React App ist ein CLI-Tool, das dir hilft, Zeit bei der Einrichtung und Konfiguration zu sparen. Du musst nur einen einzigen Befehl ausführen und Create React App richtet alle Tools ein, die du für dein Projekt benötigst.

Du kannst das Create React App Tool mit dem folgenden Befehl installieren:

npm install -g create-react-app

Sobald du fertig bist, kannst du mit dem nächsten Schritt fortfahren.

Eine React-Beispielanwendung erstellen

In diesem Abschnitt erstellen wir eine React-Beispielanwendung mit dem Create React App Tool.

Wechsle zunächst in das Verzeichnis /opt und erstelle dein erstes Projekt mit dem folgenden Befehl:

cd /opt
create-react-app reactapp

Du solltest die folgende Ausgabe sehen:

Success! Created reactapp at /opt/reactapp
Inside that directory, you can run several commands:

  npm start
    Starts the development server.

  npm run build
    Bundles the app into static files for production.

  npm test
    Starts the test runner.

  npm run eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd reactapp
  npm start

Happy hacking!

Als Nächstes änderst du das Verzeichnis in dein Projektverzeichnis und startest deine Anwendung mit folgendem Befehl:

cd /opt/reactapp
npm start

Du solltest die folgende Ausgabe erhalten:

Compiled successfully!

You can now view reactapp in the browser.

  http://localhost:3000

Note that the development build is not optimized.
To create a production build, use npm run build.

webpack compiled successfully

Drücke CTRL+C, um die Anwendung zu stoppen. Wir werden eine systemd-Dienstdatei erstellen, um die React-Anwendung zu verwalten.

Einen Systemd-Dienst für die React-Anwendung erstellen

Als Nächstes musst du einen systemd-Dienst für deine React-Anwendung erstellen. Du kannst ihn mit dem folgenden Befehl erstellen:

nano /lib/systemd/system/react.service

Füge die folgenden Zeilen ein:

[Service]
Type=simple
User=root
Restart=on-failure
WorkingDirectory=/opt/reactapp
ExecStart=npm start -- --port=3000

Speichere und schließe die Datei und lade den systemd-Daemon mit dem folgenden Befehl neu:

systemctl daemon-reload

Als Nächstes startest du den React-Dienst und aktivierst ihn beim Neustart des Systems, indem du den folgenden Befehl ausführst:

systemctl start react
systemctl enable react

Du kannst den Status des React-Dienstes mit dem folgenden Befehl überprüfen:

systemctl status react

Du solltest die folgende Ausgabe erhalten:

? react.service
     Loaded: loaded (/lib/systemd/system/react.service; static)
     Active: active (running) since Sun 2022-11-20 11:18:50 UTC; 6s ago
   Main PID: 76129 (npm start --por)
      Tasks: 30 (limit: 2242)
     Memory: 250.9M
        CPU: 4.663s
     CGroup: /system.slice/react.service
             ??76129 "npm start --port=3000" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ??76140 sh -c "react-scripts start --port=3000"
             ??76141 node /opt/reactapp/node_modules/.bin/react-scripts start --port=3000
             ??76148 /usr/bin/node /opt/reactapp/node_modules/react-scripts/scripts/start.js --port=3000

Nov 20 11:18:54 ubuntu2204 npm[76148]: (node:76148) [DEP_WEBPACK_DEV_SERVER_ON_AFTER_SETUP_MIDDLEWARE] DeprecationWarning: 'onAfterSetupMiddl>
Nov 20 11:18:54 ubuntu2204 npm[76148]: (Use `node --trace-deprecation ...` to show where the warning was created)
Nov 20 11:18:54 ubuntu2204 npm[76148]: (node:76148) [DEP_WEBPACK_DEV_SERVER_ON_BEFORE_SETUP_MIDDLEWARE] DeprecationWarning: 'onBeforeSetupMid>
Nov 20 11:18:54 ubuntu2204 npm[76148]: Starting the development server...
Nov 20 11:18:55 ubuntu2204 npm[76148]: Compiled successfully!
Nov 20 11:18:55 ubuntu2204 npm[76148]: You can now view reactapp in the browser.
Nov 20 11:18:55 ubuntu2204 npm[76148]:   http://localhost:3000
Nov 20 11:18:55 ubuntu2204 npm[76148]: Note that the development build is not optimized.
Nov 20 11:18:55 ubuntu2204 npm[76148]: To create a production build, use npm run build.
Nov 20 11:18:55 ubuntu2204 npm[76148]: webpack compiled successfully

Sobald du fertig bist, kannst du mit dem nächsten Schritt fortfahren.

Nginx als Reverse Proxy konfigurieren

Es ist eine gute Idee, Nginx als Reverse Proxy für die React App zu installieren und zu konfigurieren. So kannst du über Port 80 auf deine App zugreifen.

Installiere zunächst das Nginx-Paket mit dem folgenden Befehl:

apt-get install nginx -y

Sobald Nginx installiert ist, erstellst du eine neue Konfigurationsdatei für den virtuellen Nginx-Host:

nano /etc/nginx/sites-available/reactjs.conf

Füge die folgenden Zeilen hinzu:

upstream backend {
  server localhost:3000;
}

server {
    listen 80;
    server_name reactjs.example.com;

    location / {
        proxy_pass http://backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}

Speichere und schließe die Datei und aktiviere den virtuellen Nginx-Host mit dem folgenden Befehl:

ln -s /etc/nginx/sites-available/reactjs.conf /etc/nginx/sites-enabled/

Als Nächstes überprüfst du Nginx auf Syntaxfehler, indem du den folgenden Befehl ausführst:

nginx -t

Du solltest die folgende Ausgabe erhalten:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Starte abschließend den Nginx-Dienst neu, um die Änderungen zu übernehmen:

systemctl restart nginx

Du kannst den Status des Nginx-Dienstes auch mit dem folgenden Befehl überprüfen:

systemctl status nginx

Du solltest die folgende Ausgabe sehen:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-11-20 11:20:17 UTC; 6s ago
       Docs: man:nginx(8)
    Process: 76760 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 76762 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 76763 (nginx)
      Tasks: 2 (limit: 2242)
     Memory: 2.6M
        CPU: 32ms
     CGroup: /system.slice/nginx.service
             ??76763 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ??76764 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Nov 20 11:20:17 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server...
Nov 20 11:20:17 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.

Jetzt ist Nginx installiert und so konfiguriert, dass es die React App bedienen kann. Du kannst jetzt mit dem nächsten Schritt fortfahren.

React.js mit Let’s Encrypt sichern

Als Nächstes musst du das Certbot Client-Paket installieren, um Let’s Encrypt SSL zu installieren und zu verwalten.

Installiere zunächst Certbot mit dem folgenden Befehl:

apt-get install python3-certbot-nginx -y

Sobald die Installation abgeschlossen ist, führst du den folgenden Befehl aus, um Let’s Encrypt SSL auf deiner Website zu installieren:

certbot --nginx -d reactjs.example.com

Du wirst aufgefordert, eine gültige E-Mail-Adresse anzugeben und die Nutzungsbedingungen zu akzeptieren (siehe unten):

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for reactjs.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/fuel.conf

Als Nächstes wählst du aus, ob der HTTP-Datenverkehr auf HTTPS umgeleitet werden soll oder nicht (siehe unten):

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Gib 2 ein und drücke die Eingabetaste, um die Installation abzuschließen. Du solltest die folgende Ausgabe sehen:

Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/fuel.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://reactjs.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=reactjs.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/reactjs.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/reactjs.example.com/privkey.pem
   Your cert will expire on 2023-02-20. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

 - We were unable to subscribe you the EFF mailing list because your
   e-mail address appears to be invalid. You can try again later by
   visiting https://act.eff.org.

Deine React.js-Webanwendung ist jetzt mit Let’s Encrypt SSL gesichert.

Zugriff auf das React App Web Interface

Öffne jetzt deinen Webbrowser und gib die URL https://reactjs.example.com ein. Auf dem folgenden Bildschirm wirst du zum React.Js-Webinterface weitergeleitet:

Fazit

Glückwunsch! Du hast React.Js erfolgreich auf dem Ubuntu 22.04 Server installiert und konfiguriert. Jetzt kannst du mit der Erstellung deiner eigenen React-basierten Anwendung beginnen und sie in der Produktionsumgebung hosten. Wenn du noch Fragen hast, kannst du dich gerne an mich wenden.

Das könnte dich auch interessieren …