
å ±åãããžã§ã¯ã管çãLDAPæ¿èªãããŒãžã§ã³ç®¡çãšã®ãã¡ã€ã«åæãããã³ææ°ããŒãžã§ã³ã§å°ç¡ãã«ããããããªäŒè°ãåããäŒæ¥ã¡ãã»ã³ãžã£ãŒã®ãããªãã®ã®ããã®éåžžã«ã¯ãŒã«ãªããŒãã¹ã¿ãŒããããŸããã¯ããNextcloudã«ã€ããŠè©±ããŠããŸããäžæ¹ã§ãç§ã¯Unix-wayã®ãµããŒã¿ãŒã§ãããã¢ããªã±ãŒã·ã§ã³ãåå¥ã®æ©èœã«æç¢ºã«åå²ããŠããŸããäžæ¹ããã®è£œåã¯å®å®æ§ãé«ããäœå¹Žã«ãããã£ãŠããã€ãã®ãããžã§ã¯ãã§åé¡ãªãåäœããŠããã远å ã®ãã€ãã¹ã«ãç¹ã«åäœã劚ããããšã¯ãããŸãããæ¬åœã«ããããã®ãªããã»ãšãã©ãã¹ãŠã®ã²ãŒã ãããã«ãã蟌ãããšãã§ããŸããã³ãã¥ããã£ã¯æŽ»æ°ããããåå¥ã®ã¢ããªã±ãŒã·ã§ã³ãšããŠå©çšã§ããããŸããŸãªãã©ã°ã€ã³ãå®å šã«å®åããŠããŸãã
仿¥ã¯ãããå±éããŸããå®å šãªã¹ããããã€ã¹ãããã®èª¬æã¯ããŸããããæ³šæãæã䟡å€ã®ããã¢ãŒããã¯ãã£ã®éèŠãªãã€ã³ãã«ã€ããŠèšåããããšæããŸããç¹ã«ãè² è·åæ£ãããŒã¿ããŒã¹ã¬ããªã±ãŒã·ã§ã³ãããã³ãµãŒãã¹ãäžæããªã宿çãªã¡ã³ããã³ã¹ã«ã€ããŠèŠãŠã¿ãŸãããã
150ã1000ãŠãŒã¶ãŒã®å°èŠæš¡äŒæ¥åãã«ãã§ã€ã«ã»ãŒãããŒãžã§ã³ã§å±éããŸãããããŒã ãŠãŒã¶ãŒã«ã圹ç«ã¡ãŸãã
äŒæ¥ã¯äœãå¿ èŠãšããŠããŸããïŒ
ã©ãããã§äœãããå± å¿å°ã®è¯ãããŒã ãµãŒããŒã§ã®ãµãŒãã¹ãšäŒæ¥ã»ã°ã¡ã³ãã®è©Šåã®äž»ãªéãã¯ããŠãŒã¶ãŒãžã®è²¬ä»»ã§ãããã ããèªå® ã«èšçœ®ããå Žåã§ããäºå®ãããŠããäœæ¥ãäºæ ã®å¯èœæ§ã«ã€ããŠèŠåã衚瀺ããŠãŠãŒã¶ãŒã«ã¡ãã»ãŒãžãéä¿¡ããããšããå§ãããŸããçµå±ã®ãšãããããªãã®å人ãããªããšäžç·ã«ãã¹ãããŠããããŒã¿ãåŠçããããšãçªç¶æ±ºå®ããã®ã¯åææ¥ã®å€ã§ãã
äŒç€Ÿã®å Žåãããšãå°ããªäŒç€Ÿã§ãã£ãŠããåçŽãªéèŠãªãµãŒãã¹ã¯æœåšçãªæå€±ãšåé¡ãæå³ããŸããç¹ã«ããµãŒãã¹ã«é¢ä¿ããããã»ã¹ãå€ãå Žåã
ç¹ã«ãç§ã®çµéšã§ã¯ãNextcloudã¯äžå°äŒæ¥ã®éã§ããã€ãã®æ©èœãæ±ããŠããŸãã
- å ±æãã£ã¬ã¯ããªãžã®ã¢ã¯ã»ã¹ãšåæãæäŸããŸãã
- ãã§ãã¬ãŒã·ã§ã³å ã®å€éšã¢ã¯ã»ã¹ãæäŸãããã©ãŒæ©èœãååãä»ã®äŒç€Ÿã®åæ§ã®è£œåãšçµ±åã§ããŸãã
- çŽæ¥ãªã³ã¯ãä»ããå€éšã¢ã¯ã»ã¹ã®æäŸãããšãã°ãå°å·æ¥çã§åããŠããŠã倧éã®å€§éã®ããŒã¿ãã¯ã©ã€ã¢ã³ããšäº€æããå¿ èŠãããå Žåã«åœ¹ç«ã¡ãŸãã
- ãµãŒããŒåŽã§å®è¡ãããLibreOfficeã®ããã³ããšã³ããšããŠæ©èœããCollaboraããã¥ã¡ã³ããšãã£ã¿ãŒã
- ãã£ãããšãããªé話ãå°ãç©è°ãéžããå®å šã«å®å®ããæ©èœã§ã¯ãããŸããããããã«ãããæ©èœããŸããææ°ããŒãžã§ã³ã§ã¯ããã§ã«å®å®ããŠããŸãã
ã¢ãŒããã¯ãã£ãæ§ç¯ããŸã
æ®å¿µãªãããææ°ããŒãžã§ã³ã§ã¯ãNextcloudãšã³ã¿ãŒãã©ã€ãºå®è£ ããã¥ã¡ã³ãã¯ææãµãã¹ã¯ãªãã·ã§ã³ã®ææè ã®ã¿ãå©çšã§ããŸãããã ããåèãšããŠããŸã ãããªãã¯ãã¡ã€ã³ã«ããå€ãããã¥ã¢ã«ã䜿çšã§ããŸãã

å®¶åºã§ã®äœ¿çšãšåäžã®ã€ã³ã¹ããŒã«ã«äžè¬çã§ãã
ããªãŒã«ã€ã³ã¯ã³ããªãã·ã§ã³ã¯ããŠãŒã¶ãŒãå°ãªãã宿çãªã¡ã³ããã³ã¹ã®ããã«ããŠã³ã¿ã€ã ã蚱容ã§ããéããæªãã¯ãããŸãããããšãã°ãæŽæ°äžã§ãããŸãã1ã€ã®ããŒãã«é 眮ããã¢ããªã·ãã¯ã¹ããŒã ã«ã¯ãã¹ã±ãŒãªã³ã°ã«åé¡ããããŸãããããã£ãŠã2çªç®ã®ãªãã·ã§ã³ã詊ããŠã¿ãŸãã

ããé«ãã¯ãŒã¯ããŒãã«æšå¥šãããã¹ã±ãŒã©ãã«ãªå±éãªãã·ã§ã³ã
ã·ã¹ãã ã®äž»ãªã³ã³ããŒãã³ãïŒ
- 1ãã©ã³ãµãŒãHAproxyãŸãã¯Nginxã䜿çšã§ããŸããNginxã§ã®ãªãã·ã§ã³ãæ€èšããŸãã
- 2ã4åã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒïŒWebãµãŒããŒïŒãphpã®ã¡ã€ã³ã³ãŒãã䜿çšããNextcloudèªäœã®ã€ã³ã¹ããŒã«ã
- 2DBãæšæºã®æšå¥šæ§æã§ã¯ãããã¯MariaDBã§ãã
- NFSã¹ãã¬ãŒãžã
- ããŒã¿ããŒã¹ã¯ãšãªããã£ãã·ã¥ããããã®Redis
ãã©ã³ãµãŒ
ãã®ã¢ãŒããã¯ãã£ã䜿çšãããšãé害ç¹ãå°ãªããªããŸããæ éã®äž»ãªãã€ã³ãã¯ããŒããã©ã³ãµãŒã§ããå©çšã§ããªãå ŽåããŠãŒã¶ãŒã¯ãµãŒãã¹ã«ã¢ã¯ã»ã¹ã§ããŸããã幞ããåãnginxã®æ§æã¯ãåŸã§æ€èšããããã«éåžžã«åçŽã§ãããåââé¡ãªãè² è·ãä¿æããŸãããã©ã³ãµãŒã®ã»ãšãã©ã®é害ã¯ãããŒã¢ã³ãŸãã¯ããŒãå šäœãåèµ·åããããããã¯ã¢ãããããããã€ããããšã§è§£æ±ºã§ããŸããDNSã§æåãã©ãã£ãã¯ãåãæ¿ããŠãå¥ã®å Žæã«ã³ãŒã«ããªã¶ãŒããèšå®ããããšã¯äžèŠã§ã¯ãããŸããã
ãã©ã³ãµãŒã¯ã¯ã©ã€ã¢ã³ãã®SSL / TLSã¿ãŒãããŒã·ã§ã³ãã€ã³ãã§ããããããã¯ãšã³ããšã®éä¿¡ã¯ãä¿¡é Œã§ããå éšãããã¯ãŒã¯ã®å Žåã¯HTTPãä»ããŠãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãžã®ãã©ãã£ãã¯ãäžè¬çãªä¿¡é Œã§ããªããã£ãã«ãçµç±ããå Žåã¯è¿œå ã®HTTPSãä»ããŠè¡ãããšãã§ããŸãã
ããŒã¿ããŒã¹
å žåçãªè§£æ±ºçã¯ããã¹ã¿ãŒã¹ã¬ãŒãã¬ããªã±ãŒã·ã§ã³ã§ã®ã¯ã©ã¹ã¿ãŒå®è¡ã«ãããMySQL / MariaDBã§ããåæã«ãã¢ã¯ãã£ããªããŒã¿ããŒã¹ã¯1ã€ã ãã§ãã¡ã€ã³ã®ããŒã¿ããŒã¹ã«ç·æ¥é害ãçºçããå Žåãã¹ã±ãžã¥ãŒã«ãããäœæ¥äžã«ã2çªç®ã®ããŒã¿ããŒã¹ã¯ãããã¹ã¿ã³ãã€ã¢ãŒãã§åäœããŸããè² è·åæ£ãæ€èšã§ããŸãããæè¡çã«ã¯ããå°é£ã§ããMariaDB Galera Clusterããã¹ã¿ãŒãã¹ã¿ãŒã¬ããªã±ãŒã·ã§ã³ãªãã·ã§ã³ãšãšãã«äœ¿çšããå Žåã奿°ã®ããŒãã䜿çšããå¿ èŠããããŸãããå°ãªããšã3ã€ã¯äœ¿çšããå¿ èŠããããŸãããããã£ãŠãããŒãéã®æ¥ç¶ãåæããããšãã¹ããªãããã¬ã€ã³ç¶æ³ã®ãªã¹ã¯ãæå°éã«æããããŸãã
ã¹ãã¬ãŒãž
NFSãããã³ã«ãæäŸããæé©ãªãœãªã¥ãŒã·ã§ã³ãé«è² è·ã®å Žåã¯ãIBM ElasticStorageãŸãã¯Cephãæ€èšããŠãã ãããS3äºæã®ãªããžã§ã¯ãã¹ãã¬ãŒãžã䜿çšããããšãã§ããŸãããããã¯éåžžã«å€§èŠæš¡ãªã€ã³ã¹ããŒã«ã®å Žåã®ãªãã·ã§ã³ã§ãã
HDDãŸãã¯SSD
ååãšããŠãäžèŠæš¡ã®ã€ã³ã¹ããŒã«ã§ã¯ãHDDã®ã¿ã䜿çšããã ãã§ååã§ããããã§ã®ããã«ããã¯ã¯ãããŒã¿ããŒã¹ããèªã¿åããšãã®iopsã§ãããã·ã¹ãã ã®å¿çæ§ã«å€§ãã圱é¿ããŸããããã¹ãŠãRAMã«ãã£ãã·ã¥ããRedisãããå Žåãããã¯å€§ããªåé¡ã«ã¯ãªããŸããããŸãããã£ãã·ã¥ã®äžéšã¯ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®memcachedã«ä¿åãããŸãããã ããå¯èœãªéããSSDã§ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒããã¹ãããããšããå§ãããŸããWebã€ã³ã¿ãŒãã§ã€ã¹ã®å¿çæ§ãå€§å¹ ã«åäžããŸãããã®å Žåããã¹ã¯ãããã¯ã©ã€ã¢ã³ãã§ã®åããã¡ã€ã«åæã¯ããããã®ããŒãã«HDDã䜿çšããå Žåãšã»ãŒåãããã«æ©èœããŸãã
ãã¡ã€ã«ã®åæãšã¢ããããŒãã®é床ã¯ãNFSã¹ãã¬ãŒãžã®ããã©ãŒãã³ã¹ã«ãã£ãŠæ±ºãŸããŸãã
ãã©ã³ãµãŒã®æ§æ
äŸãšããŠãç°¡åãªåºââæ¬æ§æãšå¹ççãªnginxã玹ä»ããŸããã¯ããããŸããŸãªè¿œå ã®ãã§ã€ã«ãªãŒããŒãã³ã¯ææããŒãžã§ã³ã§ã®ã¿å©çšã§ããŸãããåºæ¬ããŒãžã§ã³ã§ããã®ã¿ã¹ã¯ãå®å šã«å®è¡ããŸããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã¯ç¹å®ã®ã¯ã©ã€ã¢ã³ãã®ãã£ãã·ã¥ãä¿åãããããã©ãŠã³ãããã³ãŸãã¯ã©ã³ãã ãã©ã³ã·ã³ã°ã¯é©åã§ã¯ãªãããšã«æ³šæããŠãã ããã
幞ããããã¯ip_hashã¡ãœããã䜿çšããŠè§£æ±ºãããŸãããã®å ŽåããŠãŒã¶ãŒã®ã»ãã·ã§ã³ã¯ç¹å®ã®ããã¯ãšã³ãã«å²ãåœãŠããããŠãŒã¶ãŒããã®ãã¹ãŠã®ãªã¯ãšã¹ããããã«éä¿¡ãããŸãããã®ç¹ã«ã€ããŠã¯ãããã¥ã¡ã³ãã§èª¬æãããŠããŸãã
, IP- . IPv4- IPv6- . , . , . .
æ®å¿µãªããããã®æ¹æ³ã䜿çšãããšãåçIPã®èåŸã«ããŠãçµ¶ããIPã倿ŽããŠãããŠãŒã¶ãŒã«åé¡ãçºçããå¯èœæ§ããããŸããããšãã°ãã¢ãã€ã«ã€ã³ã¿ãŒãããã䜿çšããŠããã¯ã©ã€ã¢ã³ãã§ã¯ãã»ã«ãåãæ¿ãããšãã«ããŸããŸãªã«ãŒãã«æ²¿ã£ãŠã¹ããŒã§ããŸãããã®åé¡ã解決ããã¹ãã£ãããŒã¯ãããŒã¯ãææçã§ã®ã¿å©çšã§ããŸãã
nginxæ§æãã¡ã€ã«ã¯ããããæ¬¡ã®ããã«èšè¿°ããŠããŸãã
upstream backend {
ip_hash;
server backend1_nextcloud.example.com;
server backend2_nextcloud.example.com;
server backend3_nextcloud.example.com;
server backend4_nextcloud.example.com;
}
ãã®å Žåãè² è·ã¯ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒéã§å¯èœãªéãåçã«åæ£ãããŸãããã¯ã©ã€ã¢ã³ããç¹å®ã®ã»ãã·ã§ã³ã«ãã€ã³ããããŠãããããè² è·ã®äžåè¡¡ãçºçããå¯èœæ§ããããŸããäžå°èŠæš¡ã®ã€ã³ã¹ããŒã«ã®å Žåãããã¯ç¡èŠã§ããŸããããã¯ãšã³ãã®ãã¯ãŒãç°ãªãå Žåã¯ãããããã®éã¿ãèšå®ã§ããŸããæ¬¡ã«ããã©ã³ãµãŒã¯æå®ãããéã¿ã«æ¯äŸããŠè² è·ã忣ããããšããŸãã
upstream backend {
ip_hash;
server backend1_nextcloud.example.com weight=3;
server backend2_nextcloud.example.com;
server backend3_nextcloud.example.com;
}
äžèšã®äŸã§ã¯ãåä¿¡ãã5ã€ã®ãªã¯ãšã¹ãã®ãã¡ã3ã€ãããã¯ãšã³ã1ã«ã1ã€ãããã¯ãšã³ã2ã«ã1ã€ãããã¯ãšã³ã3ã«éãããŸãã
ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®1ã€ã«é害ãçºçããå Žåãnginxã¯ããã¯ãšã³ãã®ãªã¹ãããæ¬¡ã®ãµãŒããŒã«èŠæ±ããªãã€ã¬ã¯ãããããšããŸãã
ããŒã¿ããŒã¹ã®æ§æ
ãã¹ã¿ãŒã¹ã¬ãŒãæ§æã®è©³çްã¯ãã¡ã€ã³ããã¥ã¡ã³ãã«èšèŒãããŠããŸãã
ããã€ãã®éèŠãªãã€ã³ããèŠãŠã¿ãŸãããããŸããããŒã¿è€è£œçšã®ãŠãŒã¶ãŒãäœæããŸãã
create user 'replicant'@'%' identified by 'replicant_password';
grant replication slave on *.* to replicant;
flush privileges;
次ã«ããã¹ã¿ãŒæ§æãç·šéããŸãã
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
ããã®ã³ã°ãšã¬ããªã±ãŒã·ã§ã³ããããã¯ã®é åã§ãå¿ èŠãªç·šéãè¡ããŸãïŒ
[mysqld]
log-bin = /var/log/mysql/master-bin
log-bin-index = /var/log/mysql/master-bin.index
binlog_format = mixed
server-id = 01
replicate-do-db = nextcloud
bind-address = 192.168.0.6
ã¹ã¬ãŒãã§æ§æãæ§æããŸãã
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
ããã®ã³ã°ãšã¬ããªã±ãŒã·ã§ã³ããããã¯ã®é åã§ãå¿ èŠãªç·šéãè¡ããŸãïŒ
[mysqld]
server-id = 02
relay-log-index = /var/log/mysql/slave-relay-bin.index
relay-log = /var/log/mysql/slave-relay-bin
replicate-do-db = nextcloud
read-only = 1
bind-address = 192.168.0.7
äž¡æ¹ã®ãµãŒããŒãåèµ·åããŸãã
sudo systemctl restart mariadb
次ã«ãããŒã¿ããŒã¹ãã¹ã¬ãŒãã«ã³ããŒããå¿ èŠããããŸãã
ãã¹ã¿ãŒã§ã¯ãæåã«ããŒãã«ããã¯ãå®è¡ããŸãã
flush tables with read lock;
次ã«ãã¹ããŒã¿ã¹ã確èªããŸãã
MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 772 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
ããŒã¿ããŒã¹ã³ã³ãœãŒã«ãçµäºããªãã§ãã ãããçµäºãããšãããã¯ãè§£é€ãããŸãã
ã¹ã¬ãŒãæ§æã«ã¯ãããããmaster_log_fileãšmaster_log_posãå¿ èŠã«ãªããŸãã
ããã¯ã®ãã³ããšåé€ïŒ
sudo mysqldump -u root nextcloud > nextcloud.sql
> unlock tables;
> exit;
次ã«ããã³ããã¹ã¬ãŒãã«ã€ã³ããŒãããããŒã¢ã³ãåèµ·åããŸãã
sudo mysqldump -u root nextcloud < nextcloud.sql
sudo systemctl restart mariadb
ãã®åŸãã³ã³ãœãŒã«ã§ã¬ããªã±ãŒã·ã§ã³ãèšå®ããŸãã
MariaDB [(none)]> change master 'master01' to
master_host='192.168.0.6',
master_user='replicant',
master_password='replicant_password',
master_port=3306,
master_log_file='master-bin.000001',
master_log_pos=772,
master_connect_retry=10,
master_use_gtid=slave_pos;
èµ·åããŠç¢ºèªããŸãã
> start slave 'master01';
show slave 'master01' status\G;
åçã«ãšã©ãŒããã£ãŠã¯ãªããã2ã€ã®ãã€ã³ããæé ã®æåã瀺ããŸãã
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
ã¢ããªã±ãŒã·ã§ã³ããŒããå±éãã
ããã€ãã®å±éãªãã·ã§ã³ããããŸãã
- ã¹ããã
- docker-image
- æåæŽæ°
Snapã¯äž»ã«Ubuntuã§å©çšã§ããŸããè€éãªç¬èªã®ã¢ããªã±ãŒã·ã§ã³ãæäŸããã®ã¯éåžžã«åªããŠããŸãããããã©ã«ãã§ã¯ãããããããã¯ç£æ¥ç°å¢ã§ã¯ããªãåä»ãªæ©èœãæã£ãŠããŸã-ããã¯ãã®ããã±ãŒãžã1æ¥ã«æ°åèªåçã«æŽæ°ããŸãããŸããå³å¯ã«åºåãããå éšãããã¯ãŒã¯ãããå Žåã¯ãå€éšãžã®è¿œå ã¢ã¯ã»ã¹ã確èªããå¿ èŠããããŸããåæã«ãå éšã®ãªããžããªããã©ãŒãªã³ã°ããããšã¯å®å šã«ç°¡åã§ã¯ãããŸããã
ã¯ãããµãã¹ã¯ãªãã·ã§ã³ãã£ãã«ããããã¡ãžã£ãŒãªãªãŒã¹ã¯ãçè«çã«ã¯åãæ¿ããã¹ãã§ã¯ãããŸããããèããŠã¿ãŠãã ãããç¹ã«ããŒã¿ããŒã¹ã®ããŒã¿æ§é ã®å€æŽã䌎ãããšãå€ããããæŽæ°ããã»ã¹ãå®å šã«å¶åŸ¡ããããšããå§ãããŸãã
Docker-imageã¯ãç¹ã«ã€ã³ãã©ã¹ãã©ã¯ãã£ããã§ã«Kubernetesã§å®è¡ãããŠããå Žåã«é©ãããªãã·ã§ã³ã§ããåãRedisããŒãã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®åŸã«ã¯ã©ã¹ã¿ãŒã«ç§»åããå¯èœæ§ããããŸãã
ãããè¡ãããã®ã€ã³ãã©ã¹ãã©ã¯ãã£ããªãå Žåã¯ãtar.gzããæåã§æŽæ°ããã³å±éããã®ãéåžžã«äŸ¿å©ã§ãå¶åŸ¡å¯èœã§ãã
çä¿¡èŠæ±ãåŠçããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã«WebãµãŒããŒãã€ã³ã¹ããŒã«ããå¿ èŠãããããšã«æ³šæããŠãã ãããnginx + php-fpm7.4ã®ãã³ãã«ããå§ãããŸããææ°ããŒãžã§ã³ã®php-fmpã«ãããããã©ãŒãã³ã¹ãšå¿çæ§ãå€§å¹ ã«åäžããŸããã
SSL / TLSã®æ§æ
æ°èŠã€ã³ã¹ããŒã«ãè¡ã£ãŠããŠãã·ã¹ãã opensslã®é®®åºŠã«äŸåããnginxããã±ãŒãžã«åé¡ããªãå Žåã¯ãTLS1.3ã確å®ã«ä¿¡é Œããå¿ èŠããããŸããç¹ã«ã0-RTTããã®ä»ã®æ©èœã䜿çšãããšããã£ãã·ã³ã°ã«ããã¯ã©ã€ã¢ã³ãã®åæ¥ç¶ãå€§å¹ ã«é«éåã§ããå ŽåããããŸããå€ããããã³ã«ãåé€ãããããã»ãã¥ãªãã£ãé«ããªããŸãã
TLSãä»ããŠãã©ã³ãµãŒãšéä¿¡ããnginxã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®å®éã®æ§æã瀺ããŸãã
Nginxæ§æ
upstream php-handler {
server unix:/var/run/php/php7.4-fpm.sock;
}
server {
listen 80;
server_name backend1_nextcloud.example.com;
# enforce https
root /var/www/nextcloud/;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
ssl_early_data on;
# listen [::]:443 ssl http2;
server_name backend1_nextcloud.example.com;
# Path to the root of your installation
root /var/www/nextcloud/;
# Log path
access_log /var/log/nginx/nextcloud.nginx-access.log;
error_log /var/log/nginx/nextcloud.nginx-error.log;
### SSL CONFIGURATION ###
ssl_certificate /etc/letsencrypt/live/backend1_nextcloud.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/backend1_nextcloud.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/backend1_nextcloud.example.com/fullchain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
#ssl_ciphers "EECDH+AESGCM:EECDH+CHACHA20:EECDH+AES256:!AES128";
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POL>
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 5m;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.4.4 8.8.8.8;
add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload' always;
### SSL ###
# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
# add_header Strict-Transport-Security "max-age=15768000;
# includeSubDomains; preload;";
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
# last;
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# Enable gzip but do not remove ETag headers
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 application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fon>
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
location / {
rewrite ^ /index.php;
}
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js, css and map files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Optional: Don't log access to assets
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}宿ã¡ã³ããã³ã¹
ç£æ¥ç°å¢ã§ã¯ãã¢ããã°ã¬ãŒããŸãã¯ããã«å€ãã®ããã¯ã¢ããã®ããã«æå°éã®ããŠã³ã¿ã€ã ãæäŸããå¿ èŠãããããšãå¿ããªãã§ãã ãããããã§ã®äž»ãªåé¡ã¯ãããŒã¿ããŒã¹å ã®ã¡ã¿ããŒã¿ã®ç¶æ ãšãNFSãŸãã¯ãªããžã§ã¯ãã¹ãã¬ãŒãžãä»ããŠå©çšã§ãããã¡ã€ã«èªäœã®äŸåé¢ä¿ã§ãã
ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãæ°ãããã€ããŒããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããå Žåãç¹å¥ãªåé¡ã¯ãããŸããããã ããããŒã¿ããŒã¹æ§é ãæŽæ°ããã«ã¯ãã¯ã©ã¹ã¿ãŒãã¡ã³ããã³ã¹ã¢ãŒãã«ç§»è¡ããå¿ èŠããããŸãã
è² è·ãæå°ã®ãšãã«ãã©ã³ãµãŒããªãã«ããŠãæŽæ°ãç¶è¡ããŸãã
ãã®åŸãconfig.phpæ§æãã¡ã€ã«ãä¿åããªãããããŠã³ããŒãããtar.gzããæåæŽæ°ããã»ã¹ãå®è¡ããŸããå€§èŠæš¡ãªã€ã³ã¹ããŒã«ã§Webãä»ããŠæŽæ°ããããšã¯ãéåžžã«æªãèãã§ãã
ã³ãã³ãã©ã€ã³ãä»ããŠæŽæ°ããŸãã
sudo -u www-data php /var/www/nextcloud/occ upgrade
ãã®åŸããã©ã³ãµãŒããªã³ã«ããŠãæŽæ°ããããµãŒããŒã«ãã©ãã£ãã¯ãéä¿¡ããŸãããããè¡ãã«ã¯ãæŽæ°ãããŠããªããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒããã©ã³ã·ã³ã°ããåé€ããŸãã
upstream backend {
ip_hash;
server backend1_nextcloud.example.com;
server backend2_nextcloud.example.com down;
server backend3_nextcloud.example.com down;
server backend4_nextcloud.example.com down;
}
æ®ãã®ããŒãã¯åŸã ã«æŽæ°ãããéçšãããŠããŸãããã®å Žåãoccã¢ããã°ã¬ãŒããå®è¡ããå¿ èŠã¯ãããŸããïŒphpãã¡ã€ã«ã眮ãæããŠæ§æãä¿åããã ãã§ãã
ããã¯ã¢ãããããšãã¯ãã¹ã¬ãŒããžã®ã¬ããªã±ãŒã·ã§ã³ã忢ããã¹ãã¬ãŒãžå ã®ãã¡ã€ã«ã®ã¹ãããã·ã§ãããäœæãããšåæã«ãããŒã¿ããŒã¹ããã¡ã¿ããŒã¿ã®ãã³ããåæã«å®è¡ããå¿ èŠããããŸãããããããã¢ã§ä¿åããå¿ èŠããããŸãããªã«ããªã¯ãããŒã¿ããŒã¹ãã³ããšãã¡ã€ã«ããåãæéåæ§ã«å®è¡ããå¿ èŠããããŸããããããªããšããã¡ã€ã«ãã¹ãã¬ãŒãžã«ããå¯èœæ§ããããŸãããããŒã¿ããŒã¹ã«ã¡ã¿ããŒã¿ããªããããããŒã¿ã倱ãããå¯èœæ§ããããŸãã
