chore(ops): give the unprivileged instance its own proxy unit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
79eb42b578
commit
9c3e33510d
4 files changed
+77
-42
No files matched your search
+1
-1
@@ -194,7 +194,7 @@ sudo cp /var/lib/homarr/trusted-certificates/*.pem /var/lib/homarr-dev/trusted-c
|
||||
sudo chown -R homarr:homarr /var/lib/homarr-dev
|
||||
```
|
||||
|
||||
Reste le proxy, qui ne peut pas tourner sous `homarr` : `ops/homarr-proxy.nginx.conf`
|
||||
Reste le proxy, qui ne peut pas tourner sous `homarr` : `ops/homarr-dev-proxy.nginx.conf`
|
||||
est à déposer dans `/etc/nginx/sites-available/` et à activer. Il n'est pas
|
||||
optionnel — le client appelle `ws://<hôte>:<port>/websockets` sur la même origine
|
||||
que la page, alors que le serveur WebSocket écoute sur 3001. Sans lui,
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# Proxy inverse d'une instance Homarr lancée sous un utilisateur ordinaire.
|
||||
#
|
||||
# Configuration COMPLÈTE et autonome, destinée à `nginx -c`. Elle ne passe pas
|
||||
# par /etc/nginx/nginx.conf : ce fichier-là est réécrit par le `run.sh` de
|
||||
# l'instance de production à chaque démarrage, et n'inclut pas sites-enabled.
|
||||
# Tout site déposé là disparaîtrait au premier redémarrage de la prod.
|
||||
#
|
||||
# Le proxy n'est pas un confort : le client se connecte à
|
||||
# ws://<hôte>:<port>/websockets, sur la même origine que la page, alors que le
|
||||
# serveur WebSocket écoute sur 3001. Sans ces deux emplacements, l'application
|
||||
# se charge et perd ses mises à jour en direct, sans message d'erreur.
|
||||
|
||||
user www-data;
|
||||
worker_processes auto;
|
||||
pid /run/nginx-homarr-dev.pid;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
access_log /var/log/nginx/homarr-dev-access.log;
|
||||
error_log /var/log/nginx/homarr-dev-error.log;
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
|
||||
server_name _;
|
||||
|
||||
location /websockets {
|
||||
proxy_pass http://127.0.0.1:3001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header Host $http_host;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
|
||||
client_max_body_size 256M;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
# Proxy de l'instance Homarr non privilégiée.
|
||||
#
|
||||
# Séparé du service applicatif parce qu'il lui faut root — écouter le port 80 et
|
||||
# écrire dans /var/log/nginx — alors que l'application, elle, tourne sous
|
||||
# `homarr`. C'est la découpe qui permet à l'application de n'avoir aucun droit
|
||||
# particulier.
|
||||
#
|
||||
# À installer dans /etc/systemd/system/ :
|
||||
# sudo install -m 644 ops/homarr-dev-proxy.service /etc/systemd/system/
|
||||
# sudo install -m 644 ops/homarr-dev-proxy.nginx.conf /etc/nginx/
|
||||
# sudo systemctl daemon-reload && sudo systemctl enable --now homarr-dev-proxy
|
||||
|
||||
[Unit]
|
||||
Description=Homarr Dev reverse proxy
|
||||
After=network.target homarr-dev.service
|
||||
# Lié au service applicatif : le proxy seul n'a aucun sens, et le laisser
|
||||
# répondre alors que l'application est arrêtée ne servirait que des 502.
|
||||
PartOf=homarr-dev.service
|
||||
|
||||
[Service]
|
||||
Type=exec
|
||||
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/homarr-dev-proxy.nginx.conf
|
||||
ExecStart=/usr/sbin/nginx -c /etc/nginx/homarr-dev-proxy.nginx.conf -g 'daemon off;'
|
||||
ExecReload=/usr/sbin/nginx -s reload
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -1,41 +0,0 @@
|
||||
# Proxy inverse pour une instance Homarr lancée sous un utilisateur ordinaire.
|
||||
#
|
||||
# À déposer dans /etc/nginx/sites-available/ et à lier dans sites-enabled/, puis
|
||||
# `sudo systemctl reload nginx`. C'est le nginx du système qui le sert — celui de
|
||||
# l'image est lancé par son run.sh, ce que l'utilisateur `homarr` ne peut pas
|
||||
# faire.
|
||||
#
|
||||
# Les deux emplacements ne sont pas interchangeables : le serveur WebSocket est
|
||||
# un processus distinct sur le port 3001, embarqué dans le serveur Next mais
|
||||
# écoutant à part, et le client l'appelle sur la MÊME origine que la page. Sans
|
||||
# la première règle, l'application se charge et les mises à jour en direct
|
||||
# meurent silencieusement.
|
||||
#
|
||||
# Le port 80 est déjà pris par l'instance de production. Tant qu'elles
|
||||
# alternent, ça va ; pour les faire cohabiter il faudrait aussi déplacer les
|
||||
# ports applicatifs, or celui du WebSocket est écrit en dur dans le code (3001),
|
||||
# donc deux instances ne peuvent pas tourner en même temps.
|
||||
|
||||
server {
|
||||
listen 8080;
|
||||
listen [::]:8080;
|
||||
|
||||
server_name _;
|
||||
|
||||
location /websockets {
|
||||
proxy_pass http://127.0.0.1:3001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header Host $http_host;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
|
||||
client_max_body_size 256M;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user