[Seaside] Ci automated deploy of seaside to Digital Ocean

Tim Mackinnon tim at testit.works
Fri May 11 15:48:45 UTC 2018


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?

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 <norbert at hartl.name> wrote:
> 
> 
> 
>> Am 10.05.2018 um 23:55 schrieb Tim Mackinnon <tim at testit.works>:
>> 
>> 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/)
> 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 <tim at testit.works> 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 <emaringolo at gmail.com> 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 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 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
>>>> seaside at lists.squeakfoundation.org
>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>> 
>>> _______________________________________________
>>> seaside mailing list
>>> seaside at lists.squeakfoundation.org
>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>> 
>> _______________________________________________
>> seaside mailing list
>> seaside at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> 
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/seaside/attachments/20180511/b9be09cb/attachment-0001.html>


More information about the seaside mailing list