From c783e10594d3bb3c048028198413e7102b2e9884 Mon Sep 17 00:00:00 2001 From: Ravind Kumar Date: Wed, 13 Jul 2022 18:28:06 -0400 Subject: [PATCH] DOCS-492: Container Platform Docs This commit also generally cleans up the Installation docs and uses /includes//steps-*.rst as a pattern for storing platform-specific tutorials within a single root URL. Finally, due to API rate limits, this commit adds some Makefile magic to allow skipping of sync'ing dependencies. Pass `make BUILD_DEPENDENCIES=FALSE ` to skip building any deps and use what is already in the branch. --- .gitignore | 1 + Makefile | 32 +- source/default-conf.py | 26 ++ source/developers/java/quickstart.md | 10 +- source/glossary.rst | 6 +- .../minio-console/console-bucket-none.png | Bin 0 -> 135019 bytes source/includes/common/common-deploy.rst | 107 ++++++ source/includes/common/installation.rst | 43 +-- source/includes/container/common-deploy.rst | 109 ++++++ source/includes/container/installation.rst | 58 +++ .../{containers => container}/quickstart.rst | 0 ...s-deploy-minio-single-node-multi-drive.rst | 158 ++++++++ ...-deploy-minio-single-node-single-drive.rst | 152 ++++++++ source/includes/linux/common-installation.rst | 1 - ...s-deploy-minio-single-node-multi-drive.rst | 56 +++ ...-deploy-minio-single-node-single-drive.rst | 56 +++ source/includes/macos/common-installation.rst | 34 +- ...s-deploy-minio-single-node-multi-drive.rst | 30 ++ ...-deploy-minio-single-node-single-drive.rst | 30 ++ ...-deploy-minio-single-node-single-drive.rst | 0 source/index.rst | 14 +- .../deploy-minio-multi-node-multi-drive.rst | 1 + .../deploy-minio-single-node-multi-drive.rst | 343 +---------------- .../deploy-minio-single-node-single-drive.rst | 354 +----------------- source/operations/installation.rst | 4 + .../reference/minio-server/minio-server.rst | 15 + 26 files changed, 919 insertions(+), 721 deletions(-) create mode 100644 source/images/minio-console/console-bucket-none.png create mode 100644 source/includes/common/common-deploy.rst create mode 100644 source/includes/container/common-deploy.rst create mode 100644 source/includes/container/installation.rst rename source/includes/{containers => container}/quickstart.rst (100%) create mode 100644 source/includes/container/steps-deploy-minio-single-node-multi-drive.rst create mode 100644 source/includes/container/steps-deploy-minio-single-node-single-drive.rst create mode 100644 source/includes/linux/steps-deploy-minio-single-node-multi-drive.rst create mode 100644 source/includes/linux/steps-deploy-minio-single-node-single-drive.rst create mode 100644 source/includes/macos/steps-deploy-minio-single-node-multi-drive.rst create mode 100644 source/includes/macos/steps-deploy-minio-single-node-single-drive.rst create mode 100644 source/includes/windows/steps-deploy-minio-single-node-single-drive.rst diff --git a/.gitignore b/.gitignore index ad644488..f101ae16 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ output.log .DS_Store source/conf.py package-lock.json +build.log diff --git a/Makefile b/Makefile index 0139e428..07cfa7fc 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ # You can set these variables from the command line, and also # from the environment for the first two. -SPHINXOPTS ?= -n -j "auto" +SPHINXOPTS ?= -n -j "auto" -w "build.log" SPHINXBUILD ?= sphinx-build SOURCEDIR = source BUILDDIR = build @@ -35,35 +35,63 @@ stage-%: @echo "Visit http://localhost:8000 to view the staged output" linux: +ifeq ($(BUILD_DEPENDENCIES),FALSE) + @echo "Skipping Dependencies" +else @cp source/default-conf.py source/conf.py @make sync-minio-version @make sync-kes-version @make sync-sdks +endif @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@ @npm run build windows: +ifeq ($(BUILD_DEPENDENCIES),FALSE) + @echo "Skipping Dependencies" +else @cp source/default-conf.py source/conf.py @make sync-minio-version @make sync-kes-version @make sync-sdks +endif @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@ @npm run build macos: +ifeq ($(BUILD_DEPENDENCIES),FALSE) + @echo "Skipping Dependencies" +else @cp source/default-conf.py source/conf.py @make sync-minio-version @make sync-kes-version @make sync-sdks +endif @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@ @npm run build k8s: +ifeq ($(BUILD_DEPENDENCIES),FALSE) + @echo "Skipping Dependencies" +else @cp source/default-conf.py source/conf.py @make sync-operator-version @make sync-minio-version @make sync-kes-version @make sync-sdks +endif + @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@ + @npm run build + +container: +ifeq ($(BUILD_DEPENDENCIES),FALSE) + @echo "Skipping Dependencies" +else + @cp source/default-conf.py source/conf.py + @make sync-minio-version + @make sync-kes-version + @make sync-sdks +endif @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@ @npm run build @@ -302,6 +330,6 @@ sync-deps: # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @echo -e "Specify one of the following supported build outputs" - @echo -e "- make linux\n- make macos\n- make windows\n- make k8s" + @echo -e "- make linux\n- make macos\n- make windows\n- make k8s\n- make container" @echo -e "Clean targets with 'make clean-'" @echo -e "Clean all targets with `make clean-all`" diff --git a/source/default-conf.py b/source/default-conf.py index b5421b99..9a71ef83 100644 --- a/source/default-conf.py +++ b/source/default-conf.py @@ -173,6 +173,32 @@ elif tags.has("windows"): 'reference/kubectl-minio-plugin/kubectl-minio-tenant.rst', 'reference/kubectl-minio-plugin/kubectl-minio-version.rst', ] +elif tags.has("container"): + excludes = [ + 'operations/install-deploy-manage/deploy-minio-tenant.rst', + 'operations/install-deploy-manage/modify-minio-tenant.rst', + 'operations/install-deploy-manage/expand-minio-tenant.rst', + 'operations/install-deploy-manage/upgrade-minio-tenant.rst', + 'operations/install-deploy-manage/upgrade-minio-operator.rst', + 'operations/install-deploy-manage/delete-minio-tenant.rst', + 'operations/install-deploy-manage/minio-operator-console.rst', + 'operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.rst', + 'operations/install-deploy-manage/multi-site-replication.rst', + 'operations/deploy-manage-tenants.rst', + 'reference/kubectl-minio-plugin.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-delete.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-init.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-proxy.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-tenant-create.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-tenant-delete.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-tenant-expand.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-tenant-info.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-tenant-list.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-tenant-report.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-tenant-upgrade.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-tenant.rst', + 'reference/kubectl-minio-plugin/kubectl-minio-version.rst', + ] elif tags.has("k8s"): excludes = [ 'operations/install-deploy-manage/deploy-minio-single-node-single-drive.rst', diff --git a/source/developers/java/quickstart.md b/source/developers/java/quickstart.md index 572c2640..46d9141b 100644 --- a/source/developers/java/quickstart.md +++ b/source/developers/java/quickstart.md @@ -12,19 +12,19 @@ Java 1.8 or above. io.minio minio - 8.4.2 + 8.4.3 ``` ## Gradle usage ``` dependencies { - implementation("io.minio:minio:8.4.2") + implementation("io.minio:minio:8.4.3") } ``` ## JAR download -The latest JAR can be downloaded from [here](https://repo1.maven.org/maven2/io/minio/minio/8.4.2/) +The latest JAR can be downloaded from [here](https://repo1.maven.org/maven2/io/minio/minio/8.4.3/) ## Quick Start Example - File Uploader This example program connects to an object storage server, makes a bucket on the server and then uploads a file to the bucket. @@ -92,12 +92,12 @@ public class FileUploader { #### Compile FileUploader ```sh -$ javac -cp minio-8.4.2-all.jar FileUploader.java +$ javac -cp minio-8.4.3-all.jar FileUploader.java ``` #### Run FileUploader ```sh -$ java -cp minio-8.4.2-all.jar:. FileUploader +$ java -cp minio-8.4.3-all.jar:. FileUploader '/home/user/Photos/asiaphotos.zip' is successfully uploaded as object 'asiaphotos-2015.zip' to bucket 'asiatrip'. $ mc ls play/asiatrip/ diff --git a/source/glossary.rst b/source/glossary.rst index 971f889a..35068f34 100644 --- a/source/glossary.rst +++ b/source/glossary.rst @@ -76,7 +76,7 @@ Glossary disk encryption The conversion of all of the contents written to a disk to values that cannot be easily deciphered by an unauthorized entity. - Disk encryption can be used in conjuntion with other encryption technologies to create a robust data security system. + Disk encryption can be used in conjunction with other encryption technologies to create a robust data security system. encryption at rest A method of encryption that stores an object in an encrypted state. @@ -96,7 +96,7 @@ Glossary erasure set A group of drives within MinIO that support :term:`erasure coding`. - MinIO divides the number of drives in a deployment's server pool into groups of 4 to 16 drives that make up each _erasure set_. + MinIO divides the number of drives in a deployment's server pool into groups of 4 to 16 drives that make up each *erasure set*. When writing objects, :term:`data` and :term:`parity` blocks write randomly to the drives in the erasure set. hashing @@ -138,7 +138,7 @@ Glossary A rule that prevents removal or deletion of an object until an authorized agent removes the rule or it expires. monitoring - The act of reviewing the status, activity, and availility of a MinIO cluster, deployment, tenant, or server. + The act of reviewing the status, activity, and availability of a MinIO cluster, deployment, tenant, or server. MinIO provides the following tools: - `Prometheus `__ compatible metrics and alerts diff --git a/source/images/minio-console/console-bucket-none.png b/source/images/minio-console/console-bucket-none.png new file mode 100644 index 0000000000000000000000000000000000000000..2fac6c9a9b88dd605ef19f51ccbca2e70576212f GIT binary patch literal 135019 zcmeFYXHb)A950IND$4>QQU!rE2#5$MRX{)`G*OT)9YK1NUP1^iN-xr-Bfa+;N<@0^ zgdXW7fzU!AA#h&H-t*<&IdebUnR92(J3!vN2~YX=@_RyFsVY+c&GI)H85y;*5?F(b zj68sh>`LHYe*jPZei)YryimMT(sLyvyVmjJ_fkCHHC8gRf5?=uq{Y?cr;vtz=8v3Gh@0Gkd4ZYTv z@)UaQhl3?(o$x;>Rs0gNbm+DFtrqXc9=@Pr;&IZ8?jIleSQzwc{CD+UK0f+|-M`+E zk=@n4Gy30sKPcqt@B7z`$|ApSzg8(_UHW~WAb*4U_ie@f80+7+{ua^T%fIjMhuvZM zeQT=se}*O_`~MR`W(vqnFB#Vshbdt`{^{O!&}^&g>00J?0uG1!KQ0qUwv6!oV^(xr z)_!psIVsNxn!|%P6+w}m;MCv{X%45?KeP(CGQmn&{QZM^)h@?UmmHEqdk7VK`@)Qi zwU1{9^@Lr=dcH(m3GG>;dl=C5g6~K(pX0(vI?if4)k1UQzGhVDpEWoW39HbQFz(}L zXNuK{{Ccc;>COgu;cPkKI=WLupSQz>`UowxpZjHf^@YXs!jNnN}V%XipjSm!??99OlGd>m#F&*u9k?dQ|xYO2rR?UY^6A;);2* zGXx%Wg3`A*yg(Spj}Hb}PkqI&0tUw6K(ycS;^W_d7u zo2Tx)<{-s0=-OXm405QxN%?V}hIY@4R`0E^+gF4at*54SrGG1jKgFHVgh~98M;FaP zs;H*1x1{aiH-E8&P{$PUgPF7OZc16dg+V>@$7REjSi>gP%p<54(|%*sGyx zV9e>sH06F)zhEQWI$8YKVXC9MxK0uEJuXsDTxCk zsGt$k?!}%?L|_Tcf;M>E3hHD{Dy8gJOGA}Z4o`1zKrEkpdh>6wN^U%=nYi3B%yhvL zgP{5~<&&pw8+TP4hmwaE*&8>If+^zn-j@k^1m82CPB zOX0%PYzrwc+pK1~aW&$+g7}Fd4EcecRt|M<*=wMOB13%pcs_7sp=*WGvRUG2-*kmG z^Q<={d2~osonBtuzS(3hJ-6%^Q(xaucAK$V?6DdyHyKKO^lWlw=GG6+-diQQOlQsv z$_rayKGD6AP4H%KG3|P^!t4WVv<|B1^cU}Su0$n($WH~Kk9N>pT>-*8QOoRsBja56 zF!Nzmg3~KxvjC) zq=tG>blFzYNY&C-<6Ba8lej<i2;TIFhgu2Sv z^fkP(sr+JNB{x14=x8j_|G>{_JXfJS<;WUwGiW!rbQE5^WN^%5hpqHt`$?O)t1+7{ zJed)&iS>_~3bIDl)sYY7h#0*?chuM8?PrY}+H>YhJWd!rDPkG!#unXtTX9{`($YkE zVqBl2wfRcEpWWFf$I(~nsT?F1Y?~nwe@<7o+kI0|7GTR}Kb*D6%J&E@T_Y$-^y=8h zKsMHXPV27$zG0;L(tB-7+OAbdHTCi=0jqboW)-WznEXnYevp-DZ+zC9*O@W@@v+aQ z|C!+%Bw-q|aXdyC-UIs_P3K_K5X)B8`<0bNCIu4RD^Y})JLow`Gp4#L*-q>ht z>g5uCpv>CgESfXXy6=}y{#)*bk)QWuSu0>``K%D*xi81Dc`bFP`8I(0D&Wz6amj%s z&VT-PZJxIalAw~dpLT;YvOA6tXx*{{0flq;Ojds9`_|G1-(6AjbRU>wOpCb=J2ak= zPlY~S_Nw!_{&RCrKHPzyp;@P8RyU%87ID}5J)dS|UgN1dt1u-zg0dTJ7rF^&e?Q;b zXU=|Z6Z(kJ;jCi9J?OP>kv@F^hcZfMqPZRmN_zf!sGA+q>h zK1u0QH2++|_^`u;-$BJL4ME4VuD-I;^SA&7NA5-GfDMsFR*c*{9+N$mj&(YrS$C&) zTUw=);!XOS8;JQA(#Vyk8QVk0b=L%TjR!9Wy+}pu82X&k?=*@!;i#>R%PmnK_X)#^ z?wc)^VubwS>67ODs3qT7yC9txY@w=$-0xo}b$;Xt1BS z{B=Rp?a9c2-KZ?7lgG<0|fOOtAN9}sL^F8{%Po>m>>vAKHLglb!A zznoI<)Jn?Jp4ezUr#nbITk=e}55wQ~^ppA#@{)aR3C$q%zZe^wC_GHah){XOTFM&m1l!M?pGyboIJ+0-u>Y|uV?@XeC`Lidrq9MDKv~m1 z)C3oTxwZ?d`+PcP6PvMn9&>=&9->K%|pZ>UK# zRRZ$h)ZqcB!cV4sHwF~ZlChjRMbguI?o#>7w0c7$zAwP0>!FxQ;H8v?S{J!nh8B-0 zM=2#qTG_OJWlA_>%o9KvNgXS&M5c(>X@%`rzVwaY=rRr#_X{R24Ay2RPaqFVb?f0_ zDy2G?WzW#Q39lu@G59vD6qEFhw<7l2>@-JLGp;-L78H(N*ockbDd*-gYQuoc^AMQ(_p>cI$TxgOuuAYXqQ}{I6ykVLSI!nSn){PpWNWOl zCy7aD@mTp)!eAUgAaRV0SvNv)LU^F!O@De|TYLVHkq0SH-m%+r&P=c)$_t{?9@H-s z)#~UL_6>*$!&BVjviv;;!#TRrc|sIq(vH_VKU=qa7Tyr#K@&CZPHE4{NNj(+QoLp0bWIHg(inCT@rMzR`AsR8lS= z68cfYMn}mRP)A-@?ELVNmCmhMMAKREdzw`T&pHq6$rOzyJywyGwp*~|McB7g3@A%8y`)_5Iq`}Rqr=hYU1^Vp!4 z`{0LaXNrXkh}HMcg_TUt^ASN@n}?gbawxIIbYGM6GbHzj7wqx^;7Lphe7t0az_XQQjRE`U; zw43O;-&O?EHz{Pp(l6Znm{Xy9_3jU6K%h{gjW@$0_n9pXyxpMF!wO(9E5Zr8mE{9t zzAI4H*i_2pI+qx$t8ml3_E)lozXbTZx6s#K?cbMv#9K^%KZhp?x$hoaecE21DBlcW zt;0r8u@jCLhO?QaspUvzKUd;PF7C>ziY~(@UmS1BNOwEHix_B&`z~q1 zl4!LgV2!)_t4pt;9i{z$K^yDhH9ieqUTMcsz{QrvEK1)P(U#as&$l$TfIwL)5uY#I zG>5qtOioZ|C>oR2fV=EJ8KZUU&gfb{E``?#dSKMlZ6ZEdV%|H;PaP1bmS(VQ@JE6K zlwEo=zA)E4R>5`P)TVT4dQ!gHWwA-2Q%ZFGv>S*`?Y)?tA6v@x2xLoUT3YD#Wd3vCQ-fs1R7$6c^U%MlBwj?!=$;OEik#t0^+BhR#p#M}F%>ey&wZ-cAvvTwDZ@AH(C#0@pe>5 zF6?y9Wc5Ef+p3POUwmL(Ha$DDw%)H34}mqm$)JArF zFqTsoHFLZ5P2UERk&SJ`zZ>7tDyV+0_1>atw*msGH?C=F-D)WaAbDsDSwARRc?igv zOxx+s7x}kmHK(-Q*%6BVpu6$&hW7NmfOim(*y`G`sL+`#(yi9Hqr#IlZruD%nXh%7 z81}#QW>AUL= zz5ws3pP39Y!wnHh zLXc4cVD(Tc4{O>cW>i>Z&dzEi`oo(f65+us4;O-7h@8_8vJma{h0MoeZgz>YiYNkk z3y>N(o1xX}yGC67&IY~yysJOd%c-8!nDVK#$XlzPk(QR6JgAu>$!4oFe>}7r=4wLH z=#{K;*ocq8gzDJaxm}zDg_Pc6pdGbH)88BW5TQ%W^Ui)Iukf5H9$wOta;|#6Hz~|& z=lDteZMs%t$lgS2BgqbJ^8WZ>ac{m!@K+EHp;Z>?(-@1O2Nc3;RMNflXtUjVMT{*A zJF!35lz3cj{9q-b*F4D025n-Ej1+JnW!$_j0Rol@whO9m6^xs z-1hjq=3m@Ee>Y7hy>*lNr{4VRGv4RCJ=O2)& zrF#|n!QeYY{R!D7RYuI#8;f|PyIf*?yaVBIUEMIbpsL$$p4pDW0_UP&(QB)K)vgtvH^mQCxXY?SzNiqH z{36D?`$AumtQ2LJi!$uzs#J*22@k}GtM%sHT z4_z#{b@?rtJP<*u@oTCQAnk=KHX#TrL(?e|pcv@Nk*o@eV`8jcIZ=QuL;s!7g&wb? z_Pk5=YHF+Fv>Z2lyPo+p^NNNE{pJ1lTJ z1&IH0dE}!!ENk+Zk0;Si!^x76tpQJC4BfOj~2qAxx!%7NeA1)(0`@o zm0{aJ@nqxdWX{1exr-#1*zD~4RRLGC_%pf>ZRVHq4LoLNncSoHgs zRt5%oHnkFxX~AX=4yA*=>JB1x2Q25fBa~#sjGH_k9ODXW9!C%3MYM};t8NIQdPcUv zU=QEZNtB=;a=h{Tv&%%r6{Z*G*(<9Hypp|*70b1iQ67d58|vckY7=}VVI8}dD6@pz zBzGnks!cY9tUjb=XS?g@`y`wXfOO@o_@@u&2UL$iATy(KR~|LA^r!>~KEQc+RV1AU zWTuTaEtLx+pSDju>%*{Fx!yUb)XpH*Y>kveY7$N_OX0f~CqjdlCwvAzKk07fx$={8 zyV95th0`05+kPXPQ9e{qNcW-=NofoSn5q-$Q{9O_0;ALu?+6_=Di+dGjOZ6D!8-+3 zpXR!?jWS=}LyBPtv>Bn3*cg#q#LhY!X18(XqHm|Y(l$h$RtkjkvGi=`NT*_?J(aAhW-*<*h~MzVUjK*n zx+_yZ6Hk8#B_xX6tm@Y4e8 zGmo&~;;=k#a}*F;Qgst3DmPZlhr53iCr{eDvp6FYhg903FVstR?r9e;Eu6FsNnfRc z?uJ~eJ&>Dk=GDGzp-EsPsFHxUbU-q$SM?+;4@im{2&(@bq<)sAY(PY_+MaZ(fuNk~n zg_`5y+Cm2NLk}-cT+&Zb{Mw>WxNNMMKbbeRlT*grKP(c4xT1agg@BOW-LK7h+#5;E z0;-EubA|#SJl>tpt3actOVyl#09RIL7$1N;cHXV1SheD{l~=Fzm86Xxi@64iCC>8k9+6mvQODJ9yIp6{X%wVnUrc}*6_%? z-_f-(cpil;{r)91i~VlFGZS&%BC}*YWGV9%#)Px`@}+l+5{CaLsX&SOX_T5Yze+0K z9rurp-m3j?(*FQz@??j9y6@1_k30oWkr?1al-za|#raE?t5@8P@OGO^#xKFkf+iBs zb;Hd%*f%_bd*Bu}QkNzqCnryyU5fS``{krxcS4kwHtBrPi#F+~?S=bNq>YH`(*?<^ z9_ZDT9WKy5g)S&6{dKF4k?*sm;orTehT&-NiWs%unL0H2K4|^UDEsbYSIb#5EH<#{ zDGlCsXRapvF=MUiXy~}r5Q{GL8HuGZ2n^1FrX+A?KneX$epCx^O(Wr!?Q7mz<;VLF zy2nKut;efzT2b4RkBdC7`4k)`9=6hunm$?m?i|c-C}lZIou!Bzy(>?6w^kIJoqaw% z(e)N+E(~v7K#F6!cqO>p7rI9H=RCGHAPu^9NO{vCY=p zI>l&4E2?#Lr}$F*6lt=rq>wu-^_&fMinMw}tAcXRg|GgRB%dq%uaClfG}525n9gb*69#5*Fnh7^4j#j#<1M7g@Y&byxoV>n9W-oM@OR_w`tIxCxmU_7^vomb z;BR$U{icU6z<*qpEa17hHOJS3oD*K^(}q%&3WVk40cAFER-QPdf zV!F@G#pO=oxV^0&z1Knx&WVZ5hX2|k**sn;OWiDxSyF;abbVmv^R#O`AR9(fg&S*I zNIoTSLYc9NHC1V%8C{dWG<@yt5EE^j{xQ>&JKi zkwTSv>Wm0MXtBT$B~&^M>+r+9{o{%Hplb_+D7X&GQT>w_4Zhk&cSC#@(*wwl(Ia{B z@PC9HkM@8WxaeoZz(0m(m@cgj{@_sE)Bjs4?}-q=*>8{VJmDeIOy2jO%id_kn!5D; zW8$O+2+3#R$}9O{K@e?P2{wqTr~rs1A~s6b2v?xAIyx`R#8+XLe_QQ{A$p`#YO*%w z^@WvEkQhJl_?ku<&*qmQmI%%1DcIi&RnlIsV6>x;BnjdUn?Ll!WQZsu^X2ov@787m zP4tg7l!_e@GjTDR8hDH>z?n)|`B%OABcC$e*Ha}ME83m_`zNzOQ8E(Gr0;-0U9r$+ zY3e}{Gqd5cIcD3t3xPe^JU0YPaQnw48#~^FBfWMnQ)DE_%vK!#{XHq1Bk;V%6~EZz zh6MlORHoVO5Csaa23_U{)mYi#6h zk(E10_ZX2g`j>qhqglS2gSX1NlV6bkTSM{UKp6hS^a(ksElym4sU$d9YwS_2(}GZq zY4&Q|gb3}v)7akBC&E!ub*xOPjn{O&?nv0M3 zFZ+R2Eh2LXjcvAW%sO?7M60pc@;7CCY794seX_Wa^4Hv7p;6MK4|GkR@X+ejKfHhNTI{C+YxDXKneM^!g2+3y2CBur#8wr~K~wiREDSFyKSL zB}~+NehMzR5C%&tBaGkFb^o26p26?6y=x{tIR_D(B7WC>{EI`W9e{Y4;0^ z`6~>ppe9=u#n%6!3JRjZ?e_@~hTR#M62n8*FoZAHfma-CB@mEtq{IDp*$9Ap${a(! z&eNKJ6}{??rk{A(;^Z^4jY|jystg1o-GrPsH*~MCh~Is4Dh)6z<4*I&_-@OUn6`g8 z5-*&-y@nwa&ix`Lax)TwQWkXo(`eWyU}l-c^yuyj1HiZ%-Bsdvg2qZ0#H7YZqEk2k zBgipbYhHZ@?W-c90wBk1LX)!kYLi~GFFMQaiD;V;yVn63J);7(byVpDduh-sfgYx=(NV ze_=Of90Zu6i9|TVV=eWG%U85F(cJRdFND!>hU~B3Vlr|I8004plEnL0AJesW_8RD{ z9@MyYp56GBv5+OKY;E%WW$i7PRJbb9GPER`u6OnoFie5f{yzuI; zRloXkCA{;IAJBGne{zHRyWbmC=2DhlA3Yg$q&5gQw{8~!fGGGYEA_JNifO9(vSPP> zo68)nH%Fx$AMdbyC4HZ&mz7u7!Uq0_NU7hL@?V=02?RcDQHz&imDOsIWeh$4<-)$p z=z?89SBi@&IfiE`*GA|MxNd-=W>K#NITCQK?E4_JBv#)qNu#w!xV z4J-k1S0q5}S|;`H5Z1Ky86CsqKguHh5LD^SnsjF}htI!O?LX&g_tlK~$FdO*{v0Wy zZLfUun_!;HQ#n6oYEi>2S_S7sU|;-NslSw)9hn339pGO~9xR?4ZhkKX%;Jx0o?@l> z=i0y=(oD(Ee=Yj^P||awAA8C_atg!zMiezrmQ4JY8IZ-@I|hh~AC3I=B=ZHc(9Iu2 zqLd4=*0A|CbU&{Mi88G$%k$mBu6mhp_<%BHCk4`}OVlDOuWfU#1!QFPYwRzw800IfYi-ta5vcZ^0IAxeVr(H`CEFHv>Aq-Cii7X4rTG=Doc6!J1nC*=pA&FsExcuVQ)sZ~(y$3F&AxUw|qdGQA$8SPKs5Ug{Ns66&>P{DU|4K@Nza;Yw%BVuJ>L53 z*%#Z?zmY0;jndQ8@k%!wEOM=H?U>w}ILyuWL6&ZnaZK3O>X!=ebGmMvn-e2bC0&HX z2$rs7-6AmaL3|MU8r5I{$w%1XUdx3uZzyZNy$!kj4lrKJ+G|l+sTCPF0VNy zUNo9^cE#1Wl}?4{o0ZI)h|@ll818uI9G;LQBlqyV$;Vbl4XsX*>N10ef8W1d?hyi&awoubSV>Z<|RO)^cVSVi@vNu_i5?8qJh56-iC zTZH`l-P8&HO6ubL=}rb_GB+kRK&J6VbkD`mz-PpER4HV9Kqg+v8{z2vVgLXW-paPf z8-DfTyYBxQL#X^41lafLqgqyJ2|ZK9czAs}?6~p??dXtl`U`1Q##&1mq#X0JKxLd8{P^5F>W;_a?Z%l(((5s5xCyBTKJT!~f->sa z`V6eBe6%5F*nyOB1f{GSNSMz+8mF^%0AKjl@xyUG)VCy1b^hu1e_tV49~An@wu1zQ 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 literal 0 HcmV?d00001 diff --git a/source/includes/common/common-deploy.rst b/source/includes/common/common-deploy.rst new file mode 100644 index 00000000..4dbd1dca --- /dev/null +++ b/source/includes/common/common-deploy.rst @@ -0,0 +1,107 @@ +.. start-common-deploy-create-environment-file-single-drive + +Create an environment variable file at ``/etc/default/minio``. +For Windows hosts, specify a Windows-style path similar to ``C:\minio\config``. +The MinIO Server container can use this file as the source of all :ref:`environment variables `. + +The following example provides a starting environment file: + +.. code-block:: shell + :class: copyable + + # MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server. + # This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment. + # Omit to use the default values 'minioadmin:minioadmin'. + # MinIO recommends setting non-default values as a best practice, regardless of environment + + MINIO_ROOT_USER=myminioadmin + MINIO_ROOT_PASSWORD=minio-secret-key-change-me + + # MINIO_VOLUMES sets the storage volume or path to use for the MinIO server. + + MINIO_VOLUMES="/mnt/data" + + # MINIO_SERVER_URL sets the hostname of the local machine for use with the MinIO Server + # MinIO assumes your network control plane can correctly resolve this hostname to the local machine + + # Uncomment the following line and replace the value with the correct hostname for the local machine. + + #MINIO_SERVER_URL="http://minio.example.net" + +Include any other environment variables as required for your local deployment. + +.. end-common-deploy-create-environment-file-single-drive + +.. start-common-deploy-create-environment-file-multi-drive + +Create an environment variable file at ``/etc/default/minio``. +For Windows hosts, specify a Windows-style path similar to ``C:\minio\config``. +The MinIO Server container can use this file as the source of all :ref:`environment variables `. + +The following example provides a starting environment file: + +.. code-block:: shell + :class: copyable + + # MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server. + # This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment. + # Omit to use the default values 'minioadmin:minioadmin'. + # MinIO recommends setting non-default values as a best practice, regardless of environment. + + MINIO_ROOT_USER=myminioadmin + MINIO_ROOT_PASSWORD=minio-secret-key-change-me + + # MINIO_VOLUMES sets the storage volumes or paths to use for the MinIO server. + # The specified path uses MinIO expansion notation to denote a sequential series of drives between 1 and 4, inclusive. + # All drives or paths included in the expanded drive list must exist *and* be empty or freshly formatted for MinIO to start successfully. + + MINIO_VOLUMES="/data-{1...4}" + + # MINIO_SERVER_URL sets the hostname of the local machine for use with the MinIO Server. + # MinIO assumes your network control plane can correctly resolve this hostname to the local machine. + + # Uncomment the following line and replace the value with the correct hostname for the local machine. + + #MINIO_SERVER_URL="http://minio.example.net" + +Include any other environment variables as required for your local deployment. +.. end-common-deploy-create-environment-file-multi-drive + +.. start-common-deploy-connect-to-minio-deployment + +.. tab-set:: + + .. tab-item:: MinIO Console + + You can access the MinIO Console by entering any of the hostnames or IP addresses from the MinIO server ``Console`` block in your preferred browser, such as http://localhost:9090. + + Log in with the :envvar:`MINIO_ROOT_USER` and :envvar:`MINIO_ROOT_PASSWORD` configured in the environment file specified to the container. + + .. image:: /images/minio-console/console-bucket-none.png + :width: 600px + :alt: MinIO Console displaying Buckets view in a fresh installation + :align: center + + You can use the MinIO Console for general administration tasks like Identity and Access Management, Metrics and Log Monitoring, or Server Configuration. Each MinIO server includes its own embedded MinIO Console. + + If your local host firewall permits external access to the Console port, other hosts on the same network can access the Console using the IP or hostname for your local host. + + .. tab-item:: MinIO CLI (mc) + + You can access the MinIO deployment over a Terminal or Shell using the :ref:`MinIO Client ` (:mc:`mc`). + See :ref:`MinIO Client Installation Quickstart ` for instructions on installing :mc:`mc`. + + Create a new :mc-cmd:`alias ` corresponding to the MinIO deployment. + Specify any of the hostnames or IP addresses from the MinIO Server ``API`` block, such as http://localhost:9000. + + .. code-block:: shell + :class: copyable + + mc alias set http://localhost:9000 myminioadmin minio-secret-key-change-me + + Replace ``myminioadmin`` and ``minio-secret-key-change-me`` with the :envvar:`MINIO_ROOT_USER` and :envvar:`MINIO_ROOT_PASSWORD` values in the environment file specified to the container. + + You can then interact with the container using any :mc:`mc` command. + If your local host firewall permits external access to the MinIO S3 API port, other hosts on the same network can access the MinIO deployment using the IP or hostname for your local host. + +.. end-common-deploy-connect-to-minio-deployment \ No newline at end of file diff --git a/source/includes/common/installation.rst b/source/includes/common/installation.rst index 75e9fdfa..f1d1e0ce 100644 --- a/source/includes/common/installation.rst +++ b/source/includes/common/installation.rst @@ -14,30 +14,31 @@ MinIO is a software-defined high performance distributed object storage server. You can run MinIO on consumer or enterprise-grade hardware and a variety of operating systems and architectures. -MinIO supports three deployment modes: +MinIO supports three deployment topologies: -Standalone Single-Drive - A single MinIO server with a single storage volume or folder, also referred to as "Filesystem Mode". - Standalone single deployments are best suited for evaluation and initial development of applications using MinIO for object storage, *or* for providing an S3 access layer to single storage volume. - - Standalone deployments do not provide access to the full set of MinIO's advanced S3 features and functionality - specifically those dependent on :ref:`Erasure Coding `. +Single-Node Single-Drive (SNSD or "Standalone") + A single MinIO server with a single storage volume or folder. + |SNSD| deployment provides failover protections. Drive-level reliability and failover depends on the underlying storage volume. -Standalone Multi-Drive - A single MinIO server with *at least* four storage volumes or folders. - A standalone multi-drive deployment supports and enables :ref:`erasure coding ` and its dependent features. + |SNSD| deployments are best suited for evaluation and initial development of applications using MinIO for object storage. - Standalone multi-drive deployments can only provide drive-level availability and performance scaling. - Use standalone multi-drive deployments for small-scale environments which do not require high availability or scalable performance characteristics. + |SNSD| deployments implement a zero-parity erasure coding backend and include support for the following erasure-coding dependent features: -Distributed Deployments - One or more MinIO servers with *at least* four total storage volumes across all servers. - A distributed deployment supports and enables :ref:`erasure coding ` and its dependent features. + - :ref:`Versioning ` + - :ref:`Object Locking / Retention ` - Distributed deployments provide drive and server-level availability and performance scaling. - Distributed deployments are best for production environments and workloads. +Single-Node Multi-Drive (SNMD or "Standalone Multi-Drive") + A single MinIO server with four or more storage volumes. + |SNMD| deployments provide drive-level reliability and failover only. - MinIO recommends a baseline topology of 4 nodes with 4 drives each for production environments. - This topology provides continuity with the loss of up to one server *or* four drives across all servers. +Multi-Node Multi-Drive (MNMD or "Distributed") + Multiple MinIO servers with at least four drives across all servers. + The distributed |MNMD| topology supports production-grade object storage with drive and node-level availability and resiliency. + + For tutorials on deploying or expanding a distributed MinIO deployment, see: + + - :ref:`deploy-minio-distributed` + - :ref:`expand-minio-distributed` .. _minio-installation-comparison: @@ -48,9 +49,9 @@ The following table compares the key functional differences between MinIO deploy :width: 100% * - - - :guilabel:`Standalone Single-Drive` - - :guilabel:`Standalone Multi-Drive` - - :guilabel:`Distributed` + - :guilabel:`Single-Node Single-Drive` + - :guilabel:`Single-Node Multi-Drive` + - :guilabel:`Multi-Node Multi-Drive` * - Site-to-Site Replication - Client-Side via :mc:`mc mirror` diff --git a/source/includes/container/common-deploy.rst b/source/includes/container/common-deploy.rst new file mode 100644 index 00000000..c21ea2f9 --- /dev/null +++ b/source/includes/container/common-deploy.rst @@ -0,0 +1,109 @@ +.. start-common-deploy-pull-latest-minio-image + +Select the tab for either Podman or Docker to see instructions for pulling the MinIO container image. +The instructions include examples for both quay.io and DockerHub: + +.. tab-set:: + + .. tab-item:: Podman + + quay.io + .. code-block:: shell + :class: copyable + + podman pull quay.io/minio/minio + + DockerHub + .. code-block:: shell + :class: copyable + + podman pull docker://minio/minio + + .. tab-item:: Docker + + quay.io + .. code-block:: shell + :class: copyable + + docker pull quay.io/minio/minio + + DockerHub + .. code-block:: shell + :class: copyable + + docker pull docker://minio/minio + +.. end-common-deploy-pull-latest-minio-image + +.. start-common-deploy-validate-container-status + +.. tab-set:: + + .. tab-item:: Podman + + Run the following command to retrieve logs from the container. + Replace the container name with the value specified to ``--name`` in the previous step. + + .. code-block:: shell + :class: copyable + + podman logs minio + + The command should return output similar to the following: + + .. tab-item:: Docker + + Run the following command to retrieve logs from the container. + Replace the container name with the value specified to ``--name`` in the previous step. + + .. code-block:: shell + :class: copyable + + docker logs minio + + The command should return output similar to the following: + +.. end-common-deploy-validate-container-status + +.. start-common-deploy-connect-to-minio-service + +.. tab-set:: + + .. tab-item:: MinIO Web Console + + You can access the MinIO Web Console by entering http://localhost:9090 in your preferred browser. + Any traffic to the MinIO Console port on the local host redirects to the container. + + Log in with the :envvar:`MINIO_ROOT_USER` and :envvar:`MINIO_ROOT_PASSWORD` configured in the environment file specified to the container. + + .. image:: /images/minio-console/console-bucket-none.png + :width: 600px + :alt: MinIO Console displaying Buckets view in a fresh installation. + :align: center + + You can use the MinIO Console for general administration tasks like Identity and Access Management, Metrics and Log Monitoring, or Server Configuration. Each MinIO server includes its own embedded MinIO Console. + + If your local host firewall permits external access to the Console port, other hosts on the same network can access the Console using the IP or hostname for your local host. + + .. tab-item:: MinIO CLI (mc) + + You can access the MinIO deployment over a Terminal or Shell using the :ref:`MinIO Client ` (:mc:`mc`). + See :ref:`MinIO Client Installation Quickstart ` for instructions on installing :mc:`mc`. + + Create a new :mc-cmd:`alias ` corresponding to the MinIO deployment. + Use a hostname or IP address for your local machine along with the S3 API port ``9000`` to access the MinIO deployment. + Any traffic to that port on the local host redirects to the container. + + .. code-block:: shell + :class: copyable + + mc alias set http://localhost:9000 myminioadmin minio-secret-key-change-me + + Replace ``myminioadmin`` and ``minio-secret-key-change-me`` with the :envvar:`MINIO_ROOT_USER` and :envvar:`MINIO_ROOT_PASSWORD` values in the environment file specified to the container. + + The command should return success if the container is running and accessible at the specified port. + + You can then interact with the container using any :mc:`mc` command. + If your local host firewall permits external access to the MinIO S3 API port, other hosts on the same network can access the MinIO deployment using the IP or hostname for your local host. + +.. end-common-deploy-connect-to-minio-service diff --git a/source/includes/container/installation.rst b/source/includes/container/installation.rst new file mode 100644 index 00000000..0ae1a7ea --- /dev/null +++ b/source/includes/container/installation.rst @@ -0,0 +1,58 @@ +.. _minio-installation: + +======================== +Install and Deploy MinIO +======================== + +.. default-domain:: minio + +.. contents:: Table of Contents + :local: + :depth: 1 + +MinIO is a software-defined high performance distributed object storage server. +You can run MinIO on consumer or enterprise-grade hardware and a variety of operating systems and architectures. + +MinIO supports three deployment topologies: + +Single-Node Single-Drive (SNSD or "Standalone") + A single MinIO server with a single storage volume or folder. + |SNSD| deployment provides failover protections. Drive-level reliability and failover depends on the underlying storage volume. + + |SNSD| deployments are best suited for evaluation and initial development of applications using MinIO for object storage. + + |SNSD| deployments implement a zero-parity erasure coding backend and include support for the following erasure-coding dependent features: + + - :ref:`Versioning ` + - :ref:`Object Locking / Retention ` + +Single-Node Multi-Drive (SNMD or "Standalone Multi-Drive") + A single MinIO server with four or more storage volumes. + |SNMD| deployments provide drive-level reliability and failover only. + +Multi-Node Multi-Drive (MNMD or "Distributed") + Multiple MinIO servers with at least four drives across all servers. + The distributed |MNMD| topology supports production-grade object storage with drive and node-level availability and resiliency. + +This documentation provides instructions for |SNSD| and |SNMD| for supporting local development and evaluation of MinIO on a single host machine. For |MNMD| deployments, use the MinIO Kubernetes Operator to deploy and manage MinIO tenants in a containerized and orchestrated environment. + +.. _minio-installation-platform-support: + +Platform Support +---------------- + +MinIO provides container images at the following repositories: + +- https://hub.docker.com/r/minio/minio +- https://quay.io/repository/minio/minio?tab=info + +Use of MinIO images from any other repository, host, or organization is at your own risk. + +The :ref:`Single-Node Single-Drive ` and :ref:`Single-Node Multi-Drive ` tutorials provide instructions for the `Docker `__ and :podman-docs:`Podman <>` container managers. + +.. toctree:: + :titlesonly: + :hidden: + + /operations/install-deploy-manage/deploy-minio-single-node-single-drive + /operations/install-deploy-manage/deploy-minio-single-node-multi-drive \ No newline at end of file diff --git a/source/includes/containers/quickstart.rst b/source/includes/container/quickstart.rst similarity index 100% rename from source/includes/containers/quickstart.rst rename to source/includes/container/quickstart.rst diff --git a/source/includes/container/steps-deploy-minio-single-node-multi-drive.rst b/source/includes/container/steps-deploy-minio-single-node-multi-drive.rst new file mode 100644 index 00000000..2df18c21 --- /dev/null +++ b/source/includes/container/steps-deploy-minio-single-node-multi-drive.rst @@ -0,0 +1,158 @@ +1) Pull the Latest Stable Image of MinIO +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/container/common-deploy.rst + :start-after: start-common-deploy-pull-latest-minio-image + :end-before: end-common-deploy-pull-latest-minio-image + +2) Create the Environment Variable File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/common/common-deploy.rst + :start-after: start-common-deploy-create-environment-file-multi-drive + :end-before: end-common-deploy-create-environment-file-multi-drive + +3) Create and Run the Container +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Select the container management interface of your choice for the relevant command syntax. + +.. tab-set:: + + .. tab-item:: Podman + + Copy the command to a text file for further modification. + + .. code-block:: shell + :class: copyable + + podman run -dt \ + -p 9000:9000 -p 9090:9090 \ + -v PATH1:/data-1 \ + -v PATH2:/data-2 \ + -v PATH3:/data-3 \ + -v PATH4:/data-4 \ + -v /etc/default/minio:/etc/config.env \ + -e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \ + --name "minio_local" \ + minio server --console-address ":9090" + + Specify any other :podman-docs:`options ` to ``podman run`` as necessary for your local environment. + + .. tab-item:: Docker + + Copy the command to a text file for further modification. + + .. code-block:: shell + :class: copyable + + docker run -dt \ + -p 9000:9000 -p 9090:9090 \ + -v PATH1:/data-1 \ + -v PATH2:/data-2 \ + -v PATH3:/data-3 \ + -v PATH4:/data-4 \ + -v /etc/default/minio:/etc/config.env \ + -e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \ + --name "minio_local" \ + minio server --console-address ":9090" + + Specify any other `options `__ to ``docker run`` as necessary for your local environment. + + For running Docker in Rootless mode, you may need to set the following additional Docker CLI options: + + Linux + ``--user $(id -u):$(id -g)`` - directs the container to run as the currently logged in user. + + Windows + ``--security-opt "credentialspec=file://path/to/file.json"`` - directs the container to run using a Windows `Group Managed Service Account `_. + +The following table describes each line of the command and provides additional configuration instructions: + +.. list-table:: + :header-rows: 1 + :widths: 40 60 + :width: 100% + + * - Line + - Description + + * - | ``podman run -dt`` + | ``docker run -dt`` + + - Directs Podman/Docker to create and start the container as a detached (``-d``) background process with a pseudo-TTY (``-t``). + This allows the container to run in the background with an open TTY for bash-like access. + + * - ``-p 9000:9000 -p 9090:9090`` + - Binds the ports ``9000`` and ``9090`` on the local machine to the same ports on the container. + This allows access to the container through the local machine. + + * - ``-v PATHx:/mnt/data-x`` + - Binds the storage volume ``PATH`` on the local machine to the ``/mnt/data-x`` path on the container. + Replace this value with the full path to each sequential storage volume or folder on the local machine. + For example: + + Linux or MacOS + ``/mnt/data-1/`` + + Windows + ``D:\data\`` + + Include additional ``-v`` parameters such that one mount exists for each drive specified to the :envvar:`MINIO_VOLUMES` value in the environment file. + + * - ``-v /etc/default/minio:/etc/config.env`` + - Mounts the environment file created in the previous step to the ``/etc/config.env`` path on the Container. + For Windows hosts, specify the Windows-style path ``-v C:\minio\config:/etc/config.env``. + + The MinIO Server uses this environment file for configuration. + + * - ``-e "MINIO_CONFIG_ENV_FILE=/etc/config.env"`` + - Sets a MinIO environment variable pointing to the container-mounted path of the environment file. + + * - ``--name "minio_local"`` + - Sets a custom name for the container. + Omit this value to allow Podman/Docker to automatically generate a container name. + You can replace this value to best reflect your requirements. + + * - ``minio server --console-address ":9090"`` + - Starts the MinIO server using the ``minio:minio`` image pulled from an earlier step. + The :mc:`minio server --console-address ":9090" ` option directs the server to set a static port for the MinIO Console Web Interface. + This option is *required* for containerized environments. + + If you modify this value, ensure you set the proper port mapping using the ``-p`` flag to Podman/Docker to ensure traffic forwarding between the local host and the container. + +4) Validate the Container Status +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/container/common-deploy.rst + :start-after: start-common-deploy-validate-container-status + :end-before: end-common-deploy-validate-container-status + +.. code-block:: none + + Status: 1 Online, 0 Offline. + API: http://10.0.2.100:9000 http://127.0.0.1:9000 + RootUser: myminioadmin + RootPass: minio-secret-key-change-me + Console: http://10.0.2.100:9090 http://127.0.0.1:9090 + RootUser: myminioadmin + RootPass: minio-secret-key-change-me + + Command-line: https://docs.min.io/docs/minio-client-quickstart-guide + $ mc alias set myminio http://10.0.2.100:9000 myminioadmin minio-secret-key-change-me + + Documentation: https://docs.min.io + +.. admonition:: Container Networks May Not Be Accessible Outside of the Host + + The ``API`` and ``CONSOLE`` blocks may include the network interfaces for the container. + Clients outside of the container network cannot access the MinIO API or Console using these addresses. + + External access requires using a network address for the container host machine and assumes the host firewall allows access to the related ports (``9000`` and ``9090`` in the examples). + +5) Connect to the MinIO Service +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/container/common-deploy.rst + :start-after: start-common-deploy-connect-to-minio-service + :end-before: end-common-deploy-connect-to-minio-service diff --git a/source/includes/container/steps-deploy-minio-single-node-single-drive.rst b/source/includes/container/steps-deploy-minio-single-node-single-drive.rst new file mode 100644 index 00000000..b612b8f1 --- /dev/null +++ b/source/includes/container/steps-deploy-minio-single-node-single-drive.rst @@ -0,0 +1,152 @@ +1) Pull the Latest Stable Image of MinIO +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/container/common-deploy.rst + :start-after: start-common-deploy-pull-latest-minio-image + :end-before: end-common-deploy-pull-latest-minio-image + +2) Create the Environment Variable File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/common/common-deploy.rst + :start-after: start-common-deploy-create-environment-file-single-drive + :end-before: end-common-deploy-create-environment-file-single-drive + +3) Create and Run the Container +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Select the container management interface of your choice for the relevant command syntax. + +.. tab-set:: + + .. tab-item:: Podman + + Copy the command to a text file for further modification. + + .. code-block:: shell + :class: copyable + + podman run -dt \ + -p 9000:9000 -p 9090:9090 \ + -v PATH:/data/minio \ + -v /etc/default/minio:/etc/config.env \ + -e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \ + --name "minio_local" \ + minio server --console-address ":9090" + + Specify any other :podman-docs:`options ` to ``podman run`` as necessary for your local environment. + + .. tab-item:: Docker + + Copy the command to a text file for further modification. + + .. code-block:: shell + :class: copyable + + docker run -dt \ + -p 9000:9000 -p 9090:9090 \ + -v PATH:/data/minio \ + -v /etc/default/minio:/etc/config.env \ + -e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \ + --name "minio_local" \ + minio server --console-address ":9090" + + Specify any other `options `__ to ``docker run`` as necessary for your local environment. + + For running Docker in Rootless mode, you may need to set the following additional Docker CLI options: + + Linux + ``--user $(id -u):$(id -g)`` - directs the container to run as the currently logged in user. + + Windows + ``--security-opt "credentialspec=file://path/to/file.json"`` - directs the container to run using a Windows `Group Managed Service Account `_. + +The following table describes each line of the command and provides additional configuration instructions: + +.. list-table:: + :header-rows: 1 + :widths: 40 60 + :width: 100% + + * - Line + - Description + + * - | ``podman run -dt`` + | ``docker run -dt`` + - Directs Podman/Docker to create and start the container as a detached (``-d``) background process with a pseudo-TTY (``-t``). + This allows the container to run in the background with an open TTY for bash-like access. + + * - ``-p 9000:9000 -p 9090:9090`` + - Binds the ports ``9000`` and ``9090`` on the local machine to the same ports on the container. + This allows access to the container through the local machine. + + * - ``-v PATH:/data/minio`` + - Binds the storage volume ``PATH`` on the local machine to the ``/data`` path on the container. + Replace this value with the full path to a storage volume or folder on the local machine. + For example: + + Linux or MacOS + ``~/minio/data/`` + + Windows + ``C:\minio\data`` + + * - ``-v /etc/default/minio:/etc/config.env`` + - Mounts the environment file created in the previous step to the ``/etc/config.env`` path on the Container. + For Windows hosts, specify the Windows-style path ``-v C:\minio\config:/etc/config.env``. + + The MinIO Server uses this environment file for configuration. + + * - ``-e "MINIO_CONFIG_ENV_FILE=/etc/config.env"`` + - Sets a MinIO environment variable pointing to the container-mounted path of the environment file. + + * - ``--name "minio_local"`` + - Sets a custom name for the container. + Omit this value to allow Podman/Docker to automatically generate a container name. + You can replace this value to best reflect your requirements. + + * - ``minio server --console-address ":9090"`` + - Starts the MinIO server using the ``minio:minio`` image pulled from an earlier step. + The :mc:`minio server --console-address ":9090" ` option directs the server to set a static port for the MinIO Console Web Interface. + This option is *required* for containerized environments. + + If you modify this value, ensure you set the proper port mapping using the ``-p`` flag to Podman/Docker to ensure traffic forwarding between the local host and the container. + +Once you have applied any further customizations to the command, run it in your preferred terminal or shell environment. +The command should return a unique ID for the created container. + +4) Validate the Container Status +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/container/common-deploy.rst + :start-after: start-common-deploy-validate-container-status + :end-before: end-common-deploy-validate-container-status + +.. code-block:: shell + + Status: 1 Online, 0 Offline. + API: http://10.0.2.100:9000 http://127.0.0.1:9000 + RootUser: myminioadmin + RootPass: minio-secret-key-change-me + Console: http://10.0.2.100:9090 http://127.0.0.1:9090 + RootUser: myminioadmin + RootPass: minio-secret-key-change-me + + Command-line: https://docs.min.io/docs/minio-client-quickstart-guide + $ mc alias set myminio http://10.0.2.100:9000 myminioadmin minio-secret-key-change-me + + Documentation: https://docs.min.io + +.. admonition:: Container Networks May Not Be Accessible Outside of the Host + + The ``API`` and ``CONSOLE`` blocks may include the network interfaces for the container. + Clients outside of the container network cannot access the MinIO API or Console using these addresses. + + External access requires using a network address for the container host machine and assumes the host firewall allows access to the related ports (``9000`` and ``9090`` in the examples). + +5) Connect to the MinIO Service +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/container/common-deploy.rst + :start-after: start-common-deploy-connect-to-minio-service + :end-before: end-common-deploy-connect-to-minio-service diff --git a/source/includes/linux/common-installation.rst b/source/includes/linux/common-installation.rst index 4e8fbdcc..13a25943 100644 --- a/source/includes/linux/common-installation.rst +++ b/source/includes/linux/common-installation.rst @@ -63,7 +63,6 @@ The following example uses the ``~/minio-data`` folder: mkdir ~/minio-data minio server ~/minio-data --console-address ":9090" - The :mc:`minio server` process prints its output to the system console, similar to the following: diff --git a/source/includes/linux/steps-deploy-minio-single-node-multi-drive.rst b/source/includes/linux/steps-deploy-minio-single-node-multi-drive.rst new file mode 100644 index 00000000..49a0d3a6 --- /dev/null +++ b/source/includes/linux/steps-deploy-minio-single-node-multi-drive.rst @@ -0,0 +1,56 @@ +1) Download the MinIO Server +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/linux/common-installation.rst + :start-after: start-install-minio-binary-desc + :end-before: end-install-minio-binary-desc + +2) Create the ``systemd`` Service File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/linux/common-installation.rst + :start-after: start-install-minio-systemd-desc + :end-before: end-install-minio-systemd-desc + +3) Create the Environment Variable File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/common/common-deploy.rst + :start-after: start-common-deploy-create-environment-file-multi-drive + :end-before: end-common-deploy-create-environment-file-multi-drive + +4) Start the MinIO Service +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Issue the following command on the local host to start the MinIO |SNSD| deployment as a service: + +.. include:: /includes/linux/common-installation.rst + :start-after: start-install-minio-start-service-desc + :end-before: end-install-minio-start-service-desc + +The ``journalctl`` output should resemble the following: + +.. code-block:: shell + + Status: 1 Online, 0 Offline. + API: http://192.168.2.100:9000 http://127.0.0.1:9000 + RootUser: myminioadmin + RootPass: minio-secret-key-change-me + Console: http://192.168.2.100:9090 http://127.0.0.1:9090 + RootUser: myminioadmin + RootPass: minio-secret-key-change-me + + Command-line: https://docs.min.io/docs/minio-client-quickstart-guide + $ mc alias set myminio http://10.0.2.100:9000 myminioadmin minio-secret-key-change-me + + Documentation: https://docs.min.io + +The ``API`` block lists the network interfaces and port on which clients can access the MinIO S3 API. +The ``Console`` block lists the network interfaces and port on which clients can access the MinIO Web Console. + +5) Connect to the MinIO Service +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/common/common-deploy.rst + :start-after: start-common-deploy-connect-to-minio-deployment + :end-before: end-common-deploy-connect-to-minio-deployment \ No newline at end of file diff --git a/source/includes/linux/steps-deploy-minio-single-node-single-drive.rst b/source/includes/linux/steps-deploy-minio-single-node-single-drive.rst new file mode 100644 index 00000000..769d3d8d --- /dev/null +++ b/source/includes/linux/steps-deploy-minio-single-node-single-drive.rst @@ -0,0 +1,56 @@ +1) Download the MinIO Server +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/linux/common-installation.rst + :start-after: start-install-minio-binary-desc + :end-before: end-install-minio-binary-desc + +2) Create the ``systemd`` Service File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/linux/common-installation.rst + :start-after: start-install-minio-systemd-desc + :end-before: end-install-minio-systemd-desc + +3) Create the Environment Variable File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/common/common-deploy.rst + :start-after: start-common-deploy-create-environment-file-single-drive + :end-before: end-common-deploy-create-environment-file-single-drive + +4) Start the MinIO Service +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Issue the following command on the local host to start the MinIO |SNSD| deployment as a service: + +.. include:: /includes/linux/common-installation.rst + :start-after: start-install-minio-start-service-desc + :end-before: end-install-minio-start-service-desc + +The ``journalctl`` output should resemble the following: + +.. code-block:: shell + + Status: 1 Online, 0 Offline. + API: http://192.168.2.100:9000 http://127.0.0.1:9000 + RootUser: myminioadmin + RootPass: minio-secret-key-change-me + Console: http://192.168.2.100:9090 http://127.0.0.1:9090 + RootUser: myminioadmin + RootPass: minio-secret-key-change-me + + Command-line: https://docs.min.io/docs/minio-client-quickstart-guide + $ mc alias set myminio http://10.0.2.100:9000 myminioadmin minio-secret-key-change-me + + Documentation: https://docs.min.io + +The ``API`` block lists the network interfaces and port on which clients can access the MinIO S3 API. +The ``Console`` block lists the network interfaces and port on which clients can access the MinIO Web Console. + +5) Connect to the MinIO Service +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/common/common-deploy.rst + :start-after: start-common-deploy-connect-to-minio-deployment + :end-before: end-common-deploy-connect-to-minio-deployment diff --git a/source/includes/macos/common-installation.rst b/source/includes/macos/common-installation.rst index 89d62c5a..adb1a22a 100644 --- a/source/includes/macos/common-installation.rst +++ b/source/includes/macos/common-installation.rst @@ -23,23 +23,25 @@ .. tab-item:: Binary - arm64 - Open a Terminal, then use the following commands to download the standalone MinIO server for MacOS and make it executable. + Open a Terminal, then use the following commands to download the latest stable MinIO binary, set it to executable, and install it to the system ``$PATH``: .. code-block:: shell :class: copyable curl -O https://dl.min.io/server/minio/release/darwin-arm64/minio - chmod +x minio + chmod +x minio + sudo mv ./minio /usr/local/bin/ .. tab-item:: Binary - amd64 - Open a Terminal, then use the following commands to download the standalone MinIO server for MacOS and make it executable. + Open a Terminal, then use the following commands to download the latest stable MinIO binary, set it to executable, and install it to the system ``$PATH``: .. code-block:: shell :class: copyable curl -O https://dl.min.io/server/minio/release/darwin-amd64/minio chmod +x minio + sudo mv ./minio /usr/local/bin/ .. end-install-minio-binary-desc @@ -51,27 +53,25 @@ If desired, you can replace ``~/data`` with another location to which the user h .. code-block:: shell :class: copyable - ~/.minio server ~/data --console-address :9090 - -If you installed with Homebrew, do not include the ``~/`` at the beginning of the command. - -The :mc:`minio server` process prints its output to the system console, similar to the following: + export MINIO_CONFIG_ENV_FILE=/etc/default/minio + minio server --console-address :9090 .. code-block:: shell - API: http://192.0.2.10:9000 http://127.0.0.1:9000 - RootUser: minioadmin - RootPass: minioadmin - - Console: http://192.0.2.10:9090 http://127.0.0.1:9090 - RootUser: minioadmin - RootPass: minioadmin + Status: 1 Online, 0 Offline. + API: http://192.168.2.100:9000 http://127.0.0.1:9000 + RootUser: myminioadmin + RootPass: minio-secret-key-change-me + Console: http://192.168.2.100:9090 http://127.0.0.1:9090 + RootUser: myminioadmin + RootPass: minio-secret-key-change-me Command-line: https://docs.min.io/docs/minio-client-quickstart-guide - $ mc alias set myminio http://192.0.2.10:9000 minioadmin minioadmin + $ mc alias set myminio http://10.0.2.100:9000 myminioadmin minio-secret-key-change-me Documentation: https://docs.min.io - WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables. +The ``API`` block lists the network interfaces and port on which clients can access the MinIO S3 API. +The ``Console`` block lists the network interfaces and port on which clients can access the MinIO Web Console. .. end-run-minio-binary-desc \ No newline at end of file diff --git a/source/includes/macos/steps-deploy-minio-single-node-multi-drive.rst b/source/includes/macos/steps-deploy-minio-single-node-multi-drive.rst new file mode 100644 index 00000000..90eed47d --- /dev/null +++ b/source/includes/macos/steps-deploy-minio-single-node-multi-drive.rst @@ -0,0 +1,30 @@ +1) Download the MinIO Server +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/macos/common-installation.rst + :start-after: start-install-minio-binary-desc + :end-before: end-install-minio-binary-desc + +2) Create the Environment Variable File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/common/common-deploy.rst + :start-after: start-common-deploy-create-environment-file-multi-drive + :end-before: end-common-deploy-create-environment-file-multi-drive + +3) Start the MinIO Deployment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Issue the following command on the local host to start the MinIO |SNSD| deployment as a foreground process. +You must keep the shell or terminal session open to keep the process running. + +.. include:: /includes/macos/common-installation.rst + :start-after: start-run-minio-binary-desc + :end-before: start-run-minio-binary-desc + +4) Connect to the MinIO Deployment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/common/common-deploy.rst + :start-after: start-common-deploy-connect-to-minio-deployment + :end-before: end-common-deploy-connect-to-minio-deployment \ No newline at end of file diff --git a/source/includes/macos/steps-deploy-minio-single-node-single-drive.rst b/source/includes/macos/steps-deploy-minio-single-node-single-drive.rst new file mode 100644 index 00000000..6fa74523 --- /dev/null +++ b/source/includes/macos/steps-deploy-minio-single-node-single-drive.rst @@ -0,0 +1,30 @@ +1) Download the MinIO Server +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/macos/common-installation.rst + :start-after: start-install-minio-binary-desc + :end-before: end-install-minio-binary-desc + +2) Create the Environment Variable File +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/common/common-deploy.rst + :start-after: start-common-deploy-create-environment-file-single-drive + :end-before: end-common-deploy-create-environment-file-single-drive + +3) Start the MinIO Deployment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Issue the following command on the local host to start the MinIO |SNSD| deployment as a foreground process. +You must keep the shell or terminal session open to keep the process running. + +.. include:: /includes/macos/common-installation.rst + :start-after: start-run-minio-binary-desc + :end-before: end-run-minio-binary-desc + +4) Connect to the MinIO Deployment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: /includes/common/common-deploy.rst + :start-after: start-common-deploy-connect-to-minio-deployment + :end-before: end-common-deploy-connect-to-minio-deployment diff --git a/source/includes/windows/steps-deploy-minio-single-node-single-drive.rst b/source/includes/windows/steps-deploy-minio-single-node-single-drive.rst new file mode 100644 index 00000000..e69de29b diff --git a/source/index.rst b/source/index.rst index 4372c7a2..5ff05059 100644 --- a/source/index.rst +++ b/source/index.rst @@ -10,7 +10,7 @@ MinIO High Performance Object Storage MinIO is a high performance object storage solution that provides an Amazon Web Services S3-compatible API and supports all core S3 features. -MinIO is built to anywhere - public or private cloud, baremetal infrastructure, orchestrated environments, and edge infrastructure. +MinIO is built to deploy anywhere - public or private cloud, baremetal infrastructure, orchestrated environments, and edge infrastructure. .. cond:: linux @@ -28,6 +28,10 @@ MinIO is built to anywhere - public or private cloud, baremetal infrastructure, This site documents Operations, Administration, and Development of MinIO deployments on Kubernetes platform. +.. cond:: container + + This site documents Operations, Administration, and Development of MinIO deployments on Containers. + This documentation targets the latest stable version of MinIO: |minio-tag|. MinIO is released under `GNU Affero General Public License v3.0 @@ -54,6 +58,10 @@ and non-protected. .. include:: /includes/k8s/quickstart.rst +.. cond:: container + + .. include:: /includes/container/quickstart.rst + Licensing --------- @@ -105,8 +113,8 @@ without validating their usage do so at their own risk. /reference/minio-mc-admin /reference/kubectl-minio-plugin /glossary - -.. cond:: linux or macos or windows + +.. cond:: linux or macos or windows or container .. toctree:: :titlesonly: diff --git a/source/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.rst b/source/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.rst index 491a89c8..619fa646 100644 --- a/source/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.rst +++ b/source/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.rst @@ -1,4 +1,5 @@ .. _deploy-minio-distributed: +.. _minio-mnmd: ==================================== Deploy MinIO: Multi-Node Multi-Drive diff --git a/source/operations/install-deploy-manage/deploy-minio-single-node-multi-drive.rst b/source/operations/install-deploy-manage/deploy-minio-single-node-multi-drive.rst index 15beaac8..58ef4e32 100644 --- a/source/operations/install-deploy-manage/deploy-minio-single-node-multi-drive.rst +++ b/source/operations/install-deploy-manage/deploy-minio-single-node-multi-drive.rst @@ -1,3 +1,5 @@ +.. _minio-snmd: + ===================================== Deploy MinIO: Single-Node Multi-Drive ===================================== @@ -6,13 +8,18 @@ Deploy MinIO: Single-Node Multi-Drive .. contents:: Table of Contents :local: - :depth: 1 + :depth: 2 -The procedures on this page cover deploying MinIO in :guilabel:`Standalone Mode` with multiple local volumes or folders. -This deployment supports and enables :ref:`erasure coding ` and its dependent features. +The procedures on this page cover deploying MinIO in a Single-Node Multi-Drive (SNMD) configuration. +This topology provides increased drive-level reliability and failover protection as compared to :ref:`Single-Node Single-Drive (SNSD) deployments `. -For extended development or production environments, *or* to access :ref:`advanced MinIO functionality ` deploy MinIO in :guilabel:`Distributed Mode`. -See :ref:`deploy-minio-distributed` for more information. +.. cond:: linux or macos or windows + + For production environments, MinIO strongly recommends deploying with the :ref:`Multi-Node Multi-Drive (Distributed) ` topology. + +.. cond:: container + + For production environments, MinIO strongly recommends using the MinIO Kubernetes Operator to deploy Multi-Node Multi-Drive (MNMD) or "Distributed" Tenants. Prerequisites ------------- @@ -40,331 +47,19 @@ Local JBOD Storage with Sequential Mounts For deployments that *require* using network-attached storage, use NFSv4 for best results. -Deploy Standalone Multi-Drive MinIO ------------------------------------ +Deploy Single-Node Multi-Drive MinIO +------------------------------------ -The following procedure deploys MinIO in :guilabel:`Standalone Mode` consisting -of a single MinIO server and a single drive or storage volume. Standalone -deployments are best suited for evaluation and initial development environments. - -.. admonition:: Network File System Volumes Break Consistency Guarantees - :class: note - - MinIO's strict **read-after-write** and **list-after-write** consistency - model requires local disk filesystems (``xfs``, ``ext4``, etc.). - - MinIO cannot provide consistency guarantees if the underlying storage - volumes are NFS or a similar network-attached storage volume. - - For deployments that *require* using network-attached storage, use - NFSv4 for best results. - -1) Download the MinIO Server -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The following procedure deploys MinIO consisting of a single MinIO server and a multiple drives or storage volumes. .. cond:: linux - .. include:: /includes/linux/common-installation.rst - :start-after: start-install-minio-binary-desc - :end-before: end-install-minio-binary-desc + .. include:: /includes/linux/steps-deploy-minio-single-node-multi-drive.rst .. cond:: macos - .. include:: /includes/macos/common-installation.rst - :start-after: start-install-minio-binary-desc - :end-before: end-install-minio-binary-desc + .. include:: /includes/macos/steps-deploy-minio-single-node-multi-drive.rst -2) Download and Run MinIO Server -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. cond:: container -.. cond:: linux - - .. include:: /includes/linux/common-installation.rst - :start-after: start-run-minio-binary-desc - :end-before: end-run-minio-binary-desc - -.. cond:: macos - - .. include:: /includes/macos/common-installation.rst - :start-after: start-run-minio-binary-desc - :end-before: end-run-minio-binary-desc - -3) Add TLS Certificates -~~~~~~~~~~~~~~~~~~~~~~~ - -MinIO supports enabling :ref:`Transport Layer Security (TLS) ` 1.2+ -automatically upon detecting a x.509 private key (``private.key``) and public -certificate (``public.crt``) in the MinIO ``certs`` directory: - -.. cond:: linux - - .. code-block:: shell - - ${HOME}/.minio/certs - -.. cond:: macos - - .. code-block:: shell - - ${HOME}/.minio/certs - -.. cond:: windows - - .. code-block:: shell - - ``%%USERPROFILE%%\.minio\certs`` - -You can override the certificate directory using the -:mc-cmd:`minio server --certs-dir` commandline argument. - -4) Run the MinIO Server with Non-Default Credentials -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Issue the following command to start the :mc:`minio server` with non-default -credentials. The table following this command breaks down each portion of the -command: - -.. code-block:: shell - :class: copyable - - export MINIO_ROOT_USER=minio-admin - export MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME - #export MINIO_SERVER_URL=https://minio.example.net - - minio server /mnt/disk-{1...4} --console-address ":9090" - -The example command breaks down as follows: - -.. list-table:: - :widths: 40 60 - :width: 100% - - * - :envvar:`MINIO_ROOT_USER` - - The access key for the :ref:`root ` user. - - Replace this value with a unique, random, and long string. - - * - :envvar:`MINIO_ROOT_PASSWORD` - - The corresponding secret key to use for the - :ref:`root ` user. - - Replace this value with a unique, random, and long string. - - * - :envvar:`MINIO_SERVER_URL` - - The URL hostname the MinIO Console uses for connecting to the MinIO - server. This variable is *required* if specifying TLS certificates - which **do not** contain the IP address of the MinIO Server host - as a :rfc:`Subject Alternative Name <5280#section-4.2.1.6>`. - Specify a hostname covered by one of the TLS certificate SAN entries. - -You may specify other :ref:`environment variables -` as required by your deployment. - -5) Open the MinIO Console -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Open your browser to the DNS name or IP address corresponding to the -container and the :ref:`MinIO Console ` port. For example, -``https://127.0.0.1:9090``. - -Log in with the :guilabel:`MINIO_ROOT_USER` and :guilabel:`MINIO_ROOT_PASSWORD` -from the previous step. - -.. image:: /images/minio-console/minio-console.png - :width: 600px - :alt: MinIO Console Dashboard displaying Monitoring Data - :align: center - -You can use the MinIO Console for general administration tasks like -Identity and Access Management, Metrics and Log Monitoring, or -Server Configuration. Each MinIO server includes its own embedded MinIO -Console. - -Applications should use the ``https://HOST-ADDRESS:9000`` to perform S3 -operations against the MinIO server. - -.. _deploy-minio-standalone-multidrive-container: - -Deploy Standalone Multi-Drive MinIO in a Container --------------------------------------------------- - -The following procedure deploys a single MinIO container with multiple drives. - -The procedure uses `Podman `__ for running the MinIO -container in rootfull mode. Configuring for rootless mode is out of scope for -this procedure. - -.. admonition:: Network File System Volumes Break Consistency Guarantees - :class: note - - MinIO's strict **read-after-write** and **list-after-write** consistency - model requires local disk filesystems (``xfs``, ``ext4``, etc.). - - MinIO cannot provide consistency guarantees if the underlying storage - volumes are NFS or a similar network-attached storage volume. - - For deployments that *require* using network-attached storage, use - NFSv4 for best results. - -1) Create a Configuration File to store Environment Variables -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -MinIO reads configuration values from environment variables. MinIO supports -reading these environment variables from ``/run/secrets/config.env``. Save -the ``config.env`` file as a :podman-docs:`Podman secret ` and -specify it as part of running the container. - -Create a file ``config.env`` using your preferred text editor and enter the -following environment variables: - -.. code-block:: shell - :class: copyable - - export MINIO_ROOT_USER=minio-admin - export MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME - #export MINIO_SERVER_URL=https://minio.example.net - -Create the Podman secret using the ``config.env`` file: - -.. code-block:: shell - :class: copyable - - sudo podman secret create config.env config.env - -The following table details each environment variable set in ``config.env``: - -.. list-table:: - :widths: 40 60 - :width: 100% - - * - :envvar:`MINIO_ROOT_USER` - - The access key for the :ref:`root ` user. - - Replace this value with a unique, random, and long string. - - * - :envvar:`MINIO_ROOT_PASSWORD` - - The corresponding secret key to use for the - :ref:`root ` user. - - Replace this value with a unique, random, and long string. - - * - :envvar:`MINIO_SERVER_URL` - - The URL hostname the MinIO Console uses for connecting to the MinIO - server. This variable is *required* if specifying TLS certificates - which **do not** contain the IP address of the MinIO Server host - as a :rfc:`Subject Alternative Name <5280#section-4.2.1.6>`. - Specify a hostname covered by one of the TLS certificate SAN entries. - -You may specify other :ref:`environment variables -` as required by your deployment. - -2) Add TLS Certificates -~~~~~~~~~~~~~~~~~~~~~~~ - -MinIO supports enabling :ref:`Transport Layer Security (TLS) ` 1.2+ -automatically upon detecting a x.509 private key (``private.key``) and public -certificate (``public.crt``) in the MinIO ``certs`` directory: - -Create a Podman secret pointing to the x.509 -``private.key`` and ``public.crt`` to use for the container. - -.. code-block:: shell - :class: copyable - - sudo podman secret create private.key /path/to/private.key - sudo podman secret create public.crt /path/to/public.crt - -You can optionally skip this step to deploy without TLS enabled. MinIO -strongly recommends *against* non-TLS deployments outside of early development. - -3) Run the MinIO Container -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Issue the following command to start the MinIO server in a container: - -.. code-block:: shell - :class: copyable - - sudo podman run -p 9000:9000 -p 9090:9090 \ - -v /mnt/disk-1:/mnt/disk-1 \ - -v /mnt/disk-2:/mnt/disk-2 \ - -v /mnt/disk-3:/mnt/disk-3 \ - -v /mnt/disk-4:/mnt/disk-4 \ - --secret private.key \ - --secret public.crt \ - --secret config.env \ - minio/minio server /mnt/disk-{1...4} \ - --console-address ":9090" \ - --certs-dir "/run/secrets/" - -The example command breaks down as follows: - -.. list-table:: - :widths: 40 60 - :width: 100% - - * - ``-p 9000:9000, -p 9090:9090`` - - Exposes the container internal port ``9000`` and ``9090`` through - the node port ``9000`` and ``9090`` respectively. - - Port ``9000`` is the default MinIO server listen port. - - Port ``9090`` is the :ref:`MinIO Console ` listen port - specified by the ``--console-address`` argument. - - * - ``-v /mnt/disk-n:/mnt/disk-n`` - - Mounts a local volume to the container at the specified path. - The ``/mnt/disk-{1...4}`` uses MinIO expansion notation to denote a sequential series of drives between 1 and 4 inclusive. - - * - ``--secret ...`` - - Mounts a secret to the container. The specified secrets correspond to - the following: - - - The x.509 private and public key the MinIO server process uses for - enabling TLS. - - - The ``config.env`` file from which MinIO looks for configuration - environment variables. - - * - ``/data`` - - The path to the container volume in which the ``minio`` server stores - all information related to the deployment. - - See :mc-cmd:`minio server DIRECTORIES` for more information on - configuring the backing storage for the :mc:`minio server` process. - - * - ``--console-address ":9090"`` - - The static port on which the embedded MinIO Console listens for incoming - connections. - - Omit to allow MinIO to select a dynamic port for the MinIO Console. - With dynamic port selection, browsers opening the root node hostname - ``https://minio1.example.com:9000`` are automatically redirected to the - Console. - - * - ``--cert /run/secrets/`` - - Directs the MinIO server to use the ``/run/secrets/`` folder for - retrieving x.509 certificates to use for enabling TLS. - -4) Open the MinIO Console -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Open your browser to the DNS name or IP address corresponding to the -container and the :ref:`MinIO Console ` port. For example, -``https://127.0.0.1:9090``. - -Log in with the :guilabel:`MINIO_ROOT_USER` and :guilabel:`MINIO_ROOT_PASSWORD` -from the previous step. - -.. image:: /images/minio-console/minio-console.png - :width: 600px - :alt: MinIO Console Dashboard displaying Monitoring Data - :align: center - -You can use the MinIO Console for general administration tasks like -Identity and Access Management, Metrics and Log Monitoring, or -Server Configuration. Each MinIO server includes its own embedded MinIO -Console. - -Applications should use the ``https://HOST-ADDRESS:9000`` to perform S3 -operations against the MinIO server. + .. include:: /includes/container/steps-deploy-minio-single-node-multi-drive.rst \ No newline at end of file diff --git a/source/operations/install-deploy-manage/deploy-minio-single-node-single-drive.rst b/source/operations/install-deploy-manage/deploy-minio-single-node-single-drive.rst index b9512026..732f6708 100644 --- a/source/operations/install-deploy-manage/deploy-minio-single-node-single-drive.rst +++ b/source/operations/install-deploy-manage/deploy-minio-single-node-single-drive.rst @@ -1,3 +1,5 @@ +.. _minio-snsd: + ====================================== Deploy MinIO: Single-Node Single-Drive ====================================== @@ -6,7 +8,7 @@ Deploy MinIO: Single-Node Single-Drive .. contents:: Table of Contents :local: - :depth: 1 + :depth: 2 The procedures on this page cover deploying MinIO in a Single-Node Single-Drive (SNSD) configuration for early development and evaluation. This mode was previously called :guilabel:`Standalone Mode` or 'filesystem' mode. @@ -15,9 +17,9 @@ Starting with :minio-release:`RELEASE.2022-06-02T02-11-04Z`, MinIO implements a This feature allows access to :ref:`erasure coding dependent features ` without the requirement of multiple drives. MinIO only starts in |SNSD| mode if the storage volume or path is empty *or* only contain files generated by a previous |SNSD| deployment. -See :ref:`minio-snsd-pre-existing-data ` for more complete documentation on MinIO startup behavior in |SNSD| mode. +See the documentation on :ref:`SNSD behavior with pre-existing data ` for more information. -For extended development or production environments, deploy MinIO in :guilabel:`Distributed Mode`. See :ref:`deploy-minio-distributed` for more information. +For extended development or production environments, deploy MinIO in :guilabel:`Distributed Mode`. See :ref:`deploy-minio-distributed ` for more information. .. _minio-snsd-pre-existing-data: @@ -67,352 +69,14 @@ The following procedure deploys MinIO consisting of a single MinIO server and a For deployments that *require* using network-attached storage, use NFSv4 for best results. -1) Download the MinIO Server -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - .. cond:: linux - .. include:: /includes/linux/common-installation.rst - :start-after: start-install-minio-binary-desc - :end-before: end-install-minio-binary-desc + .. include:: /includes/linux/steps-deploy-minio-single-node-single-drive.rst .. cond:: macos - .. include:: /includes/macos/common-installation.rst - :start-after: start-install-minio-binary-desc - :end-before: end-install-minio-binary-desc + .. include:: /includes/macos/steps-deploy-minio-single-node-single-drive.rst -2) Download and Run MinIO Server -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. cond:: container -.. cond:: linux - - .. include:: /includes/linux/common-installation.rst - :start-after: start-run-minio-binary-desc - :end-before: end-run-minio-binary-desc - -.. cond:: macos - - .. include:: /includes/macos/common-installation.rst - :start-after: start-run-minio-binary-desc - :end-before: end-run-minio-binary-desc - - -3) Add TLS Certificates -~~~~~~~~~~~~~~~~~~~~~~~ - -MinIO supports enabling :ref:`Transport Layer Security (TLS) ` 1.2+ -automatically upon detecting a x.509 private key (``private.key``) and public -certificate (``public.crt``) in the MinIO ``certs`` directory: - -.. cond:: linux - - .. code-block:: shell - - ${HOME}/.minio/certs - -.. cond:: macos - - .. code-block:: shell - - ${HOME}/.minio/certs - -.. cond:: windows - - .. code-block:: shell - - ``%%USERPROFILE%%\.minio\certs`` - -You can override the certificate directory using the -:mc-cmd:`minio server --certs-dir` commandline argument. - -4) Run the MinIO Server with Non-Default Credentials -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Issue the following command to start the :mc:`minio server` with non-default -credentials. The table following this command breaks down each portion of the -command: - -.. cond:: linux - - .. code-block:: shell - :class: copyable - - export MINIO_ROOT_USER=minio-admin - export MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME - #export MINIO_SERVER_URL=https://minio.example.net - - minio server /data --console-address ":9090" - -.. cond:: macos - - .. code-block:: shell - :class: copyable - - export MINIO_ROOT_USER=minio-admin - export MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME - #export MINIO_SERVER_URL=https://minio.example.net - - minio server /data --console-address ":9090" - -.. cond:: windows - - .. code-block:: powershell - :class: copyable - - PS C:\minio> MINIO_ROOT_USER = 'minio-admin' - PS C:\minio> MINIO_ROOT_PASSWORD = 'minio-secret-key-CHANGE-ME' - PS C:\minio> MINIO_SERVER_URL = 'https://minio.example.net' - -The example command breaks down as follows: - -.. list-table:: - :widths: 40 60 - :width: 100% - - * - :envvar:`MINIO_ROOT_USER` - - The access key for the :ref:`root ` user. - - Replace this value with a unique, random, and long string. - - * - :envvar:`MINIO_ROOT_PASSWORD` - - The corresponding secret key to use for the - :ref:`root ` user. - - Replace this value with a unique, random, and long string. - - * - :envvar:`MINIO_SERVER_URL` - - The URL hostname the MinIO Console uses for connecting to the MinIO - server. This variable is *required* if specifying TLS certificates - which **do not** contain the IP address of the MinIO Server host - as a :rfc:`Subject Alternative Name <5280#section-4.2.1.6>`. - Specify a hostname covered by one of the TLS certificate SAN entries. - - * - ``/data`` - - The path to each disk on the host machine. - - See :mc-cmd:`minio server DIRECTORIES` for more information on - configuring the backing storage for the :mc:`minio server` process. - - MinIO writes objects to the specified directory as is and without - :ref:`minio-erasure-coding`. Any other application accessing that - directory can read and modify stored objects. - - * - ``--console-address ":9090"`` - - The static port on which the embedded MinIO Console listens for incoming - connections. - - Omit to allow MinIO to select a dynamic port for the MinIO Console. - With dynamic port selection, browsers opening the root node hostname - ``https://minio1.example.com:9000`` are automatically redirected to the - Console. - -You may specify other :ref:`environment variables -` as required by your deployment. - -5) Open the MinIO Console -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Open your browser to the DNS name or IP address corresponding to the -container and the :ref:`MinIO Console ` port. For example, -``https://127.0.0.1:9090``. - -Log in with the :guilabel:`MINIO_ROOT_USER` and :guilabel:`MINIO_ROOT_PASSWORD` -from the previous step. - -.. image:: /images//minio-console/minio-console.png - :width: 600px - :alt: MinIO Console Dashboard displaying Monitoring Data - :align: center - -You can use the MinIO Console for general administration tasks like -Identity and Access Management, Metrics and Log Monitoring, or -Server Configuration. Each MinIO server includes its own embedded MinIO -Console. - -Applications should use the ``https://HOST-ADDRESS:9000`` to perform S3 -operations against the MinIO server. - -.. _deploy-minio-standalone-container: - -Deploy Containerized Single-Node Single-Drive MinIO ---------------------------------------------------- - -The following procedure deploys a single MinIO container with a single drive. - -The procedure uses `Podman `__ for running the MinIO -container in rootfull mode. Configuring for rootless mode is out of scope for -this procedure. - -.. admonition:: Network File System Volumes Break Consistency Guarantees - :class: note - - MinIO's strict **read-after-write** and **list-after-write** consistency - model requires local disk filesystems (``xfs``, ``ext4``, etc.). - - MinIO cannot provide consistency guarantees if the underlying storage - volumes are NFS or a similar network-attached storage volume. - - For deployments that *require* using network-attached storage, use - NFSv4 for best results. - -1) Create a Configuration File to store Environment Variables -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -MinIO reads configuration values from environment variables. MinIO supports -reading these environment variables from ``/run/secrets/config.env``. Save -the ``config.env`` file as a :podman-docs:`Podman secret ` and -specify it as part of running the container. - -Create a file ``config.env`` using your preferred text editor and enter the -following environment variables: - -.. code-block:: shell - :class: copyable - - export MINIO_ROOT_USER=minio-admin - export MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME - #export MINIO_SERVER_URL=https://minio.example.net - -Create the Podman secret using the ``config.env`` file: - -.. code-block:: shell - :class: copyable - - sudo podman secret create config.env config.env - -The following table details each environment variable set in ``config.env``: - -.. list-table:: - :widths: 40 60 - :width: 100% - - * - :envvar:`MINIO_ROOT_USER` - - The access key for the :ref:`root ` user. - - Replace this value with a unique, random, and long string. - - * - :envvar:`MINIO_ROOT_PASSWORD` - - The corresponding secret key to use for the - :ref:`root ` user. - - Replace this value with a unique, random, and long string. - - * - :envvar:`MINIO_SERVER_URL` - - The URL hostname the MinIO Console uses for connecting to the MinIO - server. This variable is *required* if specifying TLS certificates - which **do not** contain the IP address of the MinIO Server host - as a :rfc:`Subject Alternative Name <5280#section-4.2.1.6>`. - Specify a hostname covered by one of the TLS certificate SAN entries. - - - -You may specify other :ref:`environment variables -` as required by your deployment. - -2) Add TLS Certificates -~~~~~~~~~~~~~~~~~~~~~~~ - -MinIO supports enabling :ref:`Transport Layer Security (TLS) ` 1.2+ -automatically upon detecting a x.509 private key (``private.key``) and public -certificate (``public.crt``) in the MinIO ``certs`` directory: - -Create a Podman secret pointing to the x.509 -``private.key`` and ``public.crt`` to use for the container. - -.. code-block:: shell - :class: copyable - - sudo podman secret create private.key /path/to/private.key - sudo podman secret create public.crt /path/to/public.crt - -You can optionally skip this step to deploy without TLS enabled. MinIO -strongly recommends *against* non-TLS deployments outside of early development. - -3) Run the MinIO Container -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Issue the following command to start the MinIO server in a container: - -.. code-block:: shell - :class: copyable - - sudo podman run -p 9000:9000 -p 9090:9090 \ - -v /data:/data \ - --secret private.key \ - --secret public.crt \ - --secret config.env \ - minio/minio server /data \ - --console-address ":9090" \ - --certs-dir "/run/secrets/" - -The example command breaks down as follows: - -.. list-table:: - :widths: 40 60 - :width: 100% - - * - ``-p 9000:9000, -p 9090:9090`` - - Exposes the container internal port ``9000`` and ``9090`` through - the node port ``9000`` and ``9090`` respectively. - - Port ``9000`` is the default MinIO server listen port. - - Port ``9090`` is the :ref:`MinIO Console ` listen port - specified by the ``--console-address`` argument. - - * - ``-v /data:/data`` - - Mounts a local volume to the container at the specified path. - - * - ``--secret ...`` - - Mounts a secret to the container. The specified secrets correspond to - the following: - - - The x.509 private and public key the MinIO server process uses for - enabling TLS. - - - The ``config.env`` file from which MinIO looks for configuration - environment variables. - - * - ``/data`` - - The path to the container volume in which the ``minio`` server stores - all information related to the deployment. - - See :mc-cmd:`minio server DIRECTORIES` for more information on - configuring the backing storage for the :mc:`minio server` process. - - * - ``--console-address ":9090"`` - - The static port on which the embedded MinIO Console listens for incoming - connections. - - Omit to allow MinIO to select a dynamic port for the MinIO Console. - With dynamic port selection, browsers opening the root node hostname - ``https://minio1.example.com:9000`` are automatically redirected to the - Console. - - * - ``--cert /run/secrets/`` - - Directs the MinIO server to use the ``/run/secrets/`` folder for - retrieving x.509 certificates to use for enabling TLS. - -4) Open the MinIO Console -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Open your browser to the DNS name or IP address corresponding to the -container and the :ref:`MinIO Console ` port. For example, -``https://127.0.0.1:9090``. - -Log in with the :guilabel:`MINIO_ROOT_USER` and :guilabel:`MINIO_ROOT_PASSWORD` -from the previous step. - -.. image:: /images//minio-console/minio-console.png - :width: 600px - :alt: MinIO Console Dashboard displaying Monitoring Data - :align: center - -You can use the MinIO Console for general administration tasks like -Identity and Access Management, Metrics and Log Monitoring, or -Server Configuration. Each MinIO server includes its own embedded MinIO -Console. - -Applications should use the ``https://HOST-ADDRESS:9000`` to perform S3 -operations against the MinIO server. + .. include:: /includes/container/steps-deploy-minio-single-node-single-drive.rst \ No newline at end of file diff --git a/source/operations/installation.rst b/source/operations/installation.rst index 0e685718..7b7d32a7 100644 --- a/source/operations/installation.rst +++ b/source/operations/installation.rst @@ -2,6 +2,10 @@ .. include:: /includes/common/installation.rst +.. cond:: container + + .. include:: /includes/container/installation.rst + .. cond:: k8s .. include:: /includes/k8s/deploy-operator.rst \ No newline at end of file diff --git a/source/reference/minio-server/minio-server.rst b/source/reference/minio-server/minio-server.rst index ceef33f9..a8bf21d0 100644 --- a/source/reference/minio-server/minio-server.rst +++ b/source/reference/minio-server/minio-server.rst @@ -193,6 +193,21 @@ Environment Variables The :mc:`minio server` processes uses the following environment variables during startup to set configuration settings. +Core Configuration +~~~~~~~~~~~~~~~~~~ + +.. envvar:: MINIO_VOLUMES + + The directories or drives the :mc:`minio server` process uses as the + storage backend. + + Functionally equivalent to setting :mc-cmd:`minio server DIRECTORIES`. + Use this value when configuring MinIO to run using an environment file. + +.. envvar:: MINIO_CONFIG_ENV_FILE + + Specifies the full path to the file the MinIO server process uses for loading environment variables. + Root Credentials ~~~~~~~~~~~~~~~~