diff --git a/dockerfiles/README.md b/dockerfiles/README.md new file mode 100644 index 000000000..97c5aa053 --- /dev/null +++ b/dockerfiles/README.md @@ -0,0 +1,57 @@ +### Gogs Install With Docker + +Deply gogs in [Docker](http://www.docker.io/) is just as easy as eating a pie, what you do is just open the `dockerfiles/build.sh` file, replace the confis: + +``` +MYSQL_PASSWORD="YOUR_MYSQL_PASSWORD" +MYSQL_RUN_NAME="YOUR_MYSQL_RUN_NAME" +HOST_PORT="YOUR_HOST_PORT" +``` + +And run: +``` +cd dockerfiles +./build.sh +``` + +The build might take some time, just be paient. After it finishes, you will receive the message: + +``` +Now we have the MySQL image(running) and gogs image, use the follow command to start gogs service( the content might be different, according to your own configs): + docker run -i -t --link gogs_mysql:db -p 3333:3000 gogs/gogits +``` + +Just follow the message, run: + +``` + docker run -i -t --link gogs_mysql:db -p 3333:3000 gogs/gogits +``` + +Now we have gogs running! Open the browser and navigate to: + +``` +http://YOUR_HOST_IP:YOUR_HOST_PORT +``` + +Let's 'gogs'! + +#### Gogs With MySQL + + +#### Gogs With PostgreSQL + + +#### Gogs, MySQL With Redis + + +#### Gogs, MySQL With Memcached + + +#### Gogs, PostgreSQL With Redis + + +#### Gogs, PostgreSQL With Memcached + + + + diff --git a/dockerfiles/build.sh b/dockerfiles/build.sh new file mode 100755 index 000000000..1e7cf0ad0 --- /dev/null +++ b/dockerfiles/build.sh @@ -0,0 +1,25 @@ +# 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 + +# Build the MySQL image +cd images/mysql +docker build -t gogs/mysql . +# +## Build the gogits image +cd ../gogits +docker build -t gogs/gogits . +# +## Run MySQL image with name +docker run -d --name $MYSQL_RUN_NAME gogs/mysql +# +## Run gogits image and link it to the MySQL image +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/build.sh.bak b/dockerfiles/build.sh.bak new file mode 100755 index 000000000..545a13dae --- /dev/null +++ b/dockerfiles/build.sh.bak @@ -0,0 +1,27 @@ +# Configs +MYSQL_PASSWORD="YOUR_MYSQL_PASSWORD" +MYSQL_RUN_NAME="YOUR_MYSQL_RUN_NAME" +typeset -u MYSQL_ALIAS +MYSQL_ALIAS="YOUR_MYSQL_ALIAS" +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/Dockerfile + + +# Build the MySQL image +cd images/mysql +docker build -i gogs/mysql . + +# Build the gogits image +cd images/gogits +docker build -i gogs/gogits . + +# Run MySQL image with name +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 + diff --git a/dockerfiles/images/gogits/Dockerfile b/dockerfiles/images/gogits/Dockerfile new file mode 100644 index 000000000..410bb9cb0 --- /dev/null +++ b/dockerfiles/images/gogits/Dockerfile @@ -0,0 +1,33 @@ +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 +ENV PATH /usr/local/go/bin:/go/bin:$PATH +ENV GOROOT /usr/local/go +ENV GOPATH /go + +RUN apt-get update && apt-get install --yes --force-yes curl git mercurial zip wget ca-certificates build-essential + +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 + +# 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 + +# Add the deploy script to the docker image and assign execution permission to it. +ADD ./deploy.sh / +RUN chmod +x deploy.sh + +EXPOSE 3000 + +CMD /deploy.sh diff --git a/dockerfiles/images/gogits/deploy.sh b/dockerfiles/images/gogits/deploy.sh new file mode 100644 index 000000000..4612a63da --- /dev/null +++ b/dockerfiles/images/gogits/deploy.sh @@ -0,0 +1,20 @@ +# deploy.sh in gogits image, replace the configs and run gogs + +## Replace the mysql password +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 -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 +# 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/memcached/.gitkeep b/dockerfiles/images/memcached/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/dockerfiles/images/mysql/.gitkeep b/dockerfiles/images/mysql/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/dockerfiles/images/mysql/Dockerfile b/dockerfiles/images/mysql/Dockerfile new file mode 100644 index 000000000..9b163e32b --- /dev/null +++ b/dockerfiles/images/mysql/Dockerfile @@ -0,0 +1,37 @@ +#FROM stackbrew/ubuntu:13.10 +#FROM stackbrew/ubuntu +FROM stackbrew/ubuntu:saucy +MAINTAINER Meaglith Ma (@genedna) + +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 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 + +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/posgresql/.gitkeep b/dockerfiles/images/posgresql/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/dockerfiles/images/redis/.gitkeep b/dockerfiles/images/redis/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/dockerfiles/run.sh b/dockerfiles/run.sh new file mode 100755 index 000000000..7721ab41d --- /dev/null +++ b/dockerfiles/run.sh @@ -0,0 +1,13 @@ +# Configs +MYSQL_PASSWORD="kuajie8402" +MYSQL_RUN_NAME="gogs_mysql" +typeset -u MYSQL_ALIAS +MYSQL_ALIAS="db" +HOST_PORT="3000" + +## Run MySQL image with name +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 +