
Show HN: A simple Go utility to ease deployments via SSH and SCP - stevekemp
https://github.com/skx/deployr/
======
kodablah
Heh, I made a similar thing (mostly unreleased/undocumented at [0], original
idea at [1]) that would take your Go code, build a binary wrapper for it using
the target OS arch, SSH to the target, SCP the file over, run the binary,
connect stdout/stderr/stdin with the remote, allow the remotely running binary
to request files from the home binary, and delete itself once complete. One
thing I found is SCP/SFTP is a really slow transfer protocol and an
alternative should be made available as an option (but leave SSH as the
default).

I believe that we are getting to a point where config management might as well
be in a programming language instead of a bunch of ad-hoc scripts in templates
that defer to dynamic language scripts and become a mess.

0 - [https://github.com/cretz/systrument](https://github.com/cretz/systrument)
1 - [https://github.com/cretz/software-
ideas/issues/1](https://github.com/cretz/software-ideas/issues/1)

~~~
rollcat
> I believe that we are getting to a point where config management might as
> well be in a programming language instead of a bunch of ad-hoc scripts in
> templates that defer to dynamic language scripts and become a mess.

That's the idea behind my brainchild, judo[1].

[1]: [https://github.com/rollcat/judo](https://github.com/rollcat/judo)

~~~
Kimitri
Judo seems like a great automation option for some simpler tasks where Ansible
could be considered overkill. For me, that covers almost 100% of my remote
automation needs. :) Nice!

~~~
kchhina
Another infrastructure as code (not code as in YAML, etc.), but programming
language 'code' tool is Pulumi[0].

[0] [https://www.pulumi.com/](https://www.pulumi.com/)

------
tyingq
A comparison to Ansible might be helpful to help clarify why you would choose
this instead.

~~~
stevekemp
That's a good point. Ansible is robust, well-known, well-supported, and has
support for doing anything and everything from creating users, to setting
cron-jobs, MySQL users, and more.

This application only allows two things:

* Uploading a file, or series of files. * Running a command, or series of commands.

In short I'm very simple. But because of that it avoids some of the horrors of
trying to be overly-complex in the way that Ansible is. It avoids cryptic
failures, and the horrible "language" for looping constructs, etc.

I could imagine adding support for cron, mysql, etc, but I think as soon as
you allow real conditional actions to such utilities it becomes a mess to use.

~~~
Braxton_Hicks
So perhaps this is most comparable to Python's fabric library.

~~~
stevekemp2
Yes I think that is a fair comparison. Fabric allows a similar set of
primitives.

------
atmosx
Looks a lot like sup[1].

[1]: [https://github.com/pressly/sup](https://github.com/pressly/sup)

------
finaliteration
Coincidentally I just wrote a similar set of tools using bash scripts for
doing deployments of a simple app. I opted for rsync mostly because I’m more
familiar with it than scp. It basically runs some build commands, copies the
files up, and runs some commands to restart Docker containers.

I always think it’s interesting to see things pop up on HN that are randomly
relevant to things I’m thinking about or working on.

------
hexmiles
Small question:

In the readme (first section) you use, as an example, the command:

"Run adduser bob 2>/dev/null"

why do you add the "2>/dev/null" part? I see a lot of
tutorial/guide/example/etc... do that! I understand what it does (send the
stderr to devnull) but i don't understand why would i want to do that?

~~~
stevekemp2
Adduser will fail a second time, and show "user already exists" or similar. We
hide that via the redirect

------
yunyu
This definitely looks interesting, have you considered an option to use rsync
instead of scp?

~~~
stevekemp
No, I had not. Interesting idea. Presumably over the existing SSH, rather than
using the rsynd-deamon?

Not a bad idea, but I guess I'd need to think about it. Mostly the "large"
files I pull from github, or distribution sites. I tend to only upload some
simple config-files, and systemd-service units. So the extra overhead of SCP
isn't so significant.

~~~
silverglass
Yes, rsync communicates with the rsync at the other end automatically over
SSH. You could use rsync by default and then fallback to scp if rsync isn't
usable.

------
mahesh_rm
A similar tool, but npm/js, I successfully use in a few apps:
[https://github.com/shipitjs/shipit](https://github.com/shipitjs/shipit)

------
mooreds
So, capistrano? [https://capistranorb.com/](https://capistranorb.com/)

But you don't need Ruby installed?

