[HN Gopher] Dokku - Free Heroku Alternative
       ___________________________________________________________________
        
       Dokku - Free Heroku Alternative
        
       Author : punnerud
       Score  : 215 points
       Date   : 2022-05-14 09:12 UTC (13 hours ago)
        
 (HTM) web link (dokku.com)
 (TXT) w3m dump (dokku.com)
        
       | nasmorn wrote:
       | I have used it quite a bit. What I hate about it is that it runs
       | on my single machine and the underlying system updates feel a bit
       | dangerous to do. Also at one point it would endlessly crash after
       | adding another worker to a project and there is no way to debug
       | it easily. I moved almost all the projects to DO Kubernetes now.
       | I had written my own dockerfiles anyways since it means faster
       | deploys. The fact that deployment goes through CI is more of a
       | bonus. The Setup is more involved though
        
       | juanse wrote:
       | I think with moderns and dedicated VPsS this can work for a very
       | long way.
       | 
       | Hetzner offers 48 dedicated vcores/192 GB RAM in a single machine
       | for less than 500EUR/month. I can totally see many business
       | working for years within these boundaries. Also, not every
       | company need Google-grade high availability.
        
       | dgb23 wrote:
       | When it says free heroku alternative that runs on a single
       | host/vps, then I assume the file system stays durable (as opposed
       | to ephemeral). Is that correct?
        
         | dzogchen wrote:
         | Yes that is correct. You can mount directories like normal
         | Docker.
        
       | bullen wrote:
       | The smallest PaaS you have ever seen is one order of magnitude
       | larger than mine: https://github.com/tinspin/rupy
       | 
       | And I bet you the same goes for performance, mine can share data
       | between cores atomically.
        
       | joshstrange wrote:
       | Dokku is nice and I used it for a while but recently I've been
       | using CapRover [0] and been pretty happy with it. I only use it
       | on 1 host but it supports multiple. It also has 1-click installs
       | for the usual suspects (drupal/wordpress/etc) and things like
       | spinning up a DB is easy. You can also define a docker file in
       | your repo that you instruct it to build and use. HTTPS is a
       | button click and it automatically sets up virtual hosts for you
       | `<your app name>.<base url you configured>`. It's great for quick
       | prototyping and to get a personal project online.
       | 
       | [0] https://caprover.com/
        
         | conradfr wrote:
         | I use it and am globally happy with it, the biggest downside
         | being the non-zero downtime deployment.
         | 
         | They say it's because it uses Docker Swarm, I don't know if
         | that's true.
        
         | 999900000999 wrote:
         | Absolutely love Caprover, used it when it was CapDuckDuck.
         | 
         | I basically just lost interest, Firebase does everything I need
         | ultimately. But I'd still argue it's the easiest way to deploy
         | a side project!
        
         | sureglymop wrote:
         | Tried both and like Dokku more. Might make a nice web interface
         | for it for myself.
        
           | tough wrote:
           | Checkout ledokku, I still prefer caprover seems more robust
           | at this point. But dokku+ledokku are cool too for self-
           | hosting needs
        
         | hippich wrote:
         | Nice find! What is your impression on reliability? I ended up
         | using dokku in production, but I really like what caprover
         | offers.
        
           | joshstrange wrote:
           | It's been pretty reliable for me but I've never used it in
           | production. It's more of a testing grounds-type tool for me
           | or a way to see my work online at a stable URL (which helps
           | motivate me to continue working on something). That's not to
           | say it can't handle production (the multiple hosts aspect
           | certainly indicates it means to support that use-case), just
           | that I can't speak on it.
           | 
           | On thing that's cool (to me) is that I once borked an update
           | of the CapRover admin and while I couldn't get into the
           | dashboard all my projects kept humming along without a care
           | in the world because they were all in their own docker
           | containers. I thought that was pretty neat (all of CapRover
           | runs inside of containers as well and seems to be independent
           | of apps it manages/monitors.
        
         | sbecker wrote:
         | Caprover is nice and convenient but security wise, only a
         | single password field is required on the admin console. (See
         | demo here: https://captain.server.demo.caprover.com/#/login)
         | Given this it would be nice to at least make the web admin
         | console only accessible via an IP whitelist, but last time I
         | used it I did not find an easy way to do that.
        
           | jtsiskin wrote:
           | Make a 256 bit password. Problem solved?
        
           | indigodaddy wrote:
           | Can you not firewall the relevant admin webui port?
        
             | wilsonfiifi wrote:
             | The admin webui runs on the _captain_ sub-domain so i 'm
             | not too sure if that can be firewalled.
        
               | indigodaddy wrote:
               | How does any of that matter? Firewall the relevant port
               | so that it only allows your connecting IP.
        
       | pvsukale3 wrote:
       | Self plug. Some other open source/ proprietary projects like
       | Heroku
       | 
       | https://ossdatabase.com/projects/heroku
        
       | RileyJames wrote:
       | Been using it a year or so now. As my B server. $40~ on DO, that
       | I ram all my side projects onto.
       | 
       | From a dev perspective, it's been awesome.
       | 
       | I have zero monitoring on it, so I have no idea if users love it.
       | But analytics look good.
       | 
       | Either way. Impressed. And appreciate all the efforts behind the
       | project.
       | 
       | Edit: Rails, pg, sidekiq, etc.
        
       | wilsonfiifi wrote:
       | Dokku is an excellent Heroku alternative. If you have the means,
       | please support the project by paying for Dokku Pro [0]
       | 
       | [0] https://pro.dokku.com/
        
         | chasd00 wrote:
         | I didn't know this existed (probably because my dokku setip had
         | been running for years and I haven't been back to the website).
         | I will be throwing some bread your way:)
        
       | tomatowurst wrote:
       | Is there proper tutorial for people who have never used heroku? I
       | just don't know how to use this because i dont have any
       | experience with heroku.
       | 
       | I'm interesting in self-hosted AWS api compatible solutions.
       | 
       | Parse is also interesting. In fact I discovered that there is a
       | whole new world outside AWS and DO. It no longer makes sense for
       | me to run weekend projects on AWS outright, thats really for
       | large enterprise applications.
       | 
       | What I would love is to be able to deploy my docker images on my
       | "own"cloud running on a dozen droplets/VPS around the world and
       | bill my users at the same rate that AWS is charging. I figure I
       | would be able to undercut AWS significantly with this method.
       | 
       | Storing 2TB on AWS was price shock for me, makes no sense when
       | there are dedicated servers with a ton of storage and bandwidth
       | that I could just use instead of being "serverless".
       | 
       | However, I find it to be a hall of mirrors, wondering if anybody
       | on HN has been in my shoes and how they are handling it. I guess
       | my biggest concerns:
       | 
       | - uptime availability (can I promise close to AWS?)
       | 
       | - security (how do i harden my box/selfcloud and have peace of
       | mind?)
       | 
       | - IAM type of roles/permissions (how do i emulate something like
       | IAM for my team?)
       | 
       | Like the billing from AWS is getting to a point where I feel like
       | we can use bunch of droplets behind some "selfcloud" that manages
       | all these things for me. I'm sure a solution exists, I just often
       | have trouble recalling their names. Dokku makes it easy to
       | remember because it sorta rhymes with Heroku.
        
         | nickstinemates wrote:
         | Just use railway.app - free tier just works and you can deploy
         | a sample app on a free account in seconds. It will give you a
         | general idea of how Heroku works.
         | 
         | > It no longer makes sense for me to run weekend projects on
         | AWS outright, thats really for large enterprise applications.
         | 
         | depending on the type of site, cf workers is ridiculous value.
         | single button availability of your content in every corner of
         | the world and you wont pay a dime
        
           | tomatowurst wrote:
           | not sure I quite understand railway, what are they offering?
           | Another AWS on Digitalocean? Would be nice to see exactly
           | what the cpu core/memory/price is.
           | 
           | aren't cf workers very constrained? like your call has to
           | finish within a second or two for it to make sense and I
           | think AWS Lambda matched their price? I could be confused
           | here.
        
       | mardix wrote:
       | Similar to Heroku deploy flow, checkout Sailor, a tiny PaaS to
       | install on your servers/VPS that uses git push to deploy micro-
       | apps, micro-services, sites with SSL, on your own servers or VPS.
       | 
       | https://github.com/mardix/sailor
        
         | skyfaller wrote:
         | I see it's a fork of piku, but I don't see an explanation of
         | why they bothered to fork. Do you know what the difference is?
         | https://github.com/piku/piku
        
       | vanilla wrote:
       | We have been using it for our internal dev and test environment.
       | 
       | I was very disappointed that it did not have tcp/udp proxy
       | support. Fortunately the plug-in system allowed us to extend this
       | functionality in a day.
       | 
       | Dokku is very nice for this use-case. No need to have a
       | complicated kubernetes setup.
        
         | sameOld88 wrote:
         | > No need to have a complicated kubernetes setup.
         | 
         | I'll never understand why one stacks config syntax and
         | semantics is seen as complicated while another stack of gigs
         | and gigs of state is not.
         | 
         | A Linux host that pulls down a web server via its package
         | manager is gigs of special state too. Where's the simplicity?
         | It's no less complicated, maybe more familiar.
         | 
         | There's way too much romantic and poetic day dreaming about
         | what it is we do in IT.
        
           | sureglymop wrote:
           | You're right. But it is a little harder to get kubernetes up
           | and running with a load balancer and your own domain.
           | Obviously not for people who are already familiar with it..
        
       | greysonp wrote:
       | Can't recommend Dokku enough. I've been using it for years on a
       | $20 DigitalOcean box. I have a lot of random web projects/tools,
       | most of which I'm the only user, and it's great to have a super
       | simple way to get them online. Enabling HTTPS and assigning a
       | domain are each just a single command.
        
         | zwarag wrote:
         | How does it differ from portainer?
        
           | wilsonfiifi wrote:
           | Portainer is more of a UI for docker and docker containers.
           | But dokku is and actual platform similar to heroku that helps
           | you deploy your apps.
        
             | toomuchtodo wrote:
             | Would portainer be a good fit for adhoc manual execution of
             | Docker containers on a remote host if a UI would be
             | helpful?
        
             | dopamean wrote:
             | Last I used dokku my understanding was that it used
             | Heroku's open source build packs. So it was very much your
             | own hosted heroku. This was at least 7 years ago though.
        
               | Nextgrid wrote:
               | That's correct and it is still the case.
        
         | punnerud wrote:
         | The same here, and that I can host multiple projects on the
         | same server without any additional cost. If I get enough
         | traffic I can always move it to a new server and redirect the
         | DNS (cloudflair)
        
         | thebiglebrewski wrote:
         | lol are you me?! exactly the same setup over here
        
       | yebyen wrote:
       | There's also Deis Workflow (Hephy Workflow)
       | 
       | https://web.teamhephy.com
       | 
       | For those worried about a Single Point of Failure, you can't have
       | your cake and eat it too. Docker and Dokku is a single point of
       | failure when you build directly on it, I guess. Kubernetes
       | mitigates that.
       | 
       | We're still here, keeping the tires on. I haven't personally
       | tested K8s 1.24 with Workflow yet, but we are actively seeking
       | maintainers on all of the cloud vendors.
       | 
       | If you find that something is broken and want to see it fixed,
       | talk to me on Slack. I'm aware of at least Azure that has broken
       | their Bucket Storage API since Workflow was originally published
       | by Deis, and it hasn't been quite fixed yet.
       | 
       | Documented support for Google Cloud and AWS are both extant as
       | well, although I've heard one person call into question whether
       | Google Cloud storage will work out of the box, or if it still
       | needs upgrades. We'd like to add DigitalOcean support as well, I
       | already know it basically works, we just need to add
       | documentation and probably also give it a quick spit-shine and
       | polish.
       | 
       | Dokku on the other hand is less heavyweight and does not require
       | as much work for maintenance, since it does not have to be
       | decentralized or protect against any SPOF. It's a wonder that
       | more people do not want to use this. I've heard of at least one
       | more Deis Workflow fork in the wild, possibly in better or worse
       | states of maintenance than Team Hephy, but if you are looking to
       | get off of Heroku then you could certainly do much worse.
       | 
       | We do need volunteers as we do not have time to maintain
       | everything by ourselves, (come talk to us on the Slack if you're
       | interested in joining the fun!)
        
       | evoxmusic wrote:
       | Does dokku supports preview environments like Qovery?
        
       | emehex wrote:
       | I've been running https://scrape.world on dokku + DigitalOcean
       | for two years, zero issues!
        
       | thomasfedb wrote:
       | Have been using Dokku in (small scale) production for years and
       | absolutely love it. Was also recently pleasantly surprised to see
       | that Dokku supports ARM... so looking forward to trying it out on
       | my RPi4 next week.
        
       | block_dagger wrote:
       | I've run high-ish traffic production sites on Dokku for years. If
       | you need just one server, it's a dream for Rails/PG/Redis setup.
       | Amazing what reliability it provides. Almost completely written
       | in bash!
        
         | juanse wrote:
         | Could you share more, please? I use the very same stack and I
         | think with the biggest VPS available right now I will have more
         | than enough. It is basically a simple CRUD application.
         | 
         | Could you share how big the VPS yo used is (cores/Ram) and what
         | traffic you got to manage with that?
         | 
         | Thanks.
        
           | your_username wrote:
        
           | chasd00 wrote:
           | Not the parent but to me dokku shines when putting multiple
           | apps on a single server and the fact that deploying is a git
           | push. Letsencrypt and other plugins are icing on the cake.
           | 
           | If you have one app then dedicate a server to it and run it
           | right on the operating system. Maybe have 2 and a load
           | balancer so you can do prod deployments with no downtime. The
           | point is get dokku, docker, and all that abstraction between
           | the network card and your app out of the way.
        
         | RileyJames wrote:
         | Awesome. I've always worried what it can handle, and therefore
         | only run projects on it until they were more serious. But in
         | that context, I've never had a problem (and run them longer
         | than that anyway). To around the 50-100k user per month. Mostly
         | reads tho.
         | 
         | Keen to hear what you're running.
        
       | chasd00 wrote:
       | I've been dokku for a long time. I think before there were any
       | plugins. Works just fine for me, but I'm not doing anything out
       | of the ordinary. I run all my hobby and side projects with it on
       | linode.
        
       | VWWHFSfQ wrote:
       | Did they ever figure out the scaling problem or is it still just
       | "one web dyno and that's it"?
        
         | bigfudge wrote:
         | It's still single machine l, but afaik you can run multiple
         | dynos, and can certainly let run multiple apps and separate
         | web/worker dynos.
        
           | chasd00 wrote:
           | Can't you just put a load balancer in front of N vps running
           | dokku? Although, I haven't done infrastructure since before
           | docker was invented so a little behind the times.
        
           | sscarduzio wrote:
           | Any pointers to documentation on this topic?
        
             | bigfudge wrote:
             | https://dokku.com/docs/processes/process-management/
        
         | freen wrote:
         | You can put dokku in front of different schedulers, kubernetes
         | being one of them.
        
       | AndrewOMartin wrote:
       | I came to the comments first to answer "what's the catch?". There
       | were no comments at the time so I went to the website. This line
       | near the top seems particularly fair and believable.
       | 
       | > _Own your own PAAS. Infrastructure at a fraction of the cost.
       | Powered by Docker, you can install Dokku on any hardware. Use it
       | on inexpensive cloud providers. Use the extra cash to buy a pony
       | or feed kittens. You 'll save tens of dollars a year on your dog
       | photo sharing website._
        
         | viraptor wrote:
         | I've used it on and off. It's ok and I was happy. But it's a
         | fairly thin layer and a leaky abstraction, so I ended up
         | looking at docker logs and firewall rules more times than
         | needed. Unfortunately when things were down, noting the context
         | was not a priority, so I don't have specific issues raised to
         | show.
        
         | mdasen wrote:
         | For me, one of the big catches is that you have a single point
         | of failure. Dokku doesn't run over multiple VMs you have. It's
         | on a VM. If that VM goes down, you're down.
         | 
         | I think one of the selling points of Heroku is that if the box
         | you're running on goes down, your service will just be started
         | on another box and traffic will be routed there and you don't
         | need to do anything.
        
           | ukoki wrote:
           | If you want a much more highly available open source Heroku,
           | there is Cloud Foundry which is used as the basis for a few
           | public PaaS like IBM Bluemix and SAP Cloud Platform. The
           | smallest HA set up is about 50 VMs though, and it's
           | complicated to deploy so not really worth it if you have
           | fewer than 1,000 or so developers to support.
        
             | Bombthecat wrote:
             | Super complicated, tried it several times over the years.
             | 
             | One would think it will get better in newer versions.
             | 
             | But nope..
             | 
             | Didn't try it the last 2 or 3 years though
        
           | zrail wrote:
           | Dokku has official support for k8s and Nomad if you want
           | multiple-host support. The caveat, of course, is that you
           | have to run the cluster.
        
             | mr_luc wrote:
             | Oh, hey! I used Dokku back in the ... I want to say
             | 2012-2013 ? and missed multi-node stuff a bit (nothing that
             | couldn't be scripted around) so this looks cool.
             | 
             | I _do_ see that it shouts  'EXPERIMENTAL!', so I guess it's
             | 'experimental, but official'.
        
           | vagrantJin wrote:
           | Redundancy is kinda your responsibility...
           | 
           | I may have read your comment wrong but it would be wholly
           | unfair to expect Dokku to provide everything and the kitchen
           | sink gratis.
        
             | drusepth wrote:
             | If a service is marketed as an "alternative" to any
             | competitor, I think it's generally reasonable to assume
             | that service covers most of the basic features offered by
             | that competitor.
             | 
             | I've seen tons of "Heroku alternatives" pop up over the
             | past couple months, but they all seem to have (rather
             | large, IMO) downsides of "it does A and B like Heroku, but
             | not X, Y, and Z" (where again, IMO, X, Y, and Z are
             | typically rather core features like redundancy/failover). I
             | know everyone uses services for different reasons, but the
             | general appeal of Heroku that I've seen has been the
             | basically-zero-devops-ever-necessary-for-anything approach
             | they've taken.
        
           | wilsonfiifi wrote:
           | One way to overcome that might be to use ansible to automate:
           | 1. Dokku setup on a new server               2. Deploy your
           | app from a git repository            3. Restore your database
           | from backup
           | 
           | If you aren't comfortable with ansible you can use Fabric [0]
           | or Sup [1]. I think there's even an ansible guide for Dokku
           | deployment on their blog [2].
           | 
           | [0] https://www.fabfile.org/
           | 
           | [1] https://github.com/pressly/sup
           | 
           | [2] https://dokku.github.io/general/automating-dokku-setup
        
           | jeremyjh wrote:
           | If the box you are running in is a VM, the VM host is already
           | providing hardware redundancy. It's not full redundancy but
           | in practice it's sufficient for dog photo sharing sites.
        
             | judge2020 wrote:
             | As far as I know only Google Cloud does 'hardware
             | redundancy'[0]. I've had single-instance outages in AWS and
             | they don't seem to really care if something goes wrong with
             | your instance, although maybe they have more maintenance
             | events than they let on and they might happen transparently
             | to the user thanks to some form of live migration.
             | 
             | 0: https://cloud.google.com/compute/docs/instances/live-
             | migrati...
        
               | jeremyjh wrote:
               | I'm not talking about live migration - the instance will
               | go down and there will be a brief outage while the
               | instance restarts on another hypervisor. The same is true
               | of a single dyno Heroku app.
        
               | electroly wrote:
               | For AWS, nothing involved there is automatic; _you_ have
               | to stop it* and then restart it. It will just stay broken
               | until you restart it yourself.  "Brief outage" suggests
               | it might be automatic but in AWS it's not.
               | 
               | * Possibly multiple times. Instances on degraded hosts
               | have a tendency to get stuck and you have to stop, and
               | then stop again to _force_ stop it, and then sometimes
               | even that doesn 't work and you have to just wait.
               | 
               | Source: have received lots of "EC2 Instance Retirement"
               | emails
        
               | mnd999 wrote:
               | This is what autoscaling groups are for, right? If set
               | the autoscaler to keep one instance running it will spin
               | another one when they retire the one you're using.
        
               | dijit wrote:
               | "Weeks of reading AWS documentation will save you hours
               | of learning about infrastructure"
               | 
               | the topic is here is ease of use.
               | 
               | Comparing Heroku to VMs and correctly configured ASGs is
               | fine for me as a sysadmin, but they're not targeting the
               | same simplicity.
        
               | znep wrote:
               | Not any more. https://aws.amazon.com/about-aws/whats-
               | new/2022/03/amazon-ec... In theory. But yes, sometimes
               | detaching resources can take a long time on a degraded
               | host.
        
           | evoxmusic wrote:
           | If you are looking for a HA alternative, Qovery is the one.
           | It's a Heroku like platform running on AWS built for running
           | production workload. It's multi AZ by design.
           | 
           | (I am co-founder)
        
             | Nextgrid wrote:
             | Can it be licensed and run on bare-metal?
        
       | Gys wrote:
       | Yes, I love Dokku and like to use it as an alternative for some
       | of my Heroku apps. However, the thing I miss most is Heroku
       | including a nice dashboard showing several metrics for my Golang
       | apps (memory usage, go-routines, etc) over time. Heroku has that
       | out of the box and that makes it very convenient.
        
         | claudiug wrote:
         | how difficult will be to build a basic tool for this case?
        
           | Gys wrote:
           | A golang app exposes several metrics by default already. A
           | common way is using Prometheus to collect the data and use
           | Grafana to create a graphic dashboard. But it takes some
           | configuration and needs those services running somewhere. Not
           | something I want to spend much time on.
        
           | viraptor wrote:
           | Not connected to dokku, but you can construct this from:
           | 
           | telegraf - report the host / process metrics
           | 
           | opentracing - instrument the application itself with tracing,
           | with some pre-built libs like https://github.com/opentracing-
           | contrib/go-stdlib
           | 
           | tempo - collect the traces
           | 
           | Loki - collect the logs
           | 
           | influxdb - collect the metrics
           | 
           | grafana - display it all
           | 
           | It's not too hard once you set it up... but as you see
           | there's a lot of elements to it.
        
             | yebyen wrote:
             | Congratulations, you all just suggested re-inventing Deis
             | workflow (with a few additional pieces) :)
             | 
             | There are a lot of elements indeed,
             | https://docs.teamhephy.com/understanding-
             | workflow/components...
             | 
             | This is classic literature:
             | https://docs.teamhephy.com/understanding-
             | workflow/architectu...
             | 
             | It is much easier to just use it than to try and re-invent
             | your own: https://docs.teamhephy.com/quickstart/
             | 
             | I cannot guarantee the cloud provider bits all work, I
             | don't use them so I don't maintain them, but if you have
             | Kubernetes with persistent disk provided, which any managed
             | Kubernetes can most certainly do, it's easy enough to hook
             | up generic Minio (which has the added benefit of working
             | just as well on bare metal hosts), and I'm certain that
             | does work as I use it.
        
               | viraptor wrote:
               | > It is much easier to just use it than to try and re-
               | invent your own
               | 
               | Now listen buddy... That CV is not gonna pad itself, ok?
               | 
               | Seriously though, if you have time and curiosity, I'd
               | recommend putting together a monitoring stack by hand
               | once. There's a lot to learn from that experience.
        
               | yebyen wrote:
               | My go-to stack is Prometheus and Grafana with kube-
               | prometheus-stack Helm chart for Kubernetes.
               | 
               | I'm sure I'm not configuring it well.
               | 
               | There are too many leaps I couldn't follow directly in
               | how to make the config, and there's something about how
               | arrays merge in YAML that makes it harder to write a
               | config like this in Helm... so there is a lot of what
               | I've written here that shouldn't need to be in my own
               | config, because they are the standard default alerts, but
               | I wound up having to include them to make my one extra
               | alert join the rest (and this is my excuse for why it is
               | several hundred lines long, when in reality it's mostly
               | stock.)
               | 
               | This config goes so far as making alerts to Slack with
               | Alertmanager that work out of the box!
               | 
               | https://github.com/kingdonb/flux2/blob/monitoring/manifes
               | ts/...
               | 
               | :sunglasses:
        
         | striking wrote:
         | The Pro version appears to offer, or may eventually offer (?),
         | this set of features https://pro.dokku.com/
        
         | sureglymop wrote:
         | I just deployed netdata also in Dokku.
        
       | pixelmonkey wrote:
       | Also check out piku, especially if you are hosting Python or Node
       | apps:
       | 
       | https://github.com/piku/webapp-tutorial/blob/master/README.m...
       | 
       | It is a way to get the same sort of developer experience benefit
       | as dokku, but without dockers and containers, using plain UNIXy
       | tools on a single Linux node. The above link explains how it
       | works.
        
       | nanope wrote:
       | Why would I use this over say minikube + ingress or just plain
       | Docker + Caddy?
        
       | squiffsquiff wrote:
       | They're just begging for it to be called 'Dooku' when it breaks,
       | aren't they?
        
       ___________________________________________________________________
       (page generated 2022-05-14 23:01 UTC)