Browse Source

Improve Docker.

- Updated to use Debian Jessie base image.
- Less intermediate containers.
- Uses supervisor to start process.
- Fix #1717, #1708 and probably #1313.
pull/1718/head
Óscar García Amor 9 years ago
parent
commit
8750757744
  1. 54
      Dockerfile
  2. 5
      docker/start.sh
  3. 26
      docker/supervisord.conf

54
Dockerfile

@ -1,54 +1,48 @@
FROM google/debian:wheezy
MAINTAINER u@gogs.io
FROM debian:jessie
MAINTAINER ogarcia@connectical.com
RUN echo "deb http://ftp.debian.org/debian/ wheezy-backports main" >> /etc/apt/sources.list && \
apt-get update -qqy && \
# Update and install required packages
RUN apt-get update -qqy && \
apt-get install --no-install-recommends -qqy \
curl build-essential ca-certificates git \
openssh-server libpam-dev && \
build-essential ca-certificates curl git libpam-dev \
openssh-server supervisor && \
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/
# Build binary and clean up useless files
RUN mkdir /goroot && \
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" && \
mkdir /app/ && \
mv /gopath/src/github.com/gogits/gogs/ /app/gogs/ && \
rm -r $GOROOT $GOPATH
WORKDIR /app/gogs/
RUN useradd --shell /bin/bash --system --comment gogits git
rm -r /goroot /gopath
# SSH login fix, otherwise user is kicked off after login
RUN mkdir /var/run/sshd && \
# 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
# Setup server keys on startup
RUN sed 's@^HostKey@\#HostKey@' -i /etc/ssh/sshd_config && \
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 "HostKey /data/ssh/ssh_host_ed25519_key" >> /etc/ssh/sshd_config && \
echo "export GOGS_CUSTOM=/data/gogs" >> /etc/profile
WORKDIR /app/gogs
# Prepare data
ENV GOGS_CUSTOM /data/gogs
RUN echo "export GOGS_CUSTOM=/data/gogs" >> /etc/profile
EXPOSE 22 3000
ENTRYPOINT []
VOLUME ["/data"]
CMD ["./docker/start.sh"]

5
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

26
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
Loading…
Cancel
Save