mirror of
				https://git.cloudron.io/cloudron/minio-app
				synced 2025-11-03 16:42:35 +00:00 
			
		
		
		
	Compare commits
	
		
			387 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					22f00b1803 | ||
| 
						 | 
					8315f77f5c | ||
| 
						 | 
					e1a29850c8 | ||
| 
						 | 
					c94a90e4ab | ||
| 
						 | 
					d4ec80fab3 | ||
| 
						 | 
					682dd521a1 | ||
| 
						 | 
					cd7055c916 | ||
| 
						 | 
					6d385533b3 | ||
| 
						 | 
					36d669ad59 | ||
| 
						 | 
					cc5e013c1f | ||
| 
						 | 
					20bbaff551 | ||
| 
						 | 
					d39b1cb50f | ||
| 
						 | 
					0dec46fdc0 | ||
| 
						 | 
					9d8938b7bf | ||
| 
						 | 
					4f43bc611e | ||
| 
						 | 
					db768973d6 | ||
| 
						 | 
					db0d84862d | ||
| 
						 | 
					0e70c439cf | ||
| 
						 | 
					59ed1a0fc1 | ||
| 
						 | 
					6542475614 | ||
| 
						 | 
					9cffe692df | ||
| 
						 | 
					eeac9f0af4 | ||
| 
						 | 
					b1fe43b656 | ||
| 
						 | 
					eb93b292fa | ||
| 
						 | 
					aea86c627d | ||
| 
						 | 
					454d83318c | ||
| 
						 | 
					fed871de22 | ||
| 
						 | 
					648231e821 | ||
| 
						 | 
					927cdbb0a2 | ||
| 
						 | 
					cb61faa569 | ||
| 
						 | 
					cf11bcd7e6 | ||
| 
						 | 
					669976c293 | ||
| 
						 | 
					951a874909 | ||
| 
						 | 
					0bb46d9867 | ||
| 
						 | 
					540ad857fd | ||
| 
						 | 
					c06f2d9e9d | ||
| 
						 | 
					0d96abc3c8 | ||
| 
						 | 
					63f6910f5f | ||
| 
						 | 
					b09a9cc6ea | ||
| 
						 | 
					b0f6a030f3 | ||
| 
						 | 
					84b4ebeac4 | ||
| 
						 | 
					c5404f53c1 | ||
| 
						 | 
					cacf9d9441 | ||
| 
						 | 
					3b1eecfd73 | ||
| 
						 | 
					237a7747d9 | ||
| 
						 | 
					ce4f12fbd6 | ||
| 
						 | 
					7e14939670 | ||
| 
						 | 
					1de078ee2a | ||
| 
						 | 
					533b6d91e6 | ||
| 
						 | 
					ef4bdec677 | ||
| 
						 | 
					da470851f7 | ||
| 
						 | 
					242ed4386b | ||
| 
						 | 
					11bb0c8edc | ||
| 
						 | 
					4ac71ff8e7 | ||
| 
						 | 
					05cbddd40e | ||
| 
						 | 
					1ecb2e3593 | ||
| 
						 | 
					124bc9e833 | ||
| 
						 | 
					c5a3a190b2 | ||
| 
						 | 
					97e6ae5a6f | ||
| 
						 | 
					dfa728d7a5 | ||
| 
						 | 
					f06d703fce | ||
| 
						 | 
					c78df06cb7 | ||
| 
						 | 
					87859252ce | ||
| 
						 | 
					9ef74c45d5 | ||
| 
						 | 
					e551d6535d | ||
| 
						 | 
					9a97ef5913 | ||
| 
						 | 
					ac937559e0 | ||
| 
						 | 
					3b4e8d04de | ||
| 
						 | 
					4d3cd5ed61 | ||
| 
						 | 
					9e5aa33e09 | ||
| 
						 | 
					4f3e70f3e0 | ||
| 
						 | 
					270a7cd6ee | ||
| 
						 | 
					da87188fad | ||
| 
						 | 
					16df482288 | ||
| 
						 | 
					0524be735e | ||
| 
						 | 
					a4451ecb22 | ||
| 
						 | 
					f452505ae7 | ||
| 
						 | 
					1fe052d819 | ||
| 
						 | 
					ba1a52dc5e | ||
| 
						 | 
					5b7a96134f | ||
| 
						 | 
					1366fc8932 | ||
| 
						 | 
					d9bdf5749e | ||
| 
						 | 
					2c30861af0 | ||
| 
						 | 
					37157e6538 | ||
| 
						 | 
					38e110edc7 | ||
| 
						 | 
					758b98fc20 | ||
| 
						 | 
					b92644ffdd | ||
| 
						 | 
					3b9e31f363 | ||
| 
						 | 
					17d5977c74 | ||
| 
						 | 
					d898eba22e | ||
| 
						 | 
					9c6a787df9 | ||
| 
						 | 
					9f4fc4c2f2 | ||
| 
						 | 
					2f271c7db9 | ||
| 
						 | 
					30f7bbf53b | ||
| 
						 | 
					b246112d3f | ||
| 
						 | 
					986df393a1 | ||
| 
						 | 
					d5b3bd9c2f | ||
| 
						 | 
					c1ce6031f7 | ||
| 
						 | 
					9c5f6b5636 | ||
| 
						 | 
					7fa5fa0427 | ||
| 
						 | 
					55711af940 | ||
| 
						 | 
					7a3ee2504f | ||
| 
						 | 
					c2388d2710 | ||
| 
						 | 
					81186e53f4 | ||
| 
						 | 
					f37fd6a660 | ||
| 
						 | 
					365254e971 | ||
| 
						 | 
					665851a84a | ||
| 
						 | 
					a625014aeb | ||
| 
						 | 
					25ff8b66f6 | ||
| 
						 | 
					2fbefac3a9 | ||
| 
						 | 
					2bbf11f795 | ||
| 
						 | 
					ca3aebef4a | ||
| 
						 | 
					effb90c2ac | ||
| 
						 | 
					e8972242ca | ||
| 
						 | 
					e84ef0cddf | ||
| 
						 | 
					594b45051d | ||
| 
						 | 
					ed8e041180 | ||
| 
						 | 
					f9c0870c59 | ||
| 
						 | 
					550ea43e59 | ||
| 
						 | 
					832f1f26a8 | ||
| 
						 | 
					293beffadc | ||
| 
						 | 
					29f3101513 | ||
| 
						 | 
					ef6edee2a1 | ||
| 
						 | 
					e00e95eb94 | ||
| 
						 | 
					f6a78ee7cb | ||
| 
						 | 
					c32fc59b39 | ||
| 
						 | 
					78913a6f02 | ||
| 
						 | 
					9964fd0db8 | ||
| 
						 | 
					86ebec77eb | ||
| 
						 | 
					281ec626e3 | ||
| 
						 | 
					6f76e442fc | ||
| 
						 | 
					c720de4dcf | ||
| 
						 | 
					32a649b52a | ||
| 
						 | 
					08f1230582 | ||
| 
						 | 
					eda4dd653f | ||
| 
						 | 
					d49de43f6b | ||
| 
						 | 
					d385379da8 | ||
| 
						 | 
					40f6e1675d | ||
| 
						 | 
					19d114beda | ||
| 
						 | 
					13329afe50 | ||
| 
						 | 
					8feb8dd0e3 | ||
| 
						 | 
					1370d93592 | ||
| 
						 | 
					d24e4b9896 | ||
| 
						 | 
					b279130d74 | ||
| 
						 | 
					3504fc48f9 | ||
| 
						 | 
					1ac3bbe134 | ||
| 
						 | 
					fe7fd0147c | ||
| 
						 | 
					0047b6bd3b | ||
| 
						 | 
					b4e59c928c | ||
| 
						 | 
					d33cff8f0a | ||
| 
						 | 
					4eb440baaf | ||
| 
						 | 
					96e54e6b3c | ||
| 
						 | 
					bfbe792135 | ||
| 
						 | 
					31bbeed39f | ||
| 
						 | 
					9a175b6685 | ||
| 
						 | 
					a6e36be63d | ||
| 
						 | 
					9a348b2de6 | ||
| 
						 | 
					c696512b49 | ||
| 
						 | 
					cc1385c856 | ||
| 
						 | 
					89a6b2407b | ||
| 
						 | 
					36d5d82e88 | ||
| 
						 | 
					8252a3ee75 | ||
| 
						 | 
					c71586f092 | ||
| 
						 | 
					09408ff9d4 | ||
| 
						 | 
					661c07147e | ||
| 
						 | 
					02d58cec8b | ||
| 
						 | 
					e43de3a0e0 | ||
| 
						 | 
					e391ed9d85 | ||
| 
						 | 
					2c9a35effb | ||
| 
						 | 
					9ee3f02a10 | ||
| 
						 | 
					15f02a8d0f | ||
| 
						 | 
					48ffc5257c | ||
| 
						 | 
					7fad1aea6d | ||
| 
						 | 
					aeb58c292f | ||
| 
						 | 
					bcee168e84 | ||
| 
						 | 
					150b220bf2 | ||
| 
						 | 
					43403829eb | ||
| 
						 | 
					75b4da6645 | ||
| 
						 | 
					e0f1511552 | ||
| 
						 | 
					338371b948 | ||
| 
						 | 
					efa30f5115 | ||
| 
						 | 
					90fa9036cb | ||
| 
						 | 
					15b4ed267b | ||
| 
						 | 
					67294dd890 | ||
| 
						 | 
					aad0197fff | ||
| 
						 | 
					b4a820e079 | ||
| 
						 | 
					20cc0c935f | ||
| 
						 | 
					b7f575fcf9 | ||
| 
						 | 
					7f3a0acab2 | ||
| 
						 | 
					6e9d718f4c | ||
| 
						 | 
					00b781abe3 | ||
| 
						 | 
					4800f84077 | ||
| 
						 | 
					d6fc505561 | ||
| 
						 | 
					b95c494758 | ||
| 
						 | 
					2fc891a5ea | ||
| 
						 | 
					f65641edce | ||
| 
						 | 
					79b941eb4c | ||
| 
						 | 
					f55d0e6b40 | ||
| 
						 | 
					2c423db822 | ||
| 
						 | 
					a6352ab7d8 | ||
| 
						 | 
					01d9c176ce | ||
| 
						 | 
					0828f5a2e8 | ||
| 
						 | 
					d4341084da | ||
| 
						 | 
					a6a23d7023 | ||
| 
						 | 
					b3bc027a10 | ||
| 
						 | 
					d2a23f97ce | ||
| 
						 | 
					d1fa4ee583 | ||
| 
						 | 
					3bacd89adc | ||
| 
						 | 
					a8805259b5 | ||
| 
						 | 
					bcf271abc9 | ||
| 
						 | 
					101195f02f | ||
| 
						 | 
					bd58749e91 | ||
| 
						 | 
					19ff6a62a4 | ||
| 
						 | 
					b0d5963549 | ||
| 
						 | 
					3d98790d90 | ||
| 
						 | 
					a0a9824424 | ||
| 
						 | 
					966be1a13e | ||
| 
						 | 
					00f3eb3d69 | ||
| 
						 | 
					fce20e1783 | ||
| 
						 | 
					f18c49de7b | ||
| 
						 | 
					7de060613a | ||
| 
						 | 
					466dcff1d8 | ||
| 
						 | 
					73ebc5b10e | ||
| 
						 | 
					352f9250d3 | ||
| 
						 | 
					f92fc952af | ||
| 
						 | 
					b3b18d1b18 | ||
| 
						 | 
					ffedc9db25 | ||
| 
						 | 
					d8064088ce | ||
| 
						 | 
					695806c300 | ||
| 
						 | 
					1a3a0f18b9 | ||
| 
						 | 
					f8f48ee71c | ||
| 
						 | 
					381c362e84 | ||
| 
						 | 
					e064370467 | ||
| 
						 | 
					88cf43708d | ||
| 
						 | 
					e83c637e08 | ||
| 
						 | 
					f48251e55c | ||
| 
						 | 
					b0edebfba8 | ||
| 
						 | 
					4f76314872 | ||
| 
						 | 
					12c3b3ec2c | ||
| 
						 | 
					7298aad053 | ||
| 
						 | 
					3c4b7290db | ||
| 
						 | 
					33803ec2d6 | ||
| 
						 | 
					acbc45a26f | ||
| 
						 | 
					78abd09c30 | ||
| 
						 | 
					4898a75d5b | ||
| 
						 | 
					251f8d18a5 | ||
| 
						 | 
					4174832c63 | ||
| 
						 | 
					c95b7ec69c | ||
| 
						 | 
					765ac6c810 | ||
| 
						 | 
					68e6b92c08 | ||
| 
						 | 
					49190b074c | ||
| 
						 | 
					7e29cf3ca6 | ||
| 
						 | 
					3dc1454fd7 | ||
| 
						 | 
					08ee194809 | ||
| 
						 | 
					a95014bef5 | ||
| 
						 | 
					6f8c2823a3 | ||
| 
						 | 
					e0a95c19f3 | ||
| 
						 | 
					add3c0728c | ||
| 
						 | 
					ab082d612a | ||
| 
						 | 
					b732aa9833 | ||
| 
						 | 
					e68520b2cd | ||
| 
						 | 
					83a9ffe9bd | ||
| 
						 | 
					56e76c6098 | ||
| 
						 | 
					4172a77c28 | ||
| 
						 | 
					62b482f6de | ||
| 
						 | 
					a3e521d243 | ||
| 
						 | 
					7b5a6629b3 | ||
| 
						 | 
					0b3787bb4c | ||
| 
						 | 
					4485660f19 | ||
| 
						 | 
					198a7ba2d8 | ||
| 
						 | 
					694ea1a835 | ||
| 
						 | 
					ae7b78e2d7 | ||
| 
						 | 
					f5b85c7dfa | ||
| 
						 | 
					6148966516 | ||
| 
						 | 
					9967b12167 | ||
| 
						 | 
					5574cc464a | ||
| 
						 | 
					794538bbe9 | ||
| 
						 | 
					a1e5589dca | ||
| 
						 | 
					f7d9d69187 | ||
| 
						 | 
					2762522066 | ||
| 
						 | 
					4c6b99857c | ||
| 
						 | 
					6c788ded2d | ||
| 
						 | 
					542b8a4412 | ||
| 
						 | 
					4b3b4b9d4d | ||
| 
						 | 
					a0c9c76bd8 | ||
| 
						 | 
					d23b35e1b8 | ||
| 
						 | 
					32684767b6 | ||
| 
						 | 
					ad93f49467 | ||
| 
						 | 
					52b7e49b44 | ||
| 
						 | 
					ab20e34d26 | ||
| 
						 | 
					522cfeff67 | ||
| 
						 | 
					d7b08ca48c | ||
| 
						 | 
					058673d882 | ||
| 
						 | 
					8c3ea72c86 | ||
| 
						 | 
					74eea35e18 | ||
| 
						 | 
					eafdc900b3 | ||
| 
						 | 
					0ec3052ad8 | ||
| 
						 | 
					c10b3888f0 | ||
| 
						 | 
					8d2b9d84ce | ||
| 
						 | 
					13a4de046d | ||
| 
						 | 
					d030ce00cc | ||
| 
						 | 
					a2ea852bd4 | ||
| 
						 | 
					aeeb7473b9 | ||
| 
						 | 
					a988358a84 | ||
| 
						 | 
					76e75b2421 | ||
| 
						 | 
					51bd508a5e | ||
| 
						 | 
					4e042bb62f | ||
| 
						 | 
					00fc4851bc | ||
| 
						 | 
					fb0dae799d | ||
| 
						 | 
					a68bdeeade | ||
| 
						 | 
					c1dbd2139f | ||
| 
						 | 
					fe88ff7d1c | ||
| 
						 | 
					fecebfd7e1 | ||
| 
						 | 
					0d171ddb5a | ||
| 
						 | 
					a5736bba2b | ||
| 
						 | 
					f1181e9383 | ||
| 
						 | 
					6346e564f9 | ||
| 
						 | 
					4843a8345a | ||
| 
						 | 
					fd7c75da9f | ||
| 
						 | 
					327ede57c3 | ||
| 
						 | 
					179628163f | ||
| 
						 | 
					dfcab10abe | ||
| 
						 | 
					642f1860d2 | ||
| 
						 | 
					bc6656111f | ||
| 
						 | 
					53371d5428 | ||
| 
						 | 
					444d1972e2 | ||
| 
						 | 
					1f51564fc7 | ||
| 
						 | 
					f49c69d566 | ||
| 
						 | 
					80802dc892 | ||
| 
						 | 
					c23815b757 | ||
| 
						 | 
					b195eb7e21 | ||
| 
						 | 
					2386aa1325 | ||
| 
						 | 
					b64685aeee | ||
| 
						 | 
					6f845a87c5 | ||
| 
						 | 
					0a772c4f23 | ||
| 
						 | 
					69bf7496e7 | ||
| 
						 | 
					8925843f34 | ||
| 
						 | 
					1ef2baf396 | ||
| 
						 | 
					20706ccaf4 | ||
| 
						 | 
					4100d16964 | ||
| 
						 | 
					a85c1935bc | ||
| 
						 | 
					f4996c9fc9 | ||
| 
						 | 
					5e1f06e1e9 | ||
| 
						 | 
					a89ff592f0 | ||
| 
						 | 
					9471c04cb9 | ||
| 
						 | 
					20dbe5de5a | ||
| 
						 | 
					c0a34431df | ||
| 
						 | 
					ce95621eb4 | ||
| 
						 | 
					cd4fec9029 | ||
| 
						 | 
					d1677d9ef9 | ||
| 
						 | 
					131038a255 | ||
| 
						 | 
					0b59adbb35 | ||
| 
						 | 
					76ba09cd4b | ||
| 
						 | 
					9820e5bf90 | ||
| 
						 | 
					7d38995613 | ||
| 
						 | 
					6162ff540b | ||
| 
						 | 
					c0b9c4167f | ||
| 
						 | 
					fa8f08f760 | ||
| 
						 | 
					84072d9227 | ||
| 
						 | 
					0f877a2d95 | ||
| 
						 | 
					44ed6f8aee | ||
| 
						 | 
					10c6c019fd | ||
| 
						 | 
					93853449f9 | ||
| 
						 | 
					16de972113 | ||
| 
						 | 
					f9ca8a265e | ||
| 
						 | 
					e82c8db22d | ||
| 
						 | 
					e38d1020ac | ||
| 
						 | 
					f814368e12 | ||
| 
						 | 
					8713b30b79 | ||
| 
						 | 
					9683b980b0 | ||
| 
						 | 
					9272b4fa7b | ||
| 
						 | 
					b6f66e8e25 | ||
| 
						 | 
					612d47f4ac | ||
| 
						 | 
					c65ab2057f | ||
| 
						 | 
					03d7a890c3 | ||
| 
						 | 
					1f9617699a | ||
| 
						 | 
					17265598fd | ||
| 
						 | 
					ab3caee22d | ||
| 
						 | 
					e9c6aad49f | ||
| 
						 | 
					5e92ec256f | ||
| 
						 | 
					b1732c5fe7 | ||
| 
						 | 
					cce40f5225 | ||
| 
						 | 
					07c38643cc | ||
| 
						 | 
					ca9c3a6034 | ||
| 
						 | 
					2c7ca16313 | ||
| 
						 | 
					8135c8bab4 | ||
| 
						 | 
					c89a1e1d62 | 
@@ -5,23 +5,33 @@
 | 
				
			|||||||
  "description": "file://DESCRIPTION.md",
 | 
					  "description": "file://DESCRIPTION.md",
 | 
				
			||||||
  "changelog": "file://CHANGELOG",
 | 
					  "changelog": "file://CHANGELOG",
 | 
				
			||||||
  "tagline": "Distributed object storage",
 | 
					  "tagline": "Distributed object storage",
 | 
				
			||||||
  "version": "1.164.1",
 | 
					  "version": "3.12.12",
 | 
				
			||||||
 | 
					  "upstreamVersion": "2024-02-13T15-35-11Z",
 | 
				
			||||||
  "healthCheckPath": "/minio/login",
 | 
					  "healthCheckPath": "/minio/login",
 | 
				
			||||||
 | 
					  "memoryLimit": 2147483648,
 | 
				
			||||||
  "httpPort": 8000,
 | 
					  "httpPort": 8000,
 | 
				
			||||||
 | 
					  "httpPorts": {
 | 
				
			||||||
 | 
					    "API_SERVER_DOMAIN": {
 | 
				
			||||||
 | 
					      "title": "API Server Domain",
 | 
				
			||||||
 | 
					      "description": "The domain name for MinIO (S3) API requests",
 | 
				
			||||||
 | 
					      "containerPort": 9000,
 | 
				
			||||||
 | 
					      "defaultValue": "minio-api"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  "addons": {
 | 
					  "addons": {
 | 
				
			||||||
    "localstorage": {}
 | 
					    "localstorage": {}
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "manifestVersion": 2,
 | 
					  "manifestVersion": 2,
 | 
				
			||||||
  "website": "http://www.minio.io",
 | 
					  "website": "http://www.minio.io",
 | 
				
			||||||
  "minBoxVersion": "5.3.0",
 | 
					  "minBoxVersion": "7.1.2",
 | 
				
			||||||
  "forumUrl": "https://forum.cloudron.io/category/69/minio",
 | 
					  "forumUrl": "https://forum.cloudron.io/category/69/minio",
 | 
				
			||||||
  "documentationUrl": "https://docs.cloudron.io/apps/minio/",
 | 
					  "documentationUrl": "https://docs.cloudron.io/apps/minio/",
 | 
				
			||||||
  "contactEmail": "support@cloudron.io",
 | 
					  "contactEmail": "support@cloudron.io",
 | 
				
			||||||
  "icon": "logo.png",
 | 
					  "icon": "logo.png",
 | 
				
			||||||
  "tags": [ "storage", "hosting", "s3", "objectstore" ],
 | 
					  "tags": [ "storage", "hosting", "s3", "objectstore" ],
 | 
				
			||||||
  "mediaLinks": [
 | 
					  "mediaLinks": [
 | 
				
			||||||
    "https://screenshots.cloudron.io/io.minio.cloudronapp/minio-browser-gateway.png",
 | 
					    "https://screenshots.cloudron.io/io.minio.cloudronapp/pic1.png",
 | 
				
			||||||
    "https://screenshots.cloudron.io/io.minio.cloudronapp/minio-browser.png"
 | 
					    "https://screenshots.cloudron.io/io.minio.cloudronapp/pic2.png"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "postInstallMessage": "file://POSTINSTALL.md"
 | 
					  "postInstallMessage": "file://POSTINSTALL.md"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,29 +1,29 @@
 | 
				
			|||||||
This app packages Minio <upstream>2021-05-20T22-31-44Z</upstream>.
 | 
					## About
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Minio is a distributed object storage server built for cloud applications and devops.
 | 
					Minio is a distributed object storage server built for cloud applications and devops.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Features
 | 
					## Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Amazon S3 Compatible
 | 
					### Amazon S3 Compatible
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Minio implements Amazon S3 v4 APIs. Minio also includes client SDKs and a console utility.
 | 
					Minio implements Amazon S3 v4 APIs. Minio also includes client SDKs and a console utility.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Minimalist Design
 | 
					### Minimalist Design
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Minio is deeply influenced by minimalism. We believe that only simple things scale.
 | 
					Minio is deeply influenced by minimalism. We believe that only simple things scale.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Apache License 2.0
 | 
					### Apache License 2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Minio is free software, released under Apache license v2.0. Minio has an active developer and user community.
 | 
					Minio is free software, released under Apache license v2.0. Minio has an active developer and user community.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Lambda Functions
 | 
					### Lambda Functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Minio triggers Lambda functions through event notification service. In addition Minio also supports simple queueing service for AMQP, Elasticsearch, Redis, NATS and Postgres targets.
 | 
					Minio triggers Lambda functions through event notification service. In addition Minio also supports simple queueing service for AMQP, Elasticsearch, Redis, NATS and Postgres targets.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Erasure Code & Bitrot Protection
 | 
					### Erasure Code & Bitrot Protection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Minio protects data against hardware failures and silent data corruption using erasure code and checksums. You may lose half the number of drives and still recover from it.
 | 
					Minio protects data against hardware failures and silent data corruption using erasure code and checksums. You may lose half the number of drives and still recover from it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Written in Go
 | 
					### Written in Go
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Go is an emerging language of choice for modern cloud infrastructure projects. Go language enables Minio to be highly concurrent and lightweight.
 | 
					Go is an emerging language of choice for modern cloud infrastructure projects. Go language enables Minio to be highly concurrent and lightweight.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										20
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								Dockerfile
									
									
									
									
									
								
							@@ -1,14 +1,16 @@
 | 
				
			|||||||
FROM cloudron/base:3.0.0@sha256:455c70428723e3a823198c57472785437eb6eab082e79b3ff04ea584faf46e92
 | 
					FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4
 | 
				
			||||||
 | 
					 | 
				
			||||||
ARG VERSION=RELEASE.2021-05-20T22-31-44Z
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
RUN mkdir -p /app/code \
 | 
					 | 
				
			||||||
    && wget https://dl.min.io/server/minio/release/linux-amd64/minio.${VERSION} -O /app/code/minio \
 | 
					 | 
				
			||||||
    && chmod +x /app/code/minio
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN mkdir -p /app/code
 | 
				
			||||||
WORKDIR /app/code
 | 
					WORKDIR /app/code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ADD start.sh /app/code/start.sh
 | 
					ARG VERSION=RELEASE.2024-02-13T15-35-11Z
 | 
				
			||||||
ADD minio-credentials /app/code/minio-credentials
 | 
					
 | 
				
			||||||
 | 
					# sometimes here https://dl.min.io/server/minio/release/linux-amd64/archive/
 | 
				
			||||||
 | 
					# RUN wget https://dl.min.io/server/minio/release/linux-amd64/minio.${VERSION} -O /app/code/minio && chmod +x /app/code/minio
 | 
				
			||||||
 | 
					RUN wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio.${VERSION} -O /app/code/minio && chmod +x /app/code/minio
 | 
				
			||||||
 | 
					# https://dl.min.io/client/mc/release/linux-amd64/
 | 
				
			||||||
 | 
					RUN wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /app/code/mc && chmod +x /app/code/mc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY env.sh start.sh /app/code/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CMD [ "/app/code/start.sh" ]
 | 
					CMD [ "/app/code/start.sh" ]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,3 +34,11 @@ npm install
 | 
				
			|||||||
PATH=$PATH:node_modules/.bin mocha --bail test.js
 | 
					PATH=$PATH:node_modules/.bin mocha --bail test.js
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Notes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MinIO Console is an embedded web-based object browser built into MinIO Server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Multi-domain
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MINIO_DOMAIN=domain.com env var can be set to server DNS style requests as bucket.domain.com . This requires the platform code to set aliases for the httpPorts and not the primaryport.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								env.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								env.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					# Add custom minio configuration to this file. Restart the app for changes to take effect.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export CLOUDRON_MINIO_STARTUP_ARGS='server /app/data/data'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# See https://docs.min.io/minio/baremetal/reference/minio-server/minio-server.html#envvar.MINIO_ROOT_USER
 | 
				
			||||||
 | 
					# You can use pwgen -1s 64 to generate usernames and passwords
 | 
				
			||||||
 | 
					export MINIO_ROOT_USER=minioadmin
 | 
				
			||||||
 | 
					export MINIO_ROOT_PASSWORD=minioadmin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1,41 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env node
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
'use strict';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const fs = require('fs');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const MINIO_CONFIG = '/app/data/data/.minio.sys/config/config.json';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function usage() {
 | 
					 | 
				
			||||||
    console.log('Usage:\n');
 | 
					 | 
				
			||||||
    console.log('\tminio-credentials get');
 | 
					 | 
				
			||||||
    console.log('\tminio-credentials set <access key> <secret key>');
 | 
					 | 
				
			||||||
    console.log();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let config = JSON.parse(fs.readFileSync(MINIO_CONFIG, 'utf8'));
 | 
					 | 
				
			||||||
let adminCredentials = config['credentials']['_'];
 | 
					 | 
				
			||||||
let accessKey = adminCredentials.filter(kv => kv.key === 'access_key')[0];
 | 
					 | 
				
			||||||
let secretKey = adminCredentials.filter(kv => kv.key === 'secret_key')[0];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if (process.argv[2] === 'get') {
 | 
					 | 
				
			||||||
    console.log('Access Key:', accessKey.value);
 | 
					 | 
				
			||||||
    console.log('Secret Key:', secretKey.value);
 | 
					 | 
				
			||||||
} else if (process.argv[2] === 'set') {
 | 
					 | 
				
			||||||
    if (process.argv.length !== 5) return usage();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html
 | 
					 | 
				
			||||||
    if (process.argv[4].length < 5) return console.log('secret key must be atleast 5 characters');
 | 
					 | 
				
			||||||
    if (!/^[\w+=,.@-]+$/.test(process.argv[3])) return console.log('access key has invalid characters');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    accessKey.value = process.argv[3];
 | 
					 | 
				
			||||||
    if (process.argv[4].length < 8) return console.log('secret key must be atleast 8 characters');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    secretKey.value = process.argv[4];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fs.writeFileSync(MINIO_CONFIG, JSON.stringify(config), 'utf8');
 | 
					 | 
				
			||||||
    console.log('Credentials updated. Restart minio app for new credentials to take effect.\n');
 | 
					 | 
				
			||||||
} else {
 | 
					 | 
				
			||||||
    usage();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 111 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 106 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								screenshots/pic1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								screenshots/pic1.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1.8 MiB  | 
							
								
								
									
										
											BIN
										
									
								
								screenshots/pic2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								screenshots/pic2.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1.8 MiB  | 
							
								
								
									
										23
									
								
								start.sh
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								start.sh
									
									
									
									
									
								
							@@ -4,16 +4,23 @@ set -eu
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
mkdir -p /app/data/data /run/minio/config /run/minio/certs
 | 
					mkdir -p /app/data/data /run/minio/config /run/minio/certs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# minio is used for backups at times and has a large number of files. optimize by checking if files
 | 
					# env vars take precedence over config.yaml (https://github.com/minio/minio/blob/master/docs/distributed/CONFIG.md#things-to-know)
 | 
				
			||||||
# are actually in correct chown state
 | 
					[[ ! -f /app/data/env.sh ]] && cp /app/code/env.sh /app/data/env.sh
 | 
				
			||||||
 | 
					source /app/data/env.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# https://docs.min.io/minio/baremetal/reference/minio-server/minio-server.html#envvar.MINIO_SERVER_URL
 | 
				
			||||||
 | 
					export MINIO_SERVER_URL="https://${API_SERVER_DOMAIN}"
 | 
				
			||||||
 | 
					export MINIO_BROWSER_REDIRECT_URL="https://${CLOUDRON_APP_DOMAIN}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ ! -d /app/data/mc_config ]]; then
 | 
				
			||||||
 | 
					    mkdir -p /app/data/mc_config
 | 
				
			||||||
 | 
					    /app/code/mc --config-dir /app/data/mc_config &> /dev/null || true
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# minio is used for backups at times and has a large number of files. optimize by checking if files are actually in correct chown state
 | 
				
			||||||
echo "==> Changing ownership"
 | 
					echo "==> Changing ownership"
 | 
				
			||||||
[[ $(stat --format '%U' /app/data/data) != "cloudron" ]] && chown -R cloudron:cloudron /app/data
 | 
					[[ $(stat --format '%U' /app/data/data) != "cloudron" ]] && chown -R cloudron:cloudron /app/data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[ ! -f /app/data/env.sh ]] && echo -e "# Add custom minio configuration to this file. Restart the app for changes to take effect.\n\nexport CLOUDRON_MINIO_STARTUP_ARGS='server /app/data/data'" > /app/data/env.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
source /app/data/env.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# the --config-dir is deprecated and not used. but without it, minio will try to create $HOME/.minio :/ same for --certs-dir
 | 
					 | 
				
			||||||
echo "==> Starting minio"
 | 
					echo "==> Starting minio"
 | 
				
			||||||
exec /usr/local/bin/gosu cloudron:cloudron /app/code/minio --certs-dir /run/minio/certs --config-dir /run/minio/config --quiet ${CLOUDRON_MINIO_STARTUP_ARGS} --address :8000 
 | 
					exec /usr/local/bin/gosu cloudron:cloudron /app/code/minio --quiet ${CLOUDRON_MINIO_STARTUP_ARGS} --address :9000 --console-address :8000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2287
									
								
								test/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2287
									
								
								test/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -9,9 +9,10 @@
 | 
				
			|||||||
  "author": "",
 | 
					  "author": "",
 | 
				
			||||||
  "license": "ISC",
 | 
					  "license": "ISC",
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "chromedriver": "^89.0.0",
 | 
					    "chromedriver": "^121.0.0",
 | 
				
			||||||
    "expect.js": "^0.3.1",
 | 
					    "expect.js": "^0.3.1",
 | 
				
			||||||
    "mocha": "^8.3.2",
 | 
					    "mocha": "^10.3.0",
 | 
				
			||||||
    "selenium-webdriver": "^3.6.0"
 | 
					    "selenium-webdriver": "^4.17.0",
 | 
				
			||||||
 | 
					    "superagent": "^8.1.2"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										190
									
								
								test/test.js
									
									
									
									
									
								
							
							
						
						
									
										190
									
								
								test/test.js
									
									
									
									
									
								
							@@ -1,31 +1,34 @@
 | 
				
			|||||||
#!/usr/bin/env node
 | 
					#!/usr/bin/env node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* jshint esversion: 8 */
 | 
				
			||||||
/* global describe */
 | 
					/* global describe */
 | 
				
			||||||
/* global before */
 | 
					/* global before */
 | 
				
			||||||
/* global after */
 | 
					/* global after */
 | 
				
			||||||
/* global it */
 | 
					/* global it */
 | 
				
			||||||
 | 
					/* global xit */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
'use strict';
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require('chromedriver');
 | 
					require('chromedriver');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var execSync = require('child_process').execSync,
 | 
					const execSync = require('child_process').execSync,
 | 
				
			||||||
    expect = require('expect.js'),
 | 
					    expect = require('expect.js'),
 | 
				
			||||||
 | 
					    fs = require('fs'),
 | 
				
			||||||
    path = require('path'),
 | 
					    path = require('path'),
 | 
				
			||||||
    { Builder, By, Key, until } = require('selenium-webdriver'),
 | 
					    superagent = require('superagent'),
 | 
				
			||||||
 | 
					    timers = require('timers/promises'),
 | 
				
			||||||
 | 
					    { Builder, By, until } = require('selenium-webdriver'),
 | 
				
			||||||
    { Options } = require('selenium-webdriver/chrome');
 | 
					    { Options } = require('selenium-webdriver/chrome');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
describe('Application life cycle test', function () {
 | 
					describe('Application life cycle test', function () {
 | 
				
			||||||
    this.timeout(0);
 | 
					    this.timeout(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const LOCATION = 'test';
 | 
					    const LOCATION = 'test';
 | 
				
			||||||
    const TEST_TIMEOUT = 10000;
 | 
					    const TEST_TIMEOUT = 30000;
 | 
				
			||||||
    const EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
 | 
					 | 
				
			||||||
    const BUCKET = 'cloudrontestbucket';
 | 
					    const BUCKET = 'cloudrontestbucket';
 | 
				
			||||||
 | 
					    const EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var app;
 | 
					    let browser, app;
 | 
				
			||||||
    var browser;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    before(function () {
 | 
					    before(function () {
 | 
				
			||||||
        browser = new Builder().forBrowser('chrome').setChromeOptions(new Options().windowSize({ width: 1280, height: 1024 })).build();
 | 
					        browser = new Builder().forBrowser('chrome').setChromeOptions(new Options().windowSize({ width: 1280, height: 1024 })).build();
 | 
				
			||||||
@@ -35,132 +38,87 @@ describe('Application life cycle test', function () {
 | 
				
			|||||||
        browser.quit();
 | 
					        browser.quit();
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async function waitForElement(elem) {
 | 
				
			||||||
 | 
					        await browser.wait(until.elementLocated(elem), TEST_TIMEOUT);
 | 
				
			||||||
 | 
					        await browser.wait(until.elementIsVisible(browser.findElement(elem)), TEST_TIMEOUT);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function getAppInfo() {
 | 
					    function getAppInfo() {
 | 
				
			||||||
        var inspect = JSON.parse(execSync('cloudron inspect'));
 | 
					        var inspect = JSON.parse(execSync('cloudron inspect'));
 | 
				
			||||||
        app = inspect.apps.filter(function (a) { return a.location.indexOf(LOCATION) === 0; })[0];
 | 
					        app = inspect.apps.filter(function (a) { return a.location.indexOf(LOCATION) === 0; })[0];
 | 
				
			||||||
        expect(app).to.be.an('object');
 | 
					        expect(app).to.be.an('object');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function pageLoaded() {
 | 
					    async function login(accessKey='minioadmin', secretKey='minioadmin') {
 | 
				
			||||||
        return browser.wait(until.elementLocated(By.className('page-load pl-0 pl-1')), TEST_TIMEOUT);
 | 
					        await browser.get(`https://${app.fqdn}/login`);
 | 
				
			||||||
 | 
					        await waitForElement(By.id('accessKey'));
 | 
				
			||||||
 | 
					        await browser.findElement(By.id('accessKey')).sendKeys(accessKey);
 | 
				
			||||||
 | 
					        await browser.findElement(By.id('secretKey')).sendKeys(secretKey);
 | 
				
			||||||
 | 
					        await browser.findElement(By.xpath('//button[@id="do-login"]')).click();
 | 
				
			||||||
 | 
					        await waitForElement(By.xpath('//span[contains(text(), "Buckets")]'));
 | 
				
			||||||
 | 
					        await timers.setTimeout(5000);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function visible(selector) {
 | 
					    async function logout() {
 | 
				
			||||||
        return browser.wait(until.elementLocated(selector), TEST_TIMEOUT).then(function () {
 | 
					        await browser.get(`https://${app.fqdn}/`);
 | 
				
			||||||
            return browser.wait(until.elementIsVisible(browser.findElement(selector)), TEST_TIMEOUT);
 | 
					        await waitForElement(By.xpath('//span[contains(text(), "Buckets")]'));
 | 
				
			||||||
        });
 | 
					        const button = await browser.findElement(By.xpath('//button[@id="sign-out"]'));
 | 
				
			||||||
 | 
					        await browser.executeScript('arguments[0].scrollIntoView(false)', button);
 | 
				
			||||||
 | 
					        await button.click();
 | 
				
			||||||
 | 
					        await waitForElement(By.id('accessKey'));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function login(accessKey, secretKey, callback) {
 | 
					    async function addBucket() {
 | 
				
			||||||
        browser.manage().deleteAllCookies();
 | 
					        await browser.get(`https://${app.fqdn}/buckets`);
 | 
				
			||||||
        browser.get('https://' + app.fqdn).then(function () {
 | 
					        await waitForElement(By.xpath('//button[@id="create-bucket"]'));
 | 
				
			||||||
            return visible(By.id('accessKey'));
 | 
					        await browser.findElement(By.xpath('//button[@id="create-bucket"]')).click();
 | 
				
			||||||
        }).then(function () {
 | 
					        await browser.sleep(2000);
 | 
				
			||||||
            return browser.findElement(By.id('accessKey')).sendKeys(accessKey);
 | 
					        await browser.findElement(By.xpath('//input[@id="bucket-name"]')).sendKeys(BUCKET);
 | 
				
			||||||
        }).then(function () {
 | 
					        await browser.findElement(By.xpath('//button[@id="create-bucket"]')).click();
 | 
				
			||||||
            return browser.findElement(By.id('secretKey')).sendKeys(secretKey);
 | 
					        await waitForElement(By.xpath(`//h1[contains(text(), "${BUCKET}")]`));
 | 
				
			||||||
        }).then(function () {
 | 
					        await timers.setTimeout(5000);
 | 
				
			||||||
            // return browser.findElement(By.className('lw-btn')).click();
 | 
					 | 
				
			||||||
            return browser.findElement(By.tagName('form')).submit();
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return browser.wait(until.elementLocated(By.id('top-right-menu')), TEST_TIMEOUT);
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            callback();
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function logout(callback) {
 | 
					    async function checkBucket() {
 | 
				
			||||||
        browser.get('https://' + app.fqdn);
 | 
					        await browser.get(`https://${app.fqdn}/buckets`);
 | 
				
			||||||
 | 
					        await waitForElement(By.xpath(`//h1[contains(text(), "${BUCKET}")]`));
 | 
				
			||||||
        pageLoaded().then(function () {
 | 
					 | 
				
			||||||
            return visible(By.id('top-right-menu'));
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return browser.findElement(By.id('top-right-menu')).click();
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            if (app.manifest.version === '1.137.0') {
 | 
					 | 
				
			||||||
                return visible(By.xpath('//*[text()="Sign Out "]'));
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                return visible(By.xpath('//*[contains(text(), "Logout")]'));
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            if (app.manifest.version === '1.137.0') {
 | 
					 | 
				
			||||||
                return browser.findElement(By.xpath('//*[text()="Sign Out "]')).click();
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                return browser.findElement(By.xpath('//*[contains(text(),"Logout")]')).click();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return browser.wait(until.elementLocated(By.id('accessKey')), TEST_TIMEOUT);
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            callback();
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function addBucket(callback) {
 | 
					    async function checkRedirect() {
 | 
				
			||||||
        browser.get('https://' + app.fqdn);
 | 
					        const response = await superagent.get(`https://${app.secondaryDomains[0].fqdn}`).set('User-Agent', 'Mozilla/5.0').redirects(0).ok(() => true);
 | 
				
			||||||
 | 
					        expect(response.status).to.be(307);
 | 
				
			||||||
        pageLoaded().then(function () {
 | 
					        expect(response.headers.location).to.be(`https://${app.fqdn}`);
 | 
				
			||||||
            return visible(By.className('fa-plus'));
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return browser.findElement(By.className('fa-plus')).click();
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            const c = 'fa-hdd';
 | 
					 | 
				
			||||||
            return visible(By.className(c));
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            const c = 'fa-hdd';
 | 
					 | 
				
			||||||
            return browser.findElement(By.className(c)).click();
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return visible(By.xpath('//*[@class="modal-body"]/form/div/input'));
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return browser.findElement(By.xpath('//*[@class="modal-body"]/form/div/input')).sendKeys(BUCKET);
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return browser.findElement(By.xpath('//*[@class="modal-body"]/form')).submit();
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return visible(By.xpath('//*[@class="main"]/a[text()="' + BUCKET + '"]'));
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            callback();
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function checkBucket(callback) {
 | 
					    async function checkApi() {
 | 
				
			||||||
        browser.get('https://' + app.fqdn);
 | 
					        const response = await superagent.get(`https://${app.secondaryDomains[0].fqdn}`).ok(() => true);
 | 
				
			||||||
 | 
					        expect(response.status).to.be(403);
 | 
				
			||||||
        pageLoaded().then(function () {
 | 
					        expect(response.body.toString('utf8')).to.contain('<Code>AccessDenied</Code>');
 | 
				
			||||||
            return browser.findElement(By.xpath(`//a[contains(text(), ${BUCKET})]`));
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            callback();
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    function openSettings(callback) {
 | 
					 | 
				
			||||||
        browser.get('https://' + app.fqdn);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        pageLoaded().then(function () {
 | 
					 | 
				
			||||||
            return visible(By.id('top-right-menu'));
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return browser.findElement(By.id('top-right-menu')).click();
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return visible(By.xpath('//*[contains(text(), "Change Password")]'));
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return browser.findElement(By.xpath('//*[contains(text(),"Change Password")]')).click();
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            return browser.wait(until.elementLocated(By.xpath('//*[contains(text(), "Change Password")]')), TEST_TIMEOUT);
 | 
					 | 
				
			||||||
        }).then(function () {
 | 
					 | 
				
			||||||
            callback();
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xit('build app', function () { execSync('cloudron build', EXEC_ARGS); });
 | 
					    xit('build app', function () { execSync('cloudron build', EXEC_ARGS); });
 | 
				
			||||||
    it('install app', function () { execSync('cloudron install --location ' + LOCATION, EXEC_ARGS); });
 | 
					    it('install app', async function () {
 | 
				
			||||||
 | 
					        execSync(`cloudron install --location ${LOCATION} --secondary-domains API_SERVER_DOMAIN=${LOCATION}-api`, EXEC_ARGS);
 | 
				
			||||||
 | 
					        await timers.setTimeout(10000);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('can get app information', getAppInfo);
 | 
					    it('can get app information', getAppInfo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('can login', login.bind(null, 'minioadmin', 'minioadmin'));
 | 
					    it('can login', login.bind(null, 'minioadmin', 'minioadmin'));
 | 
				
			||||||
    it('can add bucket', addBucket);
 | 
					    it('can add bucket', addBucket);
 | 
				
			||||||
    it('can open settings', openSettings);
 | 
					 | 
				
			||||||
    it('can logout', logout);
 | 
					    it('can logout', logout);
 | 
				
			||||||
 | 
					    it('does redirect', checkRedirect);
 | 
				
			||||||
 | 
					    it('check api', checkApi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('can change credentials', function () {
 | 
					    it('can change credentials', async function () {
 | 
				
			||||||
        execSync(`cloudron exec --app ${app.id} -- /app/code/minio-credentials set minioakey minioskey`, EXEC_ARGS);
 | 
					        let data = fs.readFileSync(path.join(__dirname, '../env.sh'), 'utf8');
 | 
				
			||||||
 | 
					        data = data
 | 
				
			||||||
 | 
					            .replace(/MINIO_ROOT_USER=.*/, 'MINIO_ROOT_USER=minioakey')
 | 
				
			||||||
 | 
					            .replace(/MINIO_ROOT_PASSWORD=.*/, 'MINIO_ROOT_PASSWORD=minioskey');
 | 
				
			||||||
 | 
					        fs.writeFileSync('/tmp/env.sh', data);
 | 
				
			||||||
 | 
					        execSync(`cloudron push --app ${app.id} /tmp/env.sh /app/data/env.sh`, EXEC_ARGS);
 | 
				
			||||||
 | 
					        execSync(`cloudron restart --app ${app.id}`, EXEC_ARGS);
 | 
				
			||||||
 | 
					        await timers.setTimeout(10000);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('can restart app', function () { execSync(`cloudron restart --app ${app.id}`, EXEC_ARGS); });
 | 
					    it('can restart app', function () { execSync(`cloudron restart --app ${app.id}`, EXEC_ARGS); });
 | 
				
			||||||
@@ -168,30 +126,37 @@ describe('Application life cycle test', function () {
 | 
				
			|||||||
    it('can login', login.bind(null, 'minioakey', 'minioskey'));
 | 
					    it('can login', login.bind(null, 'minioakey', 'minioskey'));
 | 
				
			||||||
    it('has bucket', checkBucket);
 | 
					    it('has bucket', checkBucket);
 | 
				
			||||||
    it('can logout', logout);
 | 
					    it('can logout', logout);
 | 
				
			||||||
 | 
					    it('does redirect', checkRedirect);
 | 
				
			||||||
 | 
					    it('check api', checkApi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('backup app', function () { execSync('cloudron backup create --app ' + app.id, EXEC_ARGS); });
 | 
					    it('backup app', function () { execSync('cloudron backup create --app ' + app.id, EXEC_ARGS); });
 | 
				
			||||||
    it('restore app', function () {
 | 
					    it('restore app', async function () {
 | 
				
			||||||
        const backups = JSON.parse(execSync(`cloudron backup list --raw --app ${app.id}`));
 | 
					        const backups = JSON.parse(execSync(`cloudron backup list --raw --app ${app.id}`));
 | 
				
			||||||
        execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
 | 
					        execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
 | 
				
			||||||
        execSync('cloudron install --location ' + LOCATION, EXEC_ARGS);
 | 
					        execSync('cloudron install --location ' + LOCATION, EXEC_ARGS);
 | 
				
			||||||
        getAppInfo();
 | 
					        getAppInfo();
 | 
				
			||||||
        execSync(`cloudron restore --backup ${backups[0].id} --app ${app.id}`, EXEC_ARGS);
 | 
					        execSync(`cloudron restore --backup ${backups[0].id} --app ${app.id}`, EXEC_ARGS);
 | 
				
			||||||
 | 
					        await timers.setTimeout(10000);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('can login', login.bind(null, 'minioakey', 'minioskey'));
 | 
					    it('can login', login.bind(null, 'minioakey', 'minioskey'));
 | 
				
			||||||
    it('has bucket', checkBucket);
 | 
					    it('has bucket', checkBucket);
 | 
				
			||||||
    it('can open settings', openSettings);
 | 
					 | 
				
			||||||
    it('can logout', logout);
 | 
					    it('can logout', logout);
 | 
				
			||||||
 | 
					    it('does redirect', checkRedirect);
 | 
				
			||||||
 | 
					    it('check api', checkApi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('move to different location', function () {
 | 
					    it('move to different location', async function () {
 | 
				
			||||||
        browser.manage().deleteAllCookies();
 | 
					        browser.manage().deleteAllCookies();
 | 
				
			||||||
        execSync('cloudron configure --location ' + LOCATION + '2', EXEC_ARGS);
 | 
					        execSync('cloudron configure --location ' + LOCATION + '2', EXEC_ARGS);
 | 
				
			||||||
 | 
					        await timers.setTimeout(10000);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    it('can get app information', getAppInfo);
 | 
					    it('can get app information', getAppInfo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('can login', login.bind(null, 'minioakey', 'minioskey'));
 | 
					    it('can login', login.bind(null, 'minioakey', 'minioskey'));
 | 
				
			||||||
    it('has bucket', checkBucket);
 | 
					    it('has bucket', checkBucket);
 | 
				
			||||||
    it('can logout', logout);
 | 
					    it('can logout', logout);
 | 
				
			||||||
 | 
					    it('does redirect', checkRedirect);
 | 
				
			||||||
 | 
					    it('check api', checkApi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('uninstall app', function () { execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS); });
 | 
					    it('uninstall app', function () { execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS); });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -202,12 +167,15 @@ describe('Application life cycle test', function () {
 | 
				
			|||||||
    it('can login', login.bind(null, 'minioadmin', 'minioadmin'));
 | 
					    it('can login', login.bind(null, 'minioadmin', 'minioadmin'));
 | 
				
			||||||
    it('can add buckets', addBucket);
 | 
					    it('can add buckets', addBucket);
 | 
				
			||||||
    it('can logout', logout);
 | 
					    it('can logout', logout);
 | 
				
			||||||
    it('can update', function () { execSync('cloudron update --app ' + LOCATION, EXEC_ARGS); });
 | 
					    it('can update', function () { execSync(`cloudron update --app ${LOCATION}`, EXEC_ARGS); });
 | 
				
			||||||
 | 
					    it('can configure', function () { execSync(`cloudron configure --app ${LOCATION} --location ${LOCATION} --secondary-domains API_SERVER_DOMAIN=${LOCATION}-api`, EXEC_ARGS); });
 | 
				
			||||||
    it('can get app information', getAppInfo);
 | 
					    it('can get app information', getAppInfo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('can login', login.bind(null, 'minioadmin', 'minioadmin'));
 | 
					    it('can login', login.bind(null, 'minioadmin', 'minioadmin'));
 | 
				
			||||||
    it('has bucket', checkBucket);
 | 
					    it('has bucket', checkBucket);
 | 
				
			||||||
    it('can logout', logout);
 | 
					    it('can logout', logout);
 | 
				
			||||||
 | 
					    it('does redirect', checkRedirect);
 | 
				
			||||||
 | 
					    it('check api', checkApi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('uninstall app', function () { execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS); });
 | 
					    it('uninstall app', function () { execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS); });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user