Add the sciprt for deplying gogs in docker, support the user to choose database(MySQL or PostgreSQL) and memory cache(redis or memcached).master
commit
b270b34c98
12 changed files with 328 additions and 22 deletions
@ -1,23 +1,40 @@ |
||||
### Gogs Install With Docker |
||||
### Install Gogs With Docker |
||||
|
||||
Deplying 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: |
||||
|
||||
#### Gogs With MySQL |
||||
``` |
||||
DB_TYPE="YOUR_DB_TYPE" # type of database, support 'mysql' and 'postgres' |
||||
MEM_TYPE="YOUR_MEM_TYPE" # type of memory database, support 'redis' and 'memcache' |
||||
DB_PASSWORD="YOUR_DB_PASSWORD" # The database password. |
||||
DB_RUN_NAME="YOUR_DB_RUN_NAME" # The --name option value when run the database image. |
||||
MEM_RUN_NAME="YOUR_MEM_RUN_NAME" # The --name option value when run the mem database image. |
||||
HOST_PORT="YOUR_HOST_PORT" # The port on host, which will be redirected to the port 3000 inside gogs container. |
||||
``` |
||||
|
||||
And run: |
||||
``` |
||||
cd dockerfiles |
||||
./build.sh |
||||
``` |
||||
|
||||
#### Gogs With PostgreSQL |
||||
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 YOUR_DB_RUN_NAME:db --link YOUR_MEM_RUN_NAME:mem -p YOUR_HOST_PORT:3000 gogits/gogs |
||||
``` |
||||
|
||||
#### Gogs, MySQL With Redis |
||||
|
||||
|
||||
#### Gogs, MySQL With Memcached |
||||
|
||||
|
||||
#### Gogs, PostgreSQL With Redis |
||||
|
||||
|
||||
#### Gogs, PostgreSQL With Memcached |
||||
Just follow the message, run: |
||||
|
||||
``` |
||||
docker run -i -t --link YOUR_DB_RUN_NAME:db --link YOUR_MEM_RUN_NAME:mem -p YOUR_HOST_PORT:3000 gogits/gogs |
||||
``` |
||||
|
||||
Now we have gogs running! Open the browser and navigate to: |
||||
|
||||
``` |
||||
http://YOUR_HOST_IP:YOUR_HOST_PORT |
||||
``` |
||||
|
||||
Let's 'gogs'! |
||||
Ouya~ |
||||
|
@ -0,0 +1,68 @@ |
||||
# Configs of the docker images, you might have specify your own configs here. |
||||
|
||||
DB_TYPE="YOUR_DB_TYPE" # type of database, support 'mysql' and 'postgres' |
||||
MEM_TYPE="YOUR_MEM_TYPE" # type of memory database, support 'redis' and 'memcache' |
||||
DB_PASSWORD="YOUR_DB_PASSWORD" # The database password. |
||||
DB_RUN_NAME="YOUR_DB_RUN_NAME" # The --name option value when run the database image. |
||||
MEM_RUN_NAME="YOUR_MEM_RUN_NAME" # The --name option value when run the mem database image. |
||||
HOST_PORT="YOUR_HOST_PORT" # The port on host, which will be redirected to the port 3000 inside gogs container. |
||||
|
||||
# apt source, you can select 'nchc'(mirror in Taiwan) or 'aliyun'(best for mainlance China users) according to your network, if you could connect to the official unbunt mirror in a fast speed, just leave it to "". |
||||
APT_SOURCE="" |
||||
|
||||
# Replace the database root password in database image Dockerfile. |
||||
sed -i "s/THE_DB_PASSWORD/$DB_PASSWORD/g" images/$DB_TYPE/Dockerfile |
||||
# Replace the database root password in gogits image deploy.sh file. |
||||
sed -i "s/THE_DB_PASSWORD/$DB_PASSWORD/g" images/gogits/deploy.sh |
||||
# Replace the apt source in gogits image Dockerfile. |
||||
sed -i "s/#$APT_SOURCE#//" images/gogits/Dockerfile |
||||
# Uncomment the installation of database lib in gogs Dockerfile |
||||
sed -i "s/#$DB_TYPE#//" images/gogits/Dockerfile |
||||
# Replace the database type in gogits image deploy.sh file. |
||||
sed -i "s/THE_DB_TYPE/$DB_TYPE/g" images/gogits/deploy.sh |
||||
|
||||
if [ $MEM_TYPE != "" ] |
||||
then |
||||
# Replace the mem configs in deploy.sh |
||||
sed -i "s/THE_MEM_TYPE/$MEM_TYPE/g" images/gogits/deploy.sh |
||||
# Uncomment the installation of go mem lib |
||||
sed -i "s/#$MEM_TYPE#//" images/gogits/Dockerfile |
||||
|
||||
# Add the tags when get gogs |
||||
sed -i "s#RUN go get -u -d github.com/gogits/gogs#RUN go get -u -d -tags $MEM_TYPE github.com/gogits/gogs#g" images/gogits/Dockerfile |
||||
# Append the tag in gogs build |
||||
GOGS_BUILD_LINE=`awk '$0 ~ str{print NR}' str="go build" images/gogits/Dockerfile` |
||||
# Append the build tags |
||||
sed -i "${GOGS_BUILD_LINE}s/$/ -tags $MEM_TYPE/" images/gogits/Dockerfile |
||||
|
||||
cd images/$MEM_TYPE |
||||
docker build -t gogits/$MEM_TYPE . |
||||
docker run -d --name $MEM_RUN_NAME gogits/$MEM_TYPE |
||||
MEM_LINK=" --link $MEM_RUN_NAME:mem " |
||||
cd ../../ |
||||
fi |
||||
|
||||
# Build the database image |
||||
cd images/$DB_TYPE |
||||
docker build -t gogits/$DB_TYPE . |
||||
# |
||||
|
||||
|
||||
## Build the gogits image |
||||
cd ../gogits |
||||
|
||||
docker build -t gogits/gogs . |
||||
|
||||
#sed -i "s#RUN go get -u -tags $MEM_TYPE github.com/gogits/gogs#RUN go get -u github.com/gogits/gogs#g" Dockerfile |
||||
|
||||
# Remove the appended tags in go build line(if there is any) |
||||
sed -i "s/ -tags $MEM_TYPE//" Dockerfile |
||||
|
||||
# |
||||
## Run MySQL image with name |
||||
docker run -d --name $DB_RUN_NAME gogits/$DB_TYPE |
||||
# |
||||
## Run gogits image and link it to the database image |
||||
echo "Now we have the $DB_TYPE image(running) and gogs image, use the follow command to start gogs service:" |
||||
echo -e "\033[33m docker run -i -t --link $DB_RUN_NAME:db $MEM_LINK -p $HOST_PORT:3000 gogits/gogs \033[0m" |
||||
|
@ -0,0 +1,29 @@ |
||||
# Configs of the docker images, you might have specify your own configs here. |
||||
# type of database, support 'mysql' and 'postgres' |
||||
DB_TYPE="postgres" |
||||
DB_PASSWORD="YOUR_DB_PASSWORD" |
||||
DB_RUN_NAME="YOUR_DB_RUN_NAME" |
||||
HOST_PORT="YOUR_HOST_PORT" |
||||
|
||||
# Replace the database root password in database image Dockerfile. |
||||
sed -i "s/THE_DB_PASSWORD/$DB_PASSWORD/g" images/$DB_TYPE/Dockerfile |
||||
# Replace the database root password in gogits image deploy.sh file. |
||||
sed -i "s/THE_DB_PASSWORD/$DB_PASSWORD/g" images/gogits/deploy.sh |
||||
# Replace the database type in gogits image deploy.sh file. |
||||
sed -i "s/THE_DB_TYPE/$DB_TYPE/g" images/gogits/deploy.sh |
||||
|
||||
# Build the database image |
||||
cd images/$DB_TYPE |
||||
docker build -t gogs/$DB_TYPE . |
||||
# |
||||
## Build the gogits image |
||||
cd ../gogits |
||||
docker build -t gogs/gogits . |
||||
# |
||||
## Run MySQL image with name |
||||
docker run -d --name $DB_RUN_NAME gogs/$DB_TYPE |
||||
# |
||||
## Run gogits image and link it to the database image |
||||
echo "Now we have the $DB_TYPE image(running) and gogs image, use the follow command to start gogs service:" |
||||
echo -e "\033[33m docker run -i -t --link $DB_RUN_NAME:db -p $HOST_PORT:3000 gogs/gogits \033[0m" |
||||
|
@ -0,0 +1,60 @@ |
||||
# deploy.sh in gogits image, replace the configs and run gogs |
||||
|
||||
## Replace the database password |
||||
DB_TYPE=THE_DB_TYPE |
||||
DB_PASSWORD=THE_DB_PASSWORD |
||||
DB_ALIAS=DB |
||||
MEM_TYPE=THE_MEM_TYPE |
||||
|
||||
DB_TYPE_LINE=`awk '$0 ~ str{print NR}' str="DB_TYPE = mysql" $GOPATH/src/github.com/gogits/gogs/conf/app.ini` |
||||
DB_PASSWORD_LINE=`awk '$0 ~ str{print NR+1}' str="USER = root" $GOPATH/src/github.com/gogits/gogs/conf/app.ini` |
||||
|
||||
sed -i "${DB_TYPE_LINE}s/.*$/DB_TYPE = $DB_TYPE/g" $GOPATH/src/github.com/gogits/gogs/conf/app.ini |
||||
sed -i "${DB_PASSWORD_LINE}s/.*$/PASSWD = $DB_PASSWORD/g" $GOPATH/src/github.com/gogits/gogs/conf/app.ini |
||||
|
||||
|
||||
|
||||
if [ $MEM_TYPE != "" ] |
||||
then |
||||
MEM_HOST_LINE=`awk '$0 ~ str{print NR+6}' str="ADAPTER = memory" $GOPATH/src/github.com/gogits/gogs/conf/app.ini` |
||||
|
||||
_MEM_ADDR=`echo $MEM_PORT | cut -d '/' -f 3 | cut -d ':' -f 1` |
||||
_MEM_PORT=`echo $MEM_PORT | cut -d '/' -f 3 | cut -d ':' -f 2` |
||||
|
||||
# take advantage of memory db for adapter and provider |
||||
sed -i "s/ADAPTER = memory/ADAPTER = $MEM_TYPE/g" $GOPATH/src/github.com/gogits/gogs/conf/app.ini |
||||
# Comment the memory interval since we don't use 'memory' as adapter |
||||
sed -i "s/INTERVAL = 60/;INTERVAL = 60/g" $GOPATH/src/github.com/gogits/gogs/conf/app.ini |
||||
|
||||
|
||||
case $MEM_TYPE in |
||||
"redis") |
||||
# Modify the adapter host |
||||
sed -i "${MEM_HOST_LINE}s/.*/HOST = $_MEM_ADDR:$_MEM_PORT/" $GOPATH/src/github.com/gogits/gogs/conf/app.ini |
||||
sed -i "s/PROVIDER = file/PROVIDER = $MEM_TYPE/g" $GOPATH/src/github.com/gogits/gogs/conf/app.ini |
||||
# Modify the provider config |
||||
sed -i "s#PROVIDER_CONFIG = data/sessions#PROVIDER_CONFIG = $_MEM_ADDR:$_MEM_PORT#g" $GOPATH/src/github.com/gogits/gogs/conf/app.ini |
||||
;; |
||||
|
||||
"memcache") |
||||
# Modify the adapter host |
||||
sed -i "${MEM_HOST_LINE}s/.*/HOST = $_MEM_ADDR:$_MEM_PORT/" $GOPATH/src/github.com/gogits/gogs/conf/app.ini |
||||
;; |
||||
esac |
||||
|
||||
fi |
||||
|
||||
|
||||
## Replace the database address and port |
||||
# When using --link in docker run, the database 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 |
||||
sed -i "/HOST = 127.0.0.1:3306/c\HOST = `echo $DB_PORT | cut -d '/' -f 3`" $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 |
@ -0,0 +1,26 @@ |
||||
FROM ubuntu |
||||
|
||||
# Set the file maintainer (your name - the file's author) |
||||
MAINTAINER Borja Burgos <borja@tutum.co> |
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive |
||||
|
||||
# Update the default application repository sources list |
||||
RUN apt-get update |
||||
|
||||
# Install Memcached |
||||
RUN apt-get install -y memcached |
||||
|
||||
# Port to expose (default: 11211) |
||||
EXPOSE 11211 |
||||
|
||||
# Default Memcached run command arguments |
||||
# Change to limit memory when creating container in Tutum |
||||
CMD ["-m", "64"] |
||||
|
||||
# Set the user to run Memcached daemon |
||||
USER daemon |
||||
|
||||
# Set the entrypoint to memcached binary |
||||
ENTRYPOINT memcached |
||||
|
@ -1,19 +1,37 @@ |
||||
FROM stackbrew/ubuntu:13.10 |
||||
#FROM stackbrew/ubuntu:13.10 |
||||
#FROM stackbrew/ubuntu |
||||
FROM stackbrew/ubuntu:saucy |
||||
MAINTAINER Meaglith Ma <genedna@gmail.com> (@genedna) |
||||
|
||||
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 |
||||
ENV DEBIAN_FRONTEND noninteractive |
||||
|
||||
#ENV MYSQL_PASSWORD docker |
||||
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 |
||||
|
||||
#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 |
||||
ENV MYSQL_PASSWORD THE_DB_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"] |
||||
|
@ -0,0 +1,51 @@ |
||||
FROM ubuntu |
||||
MAINTAINER SvenDowideit@docker.com |
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive |
||||
|
||||
# Add the PostgreSQL PGP key to verify their Debian packages. |
||||
# It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc |
||||
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 |
||||
|
||||
# Add PostgreSQL's repository. It contains the most recent stable release |
||||
# of PostgreSQL, ``9.3``. |
||||
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main" > /etc/apt/sources.list.d/pgdg.list |
||||
|
||||
# Update the Ubuntu and PostgreSQL repository indexes |
||||
RUN apt-get update |
||||
|
||||
# Install ``python-software-properties``, ``software-properties-common`` and PostgreSQL 9.3 |
||||
# There are some warnings (in red) that show up during the build. You can hide |
||||
# them by prefixing each apt-get statement with DEBIAN_FRONTEND=noninteractive |
||||
RUN apt-get -y -q install python-software-properties software-properties-common |
||||
RUN apt-get -y -q install postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3 |
||||
|
||||
# Note: The official Debian and Ubuntu images automatically ``apt-get clean`` |
||||
# after each ``apt-get`` |
||||
|
||||
# Run the rest of the commands as the ``postgres`` user created by the ``postgres-9.3`` package when it was ``apt-get installed`` |
||||
USER postgres |
||||
|
||||
# Create a PostgreSQL role named ``docker`` with ``docker`` as the password and |
||||
# then create a database `docker` owned by the ``docker`` role. |
||||
# Note: here we use ``&&\`` to run commands one after the other - the ``\`` |
||||
# allows the RUN command to span multiple lines. |
||||
RUN /etc/init.d/postgresql start &&\ |
||||
psql --command "CREATE USER root WITH SUPERUSER PASSWORD 'THE_DB_PASSWORD';" &&\ |
||||
createdb -O root gogs |
||||
|
||||
# Adjust PostgreSQL configuration so that remote connections to the |
||||
# database are possible. |
||||
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf |
||||
|
||||
# And add ``listen_addresses`` to ``/etc/postgresql/9.3/main/postgresql.conf`` |
||||
RUN echo "listen_addresses='*'" >> /etc/postgresql/9.3/main/postgresql.conf |
||||
|
||||
# Expose the PostgreSQL port |
||||
EXPOSE 5432 |
||||
|
||||
# Add VOLUMEs to allow backup of config, logs and databases |
||||
VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"] |
||||
|
||||
# Set the default command to run when starting the container |
||||
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"] |
@ -0,0 +1,14 @@ |
||||
FROM stackbrew/ubuntu:saucy |
||||
MAINTAINER Meaglith Ma <genedna@gmail.com> (@genedna), Lance Ju <juzhenatpku@gmail.com> (@crystaldust) |
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive |
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive |
||||
|
||||
RUN apt-get update && apt-get install -y redis-server |
||||
# Usually redis doesn't need a password |
||||
#RUN sed -i "s/# requirepass foobared/requirepass THE_REDIS_PASSWORD/g" /etc/redis/redis.conf |
||||
EXPOSE 6379 |
||||
ENTRYPOINT ["/usr/bin/redis-server"] |
||||
CMD ["--bind", "0.0.0.0"] |
||||
|
@ -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 |
||||
|
Loading…
Reference in new issue