<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto">This is very interesting - as I was taking the hobbyist view I completely overlooked what docker solutions there are.<div><br></div><div>Would like to hear more - and whether there is something that’s easy/cheap to play with part time. I would hope for something I can just stick my Pharo images in and it takes care of restarts etc and could scale if my hobby grew.</div><div><br></div><div>I’m understanding your experience is that it’s still not quite that simple?</div><div><br></div><div>I really love the simplicity of lambda - and it’s pretty easy to run Pharo there too - but could you write a web app that way? They say no - but there are some attractions to escape this nonsense we still face today.</div><div><br></div><div>You’ve really got me thinking now...</div><div><br></div><div>Tim</div><div><br><div id="AppleMailSignature">Sent from my iPhone</div><div><br>On 11 May 2018, at 14:39, Norbert Hartl <<a href="mailto:norbert@hartl.name">norbert@hartl.name</a>> wrote:<br><br></div><blockquote type="cite"><div><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">Am 10.05.2018 um 23:55 schrieb Tim Mackinnon <<a href="mailto:tim@testit.works" class="">tim@testit.works</a>>:</div><br class="Apple-interchange-newline"><div class=""><div class="">I forgot to mention - you are correct that this isn’t a good solution for a widely use production system - as I think you would want to use a load balancer to stop traffic to one image while sessions complete before terminating it. OR - there must be some cloud based solution for this these days - presumably using docker…<br class=""><br class=""></div></div></blockquote>All of this can be done. It just depends on the learning curve you want to take. I successfully escaped the unix/linux hell (used daemontools, monti, systemd before) for my services and entered docker hell :P </div><div>I use docker swarm and that has everything you describe above. I can deploy any number of images across all my machines with ease. There is a zero-downtime option so there is no service interruption. But the amount of time I had to put into there was massive. So while I would encourage the usage of docker I’m not sure it is for everyone. </div><div>The medium heavy approach for you should be:</div><div><br class=""></div><div>1. nginx as frontend server. This proxies all requests to a docker service traefik (<a href="https://traefik.io/" class="">https://traefik.io/</a>)</div><div>2. traefik listens on docker whenever a container is started and adds it to the load balancing routine.</div><div>3. You deploy any number of your application and they will automatically load balanced.</div><div><br class=""></div><div>Norbert</div><div><br class=""><blockquote type="cite" class=""><div class=""><div class="">Still for hobby experiments - this and Digital Ocean seems ideal.<br class=""><br class="">Tim<br class=""><br class=""><blockquote type="cite" class="">On 10 May 2018, at 22:17, Tim Mackinnon <<a href="mailto:tim@testit.works" class="">tim@testit.works</a>> wrote:<br class=""><br class="">Ah - I see (hadn’t thought about having a configurable port number),<br class=""><br class="">So if Ive understood correctly I could install supervisord with a config file like yours.<br class=""><br class="">Then on completion of my build, I could sftp my new image up to DO, and then execute a command like: supervisorctl restart psworker?<br class=""><br class="">Doing a check does seem to show lots of people use either it or monit (the latter being a bit more complicated).<br class=""><br class="">Thanks for the help - this is my next learning step.<br class=""><br class="">Tim<br class=""><br class=""><blockquote type="cite" class="">On 10 May 2018, at 19:47, Esteban A. Maringolo <<a href="mailto:emaringolo@gmail.com" class="">emaringolo@gmail.com</a>> wrote:<br class=""><br class=""><br class=""><br class="">On 10/05/2018 15:30, Esteban A. Maringolo wrote:<br class=""><blockquote type="cite" class="">How would you know when to kill the running vm+image? It might have<br class="">active sessions.<br class=""><br class="">If you don't care about that, what I used to manage a bunch of "worker<br class="">images" (process groups) with supervisord [1], so in that case you'd<br class="">stop all the related workers, copy the new image, and start the<br class="">workers again.<br class=""></blockquote>My supervisord.conf entry for a pool of working images was:<br class=""><br class="">[program:psworker]<br class="">command=/home/trentosur/perfectstore/pharo-vm/pharo --nodisplay<br class="">/home/trentosur/perfectstore/ps.image <a href="http://worker.st" class="">worker.st</a> 818%(process_num)1d<br class="">process_name=%(program_name)s_%(process_num)02d ; process_name expr<br class="">(default %(program_name)s)<br class="">numprocs=2<br class="">directory=/home/trentosur/perfectstore<br class="">autostart=false<br class="">autorestart=true<br class="">user=trentosur<br class="">stopasgroup=true<br class="">killasgroup=true<br class=""><br class=""><br class="">Part of the <a href="http://worker.st" class="">worker.st</a> file handling the port number was:<br class=""><br class="">"Seaside server start"<br class="">Smalltalk isHeadless ifTrue: [<br class="">Smalltalk commandLine arguments<br class="">  ifEmpty: [<br class="">    Transcript show: 'No port parameter was specified.'; cr.<br class="">    Smalltalk quitPrimitive. ]<br class="">  ifNotEmpty: [:args |<br class="">    | port |<br class="">    port := args first asNumber asInteger.<br class="">    Transcript show: 'Starting worker image at port ', port asString; cr.<br class="">    ZnZincServerAdaptor  startOn: port.<br class="">    ZnZincServerAdaptor default server debugMode: false.<br class="">  ]<br class="">]<br class="">ifFalse: [<br class="">    | port |<br class="">    port := 8080.<br class="">    Transcript show: 'Starting worker image at port ', port asString; cr.<br class="">    ZnZincServerAdaptor  startOn: port.<br class="">    ZnZincServerAdaptor default server debugMode: true.<br class="">  ].<br class=""><br class=""><br class="">I hope it helps.<br class=""><br class="">Best regards,<br class=""><br class=""><br class=""><br class="">-- <br class="">Esteban A. Maringolo<br class="">_______________________________________________<br class="">seaside mailing list<br class=""><a href="mailto:seaside@lists.squeakfoundation.org" class="">seaside@lists.squeakfoundation.org</a><br class=""><a href="http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside</a><br class=""></blockquote><br class="">_______________________________________________<br class="">seaside mailing list<br class=""><a href="mailto:seaside@lists.squeakfoundation.org" class="">seaside@lists.squeakfoundation.org</a><br class=""><a href="http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside</a><br class=""></blockquote><br class="">_______________________________________________<br class="">seaside mailing list<br class=""><a href="mailto:seaside@lists.squeakfoundation.org" class="">seaside@lists.squeakfoundation.org</a><br class=""><a href="http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside</a><br class=""></div></div></blockquote></div><br class=""></div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>seaside mailing list</span><br><span><a href="mailto:seaside@lists.squeakfoundation.org">seaside@lists.squeakfoundation.org</a></span><br><span><a href="http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside</a></span><br></div></blockquote></div></body></html>