Deploy Docker Container with Github Actions - Session 1

Deploy Docker Container with Github Actions - Session 1

Prerequisite

  • Account Docker Hub

  • Account Github

  • Account AWS

  • Ansible

  • Terraform

  • Golang

  • Docker

  • VS Code

Arsitektur Diagram

Create Instance AWS EC2

buat satu saja server menggunakan AWS EC2 bisa create langsung melalui console panel AWS atau menggunakan terraform. Untuk konfigurasi menggunakan terraform sudah saya berikan pada artikel Ansible Practice - Session 1.

Install Docker on Instance AWS EC2

Instance AWS EC2 memakai ubuntu 22.04, lihat di dokumentasi install docker on ubuntu 22.04.

jika sudah menginstall Docker di Instance AWS EC2 lalu masukan user Ubuntu ke group docker.

$sudo usermod -aG docker ubuntu

exit terlebih dahulu dari terminal dan remote kembali. check apakah docker sudah running di instance AWS EC2 nya.

$docker ps
atau
$docker container ls -a

Create App Golang

buat folder untuk aplikasi golang nya dan buka menggunakan VSCode

$go mod init github.com/****/apiserver

create main.go

package main

import "fmt"

func main() {
    fmt.Println("Server running")
}

test apakah running

$go run .
Server running

selanjutnya install Framework Golang yaitu Gin

$go get github.com/gin-gonic/gin

edit file main.go

package main

import (
    "os"

    "github.com/gin-gonic/gin"
)

func main() {
    hostname, _ := os.Hostname()
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "code":    200,
            "message": "api server",
            "server":  hostname,
        })
    })
    r.Run("0.0.0.0:8144")
}

coba running

$go run .

dan akses ke localhost:8144 menggunakan web browser atau bisa juga melalui Postman.

Create Repository Github

buat repository untuk mengupload Aplikasi Golang yang tadi sudah dibuat .

$ git add .
$ git commit -m "push app golang"
[master (root-commit) d207657] push app golang
 3 files changed, 129 insertions(+)
 create mode 100644 go.mod
 create mode 100644 go.sum
 create mode 100644 main.go
$ git branch -M main
$ git remote add origin https://github.com/mdrdani/container-app.git
$ git push -u origin main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 4.21 KiB | 539.00 KiB/s, done.
Total 5 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/mdrdani/container-app.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.