Re: Ci automated deploy of seaside to Digital Ocean
Norbert Hartl <[email protected]>
| Newsgroups | gmane.comp.lang.smalltalk.squeak.seaside |
|---|---|
| Message-ID | <[email protected]> |
> Am 11.05.2018 um 17:48 schrieb Tim Mackinnon <[email protected]>: > > This is very interesting - as I was taking the hobbyist view I completely overlooked what docker solutions there are. > > 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. > > I’m understanding your experience is that it’s still not quite that simple? > It can be quite simple. To create a simple docker container running a pharo image is very easy. Docker provides a restart policy for containers. So this is by far easier than those unix services (which I find more and more annoying over the years). But most things are easy if you have a single runtime and get really complicated as soon as you have two runtimes. Going from two to three is easy again ;) Norbert > 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. > > You’ve really got me thinking now... > > Tim > > Sent from my iPhone > > On 11 May 2018, at 14:39, Norbert Hartl <[email protected] <mailto:[email protected]>> wrote: > >> >> >>> Am 10.05.2018 um 23:55 schrieb Tim Mackinnon <[email protected] <mailto:[email protected]>>: >>> >>> 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… >>> >> 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 >> 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. >> The medium heavy approach for you should be: >> >> 1. nginx as frontend server. This proxies all requests to a docker service traefik (https://traefik.io/ <https://traefik.io/>) >> 2. traefik listens on docker whenever a container is started and adds it to the load balancing routine. >> 3. You deploy any number of your application and they will automatically load balanced. >> >> Norbert >> >>> Still for hobby experiments - this and Digital Ocean seems ideal. >>> >>> Tim >>> >>>> On 10 May 2018, at 22:17, Tim Mackinnon <[email protected] <mailto:[email protected]>> wrote: >>>> >>>> Ah - I see (hadn’t thought about having a configurable port number), >>>> >>>> So if Ive understood correctly I could install supervisord with a config file like yours. >>>> >>>> Then on completion of my build, I could sftp my new image up to DO, and then execute a command like: supervisorctl restart psworker? >>>> >>>> Doing a check does seem to show lots of people use either it or monit (the latter being a bit more complicated). >>>> >>>> Thanks for the help - this is my next learning step. >>>> >>>> Tim >>>> >>>>> On 10 May 2018, at 19:47, Esteban A. Maringolo <[email protected] <mailto:[email protected]>> wrote: >>>>> >>>>> >>>>> >>>>> On 10/05/2018 15:30, Esteban A. Maringolo wrote: >>>>>> How would you know when to kill the running vm+image? It might have >>>>>> active sessions. >>>>>> >>>>>> If you don't care about that, what I used to manage a bunch of "worker >>>>>> images" (process groups) with supervisord [1], so in that case you'd >>>>>> stop all the related workers, copy the new image, and start the >>>>>> workers again. >>>>> My supervisord.conf entry for a pool of working images was: >>>>> >>>>> [program:psworker] >>>>> command=/home/trentosur/perfectstore/pharo-vm/pharo --nodisplay >>>>> /home/trentosur/perfectstore/ps.image worker.st <http://worker.st/> 818%(process_num)1d >>>>> process_name=%(program_name)s_%(process_num)02d ; process_name expr >>>>> (default %(program_name)s) >>>>> numprocs=2 >>>>> directory=/home/trentosur/perfectstore >>>>> autostart=false >>>>> autorestart=true >>>>> user=trentosur >>>>> stopasgroup=true >>>>> killasgroup=true >>>>> >>>>> >>>>> Part of the worker.st <http://worker.st/> file handling the port number was: >>>>> >>>>> "Seaside server start" >>>>> Smalltalk isHeadless ifTrue: [ >>>>> Smalltalk commandLine arguments >>>>> ifEmpty: [ >>>>> Transcript show: 'No port parameter was specified.'; cr. >>>>> Smalltalk quitPrimitive. ] >>>>> ifNotEmpty: [:args | >>>>> | port | >>>>> port := args first asNumber asInteger. >>>>> Transcript show: 'Starting worker image at port ', port asString; cr. >>>>> ZnZincServerAdaptor startOn: port. >>>>> ZnZincServerAdaptor default server debugMode: false. >>>>> ] >>>>> ] >>>>> ifFalse: [ >>>>> | port | >>>>> port := 8080. >>>>> Transcript show: 'Starting worker image at port ', port asString; cr. >>>>> ZnZincServerAdaptor startOn: port. >>>>> ZnZincServerAdaptor default server debugMode: true. >>>>> ]. >>>>> >>>>> >>>>> I hope it helps. >>>>> >>>>> Best regards, >>>>> >>>>> >>>>> >>>>> -- >>>>> Esteban A. Maringolo >>>>> _______________________________________________ >>>>> seaside mailing list >>>>> [email protected] <mailto:[email protected]> >>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside <http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside> >>>> >>>> _______________________________________________ >>>> seaside mailing list >>>> [email protected] <mailto:[email protected]> >>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside <http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside> >>> >>> _______________________________________________ >>> seaside mailing list >>> [email protected] <mailto:[email protected]> >>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside <http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside> >> >> _______________________________________________ >> seaside mailing list >> [email protected] <mailto:[email protected]> >> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside <http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside> > _______________________________________________ > seaside mailing list > [email protected] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside _______________________________________________ seaside mailing list [email protected] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside