diff --git a/Dockerfile b/Dockerfile index 64433cb05..dc5a5ce91 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,54 +1,48 @@ -FROM google/debian:wheezy -MAINTAINER u@gogs.io - -RUN echo "deb http://ftp.debian.org/debian/ wheezy-backports main" >> /etc/apt/sources.list && \ - apt-get update -qqy && \ - apt-get install --no-install-recommends -qqy \ - curl build-essential ca-certificates git \ - openssh-server libpam-dev && \ - apt-get autoclean && \ - apt-get autoremove && \ - rm -rf /var/lib/apt/lists/* - -ENV GOROOT /goroot -ENV GOPATH /gopath -ENV PATH $PATH:$GOROOT/bin:$GOPATH/bin - -COPY . /gopath/src/github.com/gogits/gogs/ -WORKDIR /gopath/src/github.com/gogits/gogs/ +FROM debian:jessie +MAINTAINER ogarcia@connectical.com + +# Update and install required packages +RUN apt-get update -qqy && \ + apt-get install --no-install-recommends -qqy \ + build-essential ca-certificates curl git libpam-dev \ + openssh-server supervisor && \ + apt-get autoclean && \ + apt-get autoremove && \ + rm -rf /var/lib/apt/lists/* # Build binary and clean up useless files -RUN mkdir /goroot && \ - curl https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz | tar xzf - -C /goroot --strip-components=1 && \ - go get -v -tags "sqlite redis memcache cert pam" && \ - go build -tags "sqlite redis memcache cert pam" && \ - mkdir /app/ && \ - mv /gopath/src/github.com/gogits/gogs/ /app/gogs/ && \ - rm -r $GOROOT $GOPATH - -WORKDIR /app/gogs/ +RUN mkdir -p /app /goroot /gopath/src/github.com/gogits && \ + curl https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz | tar xzf - -C /goroot --strip-components=1 && \ + git clone https://github.com/gogits/gogs.git \ + /gopath/src/github.com/gogits/gogs && \ + cd /gopath/src/github.com/gogits/gogs && \ + GOROOT="/goroot" GOPATH="/gopath" PATH="$PATH:/goroot/bin:/gopath/bin" \ + go get -v -tags "sqlite redis memcache cert pam" && \ + GOROOT="/goroot" GOPATH="/gopath" PATH="$PATH:/goroot/bin:/gopath/bin" \ + go build -tags "sqlite redis memcache cert pam" && \ + mv /gopath/src/github.com/gogits/gogs/ /app/gogs/ && \ + rm -r /goroot /gopath + +# Create user, fix and setup SSH and prepare data +RUN useradd --shell /bin/bash --system --comment gogits git && \ + mkdir /var/run/sshd && \ + sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd && \ + sed 's@UsePrivilegeSeparation yes@UsePrivilegeSeparation no@' -i /etc/ssh/sshd_config && \ + echo "export VISIBLE=now" >> /etc/profile && \ + echo "PermitUserEnvironment yes" >> /etc/ssh/sshd_config && \ + sed 's@^HostKey@\#HostKey@' -i /etc/ssh/sshd_config && \ + echo "HostKey /data/ssh/ssh_host_key" >> /etc/ssh/sshd_config && \ + echo "HostKey /data/ssh/ssh_host_rsa_key" >> /etc/ssh/sshd_config && \ + echo "HostKey /data/ssh/ssh_host_dsa_key" >> /etc/ssh/sshd_config && \ + echo "HostKey /data/ssh/ssh_host_ecdsa_key" >> /etc/ssh/sshd_config && \ + echo "HostKey /data/ssh/ssh_host_ed25519_key" >> /etc/ssh/sshd_config && \ + echo "export GOGS_CUSTOM=/data/gogs" >> /etc/profile + +WORKDIR /app/gogs -RUN useradd --shell /bin/bash --system --comment gogits git - -# SSH login fix, otherwise user is kicked off after login -RUN mkdir /var/run/sshd && \ - sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd && \ - sed 's@UsePrivilegeSeparation yes@UsePrivilegeSeparation no@' -i /etc/ssh/sshd_config && \ - echo "export VISIBLE=now" >> /etc/profile && \ - echo "PermitUserEnvironment yes" >> /etc/ssh/sshd_config - -# Setup server keys on startup -RUN sed 's@^HostKey@\#HostKey@' -i /etc/ssh/sshd_config && \ - echo "HostKey /data/ssh/ssh_host_key" >> /etc/ssh/sshd_config && \ - echo "HostKey /data/ssh/ssh_host_rsa_key" >> /etc/ssh/sshd_config && \ - echo "HostKey /data/ssh/ssh_host_dsa_key" >> /etc/ssh/sshd_config && \ - echo "HostKey /data/ssh/ssh_host_ecdsa_key" >> /etc/ssh/sshd_config && \ - echo "HostKey /data/ssh/ssh_host_ed25519_key" >> /etc/ssh/sshd_config - -# Prepare data ENV GOGS_CUSTOM /data/gogs -RUN echo "export GOGS_CUSTOM=/data/gogs" >> /etc/profile EXPOSE 22 3000 -ENTRYPOINT [] -CMD ["./docker/start.sh"] \ No newline at end of file +VOLUME ["/data"] + +CMD ["./docker/start.sh"] diff --git a/docker/start.sh b/docker/start.sh index cea6e54e7..3828da4e7 100755 --- a/docker/start.sh +++ b/docker/start.sh @@ -19,13 +19,10 @@ then chmod 600 /data/ssh/* fi -service ssh start - ln -sf /data/gogs/log ./log ln -sf /data/gogs/data ./data ln -sf /data/git /home/git - if ! test -d ~git/.ssh then mkdir ~git/.ssh @@ -40,4 +37,4 @@ then fi chown -R git:git /data . -exec su git -c "./gogs web" +exec supervisord -c /app/gogs/docker/supervisord.conf diff --git a/docker/supervisord.conf b/docker/supervisord.conf new file mode 100644 index 000000000..644bfec76 --- /dev/null +++ b/docker/supervisord.conf @@ -0,0 +1,26 @@ +[supervisord] +logfile=/data/gogs/log/s_supervisor.log +loglevel=info +nodaemon=true + +[program:gogs] +command=/app/gogs/gogs web +process_name:%(program_name)s +numprocs=1 +user=git +autostart=true +autorestart=true +stopsignal=TERM +redirect_stderr=true +stdout_logfile=/data/gogs/log/s_%(program_name)s.%(process_num)02d.log +environment=HOME="/home/git",USER=git + +[program:sshd] +command=/usr/sbin/sshd -D -e +process_name:%(program_name)s +numprocs=1 +autostart=true +autorestart=true +stopsignal=TERM +redirect_stderr=true +stdout_logfile=/data/gogs/log/s_%(program_name)s.%(process_num)02d.log