From 2315dc39b6c84bdb8fbbe778e56e4b27b8760ba9 Mon Sep 17 00:00:00 2001 From: Lance Ju Date: Fri, 11 Apr 2014 14:55:43 +0800 Subject: [PATCH] Add the auto build scripts for deplying gogs with Docker. --- dockerfiles/build.sh | 15 ++++++--------- dockerfiles/images/gogits/Dockerfile | 11 ++++++++--- dockerfiles/images/gogits/deploy.sh | 15 ++++++++++----- dockerfiles/images/mysql/Dockerfile | 25 +++++++++++++++++-------- dockerfiles/images/test/Dockerfile | 7 ------- 5 files changed, 41 insertions(+), 32 deletions(-) delete mode 100644 dockerfiles/images/test/Dockerfile diff --git a/dockerfiles/build.sh b/dockerfiles/build.sh index 113f63dbea..57138577c9 100755 --- a/dockerfiles/build.sh +++ b/dockerfiles/build.sh @@ -1,16 +1,12 @@ -# Configs -MYSQL_PASSWORD="kuajie8402" -MYSQL_RUN_NAME="gogs_mysql" -typeset -u MYSQL_ALIAS -MYSQL_ALIAS="db" -HOST_PORT="3000" +# Configs of the docker images, you might have specify your own configs here. +MYSQL_PASSWORD="YOUR_MYSQL_PASSWORD" +MYSQL_RUN_NAME="YOUR_MYSQL_RUN_NAME" +HOST_PORT="YOUR_HOST_PORT" # Replace the mysql root password in MySQL image Dockerfile. sed -i "s/THE_MYSQL_PASSWORD/$MYSQL_PASSWORD/g" images/mysql/Dockerfile # Replace the mysql root password in gogits image Dockerfile. sed -i "s/THE_MYSQL_PASSWORD/$MYSQL_PASSWORD/g" images/gogits/deploy.sh -sed -i "s/THE_MYSQL_ALIAS/$MYSQL_ALIAS/g" images/gogits/deploy.sh - # Build the MySQL image cd images/mysql @@ -24,5 +20,6 @@ docker build -t gogs/gogits . docker run -d --name $MYSQL_RUN_NAME gogs/mysql # ## Run gogits image and link it to the MySQL image -docker run --link $MYSQL_RUN_NAME:$MYSQL_ALIAS -p $HOST_PORT:3000 gogs/gogits +echo "Now we have the MySQL image(running) and gogs image, use the follow command to start gogs service:' +echo -e "\033[33m docker run -i -t --link $MYSQL_RUN_NAME:db -p $HOST_PORT:3000 gogs/gogits \033[0m" diff --git a/dockerfiles/images/gogits/Dockerfile b/dockerfiles/images/gogits/Dockerfile index 265f86dad5..410bb9cb0f 100644 --- a/dockerfiles/images/gogits/Dockerfile +++ b/dockerfiles/images/gogits/Dockerfile @@ -1,6 +1,8 @@ FROM stackbrew/ubuntu:13.10 MAINTAINER Meaglith Ma (@genedna) +ENV DEBIAN_FRONTEND noninteractive + RUN echo "deb http://mirrors.aliyun.com/ubuntu/ saucy main restricted" > /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-backports main restricted universe multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security multiverse" >> /etc/apt/sources.list RUN mkdir -p /go @@ -13,9 +15,12 @@ RUN apt-get update && apt-get install --yes --force-yes curl git mercurial zip w RUN curl -s http://docker.u.qiniudn.com/go1.2.1.src.tar.gz | tar -v -C /usr/local -xz RUN cd /usr/local/go/src && ./make.bash --no-clean 2>&1 -RUN http_proxy=106.187.38.45:3128 go get -u github.com/gogits/gogs +# You may need a proxy, if github is very slow. +#RUN http_proxy=106.187.38.45:3128 go get -u github.com/gogits/gogs +RUN go get -u github.com/gogits/gogs RUN cd $GOPATH/src/github.com/gogits/gogs && go build +# Clean all the unused packages RUN apt-get autoremove -y RUN apt-get clean all @@ -24,5 +29,5 @@ ADD ./deploy.sh / RUN chmod +x deploy.sh EXPOSE 3000 -CMD [/deploy.sh] -CMD ["$GOPATH/src/github.com/gogits/gogs/gogs web"] + +CMD /deploy.sh diff --git a/dockerfiles/images/gogits/deploy.sh b/dockerfiles/images/gogits/deploy.sh index f9c2144e25..4612a63da7 100644 --- a/dockerfiles/images/gogits/deploy.sh +++ b/dockerfiles/images/gogits/deploy.sh @@ -1,15 +1,20 @@ -# deploy.sh in gogits image -# Script in the gogits image +# deploy.sh in gogits image, replace the configs and run gogs + ## Replace the mysql password -MYSQL_PASSWORD=kuajie8402 +MYSQL_PASSWORD=THE_MYSQL_PASSWORD MYSQL_ALIAS=DB MYSQL_PASSWORD_LINE=`awk '$0 ~ str{print NR+1}' str="USER = root" $GOPATH/src/github.com/gogits/gogs/conf/app.ini` -sed -e "${MYSQL_PASSWORD_LINE}s/.*$/PASSWD = $MYSQL_PASSWORD/g" conf/app.ini +sed -i "${MYSQL_PASSWORD_LINE}s/.*$/PASSWD = $MYSQL_PASSWORD/g" $GOPATH/src/github.com/gogits/gogs/conf/app.ini ## Replace the mysql address and port +# When using --link in docker run, the mysql image's info looks like this: # DB_PORT=tcp://172.17.0.2:3306 # DB_PORT_3306_TCP_PORT=3306 # DB_PORT_3306_TCP_PROTO=tcp -sed -e "/HOST = 127.0.0.1:3306/c\HOST = ${MYSQLALIAS}_PORT" app.ini +# DB_PORT_3306_TCP_ADDR=172.17.0.2 +sed -i "/HOST = 127.0.0.1:3306/c\HOST = $DB_PORT_3306_TCP_ADDR:$DB_PORT_3306_TCP_PORT" $GOPATH/src/github.com/gogits/gogs/conf/app.ini +cd $GOPATH/src/github.com/gogits/gogs/ +# The sudo is a must here, or the go within docker container won't get the current user by os.Getenv("USERNAME") +sudo ./gogs web diff --git a/dockerfiles/images/mysql/Dockerfile b/dockerfiles/images/mysql/Dockerfile index 7c0324015e..9b163e32bf 100644 --- a/dockerfiles/images/mysql/Dockerfile +++ b/dockerfiles/images/mysql/Dockerfile @@ -1,18 +1,16 @@ #FROM stackbrew/ubuntu:13.10 -FROM stackbrew/ubuntu +#FROM stackbrew/ubuntu +FROM stackbrew/ubuntu:saucy MAINTAINER Meaglith Ma (@genedna) -RUN apt-get install -y --force-yes software-properties-common - -RUN echo "deb http://mirrors.aliyun.com/ubuntu/ saucy main restricted" > /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-updates multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-backports main restricted universe multiverse" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security main restricted" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security universe" >> /etc/apt/sources.list && echo "deb http://mirrors.aliyun.com/ubuntu/ saucy-security multiverse" >> /etc/apt/sources.list - -#RUN add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe" +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get install -y --force-yes software-properties-common +RUN add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe" RUN apt-get --yes --force-yes update RUN apt-get --yes --force-yes upgrade - -ENV MYSQL_PASSWORD kuajie8402 +ENV MYSQL_PASSWORD THE_MYSQL_PASSWORD RUN echo "mysql-server mysql-server/root_password password $MYSQL_PASSWORD" | debconf-set-selections RUN echo "mysql-server mysql-server/root_password_again password $MYSQL_PASSWORD" | debconf-set-selections @@ -20,9 +18,20 @@ RUN echo "mysql-server mysql-server/root_password_again password $MYSQL_PASSWORD RUN apt-get update && apt-get install -y --force-yes mysql-server RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf +RUN service mysql restart + +RUN echo "mysql -uroot -p$MYSQL_PASSWORD -e 'drop database if exists gogs;'" >> import.sh +RUN echo "mysql -uroot -p$MYSQL_PASSWORD -e 'create database gogs;'" >> import.sh +RUN chmod +x import.sh + RUN apt-get autoremove -y RUN apt-get clean all +RUN /usr/sbin/mysqld & \ + sleep 10s &&\ + echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' WITH GRANT OPTION; FLUSH PRIVILEGES" | mysql -p$MYSQL_PASSWORD &&\ + ./import.sh + EXPOSE 3306 CMD ["/usr/bin/mysqld_safe", "--skip-syslog", "--log-error=/dev/null"] diff --git a/dockerfiles/images/test/Dockerfile b/dockerfiles/images/test/Dockerfile deleted file mode 100644 index b8ed66d4d5..0000000000 --- a/dockerfiles/images/test/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM stackbrew/ubuntu:saucy - -RUN apt-get install -y --force-yes software-properties-common -RUN add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe" -RUN apt-get --yes --force-yes update -RUN apt-get --yes --force-yes upgrade -