ConfigLMM 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +70 -0
  3. data/CNAME +1 -0
  4. data/Examples/.lmm.state.yaml +159 -0
  5. data/Examples/ConfigLMM.mm.yaml +32 -0
  6. data/Examples/Implemented.mm.yaml +252 -4
  7. data/Examples/SmallBusiness.mm.yaml +492 -0
  8. data/Plugins/Apps/Answer/answer.lmm.rb +165 -0
  9. data/Plugins/Apps/Answer/answer@.service +40 -0
  10. data/Plugins/Apps/ArchiSteamFarm/ArchiSteamFarm.conf.erb +0 -3
  11. data/Plugins/Apps/ArchiSteamFarm/ArchiSteamFarm.lmm.rb +0 -1
  12. data/Plugins/Apps/Authentik/Authentik-ProxyOutpost.container +20 -0
  13. data/Plugins/Apps/Authentik/Authentik-Server.container +7 -1
  14. data/Plugins/Apps/Authentik/Authentik-Worker.container +7 -1
  15. data/Plugins/Apps/Authentik/Authentik.conf.erb +18 -6
  16. data/Plugins/Apps/Authentik/Authentik.lmm.rb +232 -45
  17. data/Plugins/Apps/BookStack/BookStack.conf.erb +38 -0
  18. data/Plugins/Apps/BookStack/BookStack.container +20 -0
  19. data/Plugins/Apps/BookStack/BookStack.lmm.rb +91 -0
  20. data/Plugins/Apps/Cassandra/Cassandra.lmm.rb +9 -19
  21. data/Plugins/Apps/ClickHouse/ClickHouse.container +28 -0
  22. data/Plugins/Apps/ClickHouse/ClickHouse.lmm.rb +113 -0
  23. data/Plugins/Apps/ClickHouse/Config/listen.yaml +2 -0
  24. data/Plugins/Apps/ClickHouse/Config/logger.yaml +8 -0
  25. data/Plugins/Apps/ClickHouse/Config/zookeepers.yaml +5 -0
  26. data/Plugins/Apps/ClickHouse/Connection.rb +96 -0
  27. data/Plugins/Apps/Discourse/Discourse-Sidekiq.container +22 -0
  28. data/Plugins/Apps/Discourse/Discourse.conf.erb +38 -0
  29. data/Plugins/Apps/Discourse/Discourse.container +21 -0
  30. data/Plugins/Apps/Discourse/Discourse.lmm.rb +156 -0
  31. data/Plugins/Apps/Dovecot/Dovecot.lmm.rb +87 -52
  32. data/Plugins/Apps/ERPNext/ERPNext-Frontend.container +24 -0
  33. data/Plugins/Apps/ERPNext/ERPNext-Queue.container +22 -0
  34. data/Plugins/Apps/ERPNext/ERPNext-Scheduler.container +22 -0
  35. data/Plugins/Apps/ERPNext/ERPNext-Websocket.container +24 -0
  36. data/Plugins/Apps/ERPNext/ERPNext.container +23 -0
  37. data/Plugins/Apps/ERPNext/ERPNext.lmm.rb +204 -0
  38. data/Plugins/Apps/ERPNext/ERPNext.network +12 -0
  39. data/Plugins/Apps/ERPNext/sites/apps.json +10 -0
  40. data/Plugins/Apps/ERPNext/sites/apps.txt +3 -0
  41. data/Plugins/Apps/ERPNext/sites/common_site_config.json +11 -0
  42. data/Plugins/Apps/GitLab/GitLab.container +9 -2
  43. data/Plugins/Apps/GitLab/GitLab.lmm.rb +52 -33
  44. data/Plugins/Apps/Homepage/Homepage.conf.erb +86 -0
  45. data/Plugins/Apps/Homepage/Homepage.container +19 -0
  46. data/Plugins/Apps/Homepage/Homepage.lmm.rb +54 -0
  47. data/Plugins/Apps/IPFS/IPFS.conf.erb +0 -3
  48. data/Plugins/Apps/IPFS/IPFS.lmm.rb +0 -1
  49. data/Plugins/Apps/InfluxDB/InfluxDB.conf.erb +0 -3
  50. data/Plugins/Apps/InfluxDB/InfluxDB.lmm.rb +0 -1
  51. data/Plugins/Apps/Jackett/Jackett.conf.erb +0 -3
  52. data/Plugins/Apps/Jackett/Jackett.lmm.rb +0 -1
  53. data/Plugins/Apps/Jellyfin/Jellyfin.conf.erb +0 -3
  54. data/Plugins/Apps/Jellyfin/Jellyfin.lmm.rb +0 -1
  55. data/Plugins/Apps/LetsEncrypt/LetsEncrypt.lmm.rb +78 -0
  56. data/Plugins/Apps/LetsEncrypt/hooks/dovecot.sh +2 -0
  57. data/Plugins/Apps/LetsEncrypt/hooks/nginx.sh +2 -0
  58. data/Plugins/Apps/LetsEncrypt/hooks/postfix.sh +2 -0
  59. data/Plugins/Apps/LetsEncrypt/renew-certificates.service +7 -0
  60. data/Plugins/Apps/LetsEncrypt/renew-certificates.timer +12 -0
  61. data/Plugins/Apps/LetsEncrypt/rfc2136.ini +11 -0
  62. data/Plugins/Apps/LibreTranslate/LibreTranslate.container +21 -0
  63. data/Plugins/Apps/LibreTranslate/LibreTranslate.lmm.rb +34 -0
  64. data/Plugins/Apps/Lobsters/Containerfile +81 -0
  65. data/Plugins/Apps/Lobsters/Lobsters-Tasks.container +26 -0
  66. data/Plugins/Apps/Lobsters/Lobsters.conf.erb +99 -0
  67. data/Plugins/Apps/Lobsters/Lobsters.container +27 -0
  68. data/Plugins/Apps/Lobsters/Lobsters.lmm.rb +196 -0
  69. data/Plugins/Apps/Lobsters/crontab +3 -0
  70. data/Plugins/Apps/Lobsters/database.yml +26 -0
  71. data/Plugins/Apps/Lobsters/entrypoint.sh +30 -0
  72. data/Plugins/Apps/Lobsters/generateCredentials.rb +19 -0
  73. data/Plugins/Apps/Lobsters/lobsters-cron.sh +25 -0
  74. data/Plugins/Apps/Lobsters/lobsters-daily.sh +23 -0
  75. data/Plugins/Apps/Lobsters/puma.rb +49 -0
  76. data/Plugins/Apps/MariaDB/Connection.rb +55 -0
  77. data/Plugins/Apps/MariaDB/MariaDB.lmm.rb +122 -0
  78. data/Plugins/Apps/Mastodon/Mastodon-Sidekiq.container +22 -0
  79. data/Plugins/Apps/Mastodon/Mastodon-Streaming.container +20 -0
  80. data/Plugins/Apps/Mastodon/Mastodon.conf.erb +34 -45
  81. data/Plugins/Apps/Mastodon/Mastodon.container +28 -0
  82. data/Plugins/Apps/Mastodon/Mastodon.lmm.rb +240 -5
  83. data/Plugins/Apps/Mastodon/configlmm.rake +30 -0
  84. data/Plugins/Apps/Mastodon/entrypoint.sh +16 -0
  85. data/Plugins/Apps/Matrix/Element.container +19 -0
  86. data/Plugins/Apps/Matrix/Matrix.conf.erb +47 -9
  87. data/Plugins/Apps/Matrix/Matrix.lmm.rb +119 -5
  88. data/Plugins/Apps/Matrix/Synapse.container +22 -0
  89. data/Plugins/Apps/Matrix/config.json +50 -0
  90. data/Plugins/Apps/Matrix/homeserver.yaml +70 -0
  91. data/Plugins/Apps/Matrix/log.config +30 -0
  92. data/Plugins/Apps/Netdata/Netdata.conf.erb +0 -3
  93. data/Plugins/Apps/Netdata/Netdata.lmm.rb +0 -1
  94. data/Plugins/Apps/Nextcloud/Nextcloud.conf.erb +3 -4
  95. data/Plugins/Apps/Nextcloud/Nextcloud.lmm.rb +155 -48
  96. data/Plugins/Apps/Nextcloud/autoconfig.php +13 -0
  97. data/Plugins/Apps/Nextcloud/config.php +10 -1
  98. data/Plugins/Apps/Nextcloud/nextcloudcron.service +8 -0
  99. data/Plugins/Apps/Nextcloud/nextcloudcron.timer +10 -0
  100. data/Plugins/Apps/Nginx/Connection.rb +93 -0
  101. data/Plugins/Apps/Nginx/conf.d/configlmm.conf +54 -4
  102. data/Plugins/Apps/Nginx/conf.d/languages.conf +21 -0
  103. data/Plugins/Apps/Nginx/config-lmm/errors.conf +33 -22
  104. data/Plugins/Apps/Nginx/config-lmm/gateway-errors.conf +20 -0
  105. data/Plugins/Apps/Nginx/config-lmm/proxy.conf +6 -2
  106. data/Plugins/Apps/Nginx/main.conf.erb +7 -3
  107. data/Plugins/Apps/Nginx/nginx.conf +2 -2
  108. data/Plugins/Apps/Nginx/nginx.lmm.rb +103 -81
  109. data/Plugins/Apps/Nginx/proxy.conf.erb +24 -6
  110. data/Plugins/Apps/Odoo/Odoo.conf.erb +0 -3
  111. data/Plugins/Apps/Odoo/Odoo.container +7 -1
  112. data/Plugins/Apps/Odoo/Odoo.lmm.rb +4 -5
  113. data/Plugins/Apps/Ollama/Ollama.container +26 -0
  114. data/Plugins/Apps/Ollama/Ollama.lmm.rb +73 -0
  115. data/Plugins/Apps/OpenTelemetry/Config/config.yaml +704 -0
  116. data/Plugins/Apps/OpenTelemetry/OpenTelemetry.lmm.rb +154 -0
  117. data/Plugins/Apps/OpenVidu/Ingress.container +23 -0
  118. data/Plugins/Apps/{GitLab/GitLab.conf.erb → OpenVidu/OpenVidu.conf.erb} +8 -3
  119. data/Plugins/Apps/OpenVidu/OpenVidu.container +21 -0
  120. data/Plugins/Apps/OpenVidu/OpenVidu.lmm.rb +94 -0
  121. data/Plugins/Apps/OpenVidu/OpenViduCall.conf.erb +32 -0
  122. data/Plugins/Apps/OpenVidu/OpenViduCall.container +20 -0
  123. data/Plugins/Apps/OpenVidu/ingress.yaml +10 -0
  124. data/Plugins/Apps/OpenVidu/livekit.yaml +13 -0
  125. data/Plugins/Apps/PHP-FPM/Connection.rb +91 -0
  126. data/Plugins/Apps/PHP-FPM/PHP-FPM.lmm.rb +31 -4
  127. data/Plugins/Apps/Peppermint/Peppermint.conf.erb +2 -9
  128. data/Plugins/Apps/Peppermint/Peppermint.container +7 -1
  129. data/Plugins/Apps/Peppermint/Peppermint.lmm.rb +29 -33
  130. data/Plugins/Apps/Perplexica/Perplexica.container +25 -0
  131. data/Plugins/Apps/Perplexica/Perplexica.lmm.rb +92 -0
  132. data/Plugins/Apps/Perplexica/config.toml +26 -0
  133. data/Plugins/Apps/Podman/Connection.rb +24 -0
  134. data/Plugins/Apps/Podman/Podman.lmm.rb +80 -0
  135. data/Plugins/Apps/Podman/storage.conf +6 -0
  136. data/Plugins/Apps/Postfix/Postfix.lmm.rb +249 -145
  137. data/Plugins/Apps/PostgreSQL/Connection.rb +97 -0
  138. data/Plugins/Apps/PostgreSQL/PostgreSQL.lmm.rb +204 -99
  139. data/Plugins/Apps/Pterodactyl/Pterodactyl.conf.erb +0 -3
  140. data/Plugins/Apps/Pterodactyl/Pterodactyl.lmm.rb +0 -2
  141. data/Plugins/Apps/Pterodactyl/Wings.conf.erb +0 -3
  142. data/Plugins/Apps/RVM/RVM.lmm.rb +57 -0
  143. data/Plugins/Apps/Roundcube/Roundcube.conf.erb +72 -0
  144. data/Plugins/Apps/Roundcube/Roundcube.lmm.rb +141 -0
  145. data/Plugins/Apps/SSH/SSH.lmm.rb +9 -15
  146. data/Plugins/Apps/SearXNG/SearXNG.container +22 -0
  147. data/Plugins/Apps/SearXNG/SearXNG.lmm.rb +79 -0
  148. data/Plugins/Apps/SearXNG/limiter.toml +40 -0
  149. data/Plugins/Apps/SearXNG/settings.yml +2 -0
  150. data/Plugins/Apps/SigNoz/Config/alerts.yml +11 -0
  151. data/Plugins/Apps/SigNoz/Config/otel-collector-config.yaml +110 -0
  152. data/Plugins/Apps/SigNoz/Config/otel-collector-opamp-config.yaml +1 -0
  153. data/Plugins/Apps/SigNoz/Config/prometheus.yml +18 -0
  154. data/Plugins/Apps/SigNoz/SigNoz-Collector.container +23 -0
  155. data/Plugins/Apps/SigNoz/SigNoz-Migrator.container +17 -0
  156. data/Plugins/Apps/SigNoz/SigNoz.conf.erb +61 -0
  157. data/Plugins/Apps/SigNoz/SigNoz.container +26 -0
  158. data/Plugins/Apps/SigNoz/SigNoz.lmm.rb +319 -0
  159. data/Plugins/Apps/Solr/log4j2.xml +89 -0
  160. data/Plugins/Apps/Solr/solr.lmm.rb +82 -0
  161. data/Plugins/Apps/Sunshine/Sunshine.conf.erb +0 -3
  162. data/Plugins/Apps/Sunshine/Sunshine.lmm.rb +0 -1
  163. data/Plugins/Apps/Tunnel/tunnel.lmm.rb +59 -0
  164. data/Plugins/Apps/Tunnel/tunnelTCP.service +9 -0
  165. data/Plugins/Apps/Tunnel/tunnelTCP.socket +9 -0
  166. data/Plugins/Apps/Tunnel/tunnelUDP.service +9 -0
  167. data/Plugins/Apps/Tunnel/tunnelUDP.socket +9 -0
  168. data/Plugins/Apps/UVdesk/UVdesk.conf.erb +0 -3
  169. data/Plugins/Apps/Umami/Umami.container +19 -0
  170. data/Plugins/Apps/Umami/Umami.lmm.rb +108 -0
  171. data/Plugins/Apps/Valkey/Valkey.lmm.rb +64 -20
  172. data/Plugins/Apps/Vaultwarden/Vaultwarden.conf.erb +9 -6
  173. data/Plugins/Apps/Vaultwarden/Vaultwarden.container +7 -1
  174. data/Plugins/Apps/Vaultwarden/Vaultwarden.lmm.rb +67 -28
  175. data/Plugins/Apps/Wiki.js/Wiki.js.conf.erb +39 -0
  176. data/Plugins/Apps/Wiki.js/Wiki.js.container +20 -0
  177. data/Plugins/Apps/Wiki.js/Wiki.js.lmm.rb +55 -0
  178. data/Plugins/Apps/YaCy/YaCy.conf.erb +93 -0
  179. data/Plugins/Apps/YaCy/YaCy.container +21 -0
  180. data/Plugins/Apps/YaCy/YaCy.lmm.rb +160 -0
  181. data/Plugins/Apps/ZooKeeper/ZooKeeper.container +24 -0
  182. data/Plugins/Apps/ZooKeeper/ZooKeeper.lmm.rb +68 -0
  183. data/Plugins/Apps/bitmagnet/bitmagnet.conf.erb +0 -3
  184. data/Plugins/Apps/bitmagnet/bitmagnet.lmm.rb +0 -1
  185. data/Plugins/Apps/gollum/gollum.conf.erb +40 -4
  186. data/Plugins/Apps/gollum/gollum.container +10 -1
  187. data/Plugins/Apps/gollum/gollum.lmm.rb +56 -47
  188. data/Plugins/Apps/llama.cpp/llama.cpp.container +28 -0
  189. data/Plugins/Apps/llama.cpp/llama.cpp.lmm.rb +90 -0
  190. data/Plugins/Apps/vLLM/vLLM.container +32 -0
  191. data/Plugins/Apps/vLLM/vLLM.lmm.rb +89 -0
  192. data/Plugins/OS/General/Utils.lmm.rb +26 -0
  193. data/Plugins/OS/Linux/Connection.rb +472 -0
  194. data/Plugins/OS/Linux/Debian/preseed.cfg.erb +81 -0
  195. data/Plugins/OS/Linux/Distributions.yaml +32 -0
  196. data/Plugins/OS/Linux/Flavours.yaml +24 -0
  197. data/Plugins/OS/Linux/Grub/grub.cfg +10 -0
  198. data/Plugins/OS/Linux/HTTP.rb +32 -0
  199. data/Plugins/OS/Linux/Linux.lmm.rb +708 -174
  200. data/Plugins/OS/Linux/Packages.yaml +67 -3
  201. data/Plugins/OS/Linux/Proxmox/answer.toml.erb +30 -0
  202. data/Plugins/OS/Linux/Services.yaml +8 -0
  203. data/Plugins/OS/Linux/Shell.rb +70 -0
  204. data/Plugins/OS/Linux/Syslinux/default +8 -0
  205. data/Plugins/OS/Linux/WireGuard/WireGuard.lmm.rb +93 -40
  206. data/Plugins/OS/Linux/WireGuard/wg0.conf.erb +3 -0
  207. data/Plugins/OS/Linux/openSUSE/autoinst.xml.erb +29 -3
  208. data/Plugins/OS/Linux/systemd/systemd.lmm.rb +13 -11
  209. data/Plugins/OS/Routers/Aruba/ArubaInstant.lmm.rb +6 -5
  210. data/Plugins/Platforms/GitHub.lmm.rb +73 -28
  211. data/Plugins/Platforms/GoDaddy/GoDaddy.lmm.rb +10 -7
  212. data/Plugins/Platforms/Proxmox/Proxmox.lmm.rb +402 -0
  213. data/Plugins/Platforms/Proxmox/XTerm.rb +321 -0
  214. data/Plugins/Platforms/libvirt/libvirt.lmm.rb +41 -15
  215. data/Plugins/Platforms/porkbun.lmm.rb +12 -2
  216. data/Plugins/Platforms/porkbun_spec.rb +2 -2
  217. data/Plugins/Services/DNS/AmberBit.lmm.rb +1 -1
  218. data/Plugins/Services/DNS/ArubaItDNS.lmm.rb +1 -1
  219. data/Plugins/Services/DNS/NICLV.lmm.rb +1 -1
  220. data/Plugins/Services/DNS/PowerDNS.lmm.rb +130 -41
  221. data/Plugins/Services/DNS/tonic.lmm.rb +22 -12
  222. data/bootstrap.sh +41 -3
  223. data/lib/ConfigLMM/Framework/plugins/dns.rb +4 -3
  224. data/lib/ConfigLMM/Framework/plugins/linuxApp.rb +187 -144
  225. data/lib/ConfigLMM/Framework/plugins/nginxApp.rb +54 -6
  226. data/lib/ConfigLMM/Framework/plugins/plugin.rb +68 -140
  227. data/lib/ConfigLMM/Framework/plugins/store.rb +4 -4
  228. data/lib/ConfigLMM/Framework/variables.rb +75 -0
  229. data/lib/ConfigLMM/Framework.rb +1 -0
  230. data/lib/ConfigLMM/cli.rb +13 -5
  231. data/lib/ConfigLMM/commands/cleanup.rb +1 -0
  232. data/lib/ConfigLMM/commands/configsCommand.rb +38 -5
  233. data/lib/ConfigLMM/commands/diff.rb +33 -9
  234. data/lib/ConfigLMM/context.rb +22 -3
  235. data/lib/ConfigLMM/io/configList.rb +85 -7
  236. data/lib/ConfigLMM/io/connection.rb +143 -0
  237. data/lib/ConfigLMM/io/dhcp.rb +330 -0
  238. data/lib/ConfigLMM/io/http.rb +78 -0
  239. data/lib/ConfigLMM/io/local.rb +207 -0
  240. data/lib/ConfigLMM/io/pxe.rb +92 -0
  241. data/lib/ConfigLMM/io/ssh.rb +156 -0
  242. data/lib/ConfigLMM/io/tftp.rb +105 -0
  243. data/lib/ConfigLMM/io.rb +2 -0
  244. data/lib/ConfigLMM/secrets/envStore.rb +39 -0
  245. data/lib/ConfigLMM/secrets/fileStore.rb +43 -0
  246. data/lib/ConfigLMM/state.rb +12 -3
  247. data/lib/ConfigLMM/version.rb +2 -1
  248. data/lib/ConfigLMM.rb +1 -0
  249. data/{Examples → scripts}/configlmmAuth.sh +7 -5
  250. metadata +257 -9
@@ -1,14 +1,16 @@
1
1
 
2
2
  module ConfigLMM
3
3
  module LMM
4
- class Nextcloud < Framework::NginxApp
4
+ class Nextcloud < Framework::Plugin
5
5
 
6
6
  USER = 'nextcloud'
7
7
  HOME_DIR = '/var/lib/nextcloud'
8
8
  PACKAGE_NAME = 'Nextcloud'
9
9
 
10
10
  def actionNextcloudBuild(id, target, state, context, options)
11
- writeNginxConfig(__dir__, 'Nextcloud', id, target, state, context, options)
11
+ Nginx.withConnection(local) do |nginxConnection|
12
+ nginxConnection.writeConfig(__dir__, 'Nextcloud', target, state, context, options)
13
+ end
12
14
  end
13
15
 
14
16
  def actionNextcloudDiff(id, target, activeState, context, options)
@@ -16,62 +18,167 @@ module ConfigLMM
16
18
  end
17
19
 
18
20
  def actionNextcloudDeploy(id, target, activeState, context, options)
19
- if target['Location'] && target['Location'] != '@me'
20
- uri = Addressable::URI.parse(target['Location'])
21
- raise Framework::PluginProcessError.new("#{id}: Unknown Protocol: #{uri.scheme}!") if uri.scheme != 'ssh'
22
- self.class.sshStart(uri) do |ssh|
23
- if !target.key?('Proxy') || target['Proxy'] != 'only'
24
- Framework::LinuxApp.ensurePackages([PHP_FPM::PHPFPM_PACKAGE], ssh)
25
- Framework::LinuxApp.ensureServiceAutoStartOverSSH(PHP_FPM::PHPFPM_SERVICE, ssh)
26
- distroInfo = Framework::LinuxApp.ensurePackages([PACKAGE_NAME], ssh)
27
- addUserCmd = "#{distroInfo['CreateServiceUser']} --home-dir '#{HOME_DIR}' --create-home --comment 'Nextcloud' #{USER}"
28
- self.class.sshExec!(ssh, addUserCmd, true)
29
- self.class.sshExec!(ssh, "mkdir -p /var/log/php/ /var/lib/nextcloud/apps/ /var/lib/nextcloud/data/")
30
- self.class.sshExec!(ssh, "touch /var/log/php/nextcloud.errors.log")
31
- self.class.sshExec!(ssh, "touch /var/log/php/nextcloud.mail.log")
32
- self.class.sshExec!(ssh, "chown #{USER}:#{USER} /var/log/php/nextcloud.errors.log")
33
- self.class.sshExec!(ssh, "chown #{USER}:#{USER} /var/log/php/nextcloud.mail.log")
34
- PHP_FPM::fixConfigFileOverSSH(distroInfo, ssh)
35
-
36
- webappsDir = PHP_FPM::webappsDir(distroInfo)
37
- configDir = webappsDir + 'nextcloud/config/'
38
- if !self.class.remoteFilePresent?(configDir + 'config.php', ssh)
39
- self.class.uploadNotPresent(__dir__ + '/config.php', configDir, ssh)
40
- self.class.sshExec!(ssh, "sed -i \"s|'instanceid' .*|'instanceid' => '#{SecureRandom.alphanumeric(10)}',|\" #{configDir}config.php")
41
- self.class.sshExec!(ssh, "touch #{configDir}CAN_INSTALL")
42
- self.class.sshExec!(ssh, "sed -i 's|/usr/share/webapps/|#{webappsDir}|' #{configDir}config.php")
21
+ self.withConnection(target['Location'], target) do |connection|
22
+ Linux.withConnection(connection) do |linuxConnection|
23
+ PHP_FPM::deploy(linuxConnection, options)
24
+ linuxConnection.ensurePackage(PACKAGE_NAME, options)
25
+
26
+ Podman.createUser(USER, HOME_DIR, 'Nextcloud', linuxConnection, options)
27
+ linuxConnection.withUserShell(USER) do |shell|
28
+ shell.createDirs(options, '~/apps', '~/data')
29
+ end
30
+ linuxConnection.createDirs(options, '/var/log/php')
31
+ linuxConnection.makeAccessible(HOME_DIR, options)
32
+
33
+ webappsDir = nil
34
+ PHP_FPM.withConnection(linuxConnection) do |phpConnection|
35
+ webappsDir = phpConnection.webappsDir
36
+ phpConnection.enableExtension('imagick', options)
37
+ end
38
+
39
+ target['User'] = USER unless target['User']
40
+ target['Root'] = webappsDir + 'nextcloud'
41
+ dbPassword = configureDatabase(target, linuxConnection, context, options)
42
+
43
+ configDir = webappsDir + 'nextcloud/config/'
44
+ if !linuxConnection.filePresent?(configDir + 'config.php', options)
45
+ linuxConnection.fileWrite('/var/log/php/nextcloud.access.json', '', options)
46
+ linuxConnection.fileWrite('/var/log/php/nextcloud.errors.log', '', options)
47
+ linuxConnection.fileWrite('/var/log/php/nextcloud.mail.log', '', options)
48
+
49
+ linuxConnection.setUserGroup('/var/log/php/nextcloud.access.json', USER, USER, options)
50
+ linuxConnection.setUserGroup('/var/log/php/nextcloud.errors.log', USER, USER, options)
51
+ linuxConnection.setUserGroup('/var/log/php/nextcloud.mail.log', USER, USER, options)
52
+
53
+ linuxConnection.exec("chmod o-r /var/log/php/nextcloud.access.json /var/log/php/nextcloud.errors.log /var/log/php/nextcloud.mail.log", false, options)
54
+
55
+ linuxConnection.upload(__dir__ + '/autoconfig.php', configDir, options)
56
+
57
+ linuxConnection.fileReplace("#{configDir}autoconfig.php", "'dbuser' .*", "'dbuser' => '#{target['User']}',", options)
58
+ linuxConnection.fileReplace("#{configDir}autoconfig.php", "'dbpass' .*", "'dbpass' => '#{dbPassword}',", { **options, hide: true })
59
+
60
+ if target['Database']['HostName'] != 'localhost'
61
+ linuxConnection.fileReplace("#{configDir}autoconfig.php", "'dbhost' .*", "'dbhost' => '#{target['Database']['HostName']}',", options)
43
62
  end
44
- self.class.sshExec!(ssh, "chown -R nextcloud:nextcloud #{configDir}")
45
- self.class.sshExec!(ssh, "chown -R nextcloud:nextcloud /var/lib/nextcloud/")
46
63
 
47
- target['Database'] ||= {}
48
- if !target['Database']['Type'] || target['Database']['Type'] == 'pgsql'
49
- PostgreSQL.createRemoteUserAndDBOverSSH(target['Database'], USER, nil, ssh)
64
+ if target['Admin'].to_h.empty?
65
+ linuxConnection.fileReplace("#{configDir}autoconfig.php", "'adminlogin'", "//'adminlogin'", options)
66
+ linuxConnection.fileReplace("#{configDir}autoconfig.php", "'adminpass'", "//'adminpass'", options)
67
+ else
68
+ raise 'Admin.Name missing!' unless target['Admin']['Name']
69
+ linuxConnection.fileReplace("#{configDir}autoconfig.php", "'adminlogin' .*", "'adminlogin' => '#{target['Admin']['Name']}',", options)
70
+
71
+ adminPassword = context.secrets.load(target['SecretId'], 'ADMIN_PASSWORD')
72
+ if adminPassword.nil?
73
+ adminPassword = SecureRandom.alphanumeric(20)
74
+ context.secrets.store(target['SecretId'], 'ADMIN_PASSWORD', adminPassword)
75
+ context.secrets.print("Nextcloud Admin '#{target['Admin']['Name']}' password", adminPassword)
76
+ end
77
+
78
+ linuxConnection.fileReplace("#{configDir}autoconfig.php", "'adminpass' .*", "'adminpass' => '#{adminPassword}',", { **options, hide: true })
50
79
  end
51
80
 
52
- target['User'] = USER unless target['User']
53
- name = 'nextcloud'
54
- self.updateRemoteFile(ssh, PHP_FPM.configDir(distroInfo) + name + '.conf', options, false, ';') do |configLines|
55
- PHP_FPM.writeConfig(name, target, distroInfo, configLines)
81
+ linuxConnection.upload(__dir__ + '/config.php', configDir, options)
82
+ linuxConnection.fileReplace("#{configDir}config.php", "'instanceid' .*", "'instanceid' => '#{SecureRandom.alphanumeric(10)}',", options)
83
+
84
+ if target['Valkey'].to_h.empty?
85
+ linuxConnection.fileReplace("#{configDir}config.php", "'memcache.distributed'", "//'memcache.distributed'", options)
86
+ linuxConnection.fileReplace("#{configDir}config.php", "'memcache.locking'", "//'memcache.locking'", options)
87
+ else
88
+ if target['Valkey']['Host']
89
+ linuxConnection.fileReplace("#{configDir}config.php", "'host' .*", "'host' => '#{target['Valkey']['Host']}',", options)
90
+ end
91
+ if target['Valkey']['SecretId']
92
+ valkeyPassword = context.secrets.load(target['Valkey']['SecretId'], 'VALKEY_PASSWORD')
93
+ linuxConnection.fileReplace("#{configDir}config.php", "'password' .*", "'password' => '#{valkeyPassword}',", { **options, hide: true })
94
+ end
56
95
  end
57
96
 
58
- Framework::LinuxApp.startServiceOverSSH(PHP_FPM::PHPFPM_SERVICE, ssh)
97
+ linuxConnection.fileWrite("#{configDir}CAN_INSTALL", '', options)
98
+ linuxConnection.fileReplace("#{configDir}config.php", '/usr/share/webapps/', webappsDir, options)
59
99
  end
60
- if !target.key?('Proxy') || target['Proxy']
61
- self.class.prepareNginxConfig(target, ssh)
62
- self.writeNginxConfig(__dir__, 'Nextcloud', id, target, state, context, options)
63
- distroInfo = Framework::LinuxApp.ensurePackages([PACKAGE_NAME], ssh)
64
- webappsDir = PHP_FPM::webappsDir(distroInfo)
65
- nginxFile = options['output'] + '/nginx/servers-lmm/Nextcloud.conf'
66
- `sed -i 's|root .*|root #{webappsDir}nextcloud;|' #{nginxFile}`
67
- deployNginxConfig(id, target, activeState, context, options)
100
+ linuxConnection.setUserGroup(configDir, USER, USER, options)
101
+ linuxConnection.setUserGroup('/var/lib/nextcloud', USER, USER, options)
102
+
103
+ name = 'nextcloud'
104
+ PHP_FPM.withConnection(linuxConnection) do |phpConnection|
105
+ linuxConnection.updateFile(phpConnection.configDir + name + '.conf', options, false, ';') do |configLines|
106
+ phpConnection.writeConfig(name, target, configLines)
107
+ end
108
+ end
109
+
110
+ linuxConnection.upload(__dir__ + '/nextcloudcron.service', '/etc/systemd/system/', options)
111
+ linuxConnection.upload(__dir__ + '/nextcloudcron.timer', '/etc/systemd/system/', options)
112
+ linuxConnection.fileReplace('/etc/systemd/system/nextcloudcron.service', '\$WEBAPPS/', webappsDir, options)
113
+
114
+ linuxConnection.reloadServiceManager(options)
115
+ linuxConnection.startService(PHP_FPM::PHPFPM_SERVICE, options)
116
+ linuxConnection.ensureServiceAutoStart('nextcloudcron.timer', options)
117
+ linuxConnection.startService('nextcloudcron.timer', options)
118
+
119
+ Nginx.withConnection(linuxConnection) do |nginxConnection|
120
+ nginxConnection.provision(__dir__, 'Nextcloud', target, activeState, context, options)
68
121
  end
69
122
  end
70
- else
71
- if !target.key?('Proxy') || target['Proxy']
72
- deployNginxConfig(id, target, activeState, context, options)
123
+ end
124
+ end
125
+
126
+ def configureDatabase(target, linuxConnection, context, options)
127
+ target['Database'] ||= {}
128
+
129
+ password = context.secrets.load(target['SecretId'], 'DB_PASSWORD')
130
+ if password.nil?
131
+ password = SecureRandom.alphanumeric(20)
132
+ context.secrets.store(target['SecretId'], 'DB_PASSWORD', password)
133
+ end
134
+
135
+ if !target['Database']['Type'] || target['Database']['Type'] == 'pgsql'
136
+ PostgreSQL.defaults(target['Database'])
137
+ PostgreSQL.withConnection(target['Database'], linuxConnection) do |postgresConnection|
138
+ postgresConnection.createUserAndDB(target['User'], password, options)
139
+ end
140
+ end
141
+ password
142
+ end
143
+
144
+ def cleanup(configs, state, context, options)
145
+ cleanupType(:Nextcloud, configs, state, context, options) do |item, id, state, context, options, connection|
146
+ Linux.withConnection(connection) do |linuxConnection|
147
+ Nginx.withConnection(linuxConnection) do |nginxConnection|
148
+ nginxConnection.cleanupConfig('Nextcloud', context, options)
149
+ nginxConnection.reload(options)
150
+ end
151
+ linuxConnection.stopService('nextcloudcron.timer', options)
152
+
153
+ configDir = nil
154
+ webappsDir = nil
155
+ PHP_FPM.withConnection(linuxConnection) do |phpConnection|
156
+ configDir = phpConnection.configDir
157
+ webappsDir = phpConnection.webappsDir
158
+ end
159
+
160
+ linuxConnection.rm(configDir + 'nextcloud.conf', options[:dry])
161
+ linuxConnection.rm('/etc/systemd/system/nextcloudcron.service', options[:dry])
162
+ linuxConnection.rm('/etc/systemd/system/nextcloudcron.timer', options[:dry])
163
+ linuxConnection.reloadService(PHP_FPM::PHPFPM_SERVICE, options)
164
+ linuxConnection.removePackage(PACKAGE_NAME, options)
165
+ state.item(id)['Status'] = State::STATUS_DELETED unless options[:dry]
166
+
167
+ if options[:destroy]
168
+ linuxConnection.rm(webappsDir + 'nextcloud', options[:dry])
169
+ item['Config']['Database'] ||= {}
170
+ if !item['Config']['Database']['Type'] || item['Config']['Database']['Type'] == 'pgsql'
171
+ PostgreSQL.withConnection(item['Config']['Database'], linuxConnection) do |postgresConnection|
172
+ postgresConnection.dropUserAndDB(USER, options)
173
+ end
174
+ end
175
+ linuxConnection.deleteUserAndGroup(USER, options)
176
+ linuxConnection.rm('/var/log/php/nextcloud.access.json', options[:dry])
177
+ linuxConnection.rm('/var/log/php/nextcloud.errors.log', options[:dry])
178
+ linuxConnection.rm('/var/log/php/nextcloud.mail.log', options[:dry])
179
+ state.item(id)['Status'] = State::STATUS_DESTROYED unless options[:dry]
180
+ end
73
181
  end
74
- activeState['Location'] = '@me'
75
182
  end
76
183
  end
77
184
 
@@ -0,0 +1,13 @@
1
+ <?php
2
+
3
+ $AUTOCONFIG = [
4
+ 'directory' => '/var/lib/nextcloud/data/',
5
+ 'dbtype' => 'pgsql',
6
+ 'dbname' => 'nextcloud',
7
+ 'dbuser' => 'nextcloud',
8
+ 'dbpass' => '',
9
+ 'dbhost' => '127.0.0.1',
10
+ 'dbtableprefix' => 'oc_',
11
+ 'adminlogin' => '',
12
+ 'adminpass' => '',
13
+ ];
@@ -14,5 +14,14 @@ $CONFIG = [
14
14
  'url' => '/wapps',
15
15
  'writable' => true,
16
16
  ],
17
- ]
17
+ ],
18
+ 'maintenance_window_start' => 2,
19
+ //'memcache.local' => '\OC\Memcache\APCu',
20
+ 'memcache.distributed' => '\OC\Memcache\Redis',
21
+ 'memcache.locking' => '\OC\Memcache\Redis',
22
+ 'redis' => [
23
+ 'host' => '127.0.0.1',
24
+ 'port' => 6379,
25
+ 'password' => '',
26
+ ],
18
27
  ];
@@ -0,0 +1,8 @@
1
+ [Unit]
2
+ Description=Nextcloud cron.php job
3
+
4
+ [Service]
5
+ User=nextcloud
6
+ ExecCondition=php -f $WEBAPPS/nextcloud/occ status -e
7
+ ExecStart=/usr/bin/php -f $WEBAPPS/nextcloud/cron.php
8
+ KillMode=process
@@ -0,0 +1,10 @@
1
+ [Unit]
2
+ Description=Run Nextcloud cron.php
3
+
4
+ [Timer]
5
+ OnBootSec=5min
6
+ OnUnitActiveSec=5min
7
+ Unit=nextcloudcron.service
8
+
9
+ [Install]
10
+ WantedBy=timers.target
@@ -0,0 +1,93 @@
1
+
2
+ module ConfigLMM
3
+ module LMM
4
+ class NginxConnection
5
+
6
+ NGINX_PACKAGE = 'nginx'
7
+ CONFIG_DIR = '/etc/nginx/'
8
+ WWW_DIR = '/srv/www/'
9
+
10
+ attr_reader :connection
11
+ attr_reader :nginxVersion
12
+
13
+ def initialize(connection)
14
+ @connection = connection
15
+ end
16
+
17
+ def nginxVersion
18
+ # Allow to fail when nginx is not installed
19
+ @nginxVersion ||= connection.exec('nginx -v', true).strip.split('/')[1].to_f
20
+ end
21
+
22
+ def reload(options)
23
+ connection.reloadService(:nginx, options)
24
+ end
25
+
26
+ def writeConfig(dir, name, target, activeState, context, options)
27
+ outputFolder = options['output']
28
+
29
+ config = prepareConfig(target)
30
+
31
+ config['NginxVersion'] = nginxVersion
32
+ template = ERB.new(File.read(dir + '/' + name + '.conf.erb'))
33
+ name = config['ConfigName'] if config['ConfigName']
34
+ connection.local.renderTemplate(template, config, outputFolder + '/nginx/servers-lmm/' + name.to_s + '.conf', options)
35
+ end
36
+
37
+ def deployAllConfigs(target, activeState, context, options)
38
+ outputFolder = options['output'] + '/nginx/servers-lmm'
39
+
40
+ connection.createDirs(options, CONFIG_DIR)
41
+ connection.uploadFolder(outputFolder, CONFIG_DIR, options)
42
+ if target['TLS']
43
+ connection.firewallAddService('https', options)
44
+ else
45
+ connection.firewallAddService('http', options)
46
+ end
47
+ reload(options)
48
+ end
49
+
50
+ def cleanupConfig(name, context, options)
51
+ connection.rm('/etc/nginx/servers-lmm/' + name + '.conf', options['dry'])
52
+ end
53
+
54
+ def provision(dir, configName, target, activeState, context, options)
55
+ connection.ensurePackage(NGINX_PACKAGE, options)
56
+ connection.ensureServiceAutoStart(:nginx, options)
57
+ writeConfig(dir, configName, target, activeState, context, options)
58
+ connection.startService(:nginx, options)
59
+ deployAllConfigs(target, activeState, context, options)
60
+ reload(options)
61
+ end
62
+
63
+ def provisionProxy(server, name, target, activeState, context, options)
64
+ target = target.dup
65
+ target['Proxy'] = server
66
+ target['Name'] = name if name
67
+ target['ConfigName'] = target['Name']
68
+ provision(__dir__, 'proxy', target, activeState, context, options)
69
+ end
70
+
71
+ private
72
+
73
+ def prepareConfig(target)
74
+ config = target.dup
75
+ config['TLS'] = true if config['TLS'].nil?
76
+
77
+ if !config['Port']
78
+ config['Port'] = config['TLS'] ? 443 : 80
79
+ end
80
+ if config['Domain']
81
+ config['Domain'] = Addressable::IDNA.to_ascii(config['Domain'])
82
+ end
83
+ if config['Server'] && !config['Server'].start_with?('/') && !config['Server'].include?(':/')
84
+ config['Server'] = Addressable::IDNA.to_ascii(config['Server'])
85
+ end
86
+ if config['AuthentikDomain']
87
+ config['AuthentikDomain'] = Addressable::IDNA.to_ascii(config['AuthentikDomain'])
88
+ end
89
+ config
90
+ end
91
+ end
92
+ end
93
+ end
@@ -12,24 +12,74 @@ resolver 127.0.0.53;
12
12
  # proxy_headers_hash_max_size 512;
13
13
  # proxy_headers_hash_bucket_size 128;
14
14
 
15
+ log_format json escape=json '{'
16
+ '"time":$msec,'
17
+ '"time_iso8601":"$time_iso8601",'
18
+ '"remote_addr":"$remote_addr",'
19
+ '"remote_port":$remote_port,'
20
+ '"remote_user":"$remote_user",'
21
+ '"request":"$request",'
22
+ '"status":$status,'
23
+ '"method":"$request_method",'
24
+ '"scheme":"$scheme",'
25
+ '"host":"$http_host",'
26
+ '"uri":"$uri",'
27
+ '"request_uri":"$request_uri",'
28
+ '"query_string":"$query_string",'
29
+ '"request_filename":"$request_filename",'
30
+ '"request_length":$request_length,'
31
+ '"content_length":"$content_length",'
32
+ '"content_type":"$content_type",'
33
+ '"bytes_sent":$bytes_sent,'
34
+ '"body_bytes_sent":$body_bytes_sent,'
35
+ '"server_name":"$server_name",'
36
+ '"server_port":$server_port,'
37
+ '"server_protocol":"$server_protocol",'
38
+ '"http_referer":"$http_referer",'
39
+ '"http_user_agent":"$http_user_agent",'
40
+ '"http_accept_language":"$http_accept_language",'
41
+ '"http_x_forwarded_for":"$http_x_forwarded_for",'
42
+ '"http_x_real_ip":"$http_x_real_ip",'
43
+ '"request_time":$request_time,'
44
+ '"upstream_addr":"$upstream_addr",'
45
+ '"upstream_status":"$upstream_status",'
46
+ '"upstream_http_etag":"$upstream_http_etag",'
47
+ '"upstream_http_last_modified":"$upstream_http_last_modified",'
48
+ '"upstream_connect_time":"$upstream_connect_time",'
49
+ '"upstream_header_time":"$upstream_header_time",'
50
+ '"upstream_response_time":"$upstream_response_time",'
51
+ '"proxy_protocol_addr":"$proxy_protocol_addr",'
52
+ '"proxy_protocol_port":"$proxy_protocol_port",'
53
+ '"connection_time":$connection_time,'
54
+ '"connection_requests":$connection_requests'
55
+ '}';
56
+
57
+ access_log /var/log/nginx/access.json json;
15
58
 
16
59
  gzip on;
60
+ gzip_static on;
17
61
  gzip_vary on;
18
62
  gzip_proxied any;
19
63
  gzip_comp_level 6;
20
64
  gzip_min_length 256;
21
65
 
22
- # do not remove ETag headers
23
- gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
24
-
25
66
  gzip_types application/atom+xml text/javascript text/xml application/xml+rss 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;
26
67
 
27
-
28
68
  charset utf-8;
29
69
  charset_types text/css text/plain text/xml text/javascript text/vnd.wap.wml application/json application/javascript application/xml application/xml+rss application/rss+xm image/svg+xml;
30
70
  proxy_intercept_errors on;
31
71
  fastcgi_intercept_errors on;
32
72
 
73
+ map '' $ProxyHost {
74
+ default $host;
75
+ ~. '';
76
+ }
77
+
78
+ map '' $ProxyForwardedHost {
79
+ default $http_host;
80
+ ~. '';
81
+ }
82
+
33
83
  map $http_accept $errorExtension
34
84
  {
35
85
  default html;
@@ -0,0 +1,21 @@
1
+
2
+ # Here we include only those languages that are supported
3
+ # by https://github.com/ConfigLMM/HttpErrorPages/tree/configlmm/i18n
4
+
5
+ map $http_accept_language $userLanguage
6
+ {
7
+ default en_US;
8
+ ~*^es-VE es_VE;
9
+ ~*^es es_VE; # Fallback
10
+ ~*^fr-FR fr_FR;
11
+ ~*^fr fr_FR;
12
+ ~*^it-IT it_IT;
13
+ ~*^it it_IT;
14
+ ~*^lv-LV lv_LV;
15
+ ~*^lv lv_LV;
16
+ ~*^pl pl_PL;
17
+ ~*^pt-BR pt_BR;
18
+ ~*^pt pt_BR;
19
+ ~*^zh-CN zh_CN;
20
+ ~*^zh zh_CN;
21
+ }
@@ -1,31 +1,42 @@
1
1
 
2
2
  # add one directive for each http status code
3
- error_page 301 /_errors_/HTTP301.$errorExtension;
4
- error_page 302 /_errors_/HTTP302.$errorExtension;
5
- error_page 303 /_errors_/HTTP303.$errorExtension;
6
- error_page 307 /_errors_/HTTP307.$errorExtension;
7
- error_page 308 /_errors_/HTTP308.$errorExtension;
8
- error_page 400 /_errors_/HTTP400.$errorExtension;
9
- error_page 401 /_errors_/HTTP401.$errorExtension;
10
- # error_page 402 /_errors_/HTTP402.$errorExtension;
11
- error_page 403 /_errors_/HTTP403.$errorExtension;
12
- error_page 404 /_errors_/HTTP404.$errorExtension;
13
- error_page 405 /_errors_/HTTP405.$errorExtension;
14
- error_page 500 /_errors_/HTTP500.$errorExtension;
15
- error_page 501 /_errors_/HTTP501.$errorExtension;
16
- error_page 502 /_errors_/HTTP502.$errorExtension;
17
- error_page 503 /_errors_/HTTP503.$errorExtension;
18
- error_page 504 /_errors_/HTTP504.$errorExtension;
19
- error_page 520 /_errors_/HTTP520.$errorExtension;
20
- error_page 521 /_errors_/HTTP521.$errorExtension;
21
- error_page 533 /_errors_/HTTP533.$errorExtension;
3
+ error_page 301 /_errors_/HTTP301.$userLanguage.$errorExtension;
4
+
5
+ # Looks like enabling custom 302 can be problematic
6
+ # due to apps using multiple Set-Cookie headers
7
+ # for example this breaks BookStack
8
+ # so lets not use it by default
9
+ #error_page 302 /_errors_/HTTP302.$userLanguage.$errorExtension;
10
+
11
+ error_page 303 /_errors_/HTTP303.$userLanguage.$errorExtension;
12
+
13
+ # Some applications (eg. Umami) misuse this status
14
+ # code and don't actually expect redirect...
15
+ #error_page 307 /_errors_/HTTP307.$userLanguage.$errorExtension;
16
+
17
+ error_page 308 /_errors_/HTTP308.$userLanguage.$errorExtension;
18
+ error_page 400 /_errors_/HTTP400.$userLanguage.$errorExtension;
19
+ error_page 401 /_errors_/HTTP401.$userLanguage.$errorExtension;
20
+ # error_page 402 /_errors_/HTTP402.$userLanguage.$errorExtension;
21
+ error_page 403 /_errors_/HTTP403.$userLanguage.$errorExtension;
22
+ error_page 404 /_errors_/HTTP404.$userLanguage.$errorExtension;
23
+ error_page 405 /_errors_/HTTP405.$userLanguage.$errorExtension;
24
+ error_page 497 /_errors_/HTTP497.$userLanguage.$errorExtension;
25
+ error_page 500 /_errors_/HTTP500.$userLanguage.$errorExtension;
26
+ error_page 501 /_errors_/HTTP501.$userLanguage.$errorExtension;
27
+ error_page 502 /_errors_/HTTP502.$userLanguage.$errorExtension;
28
+ error_page 503 /_errors_/HTTP503.$userLanguage.$errorExtension;
29
+ error_page 504 /_errors_/HTTP504.$userLanguage.$errorExtension;
30
+ error_page 520 /_errors_/HTTP520.$userLanguage.$errorExtension;
31
+ error_page 521 /_errors_/HTTP521.$userLanguage.$errorExtension;
32
+ error_page 533 /_errors_/HTTP533.$userLanguage.$errorExtension;
22
33
 
23
34
  location /_errors_/ {
24
35
  include config-lmm/public.conf;
25
36
 
37
+ add_header Location $upstream_http_location;
38
+ add_header Set-Cookie $upstream_http_set_cookie;
39
+
26
40
  alias /srv/www/errors/;
27
41
  internal;
28
42
  }
29
-
30
- add_header Location $upstream_http_location;
31
- add_header Set-Cookie $upstream_http_set_cookie;
@@ -0,0 +1,20 @@
1
+
2
+ error_page 497 /_errors_/HTTP497.$userLanguage.$errorExtension;
3
+
4
+ error_page 502 /_errors_/HTTP502.$userLanguage.$errorExtension;
5
+ error_page 503 /_errors_/HTTP503.$userLanguage.$errorExtension;
6
+ error_page 504 /_errors_/HTTP504.$userLanguage.$errorExtension;
7
+
8
+ error_page 520 /_errors_/HTTP520.$userLanguage.$errorExtension;
9
+ error_page 521 /_errors_/HTTP521.$userLanguage.$errorExtension;
10
+ error_page 533 /_errors_/HTTP533.$userLanguage.$errorExtension;
11
+
12
+ location /_errors_/ {
13
+ include config-lmm/public.conf;
14
+
15
+ add_header Location $upstream_http_location;
16
+ add_header Set-Cookie $upstream_http_set_cookie;
17
+
18
+ alias /srv/www/errors/;
19
+ internal;
20
+ }
@@ -1,15 +1,19 @@
1
1
 
2
2
  proxy_http_version 1.1;
3
3
 
4
- proxy_set_header Host $host;
4
+ proxy_set_header Host $ProxyHost;
5
5
  proxy_set_header X-Real-IP $remote_addr;
6
6
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
7
7
  proxy_set_header X-Forwarded-Proto $scheme;
8
8
  proxy_set_header X-Forwarded-Protocol $scheme;
9
- proxy_set_header X-Forwarded-Host $http_host;
9
+ proxy_set_header X-Forwarded-Host $ProxyForwardedHost;
10
10
 
11
11
  proxy_set_header Upgrade $http_upgrade;
12
12
  proxy_set_header Connection $connectionUpgrade;
13
13
 
14
14
  # proxy_set_header Proxy "";
15
15
  proxy_pass_header Server;
16
+
17
+ proxy_ssl_protocols TLSv1.2 TLSv1.3;
18
+
19
+ proxy_connect_timeout 2s;
@@ -6,7 +6,9 @@ server {
6
6
 
7
7
  include config-lmm/errors.conf;
8
8
 
9
- deny all;
9
+ location / {
10
+ return 308 https://$host$request_uri;
11
+ }
10
12
  }
11
13
 
12
14
  server {
@@ -21,11 +23,13 @@ server {
21
23
 
22
24
  server_name _;
23
25
 
24
- deny all;
25
-
26
26
  ssl_early_data on;
27
27
 
28
28
  include config-lmm/errors.conf;
29
29
  include config-lmm/security.conf;
30
30
  include config-lmm/ssl.conf;
31
+
32
+ location / {
33
+ return 403;
34
+ }
31
35
  }
@@ -1,7 +1,7 @@
1
1
 
2
2
  worker_processes 4;
3
3
 
4
- error_log /var/log/nginx/error.log info;
4
+ error_log stderr info;
5
5
 
6
6
  events {
7
7
  worker_connections 1024;
@@ -18,7 +18,7 @@ http {
18
18
 
19
19
  include /etc/nginx/main.conf;
20
20
 
21
- # Load modular configuration files from the /etc/nginx/servers directory.
21
+ # Load modular configuration files from the /etc/nginx/vhosts.d directory.
22
22
  # See http://nginx.org/en/docs/ngx_core_module.html#include
23
23
  # for more information.
24
24
  include vhosts.d/*.conf;