diff --git a/Dockerfile b/Dockerfile index e8ab275..20befc6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,27 +6,32 @@ RUN apt-get update && \ ADD supervisor/ /etc/supervisor/conf.d/ -RUN mkdir -p /home/cloudron/gogs +RUN adduser --disabled-login --gecos 'Gogs' git +# by default, git account is created as inactive which prevents login via openssh +# https://github.com/gitlabhq/gitlabhq/issues/5304 +RUN passwd -d git + +RUN mkdir -p /home/git/gogs ## TODO: use redis as well -RUN cd /home/cloudron/gogs && \ +RUN cd /home/git/gogs && \ curl -L https://github.com/gogits/gogs/releases/download/v0.8.25/linux_amd64.tar.gz | tar zxvf - --strip-components 1 # setup config paths -ADD app.ini.template /home/cloudron/app.ini.template -RUN mkdir -p /run/gogs && chown -R cloudron:cloudron /run/gogs +ADD app.ini.template /home/git/app.ini.template +RUN mkdir -p /run/gogs && chown -R git:git /run/gogs # setup log paths -RUN mkdir -p /run/gogs && chown -R cloudron:cloudron /run/gogs +RUN mkdir -p /run/gogs && chown -R git:git /run/gogs RUN sed -e 's,^logfile=.*$,logfile=/run/gogs/supervisord.log,' -i /etc/supervisor/supervisord.conf -RUN ln -s /app/data/ssh /home/cloudron/.ssh -RUN ln -s /app/data/gitconfig /home/cloudron/.gitconfig +RUN ln -s /app/data/ssh /home/git/.ssh +RUN ln -s /app/data/gitconfig /home/git/.gitconfig -ADD start.sh /home/cloudron/start.sh +ADD start.sh /home/git/start.sh # disable pam authentication for sshd RUN sed -e 's/UsePAM yes/UsePAM no/' -e 's/UsePrivilegeSeparation yes/UsePrivilegeSeparation no/' -i /etc/ssh/sshd_config RUN echo "UseDNS no" >> /etc/ssh/sshd_config -CMD [ "/home/cloudron/start.sh" ] +CMD [ "/home/git/start.sh" ] diff --git a/app.ini.template b/app.ini.template index 2a957f2..0fbc205 100644 --- a/app.ini.template +++ b/app.ini.template @@ -1,5 +1,5 @@ APP_NAME = Gogs: Go Git Service -RUN_USER = cloudron +RUN_USER = git RUN_MODE = prod [database] diff --git a/start.sh b/start.sh index ff82f5b..2926cd3 100755 --- a/start.sh +++ b/start.sh @@ -36,11 +36,11 @@ sed -e "s/##DOMAIN/${APP_DOMAIN}/g" \ -e "s/##MAIL_PORT/${MAIL_SMTP_PORT}/g" \ -e "s/##MAIL_FROM/${MAIL_SMTP_USERNAME}@${MAIL_DOMAIN}/g" \ -e "s/##SECRET_KEY/$(pwgen -1 -s)/g" \ - /home/cloudron/app.ini.template > "/run/gogs/app.ini" + /home/git/app.ini.template > "/run/gogs/app.ini" mkdir -p /app/data/repository /app/data/ssh -chown -R cloudron.cloudron /app/data /run/gogs +chown -R git:git /app/data /run/gogs ( setup_ldap_source ) & diff --git a/supervisor/gogs.conf b/supervisor/gogs.conf index 3155266..1c703ce 100644 --- a/supervisor/gogs.conf +++ b/supervisor/gogs.conf @@ -1,7 +1,7 @@ [program:gogs] -directory=/home/cloudron/gogs -command=/home/cloudron/gogs/gogs web -c /run/gogs/app.ini -p 3000 -user=cloudron +directory=/home/git/gogs +command=/home/git/gogs/gogs web -c /run/gogs/app.ini -p 3000 +user=git autostart=true autorestart=true ; https://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html @@ -9,4 +9,4 @@ stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 -environment=HOME="/home/cloudron",USER="cloudron" +environment=HOME="/home/git",USER="git" diff --git a/test/test.js b/test/test.js index a8de582..ffbb6d0 100755 --- a/test/test.js +++ b/test/test.js @@ -115,7 +115,7 @@ describe('Application life cycle test', function () { browser.get('https://' + app.fqdn + '/' + username + '/' + reponame); browser.findElement(by.id('repo-clone-ssh')).click(); browser.findElement(by.id('repo-clone-url')).getAttribute('value').then(function (cloneUrl) { - expect(cloneUrl).to.be('ssh://cloudron@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git'); + expect(cloneUrl).to.be('ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git'); done(); }); }); @@ -123,14 +123,14 @@ describe('Application life cycle test', function () { it('can clone the url', function (done) { var env = Object.create(process.env); env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh'; - execSync('git clone ssh://cloudron@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env }); + execSync('git clone ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env }); done(); }); it('can add and push a file', function (done) { var env = Object.create(process.env); env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh'; - execSync('touch newfile && git add newfile && git commit -a -mx && git push ssh://cloudron@' + app.fqdn + ':29418/' + username + '/' + reponame + ' master', + execSync('touch newfile && git add newfile && git commit -a -mx && git push ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + ' master', { env: env, cwd: repodir }); rimraf.sync('/tmp/testrepo'); done(); @@ -144,7 +144,7 @@ describe('Application life cycle test', function () { it('can clone the url', function (done) { var env = Object.create(process.env); env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh'; - execSync('git clone ssh://cloudron@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env }); + execSync('git clone ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env }); expect(fs.existsSync(repodir + '/newfile')).to.be(true); rimraf.sync(repodir); done(); @@ -161,7 +161,7 @@ describe('Application life cycle test', function () { it('can clone the url', function (done) { var env = Object.create(process.env); env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh'; - execSync('git clone ssh://cloudron@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env }); + execSync('git clone ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env }); expect(fs.existsSync(repodir + '/newfile')).to.be(true); rimraf.sync(repodir); done(); @@ -187,7 +187,7 @@ describe('Application life cycle test', function () { browser.get('https://' + app.fqdn + '/' + username + '/' + reponame); browser.findElement(by.id('repo-clone-ssh')).click(); browser.findElement(by.id('repo-clone-url')).getAttribute('value').then(function (cloneUrl) { - expect(cloneUrl).to.be('ssh://cloudron@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git'); + expect(cloneUrl).to.be('ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git'); done(); }); }); @@ -195,7 +195,7 @@ describe('Application life cycle test', function () { it('can clone the url', function (done) { var env = Object.create(process.env); env.GIT_SSH = __dirname + '/git_ssh_wrapper.sh'; - execSync('git clone ssh://cloudron@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env }); + execSync('git clone ssh://git@' + app.fqdn + ':29418/' + username + '/' + reponame + '.git ' + repodir, { env: env }); expect(fs.existsSync(repodir + '/newfile')).to.be(true); rimraf.sync(repodir); done();