Showing posts with label linux. Show all posts
Showing posts with label linux. Show all posts

Sunday, 20 September 2020

Simple way to deploy docker app on production machine

Small software house house/freelancer life isn't easy. Reading HN post about fancy new tech is amusing but as much as it is nice to read as much it's often not reachable for team counting one person.
So whenever I read something new I ask myself this simple question.

Is that new thingy/tech single dev scalable ?

Let's consider a docker application deployment problem. It's hard to do it both: quick and good enough (production ready).

Later, when the app matures/goes bigger you can create a proper CI but at this very beginning you need something simple. Here is how I do deal with it.

First deploy a local registry server push your app image there, next create ssh tunnel and do remote port forward. Finally fetch image from registry and run the app.

Let's try it out line by line. I do assume you have a docker build image named my-image-app (either created with docker build or docker compose) and want to deploy it to customer's customer-server.address.net on port 8888 over ssh.

First create a new local docker registry server. As docker docs claims it's as simple as:

docker run -d -p 5000:5000 --restart=always --name registry registry:2
Ok your registry server is up and running. Next push your app image to this new registry.
To do that you need to tag my-image-app with a correct name including registry address  ( ie. localhost:5000).

docker tag my-image-app localhost:5000/my-image-app
and then push it to the registry server

docker push localhost:5000/my-image-app
Next connect to remote server via ssh with remote port forwarding

ssh -R 5001:localhost:5000 customer-server.address.net -p 8888
Now you are logged into remote server and your local machine's port 5000 is visible on the remote machine on port 5001.

Finally run your app on the remote machine:

remote-prompt: docker run -d --name my-app localhost:5001/my-image-app

App is running. We are done.

What we can do even better here, is to write you customer server settings into your local .ssh/config file:


host customer-server
 HostName customer-server.address.net
 Port 8888
 User user
 RemoteForward 5001 localhost:5000

Then connecting to remote server is as simple as:

ssh customer-server

You may also consider adding your public key to  .ssh/authorized_keys  on the remote server.

UPDATE: one crucial command connect via ssh was missing when published this first time
UPDATE1: fixed authorized_keys entry

Monday, 14 July 2014

Set of informative links regarding Linux/Unix

Redit Linux http://www.reddit.com/r/linux/
Name says it all http://www.unixmen.com/
Not exactly Linux but often geeky https://news.ycombinator.com/
Ubuntu and desktop oriented - still valuable http://www.omgubuntu.co.uk/
Based on: http://www.reddit.com/r/linux/comments/2alzzf/informative_linux_websites/

Wednesday, 18 September 2013

Yet another linux CLI tips & tricks list (updated)

Yet another linux CLI tips & tricks list

(update: 2017-12-15 added few magic mc commands at bottom)

When I started my jurney with *nix like systems, the environment was hostile to me. But after a few years it become obvious that the CLI is a superior way of dealing with Linux OS. You can see a lot of similiar articles in the web like here or here but this list is stripped to what I find useful on the one hand, eliminating obvious on the other (eg. I'm assuming that you know you can browse hostory with arrow key or use tab for apt-get install completion).
So here is my list.
Reverse search is one of the most important key shortcuts when using CLI, because usually you don't remember what exact arguments were used in in your beloved tricky_and_very_long_command you've commited in the past. You will find out that in the real life there is a limited number of commands (with minor modifications) your are using frequently.

ctrl+d leave or exit from console/ssh session etc

current line navigation commands

  • ctrl+e go to end of line
  • ctrl+a go to begining of line
  • ctrl+u delete till begining of line
  • ctrl+k delete till end of line
  • ctrl+w delete word before cursor
NOTE you can change default bash editor to vi like editor with: set -o vi command

tmux

Allows executing commands on a detached console (useful when doing something via ssh and can't/won't have open session) - this should be a separate blog post but here is my cheat sheet
  • tmux start a new tmux session
  • tmux a or tmux attach attach to an existing tmux session
while in tmux session
  • ctrl+b+d leave (d for detach) tmux session not killing it
  • ctrl+b+c create a new pane
  • ctrl+b+n next pane
  • ctrl+b+p previous pane
  • ctrl+b+" split pane horizontally
  • ctrl+b+% split pane vertically
  • ctrl+b+arrow go to: up right down left panel
  • ctrl+b holding ctrl key and pressing one of arrow keys - allow change panel size!
NOTE: nice thing about tmux is...you can use tmux in tmux by doing double ctrl+b

mc - Midnight Commander

If you are old enough (like I am) you do remember famous Norton Commander or Total Commander. Midnight Commander is a similar tool - superior when it comes to copy files over ssh or ftp.
NOTE: if an escape key esc is not present int your keyboard - like in many bluetooth keyboards - you can use ctrl+[ instead.
  • ctrl+\ - open favorite location list (then add current, edit, delete)
  • esc+9 - open right pane menu
  • esc+0 - exit
  • esc+h - in any entry field (like 'open ftp/ssh' dialog window) wherever ^ character is present - opens current entry field history dialog
  • alt + o - display dir under cursor on other pane
  • alt + i - display current dir on other pane
  • alt + . - display/hide hidden files
  • alt + h - display history
  • alt + y/u -  change dir to previous/next dir

Simple way to deploy docker app on production machine

Small software house house/freelancer life isn't easy. Reading HN post about fancy new tech is amusing but as much as it is nice to read...