Using Docker-compose

Standard

Automating

Commands for docker-compose

You will need a YAML file that contains your stack.

Stack file

A little more complex example: https://gist.github.com/mfung/9b0fd65ccc793c7b1ec44dfb2deb370d

Install & Using Docker (OSX, CoreOS, Docker-CM, Alpine Linux, Docker-Compose)

Standard

I recently decided to consolidate some of my websites onto one server. I also wanted to https (SSL) most if not all my websites. Before I would use CentOS or Ubuntu and Nginx as a reverse proxy with Nginx/Passenger serving my Rails apps and Apache/PHP serving my WordPress/PHP sites.

I’ve known about Docker and I’ve used it indirectly, a Rails app i worked on used it in production but it was abstracted from us software engineers. So I installed Docker-CM on both CentOS, Ubuntu, and Docker on OSX to experiment.

OSX: https://docs.docker.com/docker-for-mac/install/

After spinning up some containers and learning some Docker commands.

Docker Commands

I started to research minimalist Linux distros for the host OS. I only need to be able to run Docker-CM, maybe a firewall, and some other minimal software on it because the heavy lifting would be done in each of the containers. While doing that I learned about Alpine Linux for the container image. I was using CentOS and Ubuntu images at first and while looking at host images and file sizes I realized I can be more efficient with the containers as well.

Docker Images

REPOSITORYTAGSIZE (MB)
alpinelatest4.15
centoslatest207.0
ubuntulatest111.0
busyboxlatest1.14

Now why I didn’t use BusyBox instead of Alpine. I just found alpine and apk easy and familiar. And their motto is “Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busy box.” I like security, I like lightweight, and I like Linux.

With all this playing around and researching, I found docker-compose and read up on creating a Dockerfile. I also ran across some important images:

postgres:10.1-alpine
nginx:alpine
jrcs/letsencrypt-nginx-proxy-companion
jwilder/docker-gen
WordPress (there are different flavors of alpine, apache, and different versions of PHP)

What I wanted in my ecosystem is Postgres (Phoenix, Rails, and my goto DB), MySQL (for my WordPress sites), Redis, MongoDB + R, Nginx Proxy, Apache Virtual Hosting not just 1 instance of WordPress per container.

Next

Programming languages/platforms and their package managers

Standard

This isn’t a complete list nor is it a best of list. This is just a list of what i’ve found and use.

Language / PlatformLibrary / Package Manager
RubyRubyGems
Node.jsnpm
Common LispQuicklisp
PHPComposer
PerlPPM / CPAN
JavaScriptYARN
Ubuntuyum
CentOSapt-get
Mac OSXhomebrew
Erlang / Elixirhex.pm
PythonPip / Eggs
Cclib

What files did you change in your branch that is different from master?

Standard

Another one of my favorite commands I use often. I usually do this before I run rubocop or when I push to github before I do a pull request.

In my .zshrc I have an alias:

 

Batch clean up of local git branches

Standard

I usually add  an alias in my .zshrc file so that I can run a single command to clean up feature branches that are merged into master or develop.

But if you run:

This will remove all branches that are merged into master or develop.

How to speed up bundle install on a Mac

Standard

Most new laptops/computers come with multiple cores standard.

So assuming you do have a system with multiple cores why not use them.

* This might work on any *nix system just find the appropriate commands.

Setup Jenkins and BitBucket without plugins

Standard

This was pretty straight forward since BitBucket has hooks ready for Jenkins.

I usually create 2 Jenkins projects, 1 to build and 1 to deploy.

Jenkins Server

Make sure you have a Jenkins user that can Read Overall and Read Job. I use “Project-based Matrix Authorization Strategy” you can find that under “Configure Global Security”

So I have a user called automated-user and it has Read Overall and Read Job checked. It also has an API Token you will need that you will find here: Jenkins >> Manage Jenkins >> Manage Users >> Select your user, in my case ‘automated-user’ >> Configure >> “Show API Token”. I get eadefe23232121232sdasdfadf as an example.

Build Project

Give the project a name: project-name-build
Source Code Management: Select “Git Repositories” >> Repository URL = https://username@bitbucket.org/username/git-repo.git >> Add credentials & Select it.
Build Triggers: Check, “Trigger builds remotely (e.g., from scripts)” >> Authenticated Token, enter a token SecureRandom.urlsafe_base64 works well for this. Lets say we got this: wtOhS3d4TV1MRX_bVn_lAA

Deploy Project

Source Code Management: Select “Git Repositories” >> Repository URL = https://username@bitbucket.org/username/git-repo.git >> Add credentials & Select it.
Build Triggers: Check, “Build after other projects are built”

BitBucket

Go to: Your Repo >> Settings >> Hooks >> Select Jenkins

Enter: 
Endpoint: http://automated-user:eadefe23232121232sdasdfadf@ci-server-address.com
Project Name: project-name-build
Token: wtOhS3d4TV1MRX_bVn_lAA

Save.

You should be good to go minus some settings you’ll need to configure based on your needs.

Creating a new rails app

Standard

How to create a new project without test unit and with postgresql database

 

My grep commands

Standard

When I search for things in my codebase I find that using the terminal and grep is usually the best option. Here is what I usually run: