Skip to content

Commit ec70638

Browse files
committed
Init commit
0 parents  commit ec70638

8 files changed

Lines changed: 199 additions & 0 deletions

File tree

.dockerignore

Whitespace-only changes.

.gitignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# OS generated files #
2+
######################
3+
.DS_Store
4+
.DS_Store?
5+
._*
6+
.Spotlight-V100
7+
.Trashes
8+
ehthumbs.db
9+
Thumbs.db

README

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# MayMeetup Demo
2+
3+
This is a demo of how to setup a simple website using docker and docker-compose using Docker for mac.
4+
Version 1.11.1-beta10 (build: 6662)
5+
6+
* `sudo sh -c 'echo "127.0.0.1\tdockermeetup.dev" >> /etc/hosts'`
7+
* `docker-compose up -d`
8+
* open http://dockermeetup.dev in a browser

docker-compose.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
version: '2'
2+
services:
3+
lb:
4+
image: dockercloud/haproxy:1.2
5+
ports:
6+
# HOST:CONTAINER
7+
- '80:80'
8+
links:
9+
- web
10+
volumes:
11+
# HOST:CONTAINER
12+
- /var/run/docker.sock:/var/run/docker.sock
13+
environment:
14+
BALANCE: roundrobin
15+
VIRTUAL_HOST: dockermeetup.dev
16+
17+
web:
18+
restart: always
19+
dns:
20+
- 8.8.8.8
21+
build:
22+
context: ./web
23+
dockerfile: Dockerfile
24+
environment:
25+
DATABASE_USER: root
26+
DATABASE_PASS: password
27+
DATABASE_HOST: db
28+
DATABASE_NAME: dev-db
29+
GIN_MODE: debug
30+
HTTP_PORT: 8080
31+
expose:
32+
- "8080"
33+
links:
34+
- db
35+
36+
db:
37+
image: mysql
38+
environment:
39+
MYSQL_DATABASE: "dev-db"
40+
MYSQL_ROOT_PASSWORD: "password"
41+
ports:
42+
- "3306:3306"

web/Dockerfile

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM golang
2+
3+
# Copy the local package files to the container's workspace.
4+
ADD . /go/src/web
5+
6+
WORKDIR /go/src/web
7+
8+
# Document that the service listens on port 8080.
9+
EXPOSE 8080
10+
11+
RUN go get github.com/jinzhu/gorm
12+
RUN go get github.com/joho/godotenv
13+
RUN go get github.com/gin-gonic/gin
14+
RUN go get github.com/go-sql-driver/mysql
15+
16+
RUN go build -o main .
17+
CMD ["/go/src/web/main"]

web/main.go

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net/http"
7+
"os"
8+
9+
"github.com/gin-gonic/gin"
10+
_ "github.com/go-sql-driver/mysql"
11+
"github.com/jinzhu/gorm"
12+
"github.com/joho/godotenv"
13+
)
14+
15+
func main() {
16+
17+
initEnv()
18+
defer initLogger().Close()
19+
20+
router := gin.Default()
21+
router.Use(CORSMiddleware())
22+
router.LoadHTMLGlob("templates/*")
23+
router.Static("img", "./public/img")
24+
25+
router.GET("/", func(c *gin.Context) {
26+
c.HTML(http.StatusOK, "index.tmpl", gin.H{
27+
"title": "Docker Meetup",
28+
})
29+
})
30+
31+
v1 := router.Group("v1")
32+
{
33+
v1.GET("/health_check", func(c *gin.Context) {
34+
c.JSON(200, gin.H{
35+
"message": "healthy",
36+
})
37+
})
38+
}
39+
40+
port := os.Getenv("HTTP_PORT")
41+
42+
fmt.Println("Port: ", port)
43+
router.Run(fmt.Sprintf(":%s", port))
44+
}
45+
46+
func initEnv() {
47+
env := godotenv.Load()
48+
if env != nil {
49+
log.Println("Error loading .env file")
50+
}
51+
}
52+
53+
func initDB() (*gorm.DB, error) {
54+
dbUser := os.Getenv("DATABASE_USER")
55+
dbPass := os.Getenv("DATABASE_PASS")
56+
dbHost := os.Getenv("DATABASE_HOST")
57+
dbName := os.Getenv("DATABASE_NAME")
58+
59+
connectionString := fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?charset=utf8&parseTime=True", dbUser, dbPass, dbHost, dbName)
60+
61+
db, err := gorm.Open("mysql", connectionString)
62+
if err != nil {
63+
fmt.Println(err)
64+
return nil, err
65+
}
66+
db.DB().Ping()
67+
db.DB().SetMaxIdleConns(5)
68+
db.DB().SetMaxOpenConns(50)
69+
70+
logMode := true
71+
if os.Getenv("GIN_MODE") == "release" {
72+
logMode = false
73+
}
74+
db.LogMode(logMode)
75+
76+
return db, nil
77+
}
78+
79+
func initLogger() *os.File {
80+
81+
var logFile *os.File
82+
var err error
83+
if _, err = os.Stat("log"); os.IsNotExist(err) {
84+
logFile, err = os.Create("log")
85+
log.Println("Logfile created")
86+
} else {
87+
logFile, err = os.OpenFile("log", os.O_WRONLY, 0666)
88+
log.Println("Logfile opened")
89+
}
90+
91+
if err != nil {
92+
log.Fatal("Logfile error: ", err)
93+
}
94+
95+
log.SetOutput(logFile)
96+
97+
return logFile
98+
}
99+
100+
// CORSMiddleware test
101+
func CORSMiddleware() gin.HandlerFunc {
102+
return func(c *gin.Context) {
103+
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
104+
c.Writer.Header().Set("Access-Control-Max-Age", "86400")
105+
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
106+
c.Writer.Header().Set("Access-Control-Allow-Headers", "Origin, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, If-Modified-Since, expiry, uid, token-type, access-token, client, accept")
107+
c.Writer.Header().Set("Access-Control-Expose-Headers", "Content-Length")
108+
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
109+
110+
if c.Request.Method == "OPTIONS" {
111+
fmt.Println("OPTIONS")
112+
c.AbortWithStatus(200)
113+
} else {
114+
c.Next()
115+
}
116+
}
117+
}
49.5 KB
Loading

web/templates/index.tmpl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<html>
2+
<h1>
3+
{{ .title }}
4+
</h1>
5+
<img src="img/bourbon-docker-whale-home-logo.png">
6+
</html>

0 commit comments

Comments
 (0)