diff --git a/Dockerfile b/Dockerfile index 1332aeb..6dc1a4e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,14 +5,14 @@ MAINTAINER Julian Ospald ENV GOPATH /gopath ENV PATH $PATH:$GOROOT/bin:$GOPATH/bin -WORKDIR /gopath/src/github.com/gogs/gogs/ +WORKDIR /gopath/src/code.gitea.io/gitea RUN apk --no-cache add \ bash \ ca-certificates \ curl \ + gettext \ git \ - go \ linux-pam \ openssh \ redis \ @@ -20,26 +20,29 @@ RUN apk --no-cache add \ socat \ sqlite \ sudo \ + su-exec \ supervisor \ tzdata \ && \ apk --no-cache add --virtual build-deps \ build-base \ linux-pam-dev \ + go \ && \ - git clone --depth=1 https://github.com/gogs/gogs.git \ - /gopath/src/github.com/gogs/gogs && \ - make build TAGS="sqlite redis memcache cert pam" && \ + git clone --depth=1 https://github.com/go-gitea/gitea.git \ + /gopath/src/code.gitea.io/gitea && \ + TAGS="bindata sqlite pam" make generate build && \ apk del build-deps && \ mkdir /app/ && \ - mv /gopath/src/github.com/gogs/gogs/ /app/gogs/ && \ + mv /gopath/src/code.gitea.io/gitea /app/gitea && \ rm -rf "$GOPATH" /var/cache/apk/* RUN addgroup -S git RUN adduser -G git -H -D -g 'Gogs Git User' git -h /data/git -s /bin/bash && \ usermod -p '*' git && passwd -u git +ENV USER git -WORKDIR /app/gogs/ +WORKDIR /app/gitea/ # SSH login fix, otherwise user is kicked off after login RUN echo "export VISIBLE=now" >> /etc/profile && \ @@ -49,8 +52,8 @@ RUN echo "export VISIBLE=now" >> /etc/profile && \ COPY config/sshd_config /etc/ssh/sshd_config # Prepare data -ENV GOGS_CUSTOM /data/gogs -RUN echo "export GOGS_CUSTOM=/data/gogs" >> /etc/profile +ENV GITEA_CUSTOM /data/gitea +RUN echo "export GOGS_CUSTOM=/data/gitea" >> /etc/profile RUN chown -R redis /var/log/redis RUN sed -i -e 's/daemonize yes/daemonize no/' /etc/redis.conf diff --git a/README.md b/README.md index 70b0f75..615f379 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -# Gogs via Docker +# Gitea via Docker ## Concept * nginx reverse proxy (in docker container), automatically configured (except for the ssl certificates) -* backend gogs instance (in docker container) +* backend gitea instance (in docker container) ## Getting the images Just pull them: ```sh -docker pull hasufell/alpine-gogs +docker pull hasufell/alpine-gitea docker pull hasufell/alpine-nginx-proxy ``` @@ -19,16 +19,16 @@ Gogs is configured via the web interface once the instance has started. In addition, the following environment variables can be passed via `-e` to `docker run`: -* `VIRTUAL_HOST`: sets the hostname for connecting to the gogs backend server +* `VIRTUAL_HOST`: sets the hostname for connecting to the gitea backend server * `VIRTUAL_PORT`: tells the front proxy on which port to contact the backend server * `GOGS_SSH_PORT`: this only changes the port of the sshd service, you will still have to adjust it in the web configuration interface (optional, default 22) ### Certificates We need certificates which are named according to the hostname -of the gogs instance (e.g. if you will access gogs via -`https://gogs.foo.com`, then you name your certificates files -`gogs.foo.crt` and `gogs.foo.key`). +of the gitea instance (e.g. if you will access gitea via +`https://gitea.foo.com`, then you name your certificates files +`gitea.foo.crt` and `gitea.foo.key`). Just drop these in a directory. We will mount this directory into the container later. @@ -39,10 +39,10 @@ Create the volumes. This will create a persistent data volume container. You should not remove it (keep in mind that this container is not running). ```sh docker run \ - --name=gogs-volumes \ + --name=gitea-volumes \ -v /data \ - hasufell/alpine-gogs \ - echo gogs-volumes + hasufell/alpine-gitea \ + echo gitea-volumes ``` Now we start the front proxy. @@ -55,42 +55,53 @@ docker run -ti -d \ hasufell/alpine-nginx-proxy ``` -Now we can start the gogs instance. +Now we can start the gitea instance. ```sh docker run -ti -d \ - --volumes-from gogs-volumes \ - --name=gogs \ + --volumes-from gitea-volumes \ + --name=gitea \ -e VIRTUAL_HOST= \ -e VIRTUAL_PORT=3000 \ - -e GOGS_SSH_PORT= \ + -e GITEA_SSH_PORT= \ -p : \ - hasufell/alpine-gogs + hasufell/alpine-gitea ``` Note that `VIRTUAL_HOST` and `VIRTUAL_PORT` are __strictly__ necessary, because they are used by the front proxy to update its configuration automatically. +When using a MySQL database, do something like: + +```sh +docker exec -ti \ + gitea-mysql \ + /bin/bash -c "echo \"CREATE DATABASE gitea DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER gitea@'%' IDENTIFIED WITH mysql_native_password BY 'wurst'; GRANT ALL PRIVILEGES ON gitea.* TO gitea@'%';\" | mysql -u root -p" +``` + +Note that the initial mysql must be run with +`--default-authentication-plugin=mysql_native_password --default-storage-engine=InnoDB` + ## Initial web configuration Make sure: * `Database Type` is SQLite3 * `Domain` is set to your domain -* `SSH Port` is set to what you specified in `GOGS_SSH_PORT` (or 22 for default) +* `SSH Port` is set to what you specified in `GITEA_SSH_PORT` (or 22 for default) * `Application URL` is `https:///` (not `http`) _without_ the Port 3000 ## Update procedure ```sh -docker stop gogs -docker rm gogs -docker pull hasufell/alpine-gogs +docker stop gitea +docker rm gitea +docker pull hasufell/alpine-gitea docker run -ti -d \ - --volumes-from gogs-volumes \ - --name=gogs \ + --volumes-from gitea-volumes \ + --name=gitea \ -e VIRTUAL_HOST= \ -e VIRTUAL_PORT=3000 \ - -e GOGS_SSH_PORT= \ + -e GITEA_SSH_PORT= \ -p : \ - hasufell/alpine-gogs + hasufell/alpine-gitea ``` diff --git a/config/supervisord.conf b/config/supervisord.conf index 774f287..da7009b 100644 --- a/config/supervisord.conf +++ b/config/supervisord.conf @@ -11,7 +11,7 @@ command=sudo -u redis redis-server /etc/redis.conf autorestart=true priority=2 -[program:gogs] -command=sudo -u git /app/gogs/gogs web +[program:gitea] +command=sudo -u git /app/gitea/gitea web autorestart=true priority=999 diff --git a/setup.sh b/setup.sh index 898b30f..e4321e8 100644 --- a/setup.sh +++ b/setup.sh @@ -1,8 +1,8 @@ #!/bin/bash -if [[ ! -d /data/gogs ]] ; then +if [[ ! -d /data/gitea ]] ; then mkdir -p /var/run/sshd - mkdir -p /data/gogs/data /data/gogs/conf /data/gogs/log /data/git /data/gogs/custom + mkdir -p /data/gitea/data /data/gitea/conf /data/gitea/log /data/git /data/gitea/custom fi if [[ ! -d /data/ssh ]] ; then @@ -14,9 +14,9 @@ if [[ ! -d /data/ssh ]] ; then chmod 600 /data/ssh/* fi -ln -sf /data/gogs/custom ./custom -ln -sf /data/gogs/log ./log -ln -sf /data/gogs/data ./data +ln -sf /data/gitea/custom ./custom +ln -sf /data/gitea/log ./log +ln -sf /data/gitea/data ./data ln -sf /data/git /home/git @@ -26,13 +26,13 @@ if [[ ! -d ~git/.ssh ]] ; then fi if [[ ! -f ~git/.ssh/environment ]] ; then - echo "GOGS_CUSTOM=/data/gogs" > ~git/.ssh/environment + echo "GITEA_CUSTOM=/data/gitea" > ~git/.ssh/environment chown git:git ~git/.ssh/environment chown 600 ~git/.ssh/environment fi chown -R git:git /data . -if [[ ${GOGS_SSH_PORT} ]] ; then - echo "Port ${GOGS_SSH_PORT}" >> /etc/ssh/sshd_config +if [[ ${GITEA_SSH_PORT} ]] ; then + echo "Port ${GITEA_SSH_PORT}" >> /etc/ssh/sshd_config fi