318 Commits
Author SHA1 Message Date
marc 6e288a394f ldapauth 2022-10-02 21:57:48 +02:00
marc efc92da96e ipsec 2022-09-30 22:14:46 +02:00
marc 7adf5800b0 volumes 2022-09-30 22:08:45 +02:00
marc f170b1395a ipsec 2022-09-30 22:06:00 +02:00
marc 7c0997f6f3 duplicati with traefik 2022-09-21 11:46:03 +02:00
marc 789baaf316 fix dumb mongo express mistake 2022-09-21 11:42:23 +02:00
marc 540b228247 agenda militant 2022-09-19 22:24:01 +02:00
marc f584e872ce experimenting with traefik 2022-09-12 02:07:39 +02:00
marc 5308132ff8 change 2022-09-12 01:13:26 +02:00
marc d5889d1c22 back 2022-09-12 01:08:31 +02:00
marc 05fcc6dbd1 static.yml 2022-09-12 00:36:46 +02:00
marc 8002db31d2 command 2022-09-12 00:02:20 +02:00
marc a2bed82c91 fix pgweb traefik conf 2022-09-12 00:02:20 +02:00
marc 3765ab5565 node = manager 2022-09-11 23:46:22 +02:00
marc 6f2918b34c traefik.env 2022-09-01 21:55:44 +02:00
marc 49b3f28b36 no conf file 2022-08-25 21:25:42 +02:00
marc d7667dbcde ldap network 2022-08-25 21:04:45 +02:00
marc 29b67cb2a3 Merge branch 'master' into traefik-static 2022-08-24 18:15:41 +02:00
marc b86fd1a6f2 bye homeserver.yaml from matrix 2022-08-24 18:15:27 +02:00
marc 4a69f141e9 traefik static conf file ignored 2022-08-24 18:15:12 +02:00
marc 596cfe44b3 traefik.yml 2022-08-24 08:07:27 +02:00
marc bf5f4a86d9 trafik static 2022-08-24 08:05:36 +02:00
marc 0a5f3f9e7d trying with heimdall 2022-08-23 08:46:41 +02:00
marc 37b7d5b846 fix mistake 2022-08-23 08:47:37 +02:00
marc 87cb0d3160 trying auth middleware in traefik conf 2022-08-23 08:42:17 +02:00
marc 5f55804c43 fix conflict 2022-08-20 20:29:57 +02:00
marc 8d7d9f166c dont touch working dir 2022-08-20 05:00:51 +02:00
marc 6718686e58 config 2022-08-19 23:38:28 +02:00
marc 3711fd938d make merge 2022-08-19 23:35:50 +02:00
marc 8943c9db34 fix name 2022-08-19 23:35:10 +02:00
marc 2e72fbe681 make compose 2022-08-19 23:34:34 +02:00
marc 5e179cdb0d no need for oxivia_mysql 2022-08-19 23:33:37 +02:00
marc d5797eb860 fix ghost dependency 2022-08-19 23:32:39 +02:00
marc 21d09296ce no dependency over external containers 2022-08-19 23:30:42 +02:00
marc a579863acb no directory 2022-08-19 23:29:02 +02:00
marc abba5d1823 clone project 2022-08-19 23:27:24 +02:00
marc 295b77e091 fix for loop 2022-08-19 23:24:21 +02:00
marc 979263685a sudo bc github wants it 2022-08-19 23:07:09 +02:00
marc 91af2ad85a attempting to update apt to fix error 2022-08-19 23:06:14 +02:00
marc d9b7929b92 changed workflow 2022-08-19 23:04:50 +02:00
marc 635df32b93 fix indent 2022-08-19 22:56:58 +02:00
marc a4e9b30617 seafile_memcached 2022-08-19 22:37:50 +02:00
marc 2db7b00402 fix 2022-08-19 22:31:33 +02:00
marc 2feaa57f79 string 2022-08-19 22:30:42 +02:00
marc 27ba254cef env file 2022-08-19 22:30:13 +02:00
marc 871dcf640b good volume name 2022-08-19 22:25:34 +02:00
marc a04001b34e fix port 2022-08-19 22:24:01 +02:00
marc 01b57f8a86 fix seafile.yml 2022-08-19 21:50:04 +02:00
marc 533e166249 seafile.yml 2022-08-19 21:39:18 +02:00
marc a09b7dfb1b changing seafile 2022-08-19 21:28:39 +02:00
marc fd31196d75 tableau 2022-08-17 18:36:55 +02:00
marc 9df8c8e479 im dumb 2022-08-16 00:47:06 +02:00
marc 65e7b9c6a5 fix 2022-08-16 00:46:02 +02:00
marc 139b1f4e15 all together 2022-08-16 00:45:26 +02:00
marc 1c47280809 do not care about container names 2022-08-16 00:30:36 +02:00
marc 16cfdb7feb better when in same network 2022-08-16 00:28:30 +02:00
marc 877b1b2928 copied valentin.yml to services 2022-08-16 00:23:29 +02:00
marc 3e3c0a8194 external 2022-08-15 23:38:30 +02:00
marc 1fcb29d655 bye dependency that does not even work with swarm 2022-08-15 23:03:45 +02:00
marc 53ffd73c33 bye dependency that does not even work with swarm 2022-08-15 23:02:06 +02:00
marc e1a10ab5c9 fix 2022-08-15 23:01:23 +02:00
marc 28bd51c5af ports 2022-08-04 23:01:06 +02:00
marc 28a3974f1e now cmd 2022-08-04 12:47:01 +02:00
marc da7c18b93f full path 2022-08-04 12:43:57 +02:00
marc 2d1b767958 default options 2022-08-04 12:39:04 +02:00
marc d7ce33dbde why bother 2022-08-04 12:29:14 +02:00
marc 5fa65d9bd2 fix dumb conflict 2022-08-04 12:10:23 +02:00
marc f7c6d220d9 wordpress got phpmyadmin now 2022-08-03 21:48:13 +02:00
marc 7d94261be7 tableau update 2022-08-03 19:59:04 +02:00
marc 73d45aa9cf bye 2022-08-02 16:12:31 +02:00
marc 3660c57e00 wget 2022-08-02 16:04:49 +02:00
marc d37785e8cf added healthcheck to sslh 2022-08-02 16:01:08 +02:00
marc 6846e74d8f fixing ip address 2022-08-02 15:57:35 +02:00
marc 7a2d898765 fix matrix 2022-08-02 15:32:28 +02:00
marc 8d93d0411c exposing vnc 2022-08-01 17:33:11 +02:00
marc 62e701cedc rustdesk 2022-07-31 18:15:55 +02:00
marc 9bed10a4aa rustdesk server 2022-07-31 18:06:45 +02:00
marc e349098adb ops 2022-07-26 13:14:22 +02:00
marc 1c908406a9 new port too 2022-07-26 13:08:55 +02:00
marc 9f3bea3a83 tcp udp 2022-07-26 13:04:49 +02:00
marc dbeb6cfb7d 1.18 2022-07-26 13:01:41 +02:00
marc 07ffa2b803 1.18.12 2022-07-26 13:00:39 +02:00
marc e40c2ca4db string 2022-07-26 12:54:49 +02:00
marc b64abd7da3 bedrock 2022-07-26 12:50:35 +02:00
marc 0ee8ca78a4 8443 2022-07-25 01:11:11 +02:00
marc 10921cf101 weird image 2022-07-25 01:09:13 +02:00
marc fbe5fba52c restart unless-stopped 2022-07-25 01:07:57 +02:00
marc e70de8f8f5 amondit sslh 2022-07-25 01:03:11 +02:00
marc ea0b500fd1 caddy without 443 2022-07-25 00:52:12 +02:00
marc 772b9e9598 mc backup 2022-07-25 00:48:48 +02:00
marc d42225574c rocket not done yet 2022-07-25 00:33:36 +02:00
marc 698c434b6b home volume 2022-07-24 23:18:28 +02:00
marc dfe9e23210 arch to vps.txt 2022-07-17 03:29:05 +02:00
marc 5bc6fb051f Revert "champi new picture"
This reverts commit 4067adb9c0.
2022-07-17 03:18:29 +02:00
marc 4067adb9c0 champi new picture 2022-07-17 03:04:07 +02:00
marc 08069b7102 new picture 2022-07-17 02:01:19 +02:00
marc 6309048fe5 first backup config 2022-07-16 23:49:28 +02:00
marc 69fd1ebb71 few vs lots 2022-07-16 23:39:07 +02:00
marc 07ec14c67c very precise readme 2022-07-16 23:37:44 +02:00
marc 1af1f20a4e readme 2022-07-16 23:23:05 +02:00
marc 38a5d25a8d coffee 2022-07-16 23:22:27 +02:00
marc 77354187f4 mc-router 2022-07-13 01:26:29 +02:00
marc 7aa2efb3ae srv 2022-07-09 23:41:23 +02:00
marc 168d893ff1 networks caddy 2022-07-09 23:12:02 +02:00
marc e80bac5c27 duplicati 2022-07-09 23:10:23 +02:00
marc 3cabdeae07 8200 port 2022-07-09 23:05:13 +02:00
marc 7f7e3df719 labels for caddy 2022-07-08 23:15:44 +02:00
marc 4dd1be4653 duplicati 2022-07-08 23:09:48 +02:00
marc 7fe37bda48 with an s 2022-06-21 05:32:13 +02:00
marc 0f4e8d27f7 forgot arch 2022-06-21 05:31:50 +02:00
marc 0bdfdecac3 arch.yml 2022-06-21 05:28:42 +02:00
marc be8ad09250 tf wf too 2022-06-19 19:57:13 +02:00
marc 98e41d5334 mongo express not equal discord bot mongo express 2022-06-19 19:54:49 +02:00
marc ad84d7315d mongo 2022-06-19 18:34:00 +02:00
marc e34488bad4 mongo 2022-06-19 18:33:32 +02:00
marc 3f1daf23b8 icone 2022-06-11 03:47:07 +02:00
marc 472304b984 ignoring pxe 2022-06-11 03:06:27 +02:00
marc c31e35ca76 jungle 2022-06-11 02:52:31 +02:00
marc 8c4ce762f2 champi 2022-06-11 02:52:17 +02:00
marc 3b00f6d238 bye mythes 2022-06-11 02:51:57 +02:00
marc d6a4925a1c mythes 2022-06-11 02:31:16 +02:00
marc b00dbf0692 champi 2022-06-11 02:23:49 +02:00
marc df7af2918e biomes 2022-06-11 02:22:30 +02:00
marc be2c0502d0 fix 2022-06-11 01:18:31 +02:00
marc 1ea93ef735 origin 2022-06-11 01:08:53 +02:00
marc 3d338ef897 4 2022-06-11 01:08:15 +02:00
marc c8bb1c96d1 origin 2022-06-11 01:07:50 +02:00
marc 379ef37236 minecraft bind mount 2022-06-07 20:28:11 +02:00
marc 2335006a75 ssh-chat 2022-06-01 21:40:38 +02:00
marc 7bd036eb4a jenkins bye 50000 2022-05-30 14:30:56 +02:00
marc 1b6f39956e mail 2022-05-30 01:58:53 +02:00
marc 7c2d0c8f2d fix port usesd 2022-05-30 01:57:30 +02:00
marc abaa74a9aa wing1 net 2022-05-30 01:53:33 +02:00
marc 90c878fadc panel 2022-05-30 01:52:42 +02:00
marc 55272980be volume fix 2022-05-30 01:51:29 +02:00
marc 899f803212 pterodactyl wing 2022-05-30 01:49:19 +02:00
marc f7752dee94 fix 2022-05-30 01:07:50 +02:00
marc 1ca8846417 networks 2022-05-30 01:05:44 +02:00
marc bf938bbf57 fix 2022-05-30 00:57:35 +02:00
marc fae0d2814d fix 2022-05-30 00:55:08 +02:00
marc db13614954 ptero2 2022-05-30 00:54:09 +02:00
marc a7a73a09a8 ptero fix 2022-05-30 00:49:52 +02:00
marc 59e70d58b2 external 2022-05-27 22:16:57 +02:00
marc 9643bfbb53 homer 2022-05-27 22:16:41 +02:00
marc 0ef17ae38e sshpiperd 2022-05-26 18:02:07 +02:00
marc 17239ccb66 1 replica only 2022-05-25 15:18:49 +02:00
marc 562a4e3dc6 discord-bot 1 replica 2022-05-25 15:14:20 +02:00
marc 066415879f android 2022-05-21 17:28:09 +02:00
marc 8df7a3f342 tableau 2022-05-21 17:27:27 +02:00
marc e5f18a98f8 android 2022-05-21 01:40:51 +02:00
marc 0b06cea437 device 2022-05-21 01:35:05 +02:00
marc 10414241ac android.yml 2022-05-21 01:30:25 +02:00
marc 769fb74b8d pihole 2022-05-20 16:06:59 +02:00
marc 650d4f52ea pihole data 2022-05-20 16:00:29 +02:00
marc 07ed513f3e no name 2022-05-20 15:53:37 +02:00
marc 02e9dc33b1 pihole 2022-05-20 15:50:27 +02:00
marc a4a13d95ca website pgweb 2022-05-20 14:19:09 +02:00
marc 084109189b port mistake 2022-05-20 14:05:46 +02:00
marc 5c3bef0dec fix authelia 2022-05-20 12:02:38 +02:00
marc 04eeba0d0a fix pritunl labels 2022-05-20 11:47:49 +02:00
marc 5b889ff557 pritunl 2022-05-20 11:44:54 +02:00
marc ff7b2594fd fix label 2022-05-20 11:35:15 +02:00
marc 0d2484b527 simpler labels 2022-05-20 11:28:36 +02:00
marc f697d077b8 authentik fix 2022-05-20 11:13:04 +02:00
marc 93938b1031 heimdall data ignore 2022-05-19 21:00:06 +02:00
marc d5f8f71676 heimdall 2022-05-19 20:45:33 +02:00
marc 4784e0f214 authelia fix 2022-05-19 09:32:53 +02:00
marc 3e0a3272d0 etherpad 2022-05-19 09:32:04 +02:00
marc 16eaba9338 jupyterhub traefik 2022-05-19 09:31:31 +02:00
marc 432bd66c1f jupyterlab traefik 2022-05-19 09:31:04 +02:00
marc 118ddc0624 ldap_manager traefik 2022-05-19 09:30:33 +02:00
marc 008be0d034 wordpress_oxivia traefik 2022-05-19 09:29:47 +02:00
marc fe12837226 wordpress je traefik 2022-05-19 09:28:40 +02:00
marc 5a55275c10 vault reverse proxy 2022-05-19 09:27:46 +02:00
marc da0b27caf6 seafile traefik fix 2022-05-19 09:26:06 +02:00
marc a5355987b9 rancher traefik fix 2022-05-19 09:25:49 +02:00
marc 207292fc49 pterodactyl traefik 2022-05-19 09:25:28 +02:00
marc c18381ed31 peertube env file 2022-05-19 09:24:47 +02:00
marc e6eb7349b2 peertube traefik 2022-05-19 09:24:28 +02:00
marc f341d1757b mcvnc traefik 2022-05-19 09:23:44 +02:00
marc 6b0c37f47e fix gitea date 2022-05-19 09:22:37 +02:00
marc 4026e3d070 ignoring authelia conf 2022-05-19 01:37:05 +02:00
marc fcb13faa98 authelia volume 2022-05-19 01:36:30 +02:00
marc 5a6d0facd9 typo 2022-05-19 01:21:02 +02:00
marc 029e3503ef volume 2022-05-19 01:19:59 +02:00
marc 58a0f75210 caddy net 2022-05-19 01:17:00 +02:00
marc 8dd2041640 authelia 2022-05-19 01:13:08 +02:00
marc af16a31bd3 fix traefik data and labels 2022-05-19 00:55:13 +02:00
marc a5194219ac removed mislocated data folder 2022-05-19 00:54:02 +02:00
marc 453ca9f667 removed mislocated data folder 2022-05-19 00:53:14 +02:00
marc daf47a4d1a caddy net external 2022-05-19 00:47:50 +02:00
marc d1013ceeb5 typo 2022-05-19 00:47:26 +02:00
marc a5eda56ede fix caddyfile ref 2022-05-19 00:45:12 +02:00
marc 023c14b4d3 trying caddyfile 2022-05-19 00:44:45 +02:00
marc f269161bd1 traefik 2022-05-19 00:42:30 +02:00
marc 8dff3f14ed fix caddyfile uri 2022-05-19 00:31:22 +02:00
marc 3641c168a0 renamed 2022-05-18 23:29:44 +02:00
marc 5ea0851477 mcadmin auth 2022-05-18 23:14:21 +02:00
marc 341853d55c marcpartensky caddy 2022-05-18 21:11:18 +02:00
marc 6c8da225fd fix 2022-05-16 19:35:32 +02:00
marc 745a63530d good to go 2022-05-16 19:35:02 +02:00
marc 2cf5714676 oxivia 2022-05-16 19:14:23 +02:00
marc 734b63d95f oxivia 2022-05-16 19:11:50 +02:00
marc fc28653b1a custom mail 2022-05-16 18:53:31 +02:00
marc 0d5c4b5841 removed doublons 2022-05-16 18:46:13 +02:00
marc b743f98bc1 wordpress oxivia 2022-05-14 19:41:10 +02:00
marc e9b148afce wordpress oxivia 2022-05-14 19:40:45 +02:00
marc 3fc17b2ffd labels wordpress 2022-05-14 19:39:09 +02:00
marc 674e747e55 fix https 2022-05-14 19:36:31 +02:00
marc 2dfd6595a7 redir 2022-05-14 18:27:58 +02:00
marc 8f89dfee44 less services 2022-05-14 18:18:29 +02:00
marc e5dcc5ce70 matrix registration 2022-05-14 18:16:05 +02:00
marc 297491eba4 enable registration 2022-05-06 18:42:10 +02:00
marc 1bdb84b9e8 added volumes the right way 2022-05-05 19:47:27 +02:00
marc ef15035d74 fixed bad host 2022-05-05 19:37:27 +02:00
marc 0eebbbc197 fixed links 2022-05-05 19:35:46 +02:00
marc 7a29acb0be pterodactyle everwhere 2022-05-05 19:34:27 +02:00
marc 5af221dac2 ptero 2022-05-05 19:35:19 +02:00
marc 2615456f07 pterodactyl.yml 2022-05-05 09:53:55 +02:00
marc 7857355802 pterodactyl.yml 2022-05-04 20:28:53 +02:00
marc d741e4c6f5 fix mistake 2022-04-27 20:15:25 +02:00
marc 5f0ff5e2f5 pxe 2022-04-27 20:13:24 +02:00
marc d883de37a1 fix mistake 2022-04-23 04:02:33 +02:00
marc 6773dff281 gt fix mcvnc 2022-04-23 03:55:51 +02:00
marc 12c6fc17df fix mcadmin 2022-04-23 03:55:11 +02:00
marc 079a6bbe80 raw name 2022-04-23 03:35:59 +02:00
marc bbdbc6c656 peertube 2022-04-23 02:48:07 +02:00
marc 7967e2bae6 peertube 2022-04-23 02:40:32 +02:00
marc 34fefd23a0 new matrix 2022-03-29 02:48:39 +02:00
marc 5109ca6da7 wordpress je done 2022-03-28 18:49:21 +02:00
marc b03ace0740 fix 2022-03-28 18:17:18 +02:00
marc 59c7034172 fix 2022-03-28 18:15:57 +02:00
marc 57e630081c fix 2022-03-28 18:13:58 +02:00
marc 016f94f8cc wordpress je 2022-03-28 18:13:07 +02:00
marc 27d1c1ddf1 dealing with bad health 2022-03-27 19:00:06 +02:00
marc 0310cbafce renamed 2022-03-26 15:44:43 +01:00
marc 90470981c8 why in caddy network? 2022-03-26 15:43:58 +01:00
marc 221c43cda2 vaultwarden 2022-03-25 11:14:11 +01:00
marc af6102eadb pad.marcpartensky.com 2022-03-22 15:50:58 +01:00
marc fe27e4292c shortcut registry 2022-03-20 02:54:31 +01:00
marc bf938bd39f fix gitlab 2022-03-19 23:50:44 +01:00
marc 23cb9b8815 enhanced gitlab 2022-03-19 23:38:21 +01:00
marc a0e6e02924 restart unless stopped pritunl mongo 2022-03-19 23:23:05 +01:00
marc b266e05226 g 2022-03-19 23:14:56 +01:00
marc 8d47e79491 mailcow 2022-03-19 23:07:59 +01:00
marc 568d8f618b 7011 2022-03-19 21:02:21 +01:00
marc 94e2d8370c ia 2022-03-19 20:59:35 +01:00
marc 8b2bf0c182 port 8000 2022-03-19 19:00:59 +01:00
marc deb45ce5dc take care of your business 2022-03-19 18:58:48 +01:00
marc 35021851b4 mswarm 2022-03-19 18:49:54 +01:00
marc fd762e6a68 ia 2022-03-19 18:48:53 +01:00
marc 4af4a41b7e seafile 2022-03-19 17:19:46 +01:00
marc f922e36f32 ia 2022-03-19 01:27:13 +01:00
marc 89accf5ab3 oxivia fix 2022-03-09 15:24:23 +01:00
marc 07b9802637 oxivia 2022-03-07 13:53:14 +01:00
marc 7ee56c3f09 double quotes 2022-03-07 10:50:07 +01:00
marc 619e006e10 double quotes 2022-03-07 10:49:25 +01:00
marc 408497b23a double quotes gitea 2022-03-07 10:48:13 +01:00
marc e19544ffd5 fix 2022-03-07 10:39:26 +01:00
marc e5709c0ca3 oxivia mysql 2022-03-07 10:38:54 +01:00
marc e77cbd4299 fix 2022-03-06 22:20:02 +01:00
marc 33ecf705cb ldap manager 2022-03-06 22:19:41 +01:00
marc 48ca63327e env/vps 2022-03-06 22:15:08 +01:00
marc 1a209fde97 fix 2022-03-06 20:21:27 +01:00
marc b971d81e08 fix dashes 2022-03-06 20:13:41 +01:00
marc 422ce7d46c docker 2022-03-06 20:09:49 +01:00
marc 48aaa1ef6a fix volume 2022-03-06 19:41:09 +01:00
marc 8b9c37e240 mcmyadmin 2022-03-06 19:38:03 +01:00
marc 050b7004d8 fix 2022-03-06 19:37:26 +01:00
marc 3d60cb6a19 dependencies 2022-03-06 19:37:04 +01:00
marc be93df4b19 enable swarmpit 2022-03-06 19:34:00 +01:00
marc b1f7fee413 swarmpit 2022-03-06 19:33:43 +01:00
marc 5393d02499 enable 2022-03-06 19:26:07 +01:00
marc 5d8c3e32b6 mcadmin 2022-03-06 19:25:46 +01:00
marc d9d84a272c fix 2022-03-06 19:22:24 +01:00
marc 49f6fe399a gitea 2022-03-06 19:20:04 +01:00
marc cd315efe5b gitea 2022-03-06 19:19:50 +01:00
marc 3115a40be1 net 2022-03-06 19:12:33 +01:00
marc 71e2e5d8b7 mcvnc 2022-03-06 19:11:00 +01:00
marc 25298799c8 mcvnc 2022-03-06 19:10:46 +01:00
marc cfef3bf1f9 minecraft net 2022-03-06 19:06:45 +01:00
marc 2f9d3dab16 minecraft 2022-03-06 19:06:04 +01:00
marc a15698910d minecraft 2022-03-06 19:05:20 +01:00
marc 0b8d2f2331 miner 2022-03-06 18:57:13 +01:00
marc f779b9090c pritunl + node 2022-03-06 18:56:53 +01:00
marc 619f1cff73 pritunl 2022-03-06 18:56:00 +01:00
marc 2cb0be14d9 depends on ldap 2022-03-06 18:52:30 +01:00
marc da3469cacb ldap manager 2022-03-06 18:51:33 +01:00
marc a078865989 ldap 2022-03-06 18:50:56 +01:00
marc 52a59262e2 monero-node 2022-03-06 18:49:12 +01:00
marc 95ae43f8a1 beef.yml 2022-03-06 18:46:41 +01:00
marc 9cb38fca62 enable monero miner 2022-03-06 18:45:02 +01:00
marc 7c31146e6c monero-miner 2022-03-06 18:43:59 +01:00
marc 1bfccba6df rancher 2022-03-06 18:43:17 +01:00
marc e5df01012b matrix etherpad 2022-03-06 18:39:37 +01:00
marc e78f5aef66 etherpad 2022-03-06 18:39:03 +01:00
marc cec1eff81d matrix 2022-03-06 18:37:51 +01:00
marc e68fe10d18 gitlab 2022-03-06 18:33:19 +01:00
marc 6a96f61422 fail2ban 2022-03-06 18:30:07 +01:00
marc 55ef4f21d3 fix 2022-03-06 18:28:09 +01:00
marc 0e8c771d4a fix indent 2022-03-06 18:27:26 +01:00
marc faafe98d60 fix dependencies 2022-03-06 18:27:04 +01:00
marc f4290605b9 seafile 2022-03-06 18:25:07 +01:00
marc 6ccaf182fc seafile 2022-03-06 18:24:55 +01:00
marc 7851d7bcd6 vps 2022-03-06 18:15:07 +01:00
marc d163d13fe6 fix 2022-03-06 18:14:20 +01:00
marc 1043a94d6a jenkins 2022-03-06 18:13:15 +01:00
marc 1b1611efab bye nginx 2022-03-06 18:10:23 +01:00
marc 65ea40a998 fix 2022-03-06 18:08:44 +01:00
marc 1f5c2ff52e fix 2022-03-06 18:07:47 +01:00
marc f690912f71 env/vps.txt 2022-03-06 18:06:38 +01:00
marc 1f69c67ba0 todolist.yml 2022-03-06 18:06:08 +01:00
marc 378424d273 searx 2022-03-06 18:00:16 +01:00
marc ebc3196d86 nextcloud.yml 2022-03-06 17:51:07 +01:00
marc 1e11bec6b1 template.yml 2022-03-06 17:42:48 +01:00
marc 10adc55f02 Merge branch 'files' 2022-03-06 17:39:39 +01:00
marc 25d7b3f1ad id 1000 2022-03-05 17:57:41 +01:00
marc 750458c1b8 user marc 2022-03-05 17:45:31 +01:00
84 changed files with 2865 additions and 268 deletions
+1
View File
@@ -3,3 +3,4 @@ github: marcpartensky
custom:
# - monero:43J2XmRtjDPRLD35UsYGH2AZamFBQz7dt4VdvZXVm3SuadTrvcoXUXBRUNHqukFte23Q5TWXqhbwaLJJgoVQzzbe2AJDANQ
- https://paypal.me/marcpartensky
- https://buymeacoffee.com/marcpartensky
@@ -0,0 +1,26 @@
name: Check docker compose files
on:
push:
branches:
- master
tags:
- v*
jobs:
build:
env:
BIND_MOUNTS: "/srv"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install make and docker-compose
run: sudo apt install -y docker-compose make
# - name: Check docker-compose files
# run: for file in `find services/*`; do docker-compose -f $file config > /dev/null; done
- name: Clone validator
run: git clone https://github.com/serviceprototypinglab/dcvalidator /opt/validator
- name: Merge to docker-compose.yml
run: make merge
- name: Validate docker-compose.yml
# run: docker-compose -f stacks/docker-compose.yml config
run: /opt/validator/validator-cli.py -f stacks/docker-compose.yml
-20
View File
@@ -1,20 +0,0 @@
name: Docker Swarm Deployed
on:
push:
branches:
- master
tags:
- v*
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Update
run: apt-get update
- name: Install ssh
run: apt-get install openssh-client -y
- name: Setup ssh agent
run: eval $(ssh-agent -s) && ssh-add <(echo $SSH_PRIVATE_KEY)
- name: Deploy to Docker swarm
run: ssh -o StrictHostKeyChecking=no $SSH_REMOTE docker swarm deploy -c vps.yml vps
+6 -1
View File
@@ -2,11 +2,16 @@ docker-compose.yml
data/openvpn
data/secrets
data/certbot
data/traefik
data/searx
data/jenkins
data/beef
data/tmate/keys
data/authelia
data/mx-puppet-discord
data/matrix
data/heimdall
data/traefik
data/pihole/etc-pihole
data/pxe
data.tar.gz
services/template.yml
+3 -1
View File
@@ -3,7 +3,9 @@ compose:
swarm:
cat ./env/vps.txt | STACK=vps xargs ./bin/docker-setup.sh
merge:
./bin/setup.sh merge vps
./bin/docker-setup.sh merge vps
mswarm: merge
docker stack deploy -c stacks/docker-compose.yml vps
down:
docker stack rm vps
export:
+34 -3
View File
@@ -19,6 +19,9 @@
- https://prometheus.marcpartensky.com
- https://swarm.marcpartensky.com
- https://auth.marcpartensky.com
- https://seafile.marcpartensky.com
- https://mail.marcpartensky.com
- https://arch.marcpartensky.com
<!-- - https://dns.marcpartensky.com -->
<!-- - https://glou.marcpartensky.com -->
<!-- - https://minecraft.marcpartensky.com -->
@@ -29,10 +32,38 @@ The `docker-compose.yml` configuration is compatible with the following reverse-
- caddy
- nginx
## Deploy the stack
## Run few services at once
- Example : run a monero node
```sh
docker-compose -f services/monero-node.yml up -d
```
docker stack deploy -c vps.yml vps
- Example : run multiple a wordpress website behind a proxy
```sh
# create a global network
docker network create --attachable caddy # add '--driver overlay' for swarm
# then deploy both services
docker-compose -f services/caddy.yml -f services/wordpress.yml up -d
```
## Deploy lots of services at once
- Select your services by putting those in ./env/vps.txt
```sh
nvim ./env/vps.txt
```
- Generate a ./stack/docker-compose.yml with all merged configurations
```sh
./bin/docker-setup.sh merge vps # or make merge
```
- Deploy
```sh
# as a swarm stack
docker stack deploy -c ./stack/docker-compose.yml vps # or make mswarm
# or using docker-compose
docker-compose -f ./stacks/docker-compose.yml up -d
```
### Links
+1 -1
View File
@@ -2,7 +2,7 @@
if [ $1 = merge ]
then
cat ./env/$2.txt | xargs -I @ echo ./services/@.yml | xargs ./bin/merge.py > ./stacks/docker-compose.yml
cat ./env/$2.txt | xargs -I @ echo ./services/@.yml | xargs ./bin/docker-merge.py > ./stacks/docker-compose.yml
# export COMPOSE_FILE="$PWD/../docker-compose.yml"
exit
fi
+20 -6
View File
@@ -1,15 +1,29 @@
# first caddyfile
test.marcpartensky.com {
redir https://caddyserver.com/docs/caddyfile/patterns
{
security {
authorization policy marc {
set auth url https://gate.marcpartensky.com/
crypto key verify {env.JWT_SECRET}
allow roles authp/admin authp/user
}
}
}
authent.marcpartensky.com {
reverse_proxy authentik:9443 {
tls internal
}
marc.wf {
redir https://marcpartensky.com/{uri}
}
marc.tf {
redir https://marcpartensky.com{uri}
}
# authent.marcpartensky.com {
# reverse_proxy authentik:9443 {
# tls internal
# }
# }
# healthcheck
# :8080 {
# status 200 /
-173
View File
@@ -1,173 +0,0 @@
# vim:ft=yaml
## TLS ##
# {% if not SYNAPSE_NO_TLS %}
# tls_certificate_path: "/data/{{ SYNAPSE_SERVER_NAME }}.tls.crt"
# tls_private_key_path: "/data/{{ SYNAPSE_SERVER_NAME }}.tls.key"
# {% endif %}
## Server ##
server_name: "matrix.marcpartensky.com"
pid_file: /homeserver.pid
web_client: False
soft_file_limit: 0
# log_config: "{{ SYNAPSE_LOG_CONFIG }}"
## Ports ##
listeners:
# Allow configuring in case we want to reverse proxy 8008
# using another process in the same container
- port: 8008
tls: false
bind_addresses: ['::']
type: http
x_forwarded: false
resources:
- names: [client]
compress: true
- names: [federation]
compress: false
## Database ##
# {% if POSTGRES_PASSWORD %}
# database:
# name: "psycopg2"
# args:
# user: "{{ POSTGRES_USER or "synapse" }}"
# password: "{{ POSTGRES_PASSWORD }}"
# database: "{{ POSTGRES_DB or "synapse" }}"
# host: "{{ POSTGRES_HOST or "db" }}"
# port: "{{ POSTGRES_PORT or "5432" }}"
# cp_min: 5
# cp_max: 10
# {% else %}
# database:
# name: "sqlite3"
# args:
# database: "/data/homeserver.db"
# {% endif %}
## Performance ##
event_cache_size: "10K"
## Ratelimiting ##
rc_messages_per_second: 0.2
rc_message_burst_count: 10.0
federation_rc_window_size: 1000
federation_rc_sleep_limit: 10
federation_rc_sleep_delay: 500
federation_rc_reject_limit: 50
federation_rc_concurrent: 3
## Files ##
media_store_path: "/data/media"
max_upload_size: "50M"
max_image_pixels: "32M"
dynamic_thumbnails: false
# List of thumbnail to precalculate when an image is uploaded.
thumbnail_sizes:
- width: 32
height: 32
method: crop
- width: 96
height: 96
method: crop
- width: 320
height: 240
method: scale
- width: 640
height: 480
method: scale
- width: 800
height: 600
method: scale
url_preview_enabled: False
max_spider_size: "10M"
## Captcha ##
# {% if SYNAPSE_RECAPTCHA_PUBLIC_KEY %}
# recaptcha_public_key: "{{ SYNAPSE_RECAPTCHA_PUBLIC_KEY }}"
# recaptcha_private_key: "{{ SYNAPSE_RECAPTCHA_PRIVATE_KEY }}"
# enable_registration_captcha: True
# recaptcha_siteverify_api: "https://www.google.com/recaptcha/api/siteverify"
# {% else %}
# recaptcha_public_key: "YOUR_PUBLIC_KEY"
# recaptcha_private_key: "YOUR_PRIVATE_KEY"
enable_registration_captcha: False
recaptcha_siteverify_api: "https://www.google.com/recaptcha/api/siteverify"
# {% endif %}
## Turn ##
# {% if SYNAPSE_TURN_URIS %}
# turn_uris:
# {% for uri in SYNAPSE_TURN_URIS.split(',') %} - "{{ uri }}"
# {% endfor %}
# turn_shared_secret: "{{ SYNAPSE_TURN_SECRET }}"
# turn_user_lifetime: "1h"
# turn_allow_guests: True
# {% else %}
turn_uris: []
turn_shared_secret: "marcsecret"
turn_user_lifetime: "1h"
turn_allow_guests: True
# {% endif %}
## Registration ##
enable_registration: "True"
registration_shared_secret: "marcregistrationsecret"
bcrypt_rounds: 12
allow_guest_access: "True"
enable_group_creation: true
## Metrics ###
# {% if SYNAPSE_REPORT_STATS.lower() == "yes" %}
# enable_metrics: True
# report_stats: True
# {% else %}
enable_metrics: False
report_stats: False
# {% endif %}
## API Configuration ##
# {% if SYNAPSE_APPSERVICES %}
app_service_config_files:
- "discord-registration.yaml"
# {% for appservice in SYNAPSE_APPSERVICES %} - "{{ appservice }}"
# {% endfor %}
# {% endif %}
macaroon_secret_key: "marcmacaronsecret"
expire_access_token: False
## Signing Keys ##
# signing_key_path: "/data/matrix.marcpartensky.com.signing.key"
old_signing_keys: {}
key_refresh_interval: "1d" # 1 Day.
# The trusted servers to download signing keys from.
trusted_key_servers:
- server_name: matrix.org
verify_keys:
"ed25519:auto": "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw"
password_config:
enabled: true
+40
View File
@@ -0,0 +1,40 @@
# Pi-hole: A black hole for Internet advertisements
# (c) 2017 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# Dnsmasq config for Pi-hole's FTLDNS
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
###############################################################################
# FILE AUTOMATICALLY POPULATED BY PI-HOLE INSTALL/UPDATE PROCEDURE. #
# ANY CHANGES MADE TO THIS FILE AFTER INSTALL WILL BE LOST ON THE NEXT UPDATE #
# #
# IF YOU WISH TO CHANGE THE UPSTREAM SERVERS, CHANGE THEM IN: #
# /etc/pihole/setupVars.conf #
# #
# ANY OTHER CHANGES SHOULD BE MADE IN A SEPARATE CONFIG FILE #
# WITHIN /etc/dnsmasq.d/yourname.conf #
###############################################################################
addn-hosts=/etc/pihole/local.list
addn-hosts=/etc/pihole/custom.list
localise-queries
no-resolv
cache-size=10000
log-queries
log-facility=/var/log/pihole.log
log-async
server=8.8.8.8
server=8.8.4.4
interface=eth0
+42
View File
@@ -0,0 +1,42 @@
# Pi-hole: A black hole for Internet advertisements
# (c) 2021 Pi-hole, LLC (https://pi-hole.net)
# Network-wide ad blocking via your own hardware.
#
# RFC 6761 config file for Pi-hole
#
# This file is copyright under the latest version of the EUPL.
# Please see LICENSE file for your rights under this license.
###############################################################################
# FILE AUTOMATICALLY POPULATED BY PI-HOLE INSTALL/UPDATE PROCEDURE. #
# ANY CHANGES MADE TO THIS FILE AFTER INSTALL WILL BE LOST ON THE NEXT UPDATE #
# #
# CHANGES SHOULD BE MADE IN A SEPARATE CONFIG FILE #
# WITHIN /etc/dnsmasq.d/yourname.conf #
###############################################################################
# RFC 6761: Caching DNS servers SHOULD recognize
# test, localhost, invalid
# names as special and SHOULD NOT attempt to look up NS records for them, or
# otherwise query authoritative DNS servers in an attempt to resolve these
# names.
server=/test/
server=/localhost/
server=/invalid/
# The same RFC requests something similar for
# 10.in-addr.arpa. 21.172.in-addr.arpa. 27.172.in-addr.arpa.
# 16.172.in-addr.arpa. 22.172.in-addr.arpa. 28.172.in-addr.arpa.
# 17.172.in-addr.arpa. 23.172.in-addr.arpa. 29.172.in-addr.arpa.
# 18.172.in-addr.arpa. 24.172.in-addr.arpa. 30.172.in-addr.arpa.
# 19.172.in-addr.arpa. 25.172.in-addr.arpa. 31.172.in-addr.arpa.
# 20.172.in-addr.arpa. 26.172.in-addr.arpa. 168.192.in-addr.arpa.
# Pi-hole implements this via the dnsmasq option "bogus-priv" (see
# 01-pihole.conf) because this also covers IPv6.
# OpenWRT furthermore blocks bind, local, onion domains
# see https://git.openwrt.org/?p=openwrt/openwrt.git;a=blob_plain;f=package/network/services/dnsmasq/files/rfc6761.conf;hb=HEAD
# and https://www.iana.org/assignments/special-use-domain-names/special-use-domain-names.xhtml
# We do not include the ".local" rule ourselves, see https://github.com/pi-hole/pi-hole/pull/4282#discussion_r689112972
server=/bind/
server=/onion/
Vendored
+17 -1
View File
@@ -1,10 +1,26 @@
caddy
website
arch
open-web-calendar
oxivia
wordpress-oxivia
servant
discord-bot
ia
docker-api
ialab
registry
portainer
authentik
todolist
nextcloud
jenkins
seafile
matrix
etherpad
monero-miner
monero-node
pritunl
pritunl-mongo
fail2ban
ldap
ldap-manager
+18
View File
@@ -0,0 +1,18 @@
version: "3.9"
services:
agenda_militant:
image: marcpartensky/agenda-militant
restart: unless-stopped
networks:
- caddy
labels:
caddy: agenda.militant.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8080}}"
traefik.enable: "true"
traefik.http.routers.agenda_militant.rule: Host(`agenda.militant.marcpartensky.com`)
traefik.http.routers.agenda_militant.entrypoints: websecure
traefik.http.routers.agenda_militant.tls.certresolver: tls
traefik.http.services.agenda_militant.loadbalancer.server.port: 8080
networks:
caddy:
external: true
+13
View File
@@ -0,0 +1,13 @@
version: "3.9"
services:
android:
image: budtmo/docker-android-x86-12.0
restart: unless-stopped
privileged: true
ports:
- "6080:6080"
- "5554:5554"
- "5555:5555"
- "4723:4723"
environment:
DEVICE: "Samsung Galaxy S6"
+38
View File
@@ -0,0 +1,38 @@
version: "3.9"
services:
arch:
image: marcpartensky/arch:vnc
restart: unless-stopped
ports: # vnc is shared
- "5900:5900"
networks:
- caddy
- ldap
volumes:
- arch:/home/marc
labels:
caddy: arch.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8080}}"
traefik.enable: "true"
traefik.http.routers.arch.rule: Host(`arch.marcpartensky.com`)
traefik.http.routers.arch.entrypoints: websecure
traefik.http.routers.arch.tls.certresolver: tls
traefik.http.services.arch.loadbalancer.server.port: 8080
# ldapAuth Register Middleware ====================================================
traefik.http.routers.arch.middlewares: ldap_auth
# ldapAuth Options=================================================================
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.enabled: "true"
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.logLevel: DEBUG
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.url: ldap://ldap.marcpartensky.com
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.port: 636
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.baseDN: dc=marcpartensky,dc=com
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.attribute: uid
volumes:
arch:
networks:
ldap:
external: true
caddy:
external: true
+45
View File
@@ -0,0 +1,45 @@
version: "3.9"
services:
authelia:
image: authelia/authelia
restart: unless-stopped
expose:
- 9091
environment:
TZ: France/Paris
volumes:
- ../data/authelia:/config
networks:
- authelia
- caddy
labels:
caddy: authelia.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 9091}}"
traefik.enable: true
traefik.http.routers.authelia.rule: Host(`authelia.marcpartensky.com`)
traefik.http.routers.authelia.entrypoints: websecure
traefik.http.routers.authelia.tls: true
traefik.http.routers.authelia.tls.certresolver: tls
traefik.http.middlewares.authelia.forwardauth.address: http://authelia:9091/api/verify?rd=https://authelia.marcpartensky.com # yamllint disable-line rule:line-length
traefik.http.middlewares.authelia.forwardauth.trustForwardHeader: true
traefik.http.middlewares.authelia.forwardauth.authResponseHeaders: Remote-User,Remote-Groups,Remote-Name,Remote-Email # yamllint disable-line rule:line-length
redis:
image: redis:alpine
restart: unless-stopped
expose:
- 6379
environment:
TZ: France/Paris
volumes:
- authelia_redis:/data
networks:
- authelia
volumes:
authelia_redis:
networks:
authelia:
caddy:
external: true
+21 -17
View File
@@ -1,22 +1,6 @@
version: "3.9"
services:
authentik_postgres:
image: postgres:alpine
restart: unless-stopped
volumes:
- authentik_postgres:/var/lib/postgresql/data
env_file:
- ../data/secrets/authentik.env
networks:
- authentik
authentik_redis:
image: redis:alpine
restart: unless-stopped
networks:
- authentik
authentik:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2022.2.1}
restart: unless-stopped
@@ -40,13 +24,33 @@ services:
- authentik_postgres
- authentik_redis
- authentik_worker
- caddy
networks:
- authentik
- caddy
labels:
caddy: authentik.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 9000}}"
traefik.enable: "true"
traefik.http.routers.authentik.rule: Host(`authentik.marcpartensky.com`)
traefik.http.routers.authentik.entrypoints: websecure
traefik.http.routers.authentik.tls.certresolver: tls
traefik.http.services.authentik.loadbalancer.server.port: 9000
authentik_postgres:
image: postgres:alpine
restart: unless-stopped
volumes:
- authentik_postgres:/var/lib/postgresql/data
env_file:
- ../data/secrets/authentik.env
networks:
- authentik
authentik_redis:
image: redis:alpine
restart: unless-stopped
networks:
- authentik
authentik_worker:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2022.2.1}
+34
View File
@@ -0,0 +1,34 @@
version: "3.9"
services:
beef:
image: marcpartensky/beef
restart: unless-stopped
networks:
- caddy
ports:
- "6789:6789"
- "61985:61985"
- "61986:61986"
volumes:
- beef:/root/.ms4f
- /tmp/beef:/tmp/data
- ../data/beef/config.yaml:/beef/config.yaml
labels:
caddy: beef.marcpartensky.com"
caddy.reverse_proxy: "{{upstreams 3000}}"
caddy.@ws.0_header: "Connection *Upgrade*"
caddy.@ws.1_header: "Upgrade websocket"
caddy.0_reverse_proxy: "@ws {{upstreams 61985}}"
traefik.enable: "true"
traefik.http.routers.beef.rule: Host(`beef.marcpartensky.com`)
traefik.http.routers.beef.entrypoints: websecure
traefik.http.routers.beef.tls.certresolver: tls
traefik.http.services.beef.loadbalancer.server.port: 3000
volumes:
beef:
networks:
caddy:
external: true
+6 -5
View File
@@ -8,18 +8,19 @@ configs:
services:
caddy:
image: lucaslorentz/caddy-docker-proxy:ci-alpine
image: marcpartensky/caddy
ports:
- "80:80"
- "443:443"
# - "443:443"
environment:
CADDY_INGRESS_NETWORKS: caddy
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- caddy_data:/data
# - ./data/caddy/Caddyfile:/etc/Caddyfile
- ../data/caddy/Caddyfile:/etc/Caddyfile
networks:
- caddy
caddy:
# ipv4_address: 10.0.0.1
logging:
# syslog?
options:
@@ -29,7 +30,7 @@ services:
test: ["CMD", "curl", "-f", "localhost:80"]
deploy:
labels: # Global options
caddy.email: marc.partensky@gmail.com
caddy.email: marc@marcpartensky.com
update_config:
parallelism: 1
delay: 5s
+2 -2
View File
@@ -15,13 +15,13 @@ services:
# healthcheck:
# test: CMD echo 'db.runCommand("ping").ok' | mongo localhost:27017/test --quiet
mongo_express:
discord_mongo_express:
image: mongo-express
restart: unless-stopped
environment:
ME_CONFIG_OPTIONS_EDITORTHEME: "ambiance"
env_file:
- ../data/secrets/mongo_express.env
- ../data/secrets/discord_mongo_express.env
networks:
- discord
- caddy
+2
View File
@@ -12,6 +12,8 @@ services:
- docker_api
env_file:
- ../data/secrets/esclave.env
deploy:
replicas: 1
networks:
discord:
+42
View File
@@ -0,0 +1,42 @@
version: "3.9"
services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
restart: unless-stopped
environment:
PUID: 1000
PGID: 1000
TZ: Europe/Paris
# CLI_ARGS: #optional
volumes:
- /srv:/srv
- duplicati_config:/config
- duplicati_backups:/backups
- duplicati_source:/source
networks:
- caddy
labels:
caddy: duplicati.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8200}}"
traefik.enable: "true"
traefik.http.routers.duplicati.rule: Host(`duplicati.marcpartensky.com`)
traefik.http.routers.duplicati.entrypoints: websecure
traefik.http.routers.duplicati.tls.certresolver: tls
traefik.http.services.duplicati.loadbalancer.server.port: 8200
# ldapAuth Options=================================================================
traefik.http.routers.duplicati.middlewares: ldap_auth
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.enabled: "true"
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.logLevel: DEBUG
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.url: ldap://ldap.marcpartensky.com
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.port: 389
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.baseDN: dc=marcpartensky,dc=com
traefik.http.middlewares.ldap_auth.plugin.ldapAuth.attribute: uid
volumes:
duplicati_config:
duplicati_backups:
duplicati_source:
networks:
caddy:
external: true
+22
View File
@@ -0,0 +1,22 @@
version: "3.9"
services:
etherpad:
image: etherpad/etherpad
restart: unless-stopped
environment:
ADMIN_PASSWORD: supersecret
networks:
- caddy
labels:
caddy: etherpad.marcpartensky.com, pad.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 9001}}"
traefik.enable: "true"
traefik.http.routers.etherpad.rule: Host(`etherpad.marcpartensky.com`)
traefik.http.routers.etherpad.entrypoints: websecure
traefik.http.routers.etherpad.tls.certresolver: tls
traefik.http.services.etherpad.loadbalancer.server.port: 9001
networks:
caddy:
external: true
+18
View File
@@ -0,0 +1,18 @@
version: "3.9"
services:
fail2ban:
image: crazymax/fail2ban:latest
restart: unless-stopped
network_mode: "host"
cap_add:
- NET_ADMIN
- NET_RAW
volumes:
- fail2ban:/data
- /var/log:/var/log:ro
env_file:
- ../data/secrets/fail2ban.env
volumes:
fail2ban:
+19
View File
@@ -0,0 +1,19 @@
version: "3.9"
services:
gitea_postgres:
image: postgres
restart: unless-stopped
env_file:
- ../data/secrets/gitea.env
networks:
- caddy
- gitea
volumes:
- gitea_postgres:/var/lib/postgresql/data
volumes:
gitea_postgres:
networks:
gitea:
+41
View File
@@ -0,0 +1,41 @@
version: "3.9"
services:
gitea:
image: gitea/gitea:1.14.6
restart: unless-stopped
# user: git
# environment:
# - USER=git
# - USER_UID=1004
# - USER_GID=1004
env_file:
- ../data/secrets/gitea.env
networks:
- caddy
- gitea
volumes:
- gitea_ssh:/data/git/.ssh
- gitea:/data
# - /etc/localtime:/etc/localtime:ro
ports:
- "7012:22"
depends_on:
- gitea_postgres
labels:
caddy: gitea.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 3000}}"
traefik.enable: "true"
traefik.http.routers.gitea.rule: Host(`git.marcpartensky.com`)
traefik.http.routers.gitea.entrypoints: websecure
traefik.http.routers.gitea.tls.certresolver: tls
traefik.http.services.gitea.loadbalancer.server.port: 3000
volumes:
gitea:
gitea_ssh:
networks:
gitea:
caddy:
external: true
+44
View File
@@ -0,0 +1,44 @@
version: "3.9"
services:
gitlab:
image: gitlab/gitlab-ee:latest
restart: unless-stopped
hostname: gitlab.marcpartensky.com
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.marcpartensky.com'
gitlab_rails['gitlab_shell_ssh_port'] = 7020
ports:
- '7020:22'
networks:
- caddy
volumes:
- gitlab_config:/etc/gitlab
- gitlab_log:/var/log/gitlab
- gitlab_data:/var/opt/gitlab
shm_size: '256m'
labels:
caddy: gitlab.marcpartensky.com
caddy.reverse_proxy: "{{upstreams http 80}}"
traefik.enable: "true"
traefik.http.routers.gitlab.rule: Host(`gitlab.marcpartensky.com`)
traefik.http.routers.gitlab.entrypoints: websecure
traefik.http.routers.gitlab.tls.certresolver: tls
traefik.http.services.gitlab.loadbalancer.server.port: 80
gitlab-runner:
image: gitlab/gitlab-runner:alpine
restart: unless-stopped
deploy:
mode: replicated
replicas: 4
volumes:
gitlab_config:
gitlab_log:
gitlab_data:
networks:
caddy:
external: true
+29
View File
@@ -0,0 +1,29 @@
version: "3.9"
services:
heimdall:
image: lscr.io/linuxserver/heimdall:latest
restart: unless-stopped
environment:
PUID: 1000
PGID: 1000
TZ: France/Paris
volumes:
- ../data/heimdall:/config
networks:
- caddy
labels:
caddy: heimdall.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
traefik.enable: "true"
traefik.http.routers.heimdall.rule: Host(`heimdall.marcpartensky.com`)
traefik.http.routers.heimdall.entrypoints: websecure
traefik.http.routers.heimdall.tls: "true"
traefik.http.middlewares.test-ldap-auth.plugin.ldapAuth.source: marcpartensky.com
traefik.http.middlewares.test-ldap-auth.plugin.ldapAuth.baseDN: dc=marcpartensky,dc=com
# traefik.http.services.heimdall.loadbalancer.server.port: 80
# traefik.http.routers.heimdall.middlewares: authelia-basic@docker
networks:
caddy:
external: true
+21
View File
@@ -0,0 +1,21 @@
version: "3.9"
services:
homer:
image: b4bz/homer
restart: unless-stopped
volumes:
- homer:/www/assets
environment:
INIT_ASSETS: 1 # default
networks:
- caddy
labels:
caddy: homer.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8080}}"
volumes:
homer:
networks:
caddy:
external: true
+19
View File
@@ -0,0 +1,19 @@
version: "3.9"
services:
ia:
image: marcpartensky/discord-bot
restart: unless-stopped
ports:
- "7011:8000"
networks:
- discord
depends_on:
- docker_api
env_file:
- ../data/secrets/ia.env
deploy:
replicas: 1
networks:
discord:
+2 -6
View File
@@ -7,10 +7,6 @@ services:
restart: unless-stopped
environment:
FLASK_APP: server.py
# env_file:
# - $HOME/git/ialab/.flaskenv
# working_dir: /app
entrypoint: flask run --host ialab --port 80
# entrypoint: "gunicorn server:app"
# entrypoint: "gunicorn --chdir /app server:app"
volumes:
@@ -21,12 +17,12 @@ services:
- caddy
labels:
caddy: ialab.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
caddy.reverse_proxy: "{{upstreams 8000}}"
traefik.enable: "true"
traefik.http.routers.ialab.rule: Host(`ialab.marcpartensky.com`)
traefik.http.routers.ialab.entrypoints: websecure
traefik.http.routers.ialab.tls.certresolver: tls
traefik.http.services.ialab.loadbalancer.server.port: 80
traefik.http.services.ialab.loadbalancer.server.port: 8000
volumes:
ialab:
+15
View File
@@ -0,0 +1,15 @@
version: "3.9"
services:
ipsec:
image: hwdsl2/ipsec-vpn-server
restart: unless-stopped
privileged: true
ports:
- "500:500/udp"
- "4500:4500/udp"
volumes:
- ikev2-vpn:/etc/ipsec.d
- /lib/modules:/lib/modules:ro
volumes:
ikev2-vpn:
+28
View File
@@ -0,0 +1,28 @@
version: "3.9"
services:
jenkins:
image: jenkins/jenkins:lts-jdk11
user: root
volumes:
- jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
networks:
- caddy
# ports:
# - "50000:50000"
labels:
caddy: jenkins.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8080}}"
traefik.enable: "true"
traefik.http.routers.jenkins.rule: Host(`jenkins.marcpartensky.com`)
traefik.http.routers.jenkins.entrypoints: websecure
traefik.http.routers.jenkins.tls.certresolver: tls
traefik.http.services.jenkins.loadbalancer.server.port: 8080
volumes:
jenkins:
networks:
caddy:
external: true
+5
View File
@@ -16,6 +16,11 @@ services:
labels:
caddy: jupyterhub.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8000}}"
traefik.enable: "true"
traefik.http.routers.jupyterhub.rule: Host(`jupyterhub.marcpartensky.com`)
traefik.http.routers.jupyterhub.entrypoints: websecure
traefik.http.routers.jupyterhub.tls.certresolver: tls
traefik.http.services.jupyterhub.loadbalancer.server.port: 3000
networks:
caddy:
+4 -4
View File
@@ -15,10 +15,10 @@ services:
caddy: lab.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8888}}"
traefik.enable: "true"
traefik.http.routers.notebook.rule: Host(`lab.marcpartensky.com`)
traefik.http.routers.notebook.entrypoints: websecure
traefik.http.routers.notebook.tls.certresolver: tls
traefik.http.services.notebook.loadbalancer.server.port: 8888
traefik.http.routers.jupyterlab.rule: Host(`lab.marcpartensky.com`)
traefik.http.routers.jupyterlab.entrypoints: websecure
traefik.http.routers.jupyterlab.tls.certresolver: tls
traefik.http.services.jupyterlab.loadbalancer.server.port: 8888
# entrypoint: start-notebook.sh \
# --NotebookApp.keyfile=key/0000_key-certbot.pem
# --NotebookApp.certfile=cert/0000_csr-certbot.pem
+36
View File
@@ -0,0 +1,36 @@
version: "3.9"
services:
ldap_manager:
image: wheelybird/ldap-user-manager:latest
restart: unless-stopped
environment:
SERVER_HOSTNAME: auth.marcpartensy.com
LDAP_URI: ldap://ldap
LDAP_BASE_DN: dc=admin,dc=org
LDAP_ADMINS_GROUP: admins
LDAP_ADMIN_BIND_DN: cn=admin,dc=admin,dc=org
LDAP_IGNORE_CERT_ERRORS: "true"
LDAP_REQUIRE_STARTTLS: "FALSE"
NO_HTTPS: "TRUE"
env_file:
- ../data/secrets/ldap.env
depends_on:
- ldap
networks:
- ldap
- caddy
labels:
caddy: auth.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
traefik.enable: "true"
traefik.http.routers.ldap_manager.rule: Host(`auth.marcpartensky.com`)
traefik.http.routers.ldap_manager.entrypoints: websecure
traefik.http.routers.ldap_manager.tls.certresolver: tls
traefik.http.services.ldap_manager.loadbalancer.server.port: 80
networks:
ldap:
external: true
caddy:
external: true
+29
View File
@@ -0,0 +1,29 @@
version: "3.9"
services:
ldap:
image: osixia/openldap
restart: unless-stopped
environment:
LDAP_ORGANISATION: admin
LDAP_DOMAIN: admin.org
LDAP_RFC2307BIS_SCHEMA: "true"
LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
LDAP_TLS_VERIFY_CLIENT: never
env_file:
- ../data/secrets/ldap.env
networks:
- ldap
ports:
- "636:636"
volumes:
- ldap:/var/lib/ldap
- ldap_slapd:/etc/ldap/slapd.d
volumes:
ldap:
ldap_slapd:
networks:
ldap:
external: true
+642
View File
@@ -0,0 +1,642 @@
version: '3.9'
services:
unbound-mailcow:
image: mailcow/unbound:1.15
restart: unless-stopped
environment:
- TZ=${TZ}
volumes:
- ./data/hooks/unbound:/hooks:Z
- ./data/conf/unbound/unbound.conf:/etc/unbound/unbound.conf:ro,Z
tty: true
networks:
mailcow-network:
ipv4_address: ${IPV4_NETWORK:-172.22.1}.254
aliases:
- unbound
mysql-mailcow:
image: mariadb:10.5
restart: unless-stopped
depends_on:
- unbound-mailcow
stop_grace_period: 45s
volumes:
- mysql-vol-1:/var/lib/mysql/:Z
- mysql-socket-vol-1:/var/run/mysqld/:z
- ./data/conf/mysql/:/etc/mysql/conf.d/:ro,Z
environment:
- TZ=${TZ}
- MYSQL_ROOT_PASSWORD=${DBROOT}
- MYSQL_DATABASE=${DBNAME}
- MYSQL_USER=${DBUSER}
- MYSQL_PASSWORD=${DBPASS}
- MYSQL_INITDB_SKIP_TZINFO=1
ports:
- "${SQL_PORT:-127.0.0.1:13306}:3306"
networks:
mailcow-network:
aliases:
- mysql
redis-mailcow:
image: redis:6-alpine
restart: unless-stopped
volumes:
- redis-vol-1:/data/:Z
ports:
- "${REDIS_PORT:-127.0.0.1:7654}:6379"
environment:
- TZ=${TZ}
sysctls:
- net.core.somaxconn=4096
networks:
mailcow-network:
ipv4_address: ${IPV4_NETWORK:-172.22.1}.249
aliases:
- redis
clamd-mailcow:
image: mailcow/clamd:1.43
restart: unless-stopped
dns:
- ${IPV4_NETWORK:-172.22.1}.254
environment:
- TZ=${TZ}
- SKIP_CLAMD=${SKIP_CLAMD:-n}
volumes:
- ./data/conf/clamav/:/etc/clamav/:Z
networks:
mailcow-network:
aliases:
- clamd
rspamd-mailcow:
image: mailcow/rspamd:1.79
restart: unless-stopped
stop_grace_period: 30s
depends_on:
- dovecot-mailcow
environment:
- TZ=${TZ}
- IPV4_NETWORK=${IPV4_NETWORK:-172.22.1}
- IPV6_NETWORK=${IPV6_NETWORK:-fd4d:6169:6c63:6f77::/64}
- REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
- REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
volumes:
- ./data/hooks/rspamd:/hooks:Z
- ./data/conf/rspamd/custom/:/etc/rspamd/custom:z
- ./data/conf/rspamd/override.d/:/etc/rspamd/override.d:Z
- ./data/conf/rspamd/local.d/:/etc/rspamd/local.d:Z
- ./data/conf/rspamd/plugins.d/:/etc/rspamd/plugins.d:Z
- ./data/conf/rspamd/lua/:/etc/rspamd/lua/:ro,Z
- ./data/conf/rspamd/rspamd.conf.local:/etc/rspamd/rspamd.conf.local:Z
- ./data/conf/rspamd/rspamd.conf.override:/etc/rspamd/rspamd.conf.override:Z
- rspamd-vol-1:/var/lib/rspamd:z
hostname: rspamd
dns:
- ${IPV4_NETWORK:-172.22.1}.254
networks:
mailcow-network:
aliases:
- rspamd
php-fpm-mailcow:
image: mailcow/phpfpm:1.78
command: "php-fpm -d date.timezone=${TZ} -d expose_php=0"
depends_on:
- redis-mailcow
volumes:
- ./data/hooks/phpfpm:/hooks:Z
- ./data/web:/web:z
- ./data/conf/rspamd/dynmaps:/dynmaps:ro,z
- ./data/conf/rspamd/custom/:/rspamd_custom_maps:z
- rspamd-vol-1:/var/lib/rspamd:z
- mysql-socket-vol-1:/var/run/mysqld/:z
- ./data/conf/sogo/:/etc/sogo/:z
- ./data/conf/rspamd/meta_exporter:/meta_exporter:ro,z
- ./data/conf/phpfpm/sogo-sso/:/etc/sogo-sso/:z
- ./data/conf/phpfpm/php-fpm.d/pools.conf:/usr/local/etc/php-fpm.d/z-pools.conf:Z
- ./data/conf/phpfpm/php-conf.d/opcache-recommended.ini:/usr/local/etc/php/conf.d/opcache-recommended.ini:Z
- ./data/conf/phpfpm/php-conf.d/upload.ini:/usr/local/etc/php/conf.d/upload.ini:Z
- ./data/conf/phpfpm/php-conf.d/other.ini:/usr/local/etc/php/conf.d/zzz-other.ini:Z
- ./data/conf/dovecot/global_sieve_before:/global_sieve/before:z
- ./data/conf/dovecot/global_sieve_after:/global_sieve/after:z
- ./data/assets/templates:/tpls:z
- ./data/conf/nginx/:/etc/nginx/conf.d/:z
dns:
- ${IPV4_NETWORK:-172.22.1}.254
environment:
- REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
- REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
- LOG_LINES=${LOG_LINES:-9999}
- TZ=${TZ}
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
- DBPASS=${DBPASS}
- MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
- MAILCOW_PASS_SCHEME=${MAILCOW_PASS_SCHEME:-BLF-CRYPT}
- IMAP_PORT=${IMAP_PORT:-143}
- IMAPS_PORT=${IMAPS_PORT:-993}
- POP_PORT=${POP_PORT:-110}
- POPS_PORT=${POPS_PORT:-995}
- SIEVE_PORT=${SIEVE_PORT:-4190}
- IPV4_NETWORK=${IPV4_NETWORK:-172.22.1}
- IPV6_NETWORK=${IPV6_NETWORK:-fd4d:6169:6c63:6f77::/64}
- SUBMISSION_PORT=${SUBMISSION_PORT:-587}
- SMTPS_PORT=${SMTPS_PORT:-465}
- SMTP_PORT=${SMTP_PORT:-25}
- API_KEY=${API_KEY:-invalid}
- API_KEY_READ_ONLY=${API_KEY_READ_ONLY:-invalid}
- API_ALLOW_FROM=${API_ALLOW_FROM:-invalid}
- COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-mailcow-dockerized}
- SKIP_SOLR=${SKIP_SOLR:-y}
- SKIP_CLAMD=${SKIP_CLAMD:-n}
- SKIP_SOGO=${SKIP_SOGO:-n}
- ALLOW_ADMIN_EMAIL_LOGIN=${ALLOW_ADMIN_EMAIL_LOGIN:-n}
- MASTER=${MASTER:-y}
- DEV_MODE=${DEV_MODE:-n}
- WEBAUTHN_ONLY_TRUSTED_VENDORS=${WEBAUTHN_ONLY_TRUSTED_VENDORS:-n}
restart: unless-stopped
networks:
mailcow-network:
aliases:
- phpfpm
sogo-mailcow:
image: mailcow/sogo:1.106
restart: unless-stopped
environment:
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
- DBPASS=${DBPASS}
- TZ=${TZ}
- LOG_LINES=${LOG_LINES:-9999}
- MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
- MAILCOW_PASS_SCHEME=${MAILCOW_PASS_SCHEME:-BLF-CRYPT}
- ACL_ANYONE=${ACL_ANYONE:-disallow}
- ALLOW_ADMIN_EMAIL_LOGIN=${ALLOW_ADMIN_EMAIL_LOGIN:-n}
- IPV4_NETWORK=${IPV4_NETWORK:-172.22.1}
- SOGO_EXPIRE_SESSION=${SOGO_EXPIRE_SESSION:-480}
- SKIP_SOGO=${SKIP_SOGO:-n}
- MASTER=${MASTER:-y}
- REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
- REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
dns:
- ${IPV4_NETWORK:-172.22.1}.254
volumes:
- ./data/hooks/sogo:/hooks:Z
- ./data/conf/sogo/:/etc/sogo/:z
- ./data/web/inc/init_db.inc.php:/init_db.inc.php:Z
- ./data/conf/sogo/custom-favicon.ico:/usr/lib/GNUstep/SOGo/WebServerResources/img/sogo.ico:z
- ./data/conf/sogo/custom-theme.js:/usr/lib/GNUstep/SOGo/WebServerResources/js/theme.js:z
- ./data/conf/sogo/custom-sogo.js:/usr/lib/GNUstep/SOGo/WebServerResources/js/custom-sogo.js:z
- mysql-socket-vol-1:/var/run/mysqld/:z
- sogo-web-vol-1:/sogo_web:z
- sogo-userdata-backup-vol-1:/sogo_backup:Z
labels:
ofelia.enabled: "true"
ofelia.job-exec.sogo_sessions.schedule: "@every 1m"
ofelia.job-exec.sogo_sessions.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/local/bin/gosu sogo /usr/sbin/sogo-tool expire-sessions $${SOGO_EXPIRE_SESSION} || exit 0\""
ofelia.job-exec.sogo_ealarms.schedule: "@every 1m"
ofelia.job-exec.sogo_ealarms.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/local/bin/gosu sogo /usr/sbin/sogo-ealarms-notify -p /etc/sogo/sieve.creds || exit 0\""
ofelia.job-exec.sogo_eautoreply.schedule: "@every 5m"
ofelia.job-exec.sogo_eautoreply.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/local/bin/gosu sogo /usr/sbin/sogo-tool update-autoreply -p /etc/sogo/sieve.creds || exit 0\""
ofelia.job-exec.sogo_backup.schedule: "@every 24h"
ofelia.job-exec.sogo_backup.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/local/bin/gosu sogo /usr/sbin/sogo-tool backup /sogo_backup ALL || exit 0\""
networks:
mailcow-network:
ipv4_address: ${IPV4_NETWORK:-172.22.1}.248
aliases:
- sogo
dovecot-mailcow:
image: mailcow/dovecot:1.159
restart: unless-stopped
depends_on:
- mysql-mailcow
dns:
- ${IPV4_NETWORK:-172.22.1}.254
cap_add:
- NET_BIND_SERVICE
volumes:
- ./data/hooks/dovecot:/hooks:Z
- ./data/conf/dovecot:/etc/dovecot:z
- ./data/assets/ssl:/etc/ssl/mail/:ro,z
- ./data/conf/sogo/:/etc/sogo/:z
- ./data/conf/phpfpm/sogo-sso/:/etc/phpfpm/:z
- vmail-vol-1:/var/vmail:Z
- vmail-index-vol-1:/var/vmail_index:Z
- crypt-vol-1:/mail_crypt/:z
- ./data/conf/rspamd/custom/:/etc/rspamd/custom:z
- ./data/assets/templates:/templates:z
- rspamd-vol-1:/var/lib/rspamd:z
- mysql-socket-vol-1:/var/run/mysqld/:z
environment:
- DOVECOT_MASTER_USER=${DOVECOT_MASTER_USER:-}
- DOVECOT_MASTER_PASS=${DOVECOT_MASTER_PASS:-}
- LOG_LINES=${LOG_LINES:-9999}
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
- DBPASS=${DBPASS}
- TZ=${TZ}
- MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
- MAILCOW_PASS_SCHEME=${MAILCOW_PASS_SCHEME:-BLF-CRYPT}
- IPV4_NETWORK=${IPV4_NETWORK:-172.22.1}
- ALLOW_ADMIN_EMAIL_LOGIN=${ALLOW_ADMIN_EMAIL_LOGIN:-n}
- MAILDIR_GC_TIME=${MAILDIR_GC_TIME:-7200}
- ACL_ANYONE=${ACL_ANYONE:-disallow}
- SKIP_SOLR=${SKIP_SOLR:-y}
- MAILDIR_SUB=${MAILDIR_SUB:-}
- MASTER=${MASTER:-y}
- REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
- REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
- COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-mailcow-dockerized}
ports:
- "${DOVEADM_PORT:-127.0.0.1:19991}:12345"
- "${IMAP_PORT:-143}:143"
- "${IMAPS_PORT:-993}:993"
- "${POP_PORT:-110}:110"
- "${POPS_PORT:-995}:995"
- "${SIEVE_PORT:-4190}:4190"
tty: true
labels:
ofelia.enabled: "true"
ofelia.job-exec.dovecot_imapsync_runner.schedule: "@every 1m"
ofelia.job-exec.dovecot_imapsync_runner.no-overlap: "true"
ofelia.job-exec.dovecot_imapsync_runner.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/local/bin/gosu nobody /usr/local/bin/imapsync_runner.pl || exit 0\""
ofelia.job-exec.dovecot_trim_logs.schedule: "@every 1m"
ofelia.job-exec.dovecot_trim_logs.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/local/bin/gosu vmail /usr/local/bin/trim_logs.sh || exit 0\""
ofelia.job-exec.dovecot_quarantine.schedule: "@every 20m"
ofelia.job-exec.dovecot_quarantine.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/local/bin/gosu vmail /usr/local/bin/quarantine_notify.py || exit 0\""
ofelia.job-exec.dovecot_clean_q_aged.schedule: "@every 24h"
ofelia.job-exec.dovecot_clean_q_aged.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/local/bin/gosu vmail /usr/local/bin/clean_q_aged.sh || exit 0\""
ofelia.job-exec.dovecot_maildir_gc.schedule: "@every 30m"
ofelia.job-exec.dovecot_maildir_gc.command: "/bin/bash -c \"source /source_env.sh ; /usr/local/bin/gosu vmail /usr/local/bin/maildir_gc.sh\""
ofelia.job-exec.dovecot_sarules.schedule: "@every 24h"
ofelia.job-exec.dovecot_sarules.command: "/bin/bash -c \"/usr/local/bin/sa-rules.sh\""
ofelia.job-exec.dovecot_fts.schedule: "@every 24h"
ofelia.job-exec.dovecot_fts.command: "/usr/bin/curl http://solr:8983/solr/dovecot-fts/update?optimize=true"
ofelia.job-exec.dovecot_repl_health.schedule: "@every 5m"
ofelia.job-exec.dovecot_repl_health.command: "/bin/bash -c \"/usr/local/bin/gosu vmail /usr/local/bin/repl_health.sh\""
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
networks:
mailcow-network:
ipv4_address: ${IPV4_NETWORK:-172.22.1}.250
aliases:
- dovecot
postfix-mailcow:
image: mailcow/postfix:1.66
restart: unless-stopped
depends_on:
- mysql-mailcow
volumes:
- ./data/hooks/postfix:/hooks:Z
- ./data/conf/postfix:/opt/postfix/conf:z
- ./data/assets/ssl:/etc/ssl/mail/:ro,z
- postfix-vol-1:/var/spool/postfix:z
- crypt-vol-1:/var/lib/zeyple:z
- rspamd-vol-1:/var/lib/rspamd:z
- mysql-socket-vol-1:/var/run/mysqld/:z
environment:
- LOG_LINES=${LOG_LINES:-9999}
- TZ=${TZ}
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
- DBPASS=${DBPASS}
- REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
- REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
- MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
cap_add:
- NET_BIND_SERVICE
ports:
- "${SMTP_PORT:-25}:25"
- "${SMTPS_PORT:-465}:465"
- "${SUBMISSION_PORT:-587}:587"
dns:
- ${IPV4_NETWORK:-172.22.1}.254
networks:
mailcow-network:
ipv4_address: ${IPV4_NETWORK:-172.22.1}.253
aliases:
- postfix
memcached-mailcow:
image: memcached:alpine
restart: unless-stopped
environment:
- TZ=${TZ}
networks:
mailcow-network:
aliases:
- memcached
nginx-mailcow:
image: nginx:mainline-alpine
restart: unless-stopped
depends_on:
- sogo-mailcow
- php-fpm-mailcow
- redis-mailcow
dns:
- ${IPV4_NETWORK:-172.22.1}.254
command: /bin/sh -c "envsubst < /etc/nginx/conf.d/templates/listen_plain.template > /etc/nginx/conf.d/listen_plain.active &&
envsubst < /etc/nginx/conf.d/templates/listen_ssl.template > /etc/nginx/conf.d/listen_ssl.active &&
envsubst < /etc/nginx/conf.d/templates/sogo.template > /etc/nginx/conf.d/sogo.active &&
. /etc/nginx/conf.d/templates/server_name.template.sh > /etc/nginx/conf.d/server_name.active &&
. /etc/nginx/conf.d/templates/sites.template.sh > /etc/nginx/conf.d/sites.active &&
. /etc/nginx/conf.d/templates/sogo_eas.template.sh > /etc/nginx/conf.d/sogo_eas.active &&
nginx -qt &&
until ping phpfpm -c1 > /dev/null; do sleep 1; done &&
until ping sogo -c1 > /dev/null; do sleep 1; done &&
until ping redis -c1 > /dev/null; do sleep 1; done &&
until ping rspamd -c1 > /dev/null; do sleep 1; done &&
exec nginx -g 'daemon off;'"
environment:
- HTTPS_PORT=${HTTPS_PORT:-443}
- HTTP_PORT=${HTTP_PORT:-80}
- MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
- IPV4_NETWORK=${IPV4_NETWORK:-172.22.1}
- TZ=${TZ}
- SKIP_SOGO=${SKIP_SOGO:-n}
- ALLOW_ADMIN_EMAIL_LOGIN=${ALLOW_ADMIN_EMAIL_LOGIN:-n}
- ADDITIONAL_SERVER_NAMES=${ADDITIONAL_SERVER_NAMES:-}
volumes:
- ./data/web:/web:ro,z
- ./data/conf/rspamd/dynmaps:/dynmaps:ro,z
- ./data/assets/ssl/:/etc/ssl/mail/:ro,z
- ./data/conf/nginx/:/etc/nginx/conf.d/:z
- ./data/conf/rspamd/meta_exporter:/meta_exporter:ro,z
- sogo-web-vol-1:/usr/lib/GNUstep/SOGo/:z
# ports:
# - "${HTTPS_BIND:-:}:${HTTPS_PORT:-443}:${HTTPS_PORT:-443}"
# - "${HTTP_BIND:-:}:${HTTP_PORT:-80}:${HTTP_PORT:-80}"
labels:
caddy: mail.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 80}}"
networks:
caddy:
mailcow-network:
aliases:
- nginx
acme-mailcow:
image: mailcow/acme:1.81
restart: unless-stopped
depends_on:
- nginx-mailcow
dns:
- ${IPV4_NETWORK:-172.22.1}.254
environment:
- LOG_LINES=${LOG_LINES:-9999}
- ACME_CONTACT=${ACME_CONTACT:-}
- ADDITIONAL_SAN=${ADDITIONAL_SAN}
- MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
- DBPASS=${DBPASS}
- SKIP_LETS_ENCRYPT=${SKIP_LETS_ENCRYPT:-n}
- COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-mailcow-dockerized}
- DIRECTORY_URL=${DIRECTORY_URL:-}
- ENABLE_SSL_SNI=${ENABLE_SSL_SNI:-n}
- SKIP_IP_CHECK=${SKIP_IP_CHECK:-n}
- SKIP_HTTP_VERIFICATION=${SKIP_HTTP_VERIFICATION:-n}
- ONLY_MAILCOW_HOSTNAME=${ONLY_MAILCOW_HOSTNAME:-n}
- LE_STAGING=${LE_STAGING:-n}
- TZ=${TZ}
- REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
- REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
- SNAT_TO_SOURCE=${SNAT_TO_SOURCE:-n}
- SNAT6_TO_SOURCE=${SNAT6_TO_SOURCE:-n}
volumes:
- ./data/web/.well-known/acme-challenge:/var/www/acme:z
- ./data/assets/ssl:/var/lib/acme/:z
- ./data/assets/ssl-example:/var/lib/ssl-example/:ro,Z
- mysql-socket-vol-1:/var/run/mysqld/:z
networks:
mailcow-network:
aliases:
- acme
netfilter-mailcow:
image: mailcow/netfilter:1.46
restart: unless-stopped
stop_grace_period: 30s
depends_on:
- dovecot-mailcow
- postfix-mailcow
- sogo-mailcow
- php-fpm-mailcow
- redis-mailcow
privileged: true
environment:
- TZ=${TZ}
- IPV4_NETWORK=${IPV4_NETWORK:-172.22.1}
- IPV6_NETWORK=${IPV6_NETWORK:-fd4d:6169:6c63:6f77::/64}
- SNAT_TO_SOURCE=${SNAT_TO_SOURCE:-n}
- SNAT6_TO_SOURCE=${SNAT6_TO_SOURCE:-n}
- REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
- REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
network_mode: "host"
volumes:
- /lib/modules:/lib/modules:ro
watchdog-mailcow:
image: mailcow/watchdog:1.96
restart: unless-stopped
dns:
- ${IPV4_NETWORK:-172.22.1}.254
tmpfs:
- /tmp
volumes:
- rspamd-vol-1:/var/lib/rspamd:z
- mysql-socket-vol-1:/var/run/mysqld/:z
- postfix-vol-1:/var/spool/postfix:z
- ./data/assets/ssl:/etc/ssl/mail/:ro,z
environment:
- IPV6_NETWORK=${IPV6_NETWORK:-fd4d:6169:6c63:6f77::/64}
- LOG_LINES=${LOG_LINES:-9999}
- TZ=${TZ}
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
- DBPASS=${DBPASS}
- DBROOT=${DBROOT}
- USE_WATCHDOG=${USE_WATCHDOG:-n}
- WATCHDOG_NOTIFY_EMAIL=${WATCHDOG_NOTIFY_EMAIL}
- WATCHDOG_NOTIFY_BAN=${WATCHDOG_NOTIFY_BAN:-y}
- WATCHDOG_SUBJECT=${WATCHDOG_SUBJECT:-Watchdog ALERT}
- WATCHDOG_EXTERNAL_CHECKS=${WATCHDOG_EXTERNAL_CHECKS:-n}
- WATCHDOG_MYSQL_REPLICATION_CHECKS=${WATCHDOG_MYSQL_REPLICATION_CHECKS:-n}
- WATCHDOG_VERBOSE=${WATCHDOG_VERBOSE:-n}
- MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
- COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-mailcow-dockerized}
- IPV4_NETWORK=${IPV4_NETWORK:-172.22.1}
- IP_BY_DOCKER_API=${IP_BY_DOCKER_API:-0}
- CHECK_UNBOUND=${CHECK_UNBOUND:-1}
- SKIP_CLAMD=${SKIP_CLAMD:-n}
- SKIP_LETS_ENCRYPT=${SKIP_LETS_ENCRYPT:-n}
- SKIP_SOGO=${SKIP_SOGO:-n}
- HTTPS_PORT=${HTTPS_PORT:-443}
- REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
- REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
- EXTERNAL_CHECKS_THRESHOLD=${EXTERNAL_CHECKS_THRESHOLD:-1}
- NGINX_THRESHOLD=${NGINX_THRESHOLD:-5}
- UNBOUND_THRESHOLD=${UNBOUND_THRESHOLD:-5}
- REDIS_THRESHOLD=${REDIS_THRESHOLD:-5}
- MYSQL_THRESHOLD=${MYSQL_THRESHOLD:-5}
- MYSQL_REPLICATION_THRESHOLD=${MYSQL_REPLICATION_THRESHOLD:-1}
- SOGO_THRESHOLD=${SOGO_THRESHOLD:-3}
- POSTFIX_THRESHOLD=${POSTFIX_THRESHOLD:-8}
- CLAMD_THRESHOLD=${CLAMD_THRESHOLD:-15}
- DOVECOT_THRESHOLD=${DOVECOT_THRESHOLD:-12}
- DOVECOT_REPL_THRESHOLD=${DOVECOT_REPL_THRESHOLD:-20}
- PHPFPM_THRESHOLD=${PHPFPM_THRESHOLD:-5}
- RATELIMIT_THRESHOLD=${RATELIMIT_THRESHOLD:-1}
- FAIL2BAN_THRESHOLD=${FAIL2BAN_THRESHOLD:-1}
- ACME_THRESHOLD=${ACME_THRESHOLD:-1}
- RSPAMD_THRESHOLD=${RSPAMD_THRESHOLD:-5}
- OLEFY_THRESHOLD=${OLEFY_THRESHOLD:-5}
- MAILQ_THRESHOLD=${MAILQ_THRESHOLD:-20}
- MAILQ_CRIT=${MAILQ_CRIT:-30}
networks:
mailcow-network:
aliases:
- watchdog
dockerapi-mailcow:
image: mailcow/dockerapi:1.41
restart: unless-stopped
security_opt:
- label=disable
# oom_kill_disable: true
dns:
- ${IPV4_NETWORK:-172.22.1}.254
environment:
- DBROOT=${DBROOT}
- TZ=${TZ}
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
mailcow-network:
aliases:
- dockerapi
solr-mailcow:
image: mailcow/solr:1.8.1
restart: unless-stopped
volumes:
- solr-vol-1:/opt/solr/server/solr/dovecot-fts/data:Z
ports:
- "${SOLR_PORT:-127.0.0.1:18983}:8983"
environment:
- TZ=${TZ}
- SOLR_HEAP=${SOLR_HEAP:-1024}
- SKIP_SOLR=${SKIP_SOLR:-y}
networks:
mailcow-network:
aliases:
- solr
olefy-mailcow:
image: mailcow/olefy:1.8.1
restart: unless-stopped
environment:
- TZ=${TZ}
- OLEFY_BINDADDRESS=0.0.0.0
- OLEFY_BINDPORT=10055
- OLEFY_TMPDIR=/tmp
- OLEFY_PYTHON_PATH=/usr/bin/python3
- OLEFY_OLEVBA_PATH=/usr/bin/olevba3
- OLEFY_LOGLVL=20
- OLEFY_MINLENGTH=500
- OLEFY_DEL_TMP=1
networks:
mailcow-network:
aliases:
- olefy
ofelia-mailcow:
image: mcuadros/ofelia:latest
restart: unless-stopped
command: daemon --docker
environment:
- TZ=${TZ}
depends_on:
- sogo-mailcow
- dovecot-mailcow
labels:
ofelia.enabled: "true"
security_opt:
- label=disable
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
mailcow-network:
aliases:
- ofelia
ipv6nat-mailcow:
image: robbertkl/ipv6nat
restart: unless-stopped
depends_on:
- unbound-mailcow
- mysql-mailcow
- redis-mailcow
- clamd-mailcow
- rspamd-mailcow
- php-fpm-mailcow
- sogo-mailcow
- dovecot-mailcow
- postfix-mailcow
- memcached-mailcow
- nginx-mailcow
- acme-mailcow
- netfilter-mailcow
- watchdog-mailcow
- dockerapi-mailcow
- solr-mailcow
environment:
- TZ=${TZ}
security_opt:
- label=disable
privileged: true
network_mode: "host"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /lib/modules:/lib/modules:ro
networks:
mailcow-network:
driver: overlay
# driver: bridge
# driver_opts:
# com.docker.network.bridge.name: br-mailcow
# # enable_ipv6: true
# ipam:
# driver: default
# config:
# - subnet: ${IPV4_NETWORK:-172.22.1}.0/24
# - subnet: ${IPV6_NETWORK:-fd4d:6169:6c63:6f77::/64}
caddy:
external: true
driver: overlay
attachable: true
volumes:
vmail-vol-1:
vmail-index-vol-1:
mysql-vol-1:
mysql-socket-vol-1:
redis-vol-1:
rspamd-vol-1:
solr-vol-1:
postfix-vol-1:
crypt-vol-1:
sogo-web-vol-1:
sogo-userdata-backup-vol-1:
+27
View File
@@ -0,0 +1,27 @@
version: "3.9"
services:
matrix:
image: matrixdotorg/synapse
restart: unless-stopped
# environment:
# SYNAPSE_REPORT_STATS: "no"
# SYNAPSE_SERVER_NAME: matrix.marcpartensky.com
# SYNAPSE_ENABLE_REGISTRATION: "true"
volumes:
- ../data/matrix:/data
# - matrix:/data
networks:
- caddy
labels:
caddy: matrix.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8008}}"
traefik.enable: "true"
traefik.http.routers.matrix.rule: Host(`matrix.marcpartensky.com`)
traefik.http.routers.matrix.entrypoints: websecure
traefik.http.routers.matrix.tls.certresolver: tls
traefik.http.services.matrix.loadbalancer.server.port: 8008
networks:
caddy:
external: true
+23
View File
@@ -0,0 +1,23 @@
version: "3.9"
services:
backups:
image: itzg/mc-backup
environment:
BACKUP_INTERVAL: "1d"
# instead of network_mode below, could declare RCON_HOST
SERVE_PORT: 25565
RCON_HOST: minecraft
RCON_PORT: 25575
PAUSE_IF_NO_PLAYER: true
PLAYERS_ONLINE_CHECK_INTERVAL: 1h
TZ: Europe/Paris
DEST_DIR: /backups
volumes:
# mount the same volume used by server, but read-only
- /srv/minecraft/champi:/data:ro
# use a host attached directory so that it in turn can be backed up
# to external/cloud storage
- ./mc-backups:/backups
# share network namespace with server to simplify rcon access
# network_mode: "service:mc"
+17
View File
@@ -0,0 +1,17 @@
version: "3.9"
services:
router:
image: ${MC_ROUTER_IMAGE:-itzg/mc-router}
environment:
# enable API
API_BINDING: ":25564"
ports:
- 25565:25565
# bind the API port to only loopback to avoid external exposure
- 127.0.0.1:25564:25564
command: --mapping=champi.marcpartensky.com=champi:25565,jungle.marcpartensky.com=jungle:25565
networks:
- minecraft
networks:
minecraft:
+34
View File
@@ -0,0 +1,34 @@
version: "3.9"
services:
mcmyadmin:
image: tekgator/docker-mcmyadmin:latest
restart: unless-stopped
# environment:
# PUID: 1001
# PGID: 1001
# EULA: 1
volumes:
- mcmyadmin:/data
ports:
- "25566:25565"
networks:
- minecraft
- caddy
labels:
caddy: mcadmin.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8080}}"
authorize.with: marc
traefik.enable: "true"
traefik.http.routers.minecraft.rule: Host(`mcadmin.marcpartensky.com`)
traefik.http.routers.minecraft.entrypoints: websecure
traefik.http.routers.minecraft.tls.certresolver: tls
traefik.http.services.minecraft.loadbalancer.server.port: 8080
volumes:
mcmyadmin:
networks:
minecraft:
caddy:
external: true
+36
View File
@@ -0,0 +1,36 @@
version: "3.9"
services:
mcvnc:
image: dorowu/ubuntu-desktop-lxde-vnc
volumes:
- /dev/shm:/dev/shm
- mcvnc:/home/marc
- mcvnc_usr:/usr
ports:
- 7900:5900
environment:
USER: marc
PASSWORD: test
networks:
- minecraft
- caddy
depends_on:
- minecraft
labels:
caddy: minecraft.marcpartensky.com, mc.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
traefik.enable: "true"
traefik.http.routers.gitea.rule: Host(`mc.marcpartensky.com`)
traefik.http.routers.gitea.entrypoints: websecure
traefik.http.routers.gitea.tls.certresolver: tls
traefik.http.services.gitea.loadbalancer.server.port: 80
volumes:
mcvnc:
mcvnc_usr:
networks:
minecraft:
caddy:
external: true
+13
View File
@@ -0,0 +1,13 @@
version: "3.9"
services:
minecraft_bedrock:
image: itzg/minecraft-bedrock-server
restart: unless-stopped
ports:
- "19132:19132"
- "39926:39926"
environment:
EULA: "true"
VERSION: "1.18"
OPS: "000901FA5EE9A31B"
+36
View File
@@ -0,0 +1,36 @@
version: "3.9"
services:
minecraft_champi:
image: itzg/minecraft-server
restart: unless-stopped
environment:
TZ: Europe/Paris
EULA: "TRUE"
OPS: MazexRedstone
ENABLE_COMMAND_BLOCK: "TRUE"
MEMORY: 2G
VERSION: 1.16.5
ICON: https://cdn.discordapp.com/attachments/507519157387132940/998015338966945822/unknown.png
MOTD: Made in Marc Partensky
ANNOUNCE_PLAYER_ACHIEVEMENTS: "TRUE"
LEVEL: Server
ONLINE_MODE: "FALSE" # no need for an account
DIFFICULTY: hard
VIEW_DISTANCE: 32
# MAX_PLAYERS: 50
# WORLD: $BIND_MOUNTS/minecraft/zip/Server.zip
# SNOOPER_ENABLED: false
volumes:
- /srv/minecraft/champi:/data
# - minecraft:/data
ports:
- "25565:25565"
networks:
- minecraft
# volumes:
# minecraft:
networks:
minecraft:
+36
View File
@@ -0,0 +1,36 @@
version: "3.9"
services:
minecraft_jungle:
image: itzg/minecraft-server
restart: unless-stopped
environment:
TZ: Europe/Paris
EULA: "TRUE"
OPS: MazexRedstone
ENABLE_COMMAND_BLOCK: "TRUE"
MEMORY: 2G
VERSION: 1.16.5
ICON: https://media.discordapp.net/attachments/507519157387132940/984995267197677598/unknown.png
MOTD: Made in Marc Partensky
ANNOUNCE_PLAYER_ACHIEVEMENTS: "TRUE"
LEVEL: Server
ONLINE_MODE: "FALSE" # no need for an account
DIFFICULTY: hard
VIEW_DISTANCE: 32
# MAX_PLAYERS: 50
# WORLD: $BIND_MOUNTS/minecraft/zip/Server.zip
# SNOOPER_ENABLED: false
volumes:
- /srv/minecraft/jungle:/data
# - minecraft:/data
ports:
- "25564:25565"
networks:
- minecraft
# volumes:
# minecraft:
networks:
minecraft:
+13
View File
@@ -0,0 +1,13 @@
version: "3.9"
services:
monero_miner:
image: giansalex/monero-miner
restart: unless-stopped
env_file:
- ../data/secrets/monero_miner.env
# entrypoint: /xmr/xmrig \
# -o pool.supportxmr.com:3333 \
# -u $WALLET \
# -k \
# --cpu-priority=2
+23
View File
@@ -0,0 +1,23 @@
version: "3.9"
services:
monero_node:
image: kannix/monero-full-node
restart: unless-stopped
volumes:
- monero_node_xmrchain:/home/monero/.bitmonero
ports:
- "18080:18080"
- "18081:18081"
deploy:
resources:
limits:
cpus: '1'
memory: 2000M
volumes:
monero_node_xmrchain:
networks:
caddy:
external: true
+47
View File
@@ -0,0 +1,47 @@
version: "3.9"
services:
mongo:
image: mongo
restart: unless-stopped
volumes:
- mongo:/data/db
networks:
- mongo
ports:
- "27017:27017"
env_file:
- ../data/secrets/mongo.env
# healthcheck:
# test: CMD echo 'db.runCommand("ping").ok' | mongo localhost:27017/test --quiet
mongo_express:
image: mongo-express
restart: unless-stopped
environment:
ME_CONFIG_OPTIONS_EDITORTHEME: "ambiance"
env_file:
- ../data/secrets/mongo_express.env
networks:
- mongo
- caddy
depends_on:
- mongo
labels:
caddy: mongo.marcpartensky.com, mongo.marc.wf, mongo.marc.tf
caddy.reverse_proxy: "{{upstreams 8081}}"
traefik.enable: "true"
traefik.http.routers.mongo.rule: Host(`mongo.marcpartensky.com`)
traefik.http.routers.mongo.entrypoints: websecure
traefik.http.routers.mongo.tls.certresolver: tls
traefik.http.services.mongo.loadbalancer.server.port: 8081
volumes:
mongo:
networks:
mongo:
caddy:
external: true
attachable: true
driver: overlay
+35
View File
@@ -0,0 +1,35 @@
version: "3.9"
services:
nextcloud:
image: nextcloud
restart: unless-stopped
volumes:
- nextcloud:/var/www/html
# - nextcloud:/var/www/html/data
# - nextcloud_theme:/var/www/html/themes/<YOUR_CUSTOM_THEME>
# - nextcloud_apps:/var/www/html/custom_apps
# - nextcloud_config:/var/www/html/config
env_file:
- ../data/secrets/nextcloud.env
networks:
- caddy
- nextcloud
# depends_on:
# - nextcloud_mariadb
labels:
caddy: cloud.marcpartensky.com
caddy.reverse_proxy: "{{upstreams http 80}}"
traefik.enable: "true"
traefik.http.routers.nextcloud.rule: Host(`cloud.marcpartensky.com`)
traefik.http.routers.nextcloud.entrypoints: websecure
traefik.http.routers.nextcloud.tls.certresolver: tls
traefik.http.services.nextcloud.loadbalancer.server.port: 80
volumes:
nextcloud:
networks:
nextcloud:
caddy:
external: true
+20
View File
@@ -0,0 +1,20 @@
version: "3.9"
services:
nextcloud_mariadb:
image: mariadb
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- nextcloud_mariadb:/var/lib/mysql
env_file:
- ../data/secrets/nextcloud.env
networks:
- caddy
- nextcloud
volumes:
nextcloud_mariadb:
networks:
nextcloud:
+1
View File
@@ -4,6 +4,7 @@ services:
oxivia_mysql:
image: mysql
restart: unless-stopped
user: 999:1000
env_file:
- ../data/secrets/oxivia.env
volumes:
+2 -1
View File
@@ -4,6 +4,7 @@ services:
oxivia:
image: wordpress
restart: unless-stopped
user: 1000:1000
env_file:
- ../data/secrets/oxivia.env
volumes:
@@ -13,7 +14,7 @@ services:
- caddy
- oxivia
depends_on:
- oxivia_mysql
# - oxivia_mysql
- caddy
healthcheck:
test: ["CMD", "curl", "-f", "localhost:80"]
+63
View File
@@ -0,0 +1,63 @@
version: "3.3"
services:
peertube:
image: chocobozzz/peertube:production-bullseye
restart: unless-stopped
networks:
- caddy
env_file:
- ../data/secrets/peertube.env
ports:
- "1935:1935" # If you don't want to use the live feature, you can comment this line
# - "9000:9000" # If you provide your own webserver and reverse-proxy, otherwise not suitable for production
volumes:
- peertube_assets:/app/client/dist
- peertube:/data
- ../data/peertube:/config
depends_on:
- peertube_postgres
- peertube_redis
- peertube_postfix
labels:
caddy: peertube.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 80}}"
traefik.enable: "true"
traefik.http.routers.gitea.rule: Host(`peertube.marcpartensky.com`)
traefik.http.routers.gitea.entrypoints: websecure
traefik.http.routers.gitea.tls.certresolver: tls
traefik.http.services.gitea.loadbalancer.server.port: 80
peertube_postgres:
image: postgres:13-alpine
restart: unless-stopped
env_file:
- ../data/secrets/peertube.env
volumes:
- peertube_postgres:/var/lib/postgresql/data
peertube_redis:
image: redis:6-alpine
restart: unless-stopped
volumes:
- peertube_redis:/data
peertube_postfix:
image: mwader/postfix-relay
restart: unless-stopped
env_file:
- .env
volumes:
- peertube_postfix:/etc/opendkim/keys
networks:
caddy:
external: true
volumes:
peertube:
peertube_assets:
peertube_postgres:
peertube_redis:
peertube_postfix:
+37
View File
@@ -0,0 +1,37 @@
version: "3.9"
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
pihole:
image: pihole/pihole:latest
restart: unless-stopped
# For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
# - "80:80/tcp"
environment:
TZ: 'Europe/Paris'
# WEBPASSWORD: 'set a secure password here or it will be random'
# Volumes store your data between container upgrades
volumes:
- ../data/pihole/etc-pihole:/etc/pihole
- ../data/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
cap_add:
- NET_ADMIN # Recommended but not required (DHCP needs NET_ADMIN)
networks:
- caddy
labels:
caddy: pihole.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 80}}"
traefik.enable: "true"
traefik.http.routers.pihole.rule: Host(`pihole.marcpartensky.com`)
traefik.http.routers.pihole.entrypoints: websecure
traefik.http.routers.pihole.tls.certresolver: tls
traefik.http.services.pihole.loadbalancer.server.port: 80
networks:
caddy:
external: true
+1 -1
View File
@@ -24,7 +24,7 @@ services:
caddy: docker.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 9000}}"
traefik.enable: "true"
traefik.http.routers.portainer.rule: Host(`docker.marcpartensky.com`)"
traefik.http.routers.portainer.rule: Host(`docker.marcpartensky.com`)
traefik.http.routers.portainer.entrypoints: websecure
traefik.http.routers.portainer.tls.certresolver: tls
traefik.http.services.portainer.loadbalancer.server.port: 9000
+21
View File
@@ -0,0 +1,21 @@
version: "3.9"
services:
pritunl_mongo:
image: mongo:latest
restart: unless-stopped
volumes:
- pritunl_mongo:/data/db
networks:
- pritunl
volumes:
pritunl_mongo:
networks:
pritunl:
# internal: true
# driver: bridge
ipam:
config:
- subnet: 172.177.0.0/16
+47
View File
@@ -0,0 +1,47 @@
version: "3.9"
services:
pritunl:
image: goofball222/pritunl
restart: unless-stopped
ports:
- "1194-1195:1194-1195/udp"
depends_on:
- pritunl_mongo
environment:
REVERSE_PROXY: "true"
TZ: Europe/Paris
MONGODB_URI: mongodb://pritunl_mongo:27017/pritunl
PRITUNL_DEBUG: "true"
privileged: true
cap_add:
- SYS_ADMIN
- NET_ADMIN
sysctls:
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv4.ip_forward=1
# healthcheck:
# test: ["CMD", "wget", "-q", "localhost:80", "-O", "/dev/null"]
# volumes:
# - /etc/localtime:/etc/localtime:ro
networks:
- caddy
- pritunl
labels:
caddy: vpn.marcpartensky.com
caddy.reverse_proxy: "{{upstreams http 9700}}"
traefik.enable: "true"
traefik.http.routers.pritunl.rule: Host(`vpn.marcpartensky.com`)
traefik.http.routers.pritunl.entrypoints: websecure
traefik.http.routers.pritunl.tls.certresolver: tls
traefik.http.services.pritunl.loadbalancer.server.port: 9700
networks:
caddy:
external: true
pritunl:
# internal: true
# driver: bridge
ipam:
config:
- subnet: 172.177.0.0/16
+138
View File
@@ -0,0 +1,138 @@
version: '3.8'
x-common:
panel:
&panel-environment
APP_URL: "https://pterodactyl.marcpartensky.com"
# A list of valid timezones can be found here: http://php.net/manual/en/timezones.php
APP_TIMEZONE: "UTC"
APP_SERVICE_AUTHOR: "noreply@pterodactyl.marcpartensky.com"
# Uncomment the line below and set to a non-empty value if you want to use Let's Encrypt
# to generate an SSL certificate for the Panel.
# LE_EMAIL: ""
mail:
&mail-environment
MAIL_FROM: "noreply@pterodactyl.marcpartensky.com"
MAIL_DRIVER: "smtp"
MAIL_HOST: "marcpartensky.com"
MAIL_PORT: "1025"
MAIL_USERNAME: "marc@marcpartensky.com"
MAIL_PASSWORD: ""
MAIL_ENCRYPTION: "true"
services:
pterodactyl_panel:
image: ghcr.io/pterodactyl/panel:latest
restart: unless-stopped
links:
- pterodactyl_mariadb
- pterodactyl_redis
volumes:
- pterodactyl_panel_var:/app/var/
- pterodactyl_panel_logs:/app/storage/logs
- pterodactyl_panel_nginx:/etc/nginx/http.d
- pterodactyl_panel_certs:/etc/letsencrypt
env_file:
- ../data/secrets/pterodactyl.env
environment:
<<: [*panel-environment, *mail-environment]
APP_ENV: production
APP_ENVIRONMENT_ONLY: "false"
CACHE_DRIVER: redis
SESSION_DRIVER: redis
QUEUE_DRIVER: redis
REDIS_HOST: pterodactyl_redis
DB_HOST: pterodactyl_mariadb
DB_PORT: 3306
DB_USERNAME: pterodactyl
networks:
- pterodactyl
- caddy
labels:
caddy: pterodactyl.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 80}}"
traefik.enable: "true"
traefik.http.routers.pterodactyl.rule: Host(`pterodactyl.marcpartensky.com`)
traefik.http.routers.pterodactyl.entrypoints: websecure
traefik.http.routers.pterodactyl.tls.certresolver: tls
traefik.http.services.pterodactyl.loadbalancer.server.port: 80
pterodactyl_mariadb:
image: mariadb:10.5
restart: unless-stopped
volumes:
- pterodactyl_mariadb:/var/lib/mysql
environment:
MYSQL_DATABASE: "panel"
MYSQL_USER: "pterodactyl"
env_file:
- ../data/secrets/pterodactyl.env
networks:
- pterodactyl
pterodactyl_redis:
image: redis:alpine
restart: unless-stopped
networks:
- pterodactyl
pterodactyl_wing_1:
image: ghcr.io/pterodactyl/wings:v1.6.1
restart: always
networks:
- wing1
- pterodactyl
ports:
- "9080:8080"
- "9022:2022"
- "9443:443"
tty: true
environment:
TZ: "UTC"
WINGS_UID: 988
WINGS_GID: 988
WINGS_USERNAME: pterodactyl
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/containers/:/var/lib/docker/containers
- pterodactyl_etc:/etc/pterodactyl
- pterodactyl_var_lib:/var/lib/pterodactyl
- pterodactyl_var_log:/var/log/pterodactyl
- /tmp/pterodactyl:/tmp/pterodactyl
# - /etc/ssl/certs:/etc/ssl/certs:ro
# you may need /srv/daemon-data if you are upgrading from an old daemon
#- "/srv/daemon-data/:/srv/daemon-data/"
# Required for ssl if you use let's encrypt. uncomment to use.
#- "/etc/letsencrypt/:/etc/letsencrypt/"
labels:
caddy: wing1.pterodactylmarcpartensky.com
caddy.reverse_proxy: "{{upstreams 8080}}"
traefik.enable: "true"
traefik.http.routers.pterodactyl_wing_1.rule: Host(`wing1.pterodactyl.marcpartensky.com`)
traefik.http.routers.pterodactyl_wing_1.entrypoints: websecure
traefik.http.routers.pterodactyl_wing_1.tls.certresolver: tls
traefik.http.services.pterodactyl_wing_1.loadbalancer.server.port: 8080
volumes:
pterodactyl_mariadb:
pterodactyl_panel_var:
pterodactyl_panel_logs:
pterodactyl_panel_nginx:
pterodactyl_panel_certs:
pterodactyl_etc:
pterodactyl_var_lib:
pterodactyl_var_log:
networks:
pterodactyl:
wing1:
caddy:
external: true
# wings0:
# name: wings0
# driver: bridge
# ipam:
# config:
# - subnet: "172.21.0.0/16"
# driver_opts:
# com.docker.network.bridge.name: wings0
+59
View File
@@ -0,0 +1,59 @@
version: "3.9"
services:
pterodactyl_http:
image: marcpartensky/pterodactyl-http
restart: unless-stopped
depends_on:
- pterodactyl_php
networks:
- pterodactyl
- caddy
volumes:
- pterodactyl_env:/var/www/html/env
- pterodactyl_panel:/var/www/html/pterodactyl
- pterodactyl_storage:/var/www/html/pterodactyl/storage
labels:
caddy: pterodactyl.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
php:
image: marcpartensky/pterodactyl-php
restart: unless-stopped
depends_on:
- pterodactyl_db
networks:
- pterodactyl
volumes:
- pterodactyl_env:/var/www/html/env
- pterodactyl_panel:/var/www/html/pterodactyl
- pterodactyl_storage:/var/www/html/pterodactyl/storage
pterodactyl_db:
image: mariadb
restart: unless-stopped
environment:
MYSQL_DATABASE: pterodactyl
MYSQL_PASSWORD: pterodactyl
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_USER: pterodactyl
networks:
- pterodactyl
volumes:
- pterodactyl_db:/var/lib/mysql
redis:
image: redis:alpine
restart: unless-stopped
networks:
- pterodactyl
networks:
pterodactyl:
caddy:
external: true
volumes:
pterodactyl_db:
pterodactyl_env:
pterodactyl_panel:
pterodactyl_storage:
+18
View File
@@ -0,0 +1,18 @@
version: "3.9"
services:
netbootxyz:
image: lscr.io/linuxserver/netbootxyz
restart: unless-stopped
environment:
PUID: 1000
PGID: 1000
MENU_VERSION: 1.9.9 #optional
PORT_RANGE: 30000:30010 #optional
SUBFOLDER: / #optional
volumes:
- ../data/pxe/config:/config
- ../data/pxe/assets:/assets #optional
ports:
- 3000:3000
- 69:69/udp
- 8080:80 #optional
+28
View File
@@ -0,0 +1,28 @@
version: "3.9"
services:
rancher:
image: rancher/server
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- caddy
labels:
caddy: rancher.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8080}}"
traefik.enable: "true"
traefik.http.routers.rancher.rule: Host(`rancher.marcpartensky.com`)
traefik.http.routers.rancher.entrypoints: websecure
traefik.http.routers.rancher.tls.certresolver: tls
traefik.http.services.rancher.loadbalancer.server.port: 8080
user: root
deploy:
resources:
limits:
cpus: '4'
memory: 5000M
networks:
caddy:
external: true
+1 -1
View File
@@ -21,7 +21,7 @@ services:
networks:
- caddy
labels:
caddy: registry.marcpartensky.com
caddy: registry.marcpartensky.com, r.marc.wf
caddy.reverse_proxy: "{{upstreams 80}}"
traefik.enable: "true"
traefik.http.routers.registry.rule: Host(`registry.marcpartensky.com`)
+52
View File
@@ -0,0 +1,52 @@
version: "3.9"
services:
rocketchat:
image: registry.rocket.chat/rocketchat/rocket.chat:${RELEASE:-latest}
restart: on-failure
labels:
caddy: rocketchat.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 3000}}"
traefik.enable: 'true'
traefik.http.routers.rocketchat.rule: Host(`rocket.marcpartensky.com`)
traefik.http.routers.rocketchat.tls: 'true'
traefik.http.routers.rocketchat.entrypoints: https
traefik.http.routers.rocketchat.tls.certresolver: letsencrypt
environment:
MONGO_URL: "${MONGO_URL:-\
mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/\
${MONGODB_DATABASE:-rocketchat}?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}}"
MONGO_OPLOG_URL: "${MONGO_OPLOG_URL:\
-mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/\
local?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}}"
ROOT_URL: ${ROOT_URL:-http://localhost:${HOST_PORT:-3000}}
PORT: ${PORT:-3000}
depends_on:
- mongodb
expose:
- ${PORT:-3000}
ports:
- host_ip: ${BIND_IP:-0.0.0.0}
target: ${PORT:-3000}
published: ${HOST_PORT:-3000}
protocol: tcp
mode: host
rocket_mongodb:
image: docker.io/bitnami/mongodb:${MONGODB_VERSION:-4.4}
restart: on-failure
volumes:
- mongodb_data:/bitnami/mongodb
environment:
MONGODB_REPLICA_SET_MODE: primary
MONGODB_REPLICA_SET_NAME: ${MONGODB_REPLICA_SET_NAME:-rs0}
MONGODB_PORT_NUMBER: ${MONGODB_PORT_NUMBER:-27017}
MONGODB_INITIAL_PRIMARY_HOST: ${MONGODB_INITIAL_PRIMARY_HOST:-mongodb}
MONGODB_INITIAL_PRIMARY_PORT_NUMBER: ${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}
MONGODB_ADVERTISED_HOSTNAME: ${MONGODB_ADVERTISED_HOSTNAME:-mongodb}
MONGODB_ENABLE_JOURNAL: ${MONGODB_ENABLE_JOURNAL:-true}
ALLOW_EMPTY_PASSWORD: ${ALLOW_EMPTY_PASSWORD:-yes}
volumes:
mongodb_data: { driver: local }
+37
View File
@@ -0,0 +1,37 @@
version: "3.9"
services:
rustdesk_hbbs:
image: rustdesk/rustdesk-server:latest
restart: unless-stopped
ports:
- 21115:21115
- 21116:21116
- 21116:21116/udp
- 21118:21118
command: hbbs -r example.com:21117
volumes:
- rustdesk_hbbs:/root
networks:
- rustdesk
depends_on:
- rustdesk_hbbr
rustdesk_hbbr:
image: rustdesk/rustdesk-server:latest
restart: unless-stopped
ports:
- 21117:21117
- 21119:21119
command: hbbr
volumes:
- rustdesk_hbbr:/root
networks:
- rustdesk
volumes:
rustdesk_hbbs:
rustdesk_hbbr:
networks:
rustdesk:
+78
View File
@@ -0,0 +1,78 @@
version: "3.9"
services:
seafile_server:
image: ggogel/seafile-server:9.0.7
volumes:
- seafile_data:/shared
env_file:
- ../data/secrets/seafile.env
environment:
HTTPS: "true"
SEAFILE_SERVER_HOSTNAME: seafile.marcpartensky.com # Mandatory on first deployment!
depends_on:
- seafile_mariadb
- seafile_memcached
- seafile_caddy
networks:
- seafile
seahub:
image: ggogel/seahub:9.0.7
volumes:
- seafile_data:/shared
- seahub_avatars:/shared/seafile/seahub-data/avatars
- seahub_custom:/shared/seafile/seahub-data/custom
env_file:
- ../data/secrets/seafile.env
depends_on:
- seafile_server
- seafile_caddy
- seahub_media
networks:
- seafile
seahub_media:
image: ggogel/seahub-media:9.0.7
volumes:
- seahub_avatars:/usr/share/caddy/media/avatars
- seahub_custom:/usr/share/caddy/media/custom
depends_on:
- seafile_caddy
networks:
- seafile
seafile_mariadb:
image: mariadb:10.7.4
env_file:
- ../data/secrets/seafile.env
volumes:
- seafile_mariadb:/var/lib/mysql
networks:
- seafile
seafile_memcached:
image: memcached:1.6.16
entrypoint: memcached -m 1024
networks:
- seafile
seafile_caddy:
image: ggogel/seafile-caddy:1.0.6
networks:
- seafile
- caddy
labels:
caddy: seafile.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 80}}"
networks:
seafile:
internal: true
caddy:
external: true
volumes:
seafile_data:
seafile_mariadb:
seahub_avatars:
seahub_custom:
+27
View File
@@ -0,0 +1,27 @@
version: "3.9"
services:
searx:
image: searx/searx
restart: unless-stopped
volumes:
- searx:/etc/searx
environment:
BASE_URL: https://searx.marcpartensky.com
networks:
- caddy
labels:
caddy: searx.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
traefik.enable: "true"
traefik.http.routers.searx.rule: Host(`searx.marcpartensky.com`)
traefik.http.routers.searx.entrypoints: websecure
traefik.http.routers.searx.tls.certresolver: tls
traefik.http.services.searx.loadbalancer.server.port: 80
volumes:
searx:
networks:
caddy:
external: true
+12
View File
@@ -0,0 +1,12 @@
version: "3.9"
services:
ssh_chat:
image: marcoslater/ssh-chat:latest
restart: unless-stopped
ports:
- "2022:2022"
volumes:
ssh_chat_key: /ssh_key
volumes:
ssh_chat_key:
+13
View File
@@ -0,0 +1,13 @@
versions: "3.9"
services:
image: farmer1992/sshpiperd
restart: unless-stopped
ports:
- "2222:2222"
volumes:
- sshpiper:/var/sshpiper
# - /etc/ssh/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key
volumes:
sshpiper:
+19 -3
View File
@@ -3,14 +3,30 @@ version: "3.9"
services:
sslh:
image: marcpartensky/sslh
restart: unless-stopped
environment:
# LISTEN_IP: 0.0.0.0
# LISTEN_PORT: 443
SSH_HOST: marcpartensky.com
SSH_PORT: 22
# OPENVPN_HOST: localhost
# OPENVPN_PORT: 1194
HTTPS_HOST: caddy
HTTPS_PORT: 443
ports:
- "443:8443"
# command: --tls=caddy:443 --ssh=marcpartensky.com:7022
networks:
- caddy
# - bridge
ports:
- "443:443"
command: --tls=caddy:443 --ssh=localhost:7022
depends_on:
- caddy
healthcheck:
# test: ["CMD-SHELL", "wget", "--no-check-certificate", "https://caddy:8443"]
test: ["CMD", "/usr/bin/curl", "http://caddy"]
# interval: 30s
# timeout: 5s
# retries: 5
networks:
caddy:
+25
View File
@@ -0,0 +1,25 @@
version: "3.9"
services:
swarmpit_agent:
image: swarmpit/agent:latest
environment:
DOCKER_API_VERSION: 1.35
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- swarmpit
deploy:
mode: global
labels:
swarmpit.agent: 'true'
resources:
limits:
cpus: '0.10'
memory: 64M
# reservations:
# cpus: '0.05'
# memory: 32M
networks:
swarmpit:
+23
View File
@@ -0,0 +1,23 @@
version: "3.9"
services:
swarmpit_db:
image: couchdb:2.3.0
volumes:
- swarmpit_db:/opt/couchdb/data
networks:
- swarmpit
deploy:
resources:
limits:
cpus: '0.30'
memory: 256M
# reservations:
# cpus: '0.15'
# memory: 128M
volumes:
swarmpit_db:
networks:
swarmpit:
+23
View File
@@ -0,0 +1,23 @@
version: "3.9"
services:
swarmpit_influxdb:
image: influxdb:1.7
volumes:
- swarmpit_influxdb:/var/lib/influxdb
networks:
- swarmpit
deploy:
resources:
limits:
cpus: '0.60'
memory: 512M
# reservations:
# cpus: '0.30'
# memory: 128M
volumes:
swarmpit_influxdb:
networks:
swarmpit:
+46
View File
@@ -0,0 +1,46 @@
version: "3.9"
services:
swarmpit:
image: swarmpit/swarmpit:latest
environment:
SWARMPIT_DB: http://swarmpit_db:5984
SWARMPIT_INFLUXDB: http://swarmpit_influxdb:8086
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080"]
interval: 60s
timeout: 10s
retries: 3
networks:
- swarmpit
- caddy
deploy:
resources:
limits:
cpus: '0.50'
memory: 1024M
# reservations:
# cpus: '0.25'
# memory: 512M
# placement:
# constraints:
# - node.role == manager
depends_on:
- swarmpit_db
- swarmpit_influxdb
- swarmpit_agent
labels:
caddy: swarm.marcpartensky.com
caddy.reverse_proxy: "{{upstreams http 8080}}"
traefik.enable: "true"
traefik.http.routers.swarmpit.rule: Host(`swarm.marcpartensky.com`)
traefik.http.routers.swarmpit.entrypoints: websecure
traefik.http.routers.swarmpit.tls.certresolver: tls
traefik.http.services.swarmpit.loadbalancer.server.port: 8080
networks:
swarmpit:
caddy:
external: true
+28
View File
@@ -0,0 +1,28 @@
version: "3.9"
services:
tableau:
image: pvtmert/tableau
restart: unless-stopped
env_file:
- ../data/secrets/tableau.env
networks:
- caddy
labels:
caddy: tableau.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 8080}}"
traefik.enable: "true"
traefik.http.routers.tableau.rule: Host(`tableau.marcpartensky.com`)
traefik.http.routers.tableau.entrypoints: websecure
traefik.http.routers.tableau.tls.certresolver: tls
traefik.http.services.tableau.loadbalancer.server.port: 8080
networks:
caddy:
external: true
# docker run \
# -e LICENSE_KEY=<key> \
# -e TABLEAU_USERNAME=<username> \
# -e TABLEAU_PASSWORD=<password> \
# --hostname=<static (internal) name of host machine> \
# -p 8080:8080 -d <Tableau Server in a Container image ID or tag>
+63
View File
@@ -0,0 +1,63 @@
version: "3.9"
services:
todolist:
image: marcpartensky/je-todoapp-react
restart: unless-stopped
environment:
PORT: 80
SPRING_API_URL: https://api.todolist.marcpartensky.com
depends_on:
- todolist_api
networks:
- caddy
labels:
caddy: todolist.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
traefik.enable: "true"
traefik.http.routers.todolist.rule: Host(`todolist.marcpartensky.com`)
traefik.http.routers.todolist.entrypoints: websecure
traefik.http.routers.todolist.tls.certresolver: tls
traefik.http.services.todolist.loadbalancer.server.port: 80
# entrypoint: ["/bin/sh", "-c", "'SPRING_API_URL=https://api.todolist.marcpartensky.com serve -s build'"]
todolist_api:
image: marcpartensky/je-todoapp-spring-api
restart: unless-stopped
env_file:
- ../data/secrets/todolist.env
environment:
PORT: 80
POSTGRES_HOST: todolist_postgres
depends_on:
- todolist_postgres
networks:
- caddy
- todolist
labels:
caddy: api.todolist.marcpartensky.com
caddy.reverse_proxy: "{{upstreams http 8080}}"
traefik.enable: "true"
traefik.http.routers.todolist_api.rule: Host(`api.todolist.marcpartensky.com`)
traefik.http.routers.todolist_api.entrypoints: websecure
traefik.http.routers.todolist_api.tls.certresolver: tls
traefik.http.services.todolist_api.loadbalancer.server.port: 8080
todolist_postgres:
image: postgres
restart: unless-stopped
volumes:
- todolist_postgres:/var/lib/postgresql/data
env_file:
- ../data/secrets/todolist.env
networks:
- caddy
- todolist
volumes:
todolist_postgres:
networks:
todolist:
caddy:
external: true
+62
View File
@@ -0,0 +1,62 @@
version: "3.9"
services:
traefik:
image: traefik
# env_file:
# - ../data/secrets/traefik.env
restart: unless-stopped
# command:
# ## Provider Settings - https://docs.traefik.io/providers/docker/#provider-configuration ##
# # - --providers.docker.exposedbydefault=false # <== Don't expose every container to traefik, only expose enabled ones
# - --providers.file.filename=/dynamic.yaml # <== Referring to a dynamic configuration file
# # - --providers.docker.network=web # <== Operate on the docker network named web
# - --providers.docker=true # <== Enabling docker as the provider for traefik
# ## API Settings - https://docs.traefik.io/operations/api/, endpoints - https://docs.traefik.io/operations/api/#endpoints ##
# - --api.insecure=false # <== Enabling insecure api, NOT RECOMMENDED FOR PRODUCTION
# - --api.dashboard=true
# - --api.debug=true # <== Enabling additional endpoints for debugging and profiling
# ## Entrypoints Settings - https://docs.traefik.io/routing/entrypoints/#configuration ##
# - --entrypoints.web.address=:80
# - --entrypoints.websecure.address=:443
# - --certificatesresolvers.tls.acme.tlschallenge=true # <== Enable TLS-ALPN-01 to generate and renew ACME certs
# - --certificatesresolvers.tls.acme.email=marc.partensky@gmail.com
# - --certificatesresolvers.tls.acme.storage=/letsencrypt/acme.json # Log Settings (options: ERROR, DEBUG, PANIC, FATAL, WARN, INFO) - https://docs.traefik.io/observability/logs/ ##
# - --log.level=DEBUG # <== Setting the level of the logs from traefik
# - --entrypoints.web.http.redirections.entryPoint.to=websecure
# - --entrypoints.web.http.redirections.entryPoint.scheme=https
# - --entrypoints.web.http.redirections.entrypoint.permanent=true
ports:
- "80:80"
- "443:443"
networks:
- caddy
volumes:
- ../data/traefik/traefik.yml:/traefik.yml # static configuration
- ../data/traefik/dynamic.yml:/dynamic.yml
- traefik_letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
labels:
traefik.enable: "true"
traefik.http.routers.traefik.rule: Host(`traefik.marcpartensky.com`)
traefik.http.routers.traefik.service: api@internal
traefik.http.routers.traefik.entrypoints: websecure
traefik.http.routers.traefik.tls.certresolver: tls
traefik.docker.network: caddy
# traefik.http.middlewares.test-ldap-auth.plugin.ldapAuth.source: marcpartensky.com
# traefik.http.middlewares.test-ldap-auth.plugin.ldapAuth.baseDN: dc=marcpartensky,dc=com
# # traefik.http.routers.redirs.entrypoints: web
# traefik.http.middlewares.redirect-to-https.redirectscheme.scheme: https
# traefik.http.routers.redirs.middlewares: redirect-to-https
# traefik.http.routers.redirs.rule: hostregexp(`{host:.+}`)
deploy:
placement:
constraints:
- node.role == manager
volumes:
traefik_letsencrypt:
networks:
caddy:
external: true
+25
View File
@@ -0,0 +1,25 @@
version: "3.9"
services:
valentin_website:
image: valentincolin/website
restart: unless-stopped
environment:
PRODUCTION: "True"
build:
context: ./
dockerfile: Dockerfile
networks:
- caddy
labels:
caddy: valentin-colin.fr
caddy.reverse_proxy: "{{upstreams 80}}"
traefik.enable: "true"
traefik.http.routers.valentincolin_website.rule: Host(`valentin-colin.com`)
traefik.http.routers.valentincolin_website.entrypoints: websecure
traefik.http.routers.valentincolin_website.tls.certresolver: tls
traefik.http.services.valentincolin_website.loadbalancer.server.port: 80
networks:
caddy:
external: true
+44
View File
@@ -0,0 +1,44 @@
version: "3.9"
services:
ldap_sync:
restart: unless-stopped
build:
context: .
dockerfile: Dockerfile
volumes:
- ./example.config.toml:/config.toml:ro
# ./root.cert:/usr/src/vaultwarden_ldap/root.cert:ro
environment:
CONFIG_PATH: /config.toml
RUST_BACKTRACE: 1
depends_on:
- vaultwarden
vaultwarden:
image: vaultwarden/server
environment:
ADMIN_TOKEN: admin
SIGNUPS_ALLOWED: 'false'
INVITATIONS_ALLOWED: 'true'
networks:
- caddy
labels:
caddy: vault.marcpartensky.com
caddy.reverse_proxy: "{{upstreams 80}}"
traefik.enable: "true"
traefik.http.routers.gitea.rule: Host(`vault.marcpartensky.com`)
traefik.http.routers.gitea.entrypoints: websecure
traefik.http.routers.gitea.tls.certresolver: tls
traefik.http.services.gitea.loadbalancer.server.port: 80
ldap_admin:
image: osixia/phpldapadmin
ports:
- 8001:80
environment:
PHPLDAPADMIN_HTTPS: 'false'
PHPLDAPADMIN_LDAP_HOSTS: ldap
networks:
caddy:
external: true
+10 -11
View File
@@ -9,15 +9,9 @@ services:
environment:
VIRTUAL_HOST: marcpartensky.com
VIRTUAL_PORT: 80
# DEBUG: true
# SECURE_SSL_REDIRECT: false
# KEY: /app/privkey.pem
# CERT: /app/fullchain.pem
working_dir: /app
entrypoint: >
sh -c "./manage.py migrate;
./manage.py collectstatic --noinput;
daphne django_project.asgi:application --port 80 --bind 0.0.0.0 -v2"
# entrypoint: "daphne -e ssl:443:privateKey=$$KEY:certKey=$$CERT django_project.asgi:application"
# entrypoint: daphne -b website -e ssl:443:privateKey=/app/privkey.pem:certKey=/app/fullchain.pem django_project.asgi:application
# command:
@@ -33,14 +27,14 @@ services:
- website
- caddy
labels:
caddy: marcpartensky.com, marc.wf, marc.tf
caddy: marcpartensky.com
caddy.reverse_proxy: "{{upstreams 80}}"
# caddy.tls: "internal"
traefik.enable: "true"
traefik.http.routers.website.rule: "Host(`marcpartensky.com`)"
traefik.http.routers.website.entrypoints: "websecure"
traefik.http.routers.website.tls.certresolver: "tls"
traefik.http.services.website.loadbalancer.server.port: "80"
traefik.http.routers.website.rule: Host(`marcpartensky.com`)
traefik.http.routers.website.entrypoints: websecure
traefik.http.routers.website.tls.certresolver: tls
traefik.http.services.website.loadbalancer.server.port: 80
deploy:
# mode: global
update_config:
@@ -85,6 +79,11 @@ services:
# caddy.reverse_proxy.header_up.X-Forwarded-For: "{host}" # redundant
caddy.basicauth: /* bcrypt
caddy.basicauth.admin: JDJhJDEyJDVRUXdqQllCR2dCSEZ0ZUlaVUZTRE95WXpROFdUcFdXSm4wVGE2TmE4cEkxNHc5Si4venJxCg==
traefik.enable: "true"
traefik.http.routers.pgweb.rule: Host(`db.marcpartensky.com`)
traefik.http.routers.pgweb.entrypoints: websecure
traefik.http.routers.pgweb.tls.certresolver: tls
traefik.http.services.pgweb.loadbalancer.server.port: 8081
# postgres_adminer:
# adminer:
+44
View File
@@ -0,0 +1,44 @@
version: "3.9"
services:
wordpress_je:
image: wordpress
restart: unless-stopped
networks:
- caddy
- wordpress_je
environment:
WORDPRESS_DB_HOST: wordpress_je_mysql
env_file:
- ../data/secrets/wordpress_template.env
volumes:
- wordpress_je:/var/www/html
depends_on:
- wordpress_je_mysql
labels:
caddy: wordpress.je.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
traefik.enable: "true"
traefik.http.routers.wordpress.rule: Host(`wordpress.marcpartensky.com`)
traefik.http.routers.wordpress.entrypoints: websecure
traefik.http.routers.wordpress.tls.certresolver: tls
traefik.http.services.wordpress.loadbalancer.server.port: 80
wordpress_je_mysql:
image: mysql
restart: unless-stopped
env_file:
- ../data/secrets/wordpress_template.env
networks:
- wordpress_je
volumes:
- wordpress_je_mysql:/var/lib/mysql
volumes:
wordpress_je:
wordpress_je_mysql:
networks:
wordpress_je:
caddy:
external: true
+49
View File
@@ -0,0 +1,49 @@
version: "3.9"
services:
wordpress_oxivia:
image: wordpress
restart: unless-stopped
networks:
- caddy
- wordpress
environment:
WORDPRESS_DB_HOST: wordpress_oxivia_mysql
env_file:
- ../data/secrets/wordpress_oxivia.env
volumes:
- wordpress_oxivia:/var/www/html
depends_on:
- wordpress_oxivia_mysql
labels:
caddy: oxivia.wordpress.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
traefik.enable: "true"
traefik.http.routers.wordpress_oxivia.rule: Host(`oxivia.wordpress.marcpartensky.com`)
traefik.http.routers.wordpress_oxivia.entrypoints: websecure
traefik.http.routers.wordpress_oxivia.tls.certresolver: tls
traefik.http.services.wordpress_oxivia.loadbalancer.server.port: 80
wordpress_oxivia_mysql:
image: mysql
restart: unless-stopped
env_file:
- ../data/secrets/wordpress_oxivia.env
networks:
- wordpress
volumes:
- wordpress_oxivia_mysql:/var/lib/mysql
command:
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# healthcheck:
# test: CMD /bin/sh -c 'mysqladmin ping --user=$MYSQL_USER --password=$MYSQL_PASSWORD'
volumes:
wordpress_oxivia:
wordpress_oxivia_mysql:
networks:
wordpress:
caddy:
external: true
+22 -11
View File
@@ -14,13 +14,13 @@ services:
depends_on:
- wordpress_mysql
labels:
- "caddy=wordpress.marcpartensky.com"
- "caddy.reverse_proxy={{upstreams}}"
- "traefik.enable=true"
- "traefik.http.routers.wordpress.rule=Host(`wordpress.marcpartensky.com`)"
- "traefik.http.routers.wordpress.entrypoints=websecure"
- "traefik.http.routers.wordpress.tls.certresolver=tls"
- "traefik.http.services.wordpress.loadbalancer.server.port=80"
caddy: wordpress.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
traefik.enable: "true"
traefik.http.routers.wordpress.rule: Host(`wordpress.marcpartensky.com`)
traefik.http.routers.wordpress.entrypoints: websecure
traefik.http.routers.wordpress.tls.certresolver: tls
traefik.http.services.wordpress.loadbalancer.server.port: 80
wordpress_mysql:
image: mysql
@@ -28,13 +28,24 @@ services:
env_file:
- ../data/secrets/wordpress.env
networks:
- caddy
- wordpress
volumes:
- wordpress_mysql:/var/lib/mysql
healthcheck:
test: CMD /bin/sh -c 'mysqladmin ping --user=$MYSQL_USER --password=$MYSQL_PASSWORD'
# healthcheck:
# test: CMD /bin/sh -c 'mysqladmin ping --user=$MYSQL_USER --password=$MYSQL_PASSWORD'
#
phpmyadmin:
image: phpmyadmin
restart: unless-stopped
env_file:
- ../data/secrets/wordpress.env
networks:
- wordpress
ports:
- "8880:80"
labels:
caddy: phpmyadmin.marcpartensky.com
caddy.reverse_proxy: "{{upstreams}}"
volumes:
wordpress:
+2
View File
@@ -686,6 +686,7 @@ services:
oxivia:
image: wordpress
restart: unless-stopped
user: 1000:1000
env_file:
- data/secrets/oxivia.env
volumes:
@@ -711,6 +712,7 @@ services:
oxivia_mysql:
image: mysql
restart: unless-stopped
user: 1000:1000
env_file:
- data/secrets/oxivia.env
ports: