Cette procédure indique l'installation d'un serveur nextcloud public sur une instance à partir de 0, sur une vm "vide".
Dans
Puis activer et lancer le service:
puis vérifier que tout c'est bien passé, executer la commande:
Si tout va bien, la commande devrait retourner:
Préparer l'accès à la page web avec les commandes:
Ou plus simplement:
Créer le lien symbolique dans le bon dossier avec
Redémarrer nginx avec
Modifier le contenu du fichier
Comme auparavant, vérifier la validité de la configuration avec
où
Puis activer le service:
La commande
Cela ouvre une invite de commande. Y rentrer les lignes suivantes une à une:
où
Il est maintenant possible d'installer nextcloud en exécutant la commande ci-dessous dans le dossier
La dernière étape est de modifier la configuration de Nextcloud (dans
Modification du mot de passe root
En tant que root, exécuter la commandepasswd
Dans
New Password: insérer un mot de passe généré aléatoirement par un logiciel spécialisé (par exemple KeepassXC), l'ajouter à la base de donnée de mot de passe de Yauternet, et le coller dans le terminal. C'est normal si le mot de passe ne s'affiche pas, il a quand même été collé.Ajout de l'utilisateur administrateur
Exécuter la commande suivante en remplaçant {username} par le nom d'utilisateur de l'administrateur voulu:
adduser {username}
Mise à jour des paquets
En tant que root, lancer les commandes:apt update apt upgrade
Sécurisation
En tant que root, installer firewalld:apt firewalld
Puis activer et lancer le service:
systemctl enable firewalld systemctl start firewalld
puis vérifier que tout c'est bien passé, executer la commande:
systemctl status firewalld
Si tout va bien, la commande devrait retourner:
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/lib/systemd/system/firewalld.service; enabled; preset: enabled)
Active: active (running) since Day YYYY-MM-DD HH:mm:SS CET; xmin ago
Docs: man:firewalld(1)
Main PID: XXX (firewalld)
Tasks: 2 (limit: 2334)
Memory: XXM
CPU: XXms
CGroup: /system.slice/firewalld.service
└─XXX /usr/bin/python3 /usr/sbin/firewalld --nofork --nopid
Préparer l'accès à la page web avec les commandes:
firewall-cmd --add-service=http --zone=public --permanent firewall-cmd --add-service=https --zone=public --permanent firewall-cmd --reload
Installation des logiciels via les repo
apt install nginx apt install postgresql apt install certbot apt install python3-certbot-nginx apt install php-fpm apt install redis apt install lbzip2
Ou plus simplement:
apt install nginx postgresql certbot python3-certbot-nginx php-fpm redis lbzip2
Configuration de Nginx
Création du fichier/etc/nginx/sites-available/{wanted url} où {wanted url} est l'URL voulu pour l'instance nextcloud avec le contenu:
server {
server_name {wanted url};
listen :80;
listen [::]:80;
}
Créer le lien symbolique dans le bon dossier avec
ln -s /etc/nginx/sites-available/{wanted url} /etc/nginx/sites-enabled/{wanted url}. Vérifier la validité de la configuration avec nginx -t.Redémarrer nginx avec
systemctl reload nginx. Puis certbot --nginx, sélectionner le nombre associé à l'URL voulu pour l'instance nextcloud en l'entrant, puis valider avec Entrer.Modifier le contenu du fichier
/etc/nginx/sites-available/{wanted_url} avec le contenu suivant:
map $arg_v $asset_immutable {
"" "";
default ", immutable";
}
server {
server_name {wanted url}];
listen [::]:443 ssl http2; # managed by Certbot
listen 443 ssl http2; # managed by Certbot
root /var/www/{wanted url};
index index.php index.html /index.php$request_uri;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;
client_max_body_size 512M;
client_body_timeout 300s;
fastcgi_buffers 64 4K;
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml text/javascript application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
client_body_buffer_size 512k;
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "1; mode=block" always;
include mime.types;
types {
text/javascript mjs;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location = /.well-known/webfinger { return 301 /index.php/.well-known/webfinger; }
location = /.well-known/nodeinfo { return 301 /index.php/.well-known/nodeinfo; }
location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
location /.well-known/pki-validation { try_files $uri $uri/ =404; }
return 301 /$request_uri;
}
location ~ ^(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
location ~ ^(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }
location ~ \.php(?:$|/) {
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode(_arm64)?\/proxy) /index.php$request_uri;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
include fastcgi_params;
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_max_temp_file_size 0;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
location ~ \.(?:css|js|mjs|svg|gif|ico|jpg|png|webp|webm|mp4|wasm|tflite|map|ogg|flac)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463$asset_immutable";
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "1; mode=block" always;
access_log off;
}
location ~ \.(otf|woff2?)$ {
try_files $uri /index.php$request_uri;
expires 7d;
access_log off;
}
location /remote {
return 301 /remote.php$request_uri;
}
location / {
#try_files $uri $uri/ /index.php$request_uri;
rewrite ^ /index.php$request_uri;
}
ssl_certificate /etc/letsencrypt/live/{wanted url}/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/{wanted url}/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
server_name {wanted url};
listen 80;
listen [::]:80;
location / {
return 301 https://$host$request_uri;
}
}
Comme auparavant, vérifier la validité de la configuration avec
nginx -t, puis systemctl reload nginx pour recharger nginx.Installation des modules php
Installer les modules demandés ici, en utilisant la commandeapt install php-{nom du module}.Configuration de redis
Créer le fichier/etc/redis/redis-nextcloud.conf avec
port 0
unixsocket /run/redis-nextcloud/redis-nextcloud.sock
pidfile /run/redis-nextcloud/redis-nextcloud.pid
unixsocketperm 770
requirepass {redis password}
où
{redis password} est un mot de passe généré aléatoirement avec un logiciel dédié (type KeepassXC).Puis activer le service:
systemctl enable redis-server@nextcloud systemctl start redis-server@nextcloud
La commande
systemctl status redis-server@nextcloud doit retourner
● redis-server@nextcloud.service - Advanced key-value store (nextcloud)
Loaded: loaded (/lib/systemd/system/redis-server@.service; enabled; preset: enabled)
Active: active (running) since Day YYYY-MM-DD HH:mm:SS CET; xmin ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Main PID: XXX (redis-server)
Status: "Ready to accept connections"
Tasks: 5 (limit: 2334)
Memory: XXM
CPU: XXXms
CGroup: /system.slice/system-redis\x2dserver.slice/redis-server@nextcloud.service
└─XXX "/usr/bin/redis-server unixsocket:/run/redis-nextcloud/redis-nextcloud.sock"
Base de donnée
Se connecter avec le compte postgres (par exemplesu postgres) et lancer le programme psql.Cela ouvre une invite de commande. Y rentrer les lignes suivantes une à une:
CREATE DATABASE nextcloud;
CREATE USER nextcloud WITH ENCRYPTED PASSWORD '{database password}';
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
\c nextcloud
GRANT ALL ON SCHEMA public TO nextcloud;
\q
où
{database password} est un mot de passe généré aléatoirement avec un logiciel dédié (type KeepassXC).Installation de nextcloud
La première étape est d'obtenir le lien pour télécharger l'archive contenant les fichiers du service. Le lien est disponible ici mais ne devrait pas changer souvent. Au dernière nouvelle, le lien est https://download.nextcloud.com/server/releases/latest.tar.bz2. Pour télécharger l'archive sur le serveur, en tant que root, exécuter la commandecurl -L {lien} -o nextcloud.tar.bz2. Ensuite, exécuter tar -xf nextcloud.tar-bz2, ce qui permet de créer le dossier nextcloud contenant les fichiers décompressés. Avec mv nextcloud /var/www/{wanted url}, le dossier est déplacé vers son emplacement final, pour ensuite avoir ses droits modifiés avec la commande chown -R www-data:www-data /var/www/{wanted url} où {wanted url} est l'URL de l'instance Nextcloud.Il est maintenant possible d'installer nextcloud en exécutant la commande ci-dessous dans le dossier
/var/www/{wanted url}:
su -s /bin/sh -c 'php occ maintenance:install --database "pgsql" --database-name "nextcloud" --database-pass "{database password}" --admin-user "{admin name}" --admin-pass "{admin password}"' www-data
La dernière étape est de modifier la configuration de Nextcloud (dans
/var/www/{wanted url}/config/config.php) en y ajoutant les lignes ci-dessous (si elles ne sont pas déjà définies):
<?php
$CONFIG = array (
'trusted_domains' =>
array (
0 => '{wanted url}',
),
'overwriteprotocol' => 'https',
'dbtype' => 'pgsql',
'overwrite.cli.url' => 'http://localhost',
'default_language' => 'fr',
'default_locale' => 'fr_FR',
'default_phone_region' => 'FR',
'default_timezone' => 'Europe/Paris',
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'maintenance_window_start' => 3,
'redis' =>
array (
'host' => '/var/run/redis-nextcloud/redis-nextcloud.sock',
'port' => 0,
'password' => '{redis password}',
'timeout' => 0.0,
),
'htaccess.RewriteBase' => '/',
'maintenance' => false,
);
