From e91e38a785a8aae8de3b57bf0b3f91d43a4b4b41 Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Wed, 17 Feb 2021 14:24:49 +0100 Subject: [PATCH 01/19] Add Coop Cloud post Closes https://git.autonomic.zone/autonomic-cooperative/autonomic.zone/issues/55. --- src/_posts/2021-02-16-coop-cloud.md | 81 ++++++++++++++++++++++++++++ src/assets/images/coop-cloud.png | Bin 0 -> 55951 bytes 2 files changed, 81 insertions(+) create mode 100644 src/_posts/2021-02-16-coop-cloud.md create mode 100644 src/assets/images/coop-cloud.png diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md new file mode 100644 index 0000000..73460c7 --- /dev/null +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -0,0 +1,81 @@ +--- +layout: post +title: The Cooperative Cloud +description: Free software infrastructure without re-inventing the wheel +image: coop-cloud.png +category: coop, cloud, docker, swarm, free-software +date: 2021-02-16 +--- + +At Autonomic, we've been using [Cloudron] to quickly and easily deploy free +software applications (Wordpress, Nextloud, Mediawiki, etc.) for our clients. +If you haven't heard of Cloudron, here is the short summary of what it does: it +provides infrastructure hosters like Autonomic with a simple to use web +interface for deploying hundreds of free software applications in a few clicks +of the mouse. + +Using a system like Cloudron has expanded our capacity to support more "on a +shoestring" grassroots organising because it reduces our initial starting +costs. This is the work that we feel is important to support even when there is +little funding to pay for that work. + +However, as time has gone on, we've had a few moments when we questioned our +reliance on Cloudron. + +- Parts the system officially [became proprietary] which was worrying but also + somewhat understandable from a funding perspective. + +- The work to package the available applications is done [entirely by + the Cloudron team itself] and doesn't re-use the existing rich ecosystem of + free software packaging work already going on. This seems unsustainable. + +- A growing fear of centralising a significant part of our offering on a + single business which may make decisions that could have a large impact on + our ability to provide services. + +As a result of these concerns, we tried to map out a few core principles of a +project which might work a lot like Cloudron but give us more guarantees that +we can depend on. We've started to call that the Cooperative Cloud. + +- The Coop Cloud should always be available under [copyleft licenses] to retain + the shared work as public property. This doesn't mean we can't pursue + commercial work but we can't rely on creating false scarcity to earn money. + +- The Coop Cloud doesn't re-invent the wheel. We aim is to work with existing + free software communities who are already packaging and publishing their + software (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on...). We + want to be involved in their community spaces and build bridges between + infrastructure, software development and end-users. + +- The Coop Cloud has democratic governance at the core of the project. We + want to work as much as possible with other cooperatives to build up good + decision making structures so we can all depend on this project. + +With those ideas in mind, we started to build something in the time we could +spare. We worked on a simple packaging format using existing [open standards] +to build the application catalogue. We wrote a command-line client which could +read the catalogue and deploy those applications. + +We can safely say the cooperative cloud project is currently alpha quality +software but it shows promise and signs of stability. We've already been +testing a sort of "dual power" strategy with some existing clients and we've +been seeing good results. We're happy to say that we're already partially +running operations on the Cooperative Cloud. + +If you want to learn more about the project, please read our documentation +where we explain the decisions we've made so far in more depth. What +technologies we're using, how we fit into the existing ecosystem, ways to +contribute, what applications are available and so on. + +> [cloud.autonomic.zone](https://cloud.autonomic.zone/) + +At this point, we'd like to invite other cooperatives to take a look at what +we're working on and come and have a chat with us. We think a common platform +for hosting free software infrastructure could make a big difference in terms +of what we're able to offer as a movement. + +[cloudron]: https://cloudron.io/ +[became proprietary]: https://forum.cloudron.io/topic/2862/why-not-make-cloudron-fully-open-source-again +[entirely by the cloudron team itself]: https://git.cloudron.io/cloudron +[copyleft licenses]: https://www.gnu.org/licenses/copyleft.en.html +[open standards]: https://compose-spec.io/ diff --git a/src/assets/images/coop-cloud.png b/src/assets/images/coop-cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..b7056d6b6757572e7fb735728010afd4f69dfbf2 GIT binary patch literal 55951 zcmb@udpy(s|32Qiq!Nl8S0PH0^LbJj5z!Hi%Gof)9A;E1gv}wO9C8X_!iLP~fDsX4 zYz}4QIBO1@%;EPOuh;wi`Fw8QKYxErW{2nDaX(zwb-x}(U$uZ7+%LL++qP{7O-&4~ zw{6>{xoz9_x_x_qzv%EB{SExX<6~m;VB0oc0q$da_fXjCwr$6^nHm~g4@#dUb{0F6 zk{KewGO7Drk5+sf@)nKAP?e)!yqYnIt;cxG2MP|-(0pHvVXjb%GvT60yS$bq2NfUfuK^!y#8z}&@ekFB+0yiFRT}_ke zOm-#Msh&9!${gL833sJgHY`7l$->8Ls!Db#zaz3QfNjYoDG9YMIP!=>FPNs?+mJRu z8e_1EFcS02lkUHkTS%^W_GqdHgyzat+PZy*v3e-F1Uu?7s=poV#Jaz9iLHJCm;1)K zv*&TjNDRIq3rbeQcgC{AA{#sV(C9L#eL=ogrR6M@xb4?r+(Oj;%|$Ty;BRQu@L@); z{bYH-eDZ*hWHP2%ib6hzbk`Ln{0?~6kYz(oqr?QuH@rnKt^_HDy+)m?tSMI{ySr0M zL}F6BXs#H(yx9Yl&7>&F>pEM@EAk9_eb&&KzMOWI<6UU0Jn;vD$DGak_88@<;S<^@ zKEHf?GYq672pOW0a5Eico6~O)s$mWkJ!D720k<+b$`ch!`$B%) z{2&yk?@C|pLdb4@IKn4 zb6=*i^c6OKq^`5d^lNT@-C#14&abCQN0Bf8)z@Du8!vVU>PQVLy|Ze8o6K?^t)w_7 zKJ8H}Ms0=&c`6=Xz0&VV=Y|ESRGvgych6D+uV;0x&&Y1jH&*r6_c|QkI)zSw+CsyU zslxZFlFlxF3H~Oxr_CQVgDPNqFV8TDBlI83{rL!-$RarHoxS9vVT%6MWq|2y_*J)_gT@aMHd*zZ7CZ$KOZ-qhKHZU$WhQS%Wx*@k$CU^hR##g6TTLss#X zDS>Tgksuu>x-NPvo%=?u4;>;H)$A7Frj*K?iB&ZPJ(lkBZ0$+Kg3?KOKEbUg<(r>e=i|8mInnD|1%r7N-ta_Xtry?mK`nKgIS^A+qY_@z# zwZ>pg@I>#ofIAVWIlhgXmu+T5?FZJsN3by`4plX9UtE*8lgrQr-oAG8W8CXN5725@ zPKoFOekrfC8RXG$yZC)1-&{SBa|SAbUHk2@zI0kvij&{Okq~H@Y1PhgML=DfuW|0V zb*>VdSqvx|!@p*7c4fe9L-GT*A!u<7GlFE4mK};Ae4d?rwDf%n>;pQ(jcvYWeO(ss z0Y7KXCB9+(XPW)%6(nBq0N+_6-IM~C1lJ(x{nWcxEJFAS5S;S@S;2oYMD*=AK;7bb z-kGA;~v+^n+L&TEqrO>i`0iU{?{n)-lPrI^>d9Tfw)`jRiZ${{y zpXcp_Mn2)^hE05K!A#C$mthFavdj_Am$2L}5-x^u3t#@G$hZOJ`>Som@l$Zqs6BB7tf9sSq2k7?=5&9n=zEDDPrP(`;RZa8pKq1h zlN9^-eCuTG6I0_{4KMr9nbLH&P`NNXdiabn9BD^MsD3`YtFS<#OW6)tHLDy1b#;e) z&6H?3NS|DO-!Rg9F}&Gm;csW%NhX#2@r=WQuz+5x4-7fQ9x^= zb2}W`|4{@ShiEHfyI*Wue~&ygReFZg)-h1biTo&`bL%-s4>(D>BmBvMU;Ib?U#miS z`l1V1FVj%7@%UWktRn$eY z0n@)uMms*h8_+6kS-zpiZFLb^;Ijl#kcp1*c&8+Ye|UNMPwNEc$L_5vmRo@Hyx%5t zN2lsn;RT@FX*rS6euh}}LRJL?D>1nY04Qc9DYEx7lOM)NE~Pny{rWIdq%XbMftj(Pvsnk@+p;Tx@YQ>)e616_#P*sr=r3>-uf&72b#pEvwqXk6&44A|{*(Wx zvY4cmsb4qm5BN+@DcLHN@ht;Ih-{Ryt@D~FU2eC7a9BFU5&-sb1+LzWfU%dQz9lXz ze|L4cQ&15M)6d1k#qwPztTD`2OPG(`M5Y`?fTX6(<fkdd4bDyLr!G=#aukcMe zPEvd3(%Ufkq1TO5%aiR@Mx)<@4BHA>!#n@FK`U*Iffk1i6pQu9^39kYX`glM8^3pj z?zVd47)TGmuRwig*{@myf0zXuZ)NOfoYWcM`dj4wpVuWIY2{9As%)4cGB4fXsT*M< ztdED(jg$hQky~?wRKu!RK>aYoS7MqPsQD}z+wVcwdAG_Ce=5S~c(lNH_7T&Mk&U^g zVnwKoSh~K%e$|ih&A1BPj4#`IVxdqNACpTlS?_-G+9TfBxTe*y{e0p zVqXCDz%=j8LES=m7O_y`Agj?H6bK|mVF!nXE{`pcI*(k~DpV0keKu~4K$F$U;AOS1 zS*0kK)p|T3Kd>*8?9Kt!$pga_@;VG;)KxksG{c^o3s;o3z}T^iuWxVHlZtE3wM$A^ z_B^y*0^>1KP%Akfki!}WK8nUHjTWIKfH>V+>Q@uU((;+1ZDymn3S*_q%0CMqHoFcy zBka%76N_oiwFOT6s)9{SyVs(UAxFI#lHwJMu|fHPpk5W?6^=*$`I5OqXp}$w0zS6U z6?fJb)8Zyl1Y;eX1lJ<^H|Cl!i)r|oGfKq9=j!zjQG24ZhURP(IFpowE_5>-7U~o@ zc;_ft_V>>%>LEuCTd{=e#SOOv!;jg)-+6_;c<)^bq)HU4l9XjpJaZ0DtuV%A*<(i5 z;RI|H3q`Q#sTZT)3J5*hTW?9862@e%GLa18(hZH}ZQN+=ynK3OT5iMo^f>5N$xuVG zb=XMs-!%Xlhu4p~Vm||zgj#ziv?@KN|+-NN+Sjm5&X zKQMXJEJ(nyV!jzTs0xbtbqkCwogq`ebiE@|b}>k1%cVt=zb3l2Kza@{fY0EON!@BB zQhV*W-Y^sL>4jjSi%R^^2^|i6c7D8@J*p%(joWIBkvoy zHE|1bCuYBnkot@~?w}HO3RsF+X_yxsQ9+!k^$Ya`p)oK2gHxPpa37WCAI3dw>^w^_ z$Ih4xxUB+B)&25cYfDwInYzeC6ykcPI#zH;NCwM@S2TQ*ZqM=zJw8j-d%4vp)IQw) z8Gm4FohnPYOo3~H+dKSZ;t_^GyO9iAX!C(4AOK3PjdsGH{a_)YKs^RB zA-Li_VWF{ZS!&?f@UkM5blC6Z78V=jk8efuZDD=o^dre~SBDFiB;PxKwn~Jn2AsUe zsH=+X<+cD!&(SVrYjUiRs$?&~MO-{EqeirDu+S%_lBJGlCsPTF>f<7g=6}emjm2yP z{%{5v{6KlQ&9J4J8eM>9cieTTlTaIP`=TPSRV#8SkZEl@LWcPpisEpH4kbp#_aY9$ zECrv^R-xF@B>|T6vLJ)zNMx2jVg8cY^aUAlzh6yphXV

ngb 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 z Date: Tue, 23 Feb 2021 12:44:35 +0200 Subject: [PATCH 02/19] Revisions to CoopCloud blog post --- src/_posts/2021-02-16-coop-cloud.md | 96 +++++++++++++---------------- 1 file changed, 44 insertions(+), 52 deletions(-) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md index 73460c7..4de9ee4 100644 --- a/src/_posts/2021-02-16-coop-cloud.md +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -7,75 +7,67 @@ category: coop, cloud, docker, swarm, free-software date: 2021-02-16 --- -At Autonomic, we've been using [Cloudron] to quickly and easily deploy free -software applications (Wordpress, Nextloud, Mediawiki, etc.) for our clients. -If you haven't heard of Cloudron, here is the short summary of what it does: it -provides infrastructure hosters like Autonomic with a simple to use web -interface for deploying hundreds of free software applications in a few clicks -of the mouse. +Running [free software] apps and infrastructure for ourselves and our clients is central to what we do at Autonomic. Now, after a year of work, we're stoked to share our "Cooperative Cloud" system with the world, to make it easier for others to join the party, ditch corporate spyware, and make their tools [sustainable, transparent and private]. -Using a system like Cloudron has expanded our capacity to support more "on a -shoestring" grassroots organising because it reduces our initial starting -costs. This is the work that we feel is important to support even when there is -little funding to pay for that work. +## Why a new tool? -However, as time has gone on, we've had a few moments when we questioned our -reliance on Cloudron. +We started out using [Cloudron], which provides a very simple-to-use web interface for deploying hundreds of free software apps like Nextcloud, Mediawiki, and Rocket.chat with a few clicks. -- Parts the system officially [became proprietary] which was worrying but also - somewhat understandable from a funding perspective. +Cloudron allowed us to radically reduce our initial and ongoing costs for services -- because we don't need to maintain a separate server for each service, or even manage app updates ourselves. So, we've been able to take on a lot more "solidarity clients": people doing important work, but on a shoestring, grassroots budget. -- The work to package the available applications is done [entirely by - the Cloudron team itself] and doesn't re-use the existing rich ecosystem of - free software packaging work already going on. This seems unsustainable. +As time has gone on, though, we've had a few moments when we questioned our reliance on Cloudron, and whether it was sustainable for us and for our clients: -- A growing fear of centralising a significant part of our offering on a - single business which may make decisions that could have a large impact on - our ability to provide services. +- Parts of the system officially [became proprietary] -- this was somewhat understandable given Cloudron's licensing model, but rang alarm bells for us about its long-term future. -As a result of these concerns, we tried to map out a few core principles of a -project which might work a lot like Cloudron but give us more guarantees that -we can depend on. We've started to call that the Cooperative Cloud. +- We realised that the work to package the available applications is done [entirely by the Cloudron team itself] and doesn't re-use the existing rich ecosystem of free software packaging work already going on. This seems like a big risk: if Cloudron goes under, someone would need to take on that huge, specific, and non-transferable packaging work, or we'd quickly be leaving ourselves and our clients running on outdated software. -- The Coop Cloud should always be available under [copyleft licenses] to retain - the shared work as public property. This doesn't mean we can't pursue - commercial work but we can't rely on creating false scarcity to earn money. +- Some aspects of Cloudron's architecture are getting in the way: requiring each app to be a single Docker image makes certain deployments hard-to-impossible (as far as we know, nobody has yet managed to get Mediawiki's visual editor working in Cloudron, for example), and not being able to delegate user management to specific groups has made it hard for us to use Cloudron's Single Sign On system with groups who are growing more users quickly. -- The Coop Cloud doesn't re-invent the wheel. We aim is to work with existing - free software communities who are already packaging and publishing their - software (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on...). We - want to be involved in their community spaces and build bridges between - infrastructure, software development and end-users. +We also have a general fear of centralising so much of our core business on a commercial entity, which could change its prices at any time and have a massive effect on our ability to operate. -- The Coop Cloud has democratic governance at the core of the project. We - want to work as much as possible with other cooperatives to build up good - decision making structures so we can all depend on this project. +## A New Hope -With those ideas in mind, we started to build something in the time we could -spare. We worked on a simple packaging format using existing [open standards] -to build the application catalogue. We wrote a command-line client which could -read the catalogue and deploy those applications. +So, around the end of 2019, we tried to map out a few core principles of a system which might work a lot like Cloudron, but give us more guarantees that we can depend on, which we've started calling the Cooperative Cloud (or "Coop Cloud" for short): -We can safely say the cooperative cloud project is currently alpha quality -software but it shows promise and signs of stability. We've already been -testing a sort of "dual power" strategy with some existing clients and we've -been seeing good results. We're happy to say that we're already partially -running operations on the Cooperative Cloud. +- Coop Cloud should always be available under [copyleft licenses] to retain the shared work as public property. This doesn't mean we can't pursue commercial work, but we can't rely on creating false scarcity to earn money. -If you want to learn more about the project, please read our documentation -where we explain the decisions we've made so far in more depth. What -technologies we're using, how we fit into the existing ecosystem, ways to -contribute, what applications are available and so on. +- Coop Cloud doesn't re-invent the wheel. We aim to work with existing free software communities who are already packaging and publishing their software. (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on...). We want to be involved in their community spaces and build bridges between infrastructure, software development and end-users. -> [cloud.autonomic.zone](https://cloud.autonomic.zone/) +- Coop Cloud has democratic governance at the core of the project. We want to collaborate as much as possible with other cooperatives to build up good decision-making structures, so we can all rely on this project into the future. -At this point, we'd like to invite other cooperatives to take a look at what -we're working on and come and have a chat with us. We think a common platform -for hosting free software infrastructure could make a big difference in terms -of what we're able to offer as a movement. +In our spare time (partly funded by income from working for our wonderful clients 😀) we've been putting the pieces together, and, after a year of work -- and two technical dead-ends -- we're ready to launch an alpha version of Cooperative Cloud to the public. +## Coop Cloud alpha + +Coop Cloud is a simple packaging format using existing [open standards] to build a catalogue of applications, and a command-line client to read the catalogue and deploy those applications: + +[screencast] + +If you'd like to learn more about Coop Cloud, please read [our documentation] -- where we explain the decisions we've made so far in more depth. What technologies we're using, how we fit into the existing ecosystem, ways to contribute, what applications are available and so on. + +You can also dive straight in by installing [`abra`, CoopCloud's command-line tool]. + +You can use Coop Cloud right now to deploy any of our [30+ applications] to your own Virtual Private Server, including Nextcloud for file-, calendar- and contact-sharing, Rocket.chat for instant messaging, Keycloak for Single Sign-On, Statping for service monitoring, and websites using Wordpress, Pelican, Jekyll, or static HTML. + +We've already been testing a sort of "dual power" strategy, using CoopCloud to run some of our own and our clients' infrastructure while continuing with Cloudron for the rest, and we're seeing promising stability. + +Apps deployed via CoopCloud have automatic SSL certificates, and many come with pre-configured e-mail, backups, or Single Sign-On options. + +Packaging new applications for CoopCloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes -- we managed to [make a CoopCloud version of the Matomo web analytics platform in about 20 minutes]. This architecture also means that nobody using CoopCloud is dependent on us for updates: when a new Wordpress update comes out, you can easily install it yourself, without waiting for us to update some arcane custom Docker image. + +At this point, we'd like to invite other cooperatives to take a look at what we're working on and come and have a chat with us. We think a common platform for hosting free software infrastructure could make a big difference in terms of what we're able to offer as a movement. + +If you're interested in getting involved with CoopCloud development, or if you'd like help trying out CoopCloud-hosted services for yourself or your organisation, please [get in touch]! + +[free software]: http://wikieducator.org/Libre +[sustainable, transparent and private]: /#core-values [cloudron]: https://cloudron.io/ [became proprietary]: https://forum.cloudron.io/topic/2862/why-not-make-cloudron-fully-open-source-again [entirely by the cloudron team itself]: https://git.cloudron.io/cloudron +[our documentation]: https://docs.cloud.autonomic.zone +[`abra`, CoopCloud's command-line tool]: https://git.autonomic.zone/coop-cloud/abra/ +[30+ applications]: https://git.autonomic.zone/coop-cloud/ +[get in touch]: mailto:helo@autonomic.zone [copyleft licenses]: https://www.gnu.org/licenses/copyleft.en.html [open standards]: https://compose-spec.io/ +[make a CoopCloud version of the Matomo web analytics platform in about 20 minutes]: https://docs.cloud.autonomic.zone/package/ \ No newline at end of file From 2d86a3ed5679b506a5882037a6b8291d59d3b4c0 Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Tue, 23 Feb 2021 13:49:27 +0100 Subject: [PATCH 03/19] Strip screencast placeholder and format --- src/_posts/2021-02-16-coop-cloud.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md index 4de9ee4..8842429 100644 --- a/src/_posts/2021-02-16-coop-cloud.md +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -29,7 +29,7 @@ We also have a general fear of centralising so much of our core business on a co So, around the end of 2019, we tried to map out a few core principles of a system which might work a lot like Cloudron, but give us more guarantees that we can depend on, which we've started calling the Cooperative Cloud (or "Coop Cloud" for short): -- Coop Cloud should always be available under [copyleft licenses] to retain the shared work as public property. This doesn't mean we can't pursue commercial work, but we can't rely on creating false scarcity to earn money. +- Coop Cloud should always be available under [copyleft licenses] to retain the shared work as public property. This doesn't mean we can't pursue commercial work, but we can't rely on creating false scarcity to earn money. - Coop Cloud doesn't re-invent the wheel. We aim to work with existing free software communities who are already packaging and publishing their software. (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on...). We want to be involved in their community spaces and build bridges between infrastructure, software development and end-users. @@ -39,9 +39,7 @@ In our spare time (partly funded by income from working for our wonderful client ## Coop Cloud alpha -Coop Cloud is a simple packaging format using existing [open standards] to build a catalogue of applications, and a command-line client to read the catalogue and deploy those applications: - -[screencast] +Coop Cloud is a simple packaging format using existing [open standards] to build a catalogue of applications, and a command-line client to read the catalogue and deploy those applications. If you'd like to learn more about Coop Cloud, please read [our documentation] -- where we explain the decisions we've made so far in more depth. What technologies we're using, how we fit into the existing ecosystem, ways to contribute, what applications are available and so on. @@ -65,9 +63,9 @@ If you're interested in getting involved with CoopCloud development, or if you'd [became proprietary]: https://forum.cloudron.io/topic/2862/why-not-make-cloudron-fully-open-source-again [entirely by the cloudron team itself]: https://git.cloudron.io/cloudron [our documentation]: https://docs.cloud.autonomic.zone -[`abra`, CoopCloud's command-line tool]: https://git.autonomic.zone/coop-cloud/abra/ +[`abra`, coopcloud's command-line tool]: https://git.autonomic.zone/coop-cloud/abra/ [30+ applications]: https://git.autonomic.zone/coop-cloud/ [get in touch]: mailto:helo@autonomic.zone [copyleft licenses]: https://www.gnu.org/licenses/copyleft.en.html [open standards]: https://compose-spec.io/ -[make a CoopCloud version of the Matomo web analytics platform in about 20 minutes]: https://docs.cloud.autonomic.zone/package/ \ No newline at end of file +[make a coopcloud version of the matomo web analytics platform in about 20 minutes]: https://docs.cloud.autonomic.zone/package/ From cc2425e1cde8519f4c2034d0012869e6019c9aed Mon Sep 17 00:00:00 2001 From: kawaiipunk Date: Tue, 23 Feb 2021 17:54:10 +0000 Subject: [PATCH 04/19] Lots of edits --- src/_posts/2021-02-16-coop-cloud.md | 46 +++++++++++++++++------------ 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md index 8842429..4dc5a0a 100644 --- a/src/_posts/2021-02-16-coop-cloud.md +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -7,53 +7,61 @@ category: coop, cloud, docker, swarm, free-software date: 2021-02-16 --- -Running [free software] apps and infrastructure for ourselves and our clients is central to what we do at Autonomic. Now, after a year of work, we're stoked to share our "Cooperative Cloud" system with the world, to make it easier for others to join the party, ditch corporate spyware, and make their tools [sustainable, transparent and private]. +Running [free software] apps and infrastructure for ourselves and our clients is central to what we do at Autonomic. Now, after a year of work, we're stoked to share our "Co-op Cloud" project with the world. We want to make it easier for others to join the party, ditch corporate spyware, and make their tools [sustainable, transparent and private]. ## Why a new tool? -We started out using [Cloudron], which provides a very simple-to-use web interface for deploying hundreds of free software apps like Nextcloud, Mediawiki, and Rocket.chat with a few clicks. +We started out using [Cloudron], which provides a very simple-to-use web interface for deploying free software apps like Nextcloud, Mediawiki, and Rocket.chat with only a few clicks. -Cloudron allowed us to radically reduce our initial and ongoing costs for services -- because we don't need to maintain a separate server for each service, or even manage app updates ourselves. So, we've been able to take on a lot more "solidarity clients": people doing important work, but on a shoestring, grassroots budget. +Cloudron allowed us to radically reduce our initial and ongoing server costs. We didn't need to maintain a separate server for each service and clients applications could share computing resources whilst containerisation was still allowing us meeting their data privacy needs. Consequently, we've been able to take on many more "solidarity clients", people doing important work, but on a shoestring budget. -As time has gone on, though, we've had a few moments when we questioned our reliance on Cloudron, and whether it was sustainable for us and for our clients: +As time has gone on, though, we've had a few moments when we questioned our reliance on Cloudron, and whether it was a sustainable choice for us and for our clients. We came to realise: -- Parts of the system officially [became proprietary] -- this was somewhat understandable given Cloudron's licensing model, but rang alarm bells for us about its long-term future. +- Core parts of the system officially [became proprietary] software. This rang alarm bells for us about its long-term future. -- We realised that the work to package the available applications is done [entirely by the Cloudron team itself] and doesn't re-use the existing rich ecosystem of free software packaging work already going on. This seems like a big risk: if Cloudron goes under, someone would need to take on that huge, specific, and non-transferable packaging work, or we'd quickly be leaving ourselves and our clients running on outdated software. +- The work to package the available applications is done [entirely by the Cloudron team itself] and doesn't re-use the existing rich ecosystem of free software packaging work that's already being done. This seems like a big risk. If Cloudron UG, the company goes under, someone or some entity would need to take on that laborious, technically specific and non-transferable packaging work or we'd quickly be leaving ourselves and our clients running outdated and unmaintained software. -- Some aspects of Cloudron's architecture are getting in the way: requiring each app to be a single Docker image makes certain deployments hard-to-impossible (as far as we know, nobody has yet managed to get Mediawiki's visual editor working in Cloudron, for example), and not being able to delegate user management to specific groups has made it hard for us to use Cloudron's Single Sign On system with groups who are growing more users quickly. +- Some aspects of Cloudron's architecture were causing problems. Requiring each app to be a single Docker image makes common application deployment configurations impossible (as far as we know, nobody has yet managed to get Mediawiki's visual editor working in Cloudron, for example). -We also have a general fear of centralising so much of our core business on a commercial entity, which could change its prices at any time and have a massive effect on our ability to operate. +- Not being able to delegate user management to specific groups has made it hard for us to use Cloudron's Single Sign On system with groups who manage their own users. + +- Cloudron's central paradigm is focussed on "non-technical" users with the nice web front end for managing apps. However, we found our clients actually need to know what "domain name" or "storage volumes" are. That's why they pay us for support. They want it to "just work". Using an interface designed for non-technical users is not suitable for technical users and adds a lot of bloat. + +- Cloudron is a bit of a [black box](https://en.wikipedia.org/wiki/Black_box). When something breaks, it breaks hard and requires technical users to respond and investigate and then fix the issues. + +- Cloudron doesn't encourage collective and public collaboration on configuration files. + +- We have a general fear of centralising so much of our core business on a commercial entity, which could change its prices at any time and have a massive effect on our ability to operate. ## A New Hope -So, around the end of 2019, we tried to map out a few core principles of a system which might work a lot like Cloudron, but give us more guarantees that we can depend on, which we've started calling the Cooperative Cloud (or "Coop Cloud" for short): +So, around the end of 2019, we tried to map out a few core principles of a system which might work a lot like Cloudron, but give us more guarantees that we can depend on. We started calling the new project Co-op Cloud. Here are some of the principles we identified: -- Coop Cloud should always be available under [copyleft licenses] to retain the shared work as public property. This doesn't mean we can't pursue commercial work, but we can't rely on creating false scarcity to earn money. +- Co-op Cloud should always be available under [copyleft licenses] to retain the shared work as part of the [commons](https://en.wikipedia.org/wiki/Commons). We shouldn't rely on creating [artificial scarcity](https://en.wikipedia.org/wiki/Artificial_scarcity) as a business model. -- Coop Cloud doesn't re-invent the wheel. We aim to work with existing free software communities who are already packaging and publishing their software. (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on...). We want to be involved in their community spaces and build bridges between infrastructure, software development and end-users. +- Co-op Cloud doesn't re-invent the wheel. We aim to work with existing free software communities who are already packaging and publishing their software (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on and on...). We want to be involved in their community spaces and build bridges between infrastructure, software development and end-users. -- Coop Cloud has democratic governance at the core of the project. We want to collaborate as much as possible with other cooperatives to build up good decision-making structures, so we can all rely on this project into the future. +- Co-op Cloud has democratic governance at the core of the project. We want to collaborate as much as possible with other co-operatives to build up good decision-making structures so we can all rely on this project into the future. -In our spare time (partly funded by income from working for our wonderful clients 😀) we've been putting the pieces together, and, after a year of work -- and two technical dead-ends -- we're ready to launch an alpha version of Cooperative Cloud to the public. +In our spare time (partly funded by income from working for our wonderful clients 😀) we've been putting the pieces together; and after a year of work (including two "back to the drawing board" moments), we're ready to launch an [alpha version](https://en.wikipedia.org/wiki/Software_release_life_cycle) of Co-op Cloud to the public. -## Coop Cloud alpha +## Coop Cloud public alpha Coop Cloud is a simple packaging format using existing [open standards] to build a catalogue of applications, and a command-line client to read the catalogue and deploy those applications. -If you'd like to learn more about Coop Cloud, please read [our documentation] -- where we explain the decisions we've made so far in more depth. What technologies we're using, how we fit into the existing ecosystem, ways to contribute, what applications are available and so on. +If you'd like to learn more about Coop Cloud, please read [our documentation], where we explain the decisions we've made so far in more depth. What technologies we're using, how we fit into the existing ecosystem, ways to contribute, what applications are available and so on. You can also dive straight in by installing [`abra`, CoopCloud's command-line tool]. -You can use Coop Cloud right now to deploy any of our [30+ applications] to your own Virtual Private Server, including Nextcloud for file-, calendar- and contact-sharing, Rocket.chat for instant messaging, Keycloak for Single Sign-On, Statping for service monitoring, and websites using Wordpress, Pelican, Jekyll, or static HTML. +You can use Coop Cloud right now to deploy any of our [30+ applications] to your own physical server or virtual server. These include [Nextcloud](https://nextcloud.com/) (for file, calendar, contacts etc) [Rocket.chat](https://rocket.chat/) for instant messaging, [Keycloak](https://www.keycloak.org/) for Single Sign-On, [Statping](https://statping.com/) for service monitoring, and websites using [Wordpress](https://wordpress.org/), [Pelican](https://blog.getpelican.com/), [Jekyll](https://jekyllrb.com/), or static HTML. -We've already been testing a sort of "dual power" strategy, using CoopCloud to run some of our own and our clients' infrastructure while continuing with Cloudron for the rest, and we're seeing promising stability. +We've already been deploying Co-op Cloud as part of "dual power" strategy. We use Co-op Cloud to run some of our own and our clients' infrastructure while continuing with Cloudron and other strategies for the time being. We're seeing promising stability and it's been a joy to work with. Apps deployed via CoopCloud have automatic SSL certificates, and many come with pre-configured e-mail, backups, or Single Sign-On options. -Packaging new applications for CoopCloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes -- we managed to [make a CoopCloud version of the Matomo web analytics platform in about 20 minutes]. This architecture also means that nobody using CoopCloud is dependent on us for updates: when a new Wordpress update comes out, you can easily install it yourself, without waiting for us to update some arcane custom Docker image. +Packaging new applications for CoopCloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes. We managed to [make a CoopCloud version of the Matomo web analytics platform in about 20 minutes]. This standardised architecture also means that nobody using CoopCloud is dependent on Autonomic for updates. When a new Wordpress update comes out, you can easily install it yourself or automatically without waiting for us to update some arcane custom Docker image. -At this point, we'd like to invite other cooperatives to take a look at what we're working on and come and have a chat with us. We think a common platform for hosting free software infrastructure could make a big difference in terms of what we're able to offer as a movement. +At this point, we'd like to invite other worker co-operatives or democratic collectives to take a look at what we're working on and have a chat with us. We think a common platform for hosting free software infrastructure could make a big difference in terms of what we're able to offer as a movement. If you're interested in getting involved with CoopCloud development, or if you'd like help trying out CoopCloud-hosted services for yourself or your organisation, please [get in touch]! From d533b5988ed4fc3d90a625730b06c7e2c962122b Mon Sep 17 00:00:00 2001 From: kawaiipunk Date: Tue, 23 Feb 2021 17:59:46 +0000 Subject: [PATCH 05/19] Additional fixes --- src/_posts/2021-02-16-coop-cloud.md | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md index 4dc5a0a..f8185bd 100644 --- a/src/_posts/2021-02-16-coop-cloud.md +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -1,9 +1,9 @@ --- layout: post -title: The Cooperative Cloud +title: The Co-operative Cloud description: Free software infrastructure without re-inventing the wheel image: coop-cloud.png -category: coop, cloud, docker, swarm, free-software +category: coop, co-op, cloud, docker, swarm, free-software, hosting, date: 2021-02-16 --- @@ -45,25 +45,27 @@ So, around the end of 2019, we tried to map out a few core principles of a syste In our spare time (partly funded by income from working for our wonderful clients 😀) we've been putting the pieces together; and after a year of work (including two "back to the drawing board" moments), we're ready to launch an [alpha version](https://en.wikipedia.org/wiki/Software_release_life_cycle) of Co-op Cloud to the public. -## Coop Cloud public alpha +## Co-op Cloud public alpha -Coop Cloud is a simple packaging format using existing [open standards] to build a catalogue of applications, and a command-line client to read the catalogue and deploy those applications. +co-op Cloud is a simple packaging format using existing [open standards] to build a catalogue of applications, and a command-line client to read the catalogue and deploy those applications. -If you'd like to learn more about Coop Cloud, please read [our documentation], where we explain the decisions we've made so far in more depth. What technologies we're using, how we fit into the existing ecosystem, ways to contribute, what applications are available and so on. - -You can also dive straight in by installing [`abra`, CoopCloud's command-line tool]. - -You can use Coop Cloud right now to deploy any of our [30+ applications] to your own physical server or virtual server. These include [Nextcloud](https://nextcloud.com/) (for file, calendar, contacts etc) [Rocket.chat](https://rocket.chat/) for instant messaging, [Keycloak](https://www.keycloak.org/) for Single Sign-On, [Statping](https://statping.com/) for service monitoring, and websites using [Wordpress](https://wordpress.org/), [Pelican](https://blog.getpelican.com/), [Jekyll](https://jekyllrb.com/), or static HTML. +If you'd like to learn more about co-op Cloud, please read [our documentation], where we explain the decisions we've made so far in more depth. What technologies we're using, how we fit into the existing ecosystem, ways to contribute, what applications are available and so on. We've already been deploying Co-op Cloud as part of "dual power" strategy. We use Co-op Cloud to run some of our own and our clients' infrastructure while continuing with Cloudron and other strategies for the time being. We're seeing promising stability and it's been a joy to work with. -Apps deployed via CoopCloud have automatic SSL certificates, and many come with pre-configured e-mail, backups, or Single Sign-On options. +## Enter the configuration commons +You can also dive straight in by installing [`abra`, co-opCloud's command-line tool]. -Packaging new applications for CoopCloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes. We managed to [make a CoopCloud version of the Matomo web analytics platform in about 20 minutes]. This standardised architecture also means that nobody using CoopCloud is dependent on Autonomic for updates. When a new Wordpress update comes out, you can easily install it yourself or automatically without waiting for us to update some arcane custom Docker image. +You can use Co-op Cloud right now to deploy any of our [30+ applications] to your own physical server or virtual server. These include [Nextcloud](https://nextcloud.com/) (for file, calendar, contacts etc) [Rocket.chat](https://rocket.chat/) for instant messaging, [Keycloak](https://www.keycloak.org/) for Single Sign-On, [Statping](https://statping.com/) for service monitoring, and websites using [Wordpress](https://wordpress.org/), [Pelican](https://blog.getpelican.com/), [Jekyll](https://jekyllrb.com/), or static HTML. + +Apps deployed via Co-op Cloud have automatic SSL certificates, and many come with pre-configured e-mail, backups, or Single Sign-On options. + +## Packaging for Co-op Cloud +Packaging new applications for Co-op Cloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes. We managed to [make a Co-op Cloud version of the Matomo web analytics platform in about 20 minutes]. This standardised architecture also means that nobody using Co-op Cloud is dependent on Autonomic for updates. When a new Wordpress update comes out, you can easily install it yourself or automatically without waiting for us to update some arcane custom Docker image. At this point, we'd like to invite other worker co-operatives or democratic collectives to take a look at what we're working on and have a chat with us. We think a common platform for hosting free software infrastructure could make a big difference in terms of what we're able to offer as a movement. -If you're interested in getting involved with CoopCloud development, or if you'd like help trying out CoopCloud-hosted services for yourself or your organisation, please [get in touch]! +If you're interested in getting involved with Co-op Cloud development, or if you'd like help trying out Co-op Cloud hosted services for yourself or your organisation, please [get in touch]. [free software]: http://wikieducator.org/Libre [sustainable, transparent and private]: /#core-values From fe205e1ac197ff14c8895f6780e542ca2e22b5da Mon Sep 17 00:00:00 2001 From: kawaiipunk Date: Tue, 23 Feb 2021 18:27:11 +0000 Subject: [PATCH 06/19] Additional changes --- src/_posts/2021-02-16-coop-cloud.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md index f8185bd..53ab962 100644 --- a/src/_posts/2021-02-16-coop-cloud.md +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -39,17 +39,23 @@ So, around the end of 2019, we tried to map out a few core principles of a syste - Co-op Cloud should always be available under [copyleft licenses] to retain the shared work as part of the [commons](https://en.wikipedia.org/wiki/Commons). We shouldn't rely on creating [artificial scarcity](https://en.wikipedia.org/wiki/Artificial_scarcity) as a business model. -- Co-op Cloud doesn't re-invent the wheel. We aim to work with existing free software communities who are already packaging and publishing their software (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on and on...). We want to be involved in their community spaces and build bridges between infrastructure, software development and end-users. +- Co-op Cloud aims to work with existing free software communities who are already packaging and publishing their software (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on and on...). We want to be involved in their community spaces and build bridges between infrastructure, software development and end-users. -- Co-op Cloud has democratic governance at the core of the project. We want to collaborate as much as possible with other co-operatives to build up good decision-making structures so we can all rely on this project into the future. +- Co-op Cloud is based on standardised technologies. Any new tools we write should only add a thin layer of usability on top of existing solutions. + +- Co-op Cloud has democratic governance at the core of the project. We want to collaborate as much as possible with other co-operatives to build up effective decision-making structures so we can all rely on this project far into the future. + +- Co-op Cloud is focussed on meeting the needs of small hosting providers with technical workers in order to provide a solid service for their clients. + +- We encourage the creation of a configuration commons. Innovations based on Co-op can easily be shared and worked on collectively. In our spare time (partly funded by income from working for our wonderful clients 😀) we've been putting the pieces together; and after a year of work (including two "back to the drawing board" moments), we're ready to launch an [alpha version](https://en.wikipedia.org/wiki/Software_release_life_cycle) of Co-op Cloud to the public. ## Co-op Cloud public alpha -co-op Cloud is a simple packaging format using existing [open standards] to build a catalogue of applications, and a command-line client to read the catalogue and deploy those applications. +Co-op Cloud is a simple packaging format using existing [open standards] to build a catalogue of applications, and a command-line client to read the catalogue and deploy those applications. -If you'd like to learn more about co-op Cloud, please read [our documentation], where we explain the decisions we've made so far in more depth. What technologies we're using, how we fit into the existing ecosystem, ways to contribute, what applications are available and so on. +If you'd like to learn more about Co-op Cloud, please read [our documentation], where we explain the decisions we've made so far in more depth. What technologies we're using, how we fit into the existing ecosystem, ways to contribute, what applications are available and so on. We've already been deploying Co-op Cloud as part of "dual power" strategy. We use Co-op Cloud to run some of our own and our clients' infrastructure while continuing with Cloudron and other strategies for the time being. We're seeing promising stability and it's been a joy to work with. From 949ea306805e83e13318fce686ae887a67374ecb Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Tue, 23 Feb 2021 20:45:11 +0100 Subject: [PATCH 07/19] Use apps instead of applications --- src/_posts/2021-02-16-coop-cloud.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md index 53ab962..cda4d48 100644 --- a/src/_posts/2021-02-16-coop-cloud.md +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -13,15 +13,15 @@ Running [free software] apps and infrastructure for ourselves and our clients is We started out using [Cloudron], which provides a very simple-to-use web interface for deploying free software apps like Nextcloud, Mediawiki, and Rocket.chat with only a few clicks. -Cloudron allowed us to radically reduce our initial and ongoing server costs. We didn't need to maintain a separate server for each service and clients applications could share computing resources whilst containerisation was still allowing us meeting their data privacy needs. Consequently, we've been able to take on many more "solidarity clients", people doing important work, but on a shoestring budget. +Cloudron allowed us to radically reduce our initial and ongoing server costs. We didn't need to maintain a separate server for each service and clients apps could share computing resources whilst containerisation was still allowing us meeting their data privacy needs. Consequently, we've been able to take on many more "solidarity clients", people doing important work, but on a shoestring budget. As time has gone on, though, we've had a few moments when we questioned our reliance on Cloudron, and whether it was a sustainable choice for us and for our clients. We came to realise: - Core parts of the system officially [became proprietary] software. This rang alarm bells for us about its long-term future. -- The work to package the available applications is done [entirely by the Cloudron team itself] and doesn't re-use the existing rich ecosystem of free software packaging work that's already being done. This seems like a big risk. If Cloudron UG, the company goes under, someone or some entity would need to take on that laborious, technically specific and non-transferable packaging work or we'd quickly be leaving ourselves and our clients running outdated and unmaintained software. +- The work to package the available apps is done [entirely by the Cloudron team itself] and doesn't re-use the existing rich ecosystem of free software packaging work that's already being done. This seems like a big risk. If Cloudron UG, the company goes under, someone or some entity would need to take on that laborious, technically specific and non-transferable packaging work or we'd quickly be leaving ourselves and our clients running outdated and unmaintained software. -- Some aspects of Cloudron's architecture were causing problems. Requiring each app to be a single Docker image makes common application deployment configurations impossible (as far as we know, nobody has yet managed to get Mediawiki's visual editor working in Cloudron, for example). +- Some aspects of Cloudron's architecture were causing problems. Requiring each app to be a single Docker image makes common application deployment configurations impossible (as far as we know, nobody has yet managed to get Mediawiki's visual editor working in Cloudron, for example). - Not being able to delegate user management to specific groups has made it hard for us to use Cloudron's Single Sign On system with groups who manage their own users. @@ -53,21 +53,23 @@ In our spare time (partly funded by income from working for our wonderful client ## Co-op Cloud public alpha -Co-op Cloud is a simple packaging format using existing [open standards] to build a catalogue of applications, and a command-line client to read the catalogue and deploy those applications. +Co-op Cloud is a simple packaging format using existing [open standards] to build a catalogue of apps, and a command-line client to read the catalogue and deploy those apps. -If you'd like to learn more about Co-op Cloud, please read [our documentation], where we explain the decisions we've made so far in more depth. What technologies we're using, how we fit into the existing ecosystem, ways to contribute, what applications are available and so on. +If you'd like to learn more about Co-op Cloud, please read [our documentation], where we explain the decisions we've made so far in more depth. What technologies we're using, how we fit into the existing ecosystem, ways to contribute, what apps are available and so on. We've already been deploying Co-op Cloud as part of "dual power" strategy. We use Co-op Cloud to run some of our own and our clients' infrastructure while continuing with Cloudron and other strategies for the time being. We're seeing promising stability and it's been a joy to work with. ## Enter the configuration commons + You can also dive straight in by installing [`abra`, co-opCloud's command-line tool]. -You can use Co-op Cloud right now to deploy any of our [30+ applications] to your own physical server or virtual server. These include [Nextcloud](https://nextcloud.com/) (for file, calendar, contacts etc) [Rocket.chat](https://rocket.chat/) for instant messaging, [Keycloak](https://www.keycloak.org/) for Single Sign-On, [Statping](https://statping.com/) for service monitoring, and websites using [Wordpress](https://wordpress.org/), [Pelican](https://blog.getpelican.com/), [Jekyll](https://jekyllrb.com/), or static HTML. +You can use Co-op Cloud right now to deploy any of our [30+ apps] to your own physical server or virtual server. These include [Nextcloud](https://nextcloud.com/) (for file, calendar, contacts etc) [Rocket.chat](https://rocket.chat/) for instant messaging, [Keycloak](https://www.keycloak.org/) for Single Sign-On, [Statping](https://statping.com/) for service monitoring, and websites using [Wordpress](https://wordpress.org/), [Pelican](https://blog.getpelican.com/), [Jekyll](https://jekyllrb.com/), or static HTML. Apps deployed via Co-op Cloud have automatic SSL certificates, and many come with pre-configured e-mail, backups, or Single Sign-On options. ## Packaging for Co-op Cloud -Packaging new applications for Co-op Cloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes. We managed to [make a Co-op Cloud version of the Matomo web analytics platform in about 20 minutes]. This standardised architecture also means that nobody using Co-op Cloud is dependent on Autonomic for updates. When a new Wordpress update comes out, you can easily install it yourself or automatically without waiting for us to update some arcane custom Docker image. + +Packaging new apps for Co-op Cloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes. We managed to [make a Co-op Cloud version of the Matomo web analytics platform in about 20 minutes]. This standardised architecture also means that nobody using Co-op Cloud is dependent on Autonomic for updates. When a new Wordpress update comes out, you can easily install it yourself or automatically without waiting for us to update some arcane custom Docker image. At this point, we'd like to invite other worker co-operatives or democratic collectives to take a look at what we're working on and have a chat with us. We think a common platform for hosting free software infrastructure could make a big difference in terms of what we're able to offer as a movement. @@ -80,7 +82,7 @@ If you're interested in getting involved with Co-op Cloud development, or if you [entirely by the cloudron team itself]: https://git.cloudron.io/cloudron [our documentation]: https://docs.cloud.autonomic.zone [`abra`, coopcloud's command-line tool]: https://git.autonomic.zone/coop-cloud/abra/ -[30+ applications]: https://git.autonomic.zone/coop-cloud/ +[30+ apps]: https://git.autonomic.zone/coop-cloud/ [get in touch]: mailto:helo@autonomic.zone [copyleft licenses]: https://www.gnu.org/licenses/copyleft.en.html [open standards]: https://compose-spec.io/ From 3da62d7688c196ae84c3443ba5720f8b6a51e1d0 Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Tue, 23 Feb 2021 20:46:14 +0100 Subject: [PATCH 08/19] Avoid repeating the name here --- src/_posts/2021-02-16-coop-cloud.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md index cda4d48..ead999b 100644 --- a/src/_posts/2021-02-16-coop-cloud.md +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -37,17 +37,17 @@ As time has gone on, though, we've had a few moments when we questioned our reli So, around the end of 2019, we tried to map out a few core principles of a system which might work a lot like Cloudron, but give us more guarantees that we can depend on. We started calling the new project Co-op Cloud. Here are some of the principles we identified: -- Co-op Cloud should always be available under [copyleft licenses] to retain the shared work as part of the [commons](https://en.wikipedia.org/wiki/Commons). We shouldn't rely on creating [artificial scarcity](https://en.wikipedia.org/wiki/Artificial_scarcity) as a business model. +- Always be available under [copyleft licenses] to retain the shared work as part of the [commons](https://en.wikipedia.org/wiki/Commons). We shouldn't rely on creating [artificial scarcity](https://en.wikipedia.org/wiki/Artificial_scarcity) as a business model. -- Co-op Cloud aims to work with existing free software communities who are already packaging and publishing their software (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on and on...). We want to be involved in their community spaces and build bridges between infrastructure, software development and end-users. +- Work with existing free software communities who are already packaging and publishing their software (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on and on...). We want to be involved in their community spaces and build bridges between infrastructure, software development and end-users. -- Co-op Cloud is based on standardised technologies. Any new tools we write should only add a thin layer of usability on top of existing solutions. +- Based on standardised technologies. Any new tools we write should only add a thin layer of usability on top of existing solutions. -- Co-op Cloud has democratic governance at the core of the project. We want to collaborate as much as possible with other co-operatives to build up effective decision-making structures so we can all rely on this project far into the future. +- Place democratic governance at the core of the project. We want to collaborate as much as possible with other co-operatives to build up effective decision-making structures so we can all rely on this project far into the future. -- Co-op Cloud is focussed on meeting the needs of small hosting providers with technical workers in order to provide a solid service for their clients. +- Focus on meeting the needs of small hosting providers with technical workers in order to provide a solid service for their clients. -- We encourage the creation of a configuration commons. Innovations based on Co-op can easily be shared and worked on collectively. +- Encourage the creation of a configuration commons. Innovations based on Co-op can easily be shared and worked on collectively. In our spare time (partly funded by income from working for our wonderful clients 😀) we've been putting the pieces together; and after a year of work (including two "back to the drawing board" moments), we're ready to launch an [alpha version](https://en.wikipedia.org/wiki/Software_release_life_cycle) of Co-op Cloud to the public. From ca4d5ddb8082cf9bd790d10195bc0765b54741ce Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Tue, 23 Feb 2021 20:53:23 +0100 Subject: [PATCH 09/19] Fix links --- src/_posts/2021-02-16-coop-cloud.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md index ead999b..95e6c41 100644 --- a/src/_posts/2021-02-16-coop-cloud.md +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -61,7 +61,7 @@ We've already been deploying Co-op Cloud as part of "dual power" strategy. We us ## Enter the configuration commons -You can also dive straight in by installing [`abra`, co-opCloud's command-line tool]. +You can also dive straight in by installing [`abra`, Co-op Cloud's command-line tool]. You can use Co-op Cloud right now to deploy any of our [30+ apps] to your own physical server or virtual server. These include [Nextcloud](https://nextcloud.com/) (for file, calendar, contacts etc) [Rocket.chat](https://rocket.chat/) for instant messaging, [Keycloak](https://www.keycloak.org/) for Single Sign-On, [Statping](https://statping.com/) for service monitoring, and websites using [Wordpress](https://wordpress.org/), [Pelican](https://blog.getpelican.com/), [Jekyll](https://jekyllrb.com/), or static HTML. @@ -81,9 +81,9 @@ If you're interested in getting involved with Co-op Cloud development, or if you [became proprietary]: https://forum.cloudron.io/topic/2862/why-not-make-cloudron-fully-open-source-again [entirely by the cloudron team itself]: https://git.cloudron.io/cloudron [our documentation]: https://docs.cloud.autonomic.zone -[`abra`, coopcloud's command-line tool]: https://git.autonomic.zone/coop-cloud/abra/ +[`abra`, co-op cloud's command-line tool]: https://git.autonomic.zone/coop-cloud/abra/ [30+ apps]: https://git.autonomic.zone/coop-cloud/ [get in touch]: mailto:helo@autonomic.zone [copyleft licenses]: https://www.gnu.org/licenses/copyleft.en.html [open standards]: https://compose-spec.io/ -[make a coopcloud version of the matomo web analytics platform in about 20 minutes]: https://docs.cloud.autonomic.zone/package/ +[make a co-op cloud version of the matomo web analytics platform in about 20 minutes]: https://docs.cloud.autonomic.zone/package/ From e2a43e9ad182e4cff3d77cd92de1cfc392d5f1a7 Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Tue, 23 Feb 2021 20:53:28 +0100 Subject: [PATCH 10/19] Add matrix room --- src/_posts/2021-02-16-coop-cloud.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md index 95e6c41..ab6f132 100644 --- a/src/_posts/2021-02-16-coop-cloud.md +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -71,7 +71,7 @@ Apps deployed via Co-op Cloud have automatic SSL certificates, and many come wit Packaging new apps for Co-op Cloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes. We managed to [make a Co-op Cloud version of the Matomo web analytics platform in about 20 minutes]. This standardised architecture also means that nobody using Co-op Cloud is dependent on Autonomic for updates. When a new Wordpress update comes out, you can easily install it yourself or automatically without waiting for us to update some arcane custom Docker image. -At this point, we'd like to invite other worker co-operatives or democratic collectives to take a look at what we're working on and have a chat with us. We think a common platform for hosting free software infrastructure could make a big difference in terms of what we're able to offer as a movement. +At this point, we'd like to invite other worker co-operatives or democratic collectives to take a look at what we're working on and have a chat with us. We have a public matrix room at `#coopcloud:autonomic.zone`. We think a common platform for hosting free software infrastructure could make a big difference in terms of what we're able to offer as a movement. If you're interested in getting involved with Co-op Cloud development, or if you'd like help trying out Co-op Cloud hosted services for yourself or your organisation, please [get in touch]. From 6b5a47d86bfdf3eb32db6a8f2be76804aad869e9 Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Tue, 23 Feb 2021 20:55:13 +0100 Subject: [PATCH 11/19] Go librepunk --- src/_posts/2021-02-16-coop-cloud.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-coop-cloud.md index ab6f132..4ed27ba 100644 --- a/src/_posts/2021-02-16-coop-cloud.md +++ b/src/_posts/2021-02-16-coop-cloud.md @@ -1,17 +1,17 @@ --- layout: post title: The Co-operative Cloud -description: Free software infrastructure without re-inventing the wheel +description: Libre software infrastructure without re-inventing the wheel image: coop-cloud.png -category: coop, co-op, cloud, docker, swarm, free-software, hosting, +category: coop, co-op, cloud, docker, swarm, libre-software, hosting, date: 2021-02-16 --- -Running [free software] apps and infrastructure for ourselves and our clients is central to what we do at Autonomic. Now, after a year of work, we're stoked to share our "Co-op Cloud" project with the world. We want to make it easier for others to join the party, ditch corporate spyware, and make their tools [sustainable, transparent and private]. +Running [libre software] apps and infrastructure for ourselves and our clients is central to what we do at Autonomic. Now, after a year of work, we're stoked to share our "Co-op Cloud" project with the world. We want to make it easier for others to join the party, ditch corporate spyware, and make their tools [sustainable, transparent and private]. ## Why a new tool? -We started out using [Cloudron], which provides a very simple-to-use web interface for deploying free software apps like Nextcloud, Mediawiki, and Rocket.chat with only a few clicks. +We started out using [Cloudron], which provides a very simple-to-use web interface for deploying libre software apps like Nextcloud, Mediawiki, and Rocket.chat with only a few clicks. Cloudron allowed us to radically reduce our initial and ongoing server costs. We didn't need to maintain a separate server for each service and clients apps could share computing resources whilst containerisation was still allowing us meeting their data privacy needs. Consequently, we've been able to take on many more "solidarity clients", people doing important work, but on a shoestring budget. @@ -19,7 +19,7 @@ As time has gone on, though, we've had a few moments when we questioned our reli - Core parts of the system officially [became proprietary] software. This rang alarm bells for us about its long-term future. -- The work to package the available apps is done [entirely by the Cloudron team itself] and doesn't re-use the existing rich ecosystem of free software packaging work that's already being done. This seems like a big risk. If Cloudron UG, the company goes under, someone or some entity would need to take on that laborious, technically specific and non-transferable packaging work or we'd quickly be leaving ourselves and our clients running outdated and unmaintained software. +- The work to package the available apps is done [entirely by the Cloudron team itself] and doesn't re-use the existing rich ecosystem of libre software packaging work that's already being done. This seems like a big risk. If Cloudron UG, the company goes under, someone or some entity would need to take on that laborious, technically specific and non-transferable packaging work or we'd quickly be leaving ourselves and our clients running outdated and unmaintained software. - Some aspects of Cloudron's architecture were causing problems. Requiring each app to be a single Docker image makes common application deployment configurations impossible (as far as we know, nobody has yet managed to get Mediawiki's visual editor working in Cloudron, for example). @@ -39,7 +39,7 @@ So, around the end of 2019, we tried to map out a few core principles of a syste - Always be available under [copyleft licenses] to retain the shared work as part of the [commons](https://en.wikipedia.org/wiki/Commons). We shouldn't rely on creating [artificial scarcity](https://en.wikipedia.org/wiki/Artificial_scarcity) as a business model. -- Work with existing free software communities who are already packaging and publishing their software (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on and on...). We want to be involved in their community spaces and build bridges between infrastructure, software development and end-users. +- Work with existing libre software communities who are already packaging and publishing their software (Nextcloud, Gitea, Mediawiki, Rocket.chat, the list goes on and on...). We want to be involved in their community spaces and build bridges between infrastructure, software development and end-users. - Based on standardised technologies. Any new tools we write should only add a thin layer of usability on top of existing solutions. @@ -71,11 +71,11 @@ Apps deployed via Co-op Cloud have automatic SSL certificates, and many come wit Packaging new apps for Co-op Cloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes. We managed to [make a Co-op Cloud version of the Matomo web analytics platform in about 20 minutes]. This standardised architecture also means that nobody using Co-op Cloud is dependent on Autonomic for updates. When a new Wordpress update comes out, you can easily install it yourself or automatically without waiting for us to update some arcane custom Docker image. -At this point, we'd like to invite other worker co-operatives or democratic collectives to take a look at what we're working on and have a chat with us. We have a public matrix room at `#coopcloud:autonomic.zone`. We think a common platform for hosting free software infrastructure could make a big difference in terms of what we're able to offer as a movement. +At this point, we'd like to invite other worker co-operatives or democratic collectives to take a look at what we're working on and have a chat with us. We have a public matrix room at `#coopcloud:autonomic.zone`. We think a common platform for hosting libre software infrastructure could make a big difference in terms of what we're able to offer as a movement. If you're interested in getting involved with Co-op Cloud development, or if you'd like help trying out Co-op Cloud hosted services for yourself or your organisation, please [get in touch]. -[free software]: http://wikieducator.org/Libre +[libre software]: http://wikieducator.org/Libre [sustainable, transparent and private]: /#core-values [cloudron]: https://cloudron.io/ [became proprietary]: https://forum.cloudron.io/topic/2862/why-not-make-cloudron-fully-open-source-again From ce6f92aa1216faa19d75f4677b96a181cd1e7b72 Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Mon, 1 Mar 2021 13:00:34 +0100 Subject: [PATCH 12/19] Add the - --- .../{2021-02-16-coop-cloud.md => 2021-02-16-co-op-cloud.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/_posts/{2021-02-16-coop-cloud.md => 2021-02-16-co-op-cloud.md} (100%) diff --git a/src/_posts/2021-02-16-coop-cloud.md b/src/_posts/2021-02-16-co-op-cloud.md similarity index 100% rename from src/_posts/2021-02-16-coop-cloud.md rename to src/_posts/2021-02-16-co-op-cloud.md From 897ba19972a388ec3b5b676fe99b1ccd5b0e21c3 Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Mon, 1 Mar 2021 13:01:12 +0100 Subject: [PATCH 13/19] Fix up the date --- src/_posts/2021-02-16-co-op-cloud.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_posts/2021-02-16-co-op-cloud.md b/src/_posts/2021-02-16-co-op-cloud.md index 4ed27ba..c3d20be 100644 --- a/src/_posts/2021-02-16-co-op-cloud.md +++ b/src/_posts/2021-02-16-co-op-cloud.md @@ -4,7 +4,7 @@ title: The Co-operative Cloud description: Libre software infrastructure without re-inventing the wheel image: coop-cloud.png category: coop, co-op, cloud, docker, swarm, libre-software, hosting, -date: 2021-02-16 +date: 2021-03-01 --- Running [libre software] apps and infrastructure for ourselves and our clients is central to what we do at Autonomic. Now, after a year of work, we're stoked to share our "Co-op Cloud" project with the world. We want to make it easier for others to join the party, ditch corporate spyware, and make their tools [sustainable, transparent and private]. From 5891093a60bed63b23302fb5e0c513761fd0fdba Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Mon, 1 Mar 2021 13:08:47 +0100 Subject: [PATCH 14/19] Add missing title --- src/_posts/2021-02-16-co-op-cloud.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/_posts/2021-02-16-co-op-cloud.md b/src/_posts/2021-02-16-co-op-cloud.md index c3d20be..35b47a2 100644 --- a/src/_posts/2021-02-16-co-op-cloud.md +++ b/src/_posts/2021-02-16-co-op-cloud.md @@ -71,6 +71,8 @@ Apps deployed via Co-op Cloud have automatic SSL certificates, and many come wit Packaging new apps for Co-op Cloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes. We managed to [make a Co-op Cloud version of the Matomo web analytics platform in about 20 minutes]. This standardised architecture also means that nobody using Co-op Cloud is dependent on Autonomic for updates. When a new Wordpress update comes out, you can easily install it yourself or automatically without waiting for us to update some arcane custom Docker image. +## Next steps + At this point, we'd like to invite other worker co-operatives or democratic collectives to take a look at what we're working on and have a chat with us. We have a public matrix room at `#coopcloud:autonomic.zone`. We think a common platform for hosting libre software infrastructure could make a big difference in terms of what we're able to offer as a movement. If you're interested in getting involved with Co-op Cloud development, or if you'd like help trying out Co-op Cloud hosted services for yourself or your organisation, please [get in touch]. From 6b6853be22cf4aaac22b80acc5f72c2850eb168c Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Mon, 1 Mar 2021 13:10:27 +0100 Subject: [PATCH 15/19] Fix for wording around Cloudron --- src/_posts/2021-02-16-co-op-cloud.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_posts/2021-02-16-co-op-cloud.md b/src/_posts/2021-02-16-co-op-cloud.md index 35b47a2..f5d14cb 100644 --- a/src/_posts/2021-02-16-co-op-cloud.md +++ b/src/_posts/2021-02-16-co-op-cloud.md @@ -19,7 +19,7 @@ As time has gone on, though, we've had a few moments when we questioned our reli - Core parts of the system officially [became proprietary] software. This rang alarm bells for us about its long-term future. -- The work to package the available apps is done [entirely by the Cloudron team itself] and doesn't re-use the existing rich ecosystem of libre software packaging work that's already being done. This seems like a big risk. If Cloudron UG, the company goes under, someone or some entity would need to take on that laborious, technically specific and non-transferable packaging work or we'd quickly be leaving ourselves and our clients running outdated and unmaintained software. +- The work to package the available apps is done [entirely by the Cloudron team itself] and doesn't re-use the existing rich ecosystem of libre software packaging work that's already being done. This seems like a big risk. If Cloudron UG, the company behind Cloudron, goes under, someone or some entity would need to take on that laborious, technically specific and non-transferable packaging work or we'd quickly be leaving ourselves and our clients running outdated and unmaintained software. - Some aspects of Cloudron's architecture were causing problems. Requiring each app to be a single Docker image makes common application deployment configurations impossible (as far as we know, nobody has yet managed to get Mediawiki's visual editor working in Cloudron, for example). From a78c94250b8cc2bf81f1cea1186070a9366be7cf Mon Sep 17 00:00:00 2001 From: 3wc <3wc.git@doesthisthing.work> Date: Mon, 1 Mar 2021 14:24:02 +0200 Subject: [PATCH 16/19] Small fix to Co-op Cloud blog post --- src/_posts/2021-02-16-co-op-cloud.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_posts/2021-02-16-co-op-cloud.md b/src/_posts/2021-02-16-co-op-cloud.md index f5d14cb..b5a316c 100644 --- a/src/_posts/2021-02-16-co-op-cloud.md +++ b/src/_posts/2021-02-16-co-op-cloud.md @@ -25,7 +25,7 @@ As time has gone on, though, we've had a few moments when we questioned our reli - Not being able to delegate user management to specific groups has made it hard for us to use Cloudron's Single Sign On system with groups who manage their own users. -- Cloudron's central paradigm is focussed on "non-technical" users with the nice web front end for managing apps. However, we found our clients actually need to know what "domain name" or "storage volumes" are. That's why they pay us for support. They want it to "just work". Using an interface designed for non-technical users is not suitable for technical users and adds a lot of bloat. +- Cloudron's central paradigm is focussed on "non-technical" users with the nice web front end for managing apps. However, we found our clients don't actually need to know what "domain name" or "storage volumes" are. That's why they pay us for support. They want it to "just work". Using an interface designed for non-technical users is not suitable for technical users and adds a lot of bloat. - Cloudron is a bit of a [black box](https://en.wikipedia.org/wiki/Black_box). When something breaks, it breaks hard and requires technical users to respond and investigate and then fix the issues. From e1d76ff40e673d787dd1cc208cda3880044e1651 Mon Sep 17 00:00:00 2001 From: kawaiipunk Date: Mon, 1 Mar 2021 12:43:21 +0000 Subject: [PATCH 17/19] Added links at the bottom --- src/_posts/2021-02-16-co-op-cloud.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/_posts/2021-02-16-co-op-cloud.md b/src/_posts/2021-02-16-co-op-cloud.md index b5a316c..0808f42 100644 --- a/src/_posts/2021-02-16-co-op-cloud.md +++ b/src/_posts/2021-02-16-co-op-cloud.md @@ -77,6 +77,11 @@ At this point, we'd like to invite other worker co-operatives or democratic coll If you're interested in getting involved with Co-op Cloud development, or if you'd like help trying out Co-op Cloud hosted services for yourself or your organisation, please [get in touch]. +## Links +- [Documentation](https://cloud.autonomic.zone/) +- [Source code](https://git.autonomic.zone/coop-cloud) +- [Public Matrix chat](https://matrix.to/#/#coopcloud:autonomic.zone?via=autonomic.zone) + [libre software]: http://wikieducator.org/Libre [sustainable, transparent and private]: /#core-values [cloudron]: https://cloudron.io/ From ade028c8cb7e31d18be6d25423283e6bbd5bc61a Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Mon, 1 Mar 2021 14:12:41 +0100 Subject: [PATCH 18/19] Fix missing word --- src/_posts/2021-02-16-co-op-cloud.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_posts/2021-02-16-co-op-cloud.md b/src/_posts/2021-02-16-co-op-cloud.md index 0808f42..b997028 100644 --- a/src/_posts/2021-02-16-co-op-cloud.md +++ b/src/_posts/2021-02-16-co-op-cloud.md @@ -47,7 +47,7 @@ So, around the end of 2019, we tried to map out a few core principles of a syste - Focus on meeting the needs of small hosting providers with technical workers in order to provide a solid service for their clients. -- Encourage the creation of a configuration commons. Innovations based on Co-op can easily be shared and worked on collectively. +- Encourage the creation of a configuration commons. Innovations based on Co-op Cloud can easily be shared and worked on collectively. In our spare time (partly funded by income from working for our wonderful clients 😀) we've been putting the pieces together; and after a year of work (including two "back to the drawing board" moments), we're ready to launch an [alpha version](https://en.wikipedia.org/wiki/Software_release_life_cycle) of Co-op Cloud to the public. From 98dd76b3006b80aa21d88e1cbea76f7ca31d57f5 Mon Sep 17 00:00:00 2001 From: Luke Murphy Date: Mon, 1 Mar 2021 14:15:00 +0100 Subject: [PATCH 19/19] Add some additional links --- src/_posts/2021-02-16-co-op-cloud.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/_posts/2021-02-16-co-op-cloud.md b/src/_posts/2021-02-16-co-op-cloud.md index b997028..bcb152e 100644 --- a/src/_posts/2021-02-16-co-op-cloud.md +++ b/src/_posts/2021-02-16-co-op-cloud.md @@ -63,10 +63,12 @@ We've already been deploying Co-op Cloud as part of "dual power" strategy. We us You can also dive straight in by installing [`abra`, Co-op Cloud's command-line tool]. -You can use Co-op Cloud right now to deploy any of our [30+ apps] to your own physical server or virtual server. These include [Nextcloud](https://nextcloud.com/) (for file, calendar, contacts etc) [Rocket.chat](https://rocket.chat/) for instant messaging, [Keycloak](https://www.keycloak.org/) for Single Sign-On, [Statping](https://statping.com/) for service monitoring, and websites using [Wordpress](https://wordpress.org/), [Pelican](https://blog.getpelican.com/), [Jekyll](https://jekyllrb.com/), or static HTML. +You can use Co-op Cloud right now to deploy any of our [30+ apps] to your own physical server or virtual server. These include [Nextcloud](https://nextcloud.com/) (for file, calendar, contacts etc) [Rocket.chat](https://rocket.chat/) for instant messaging, [Keycloak](https://www.keycloak.org/) for Single Sign-On, [Statping](https://statping.com/) for service monitoring, and websites using [Wordpress](https://wordpress.org/), [Pelican](https://blog.getpelican.com/), [Jekyll](https://jekyllrb.com/), or static HTML. See the [app catalogue](https://docs.cloud.autonomic.zone/apps/) for more. Apps deployed via Co-op Cloud have automatic SSL certificates, and many come with pre-configured e-mail, backups, or Single Sign-On options. +See the [getting started guide](https://docs.cloud.autonomic.zone/overview/) to get moving fast. + ## Packaging for Co-op Cloud Packaging new apps for Co-op Cloud is straightforward in most cases: you can re-use an application's own Docker image (or even `docker-compose.yml` file) with minimal changes. We managed to [make a Co-op Cloud version of the Matomo web analytics platform in about 20 minutes]. This standardised architecture also means that nobody using Co-op Cloud is dependent on Autonomic for updates. When a new Wordpress update comes out, you can easily install it yourself or automatically without waiting for us to update some arcane custom Docker image. @@ -78,6 +80,7 @@ At this point, we'd like to invite other worker co-operatives or democratic coll If you're interested in getting involved with Co-op Cloud development, or if you'd like help trying out Co-op Cloud hosted services for yourself or your organisation, please [get in touch]. ## Links + - [Documentation](https://cloud.autonomic.zone/) - [Source code](https://git.autonomic.zone/coop-cloud) - [Public Matrix chat](https://matrix.to/#/#coopcloud:autonomic.zone?via=autonomic.zone)