Möchte man Git-Repositories auf einem Ubuntu-Server hosten, so ist das schnell erledigt. Wenn etwas mehr Komfort aller GitHub gewünscht ist, so sollte man sich Gogs anschauen. Gogs steht dabei für Go Git Service. Wie der Name andeutet handelt es sich um einen komplett in Go geschriebenden Git-Service. Im ersten Schritt muss Git auf dem Server installiert werden:
apt-get install git
Nachdem Git installiert ist, muss der für Gogs verwendete Nutzer angelegt und in diesen gewechselt werden:
useradd -m gogs su gogs cd
Danach kann das Gogs Binary heruntergeladen:
wget https://github.com/gogits/gogs/releases/download/v0.6.15/linux_amd64.zip linux_amd64.zip unzip linux_amd64.zip
und anschließend entpackt werden. Nachdem man mittels cd in den Ordner gogs gewechselt ist, kann gogs gestartet werden:
./gogs web
Damit wird ein Webserver auf Port 3000 gestartet. Mit dem Aufruf der passenden URL im Browser (z.B. http://example.org:3000) öffnet sich die Installationsroutine von Gogs.
In der Routine wird die gewünschte Datenbank eingestellt und einige weitere Punkte konfiguriert. Die Installationsroutine erstellt eine app.ini im Verzeichnis custom/conf/. Dort können die Optionen später geändert werden. Damit Gogs automatisch startet – wird der Nutzer verlassen und ein Initscript angelegt, an die Konfiguration angepasst und zu den automatisch startenden Prozessen hinzugefügt:
cp /home/gogs/scripts/init/debian/gogs /etc/init.d/gogs nano /etc/init.d/gogs chmod +x /etc/init.d/gogs update-rc.d gogs defaults
Damit sollte sich der Service über:
service gogs start
starten lassen. Bei mir führt das allerdings zu dem Problem das der Service angeblich gestartet wird, aber trotzdem nicht läuft. Wird der Service manuell per:
sh -x /etc/init.d/gogs start
gestartet funktioniert er ohne Probleme – hier ist noch der entsprechende Fehler zu finden.
Hi,
hilfreich ist es, wenn man Gogs über einen Apache/Nginx als Reverse Proxy ausliefert. Dann muss man bei der Adresseingabe keine Portnummer eingeben und kann die SSl-Fähigkeit des Webservers nutzen.
Ich habe Gogs auf dem Raspberry mit Apache 2 als Reverse Proxy unter einer Subdomain (https://abcabc.xy/gogs) laufen und das funktioniert bestens.
Hier mal das Init-Script (/etc/init.d/gogs-service) , wie ich es beim Pi benutze, der ja auf Debian basiert. Vielleicht hilft es dir bei der Fehlersuche. Wichtig ist, die folgenden Einstellungen an die eigenen Bedürnisse anzupassen:
WORKINGDIR=PATH_TO_GOGS –> müsste bei deinem Beispiel /home/gogs sein
USER=GOGSUSER –> müsste bei dir gogs sein
Das Script:
——————————-
#! /bin/sh
### BEGIN INIT INFO
# Provides: gogs
# Required-Start: $syslog $network
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: A self-hosted Git service written in Go.
# Description: A self-hosted Git service written in Go.
### END INIT INFO
# Author: Danny Boisvert
# Do NOT „set -e“
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=“Go Git Service“
NAME=gogs
SERVICEVERBOSE=yes
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
WORKINGDIR=PATH_TO_GOGS
DAEMON=$WORKINGDIR/$NAME
DAEMON_ARGS=“web“
USER=GOGSUSER
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Exit if the package is not installed
[ -x „$DAEMON“ ] || exit 0
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
sh -c „start-stop-daemon –start –quiet –pidfile $PIDFILE –make-pidfile \\
–exec $DAEMON — $DAEMON_ARGS –test > /dev/null \\
|| return 1“
sh -c „start-stop-daemon –start –quiet –pidfile $PIDFILE –make-pidfile \\
–background –exec /bin/su — – $USER -c \“cd \\\“$WORKINGDIR\\\“ && $DAEMON — $DAEMON_ARGS\“ \\
|| return 2″
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon –stop –quiet –retry=TERM/1/KILL/5 –pidfile $PIDFILE –name $NAME
RETVAL=“$?“
[ „$RETVAL“ = 2 ] && return 2
start-stop-daemon –stop –quiet –oknodo –retry=0/1/KILL/5 –exec $DAEMON
[ „$?“ = 2 ] && return 2
# Many daemons don’t delete their pidfiles when they exit.
rm -f $PIDFILE
return „$RETVAL“
}
case „$1“ in
start)
[ „$SERVICEVERBOSE“ != no ] && log_daemon_msg „Starting $DESC“ „$NAME“
do_start
case „$?“ in
0|1) [ „$SERVICEVERBOSE“ != no ] && log_end_msg 0 ;;
2) [ „$SERVICEVERBOSE“ != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ „$SERVICEVERBOSE“ != no ] && log_daemon_msg „Stopping $DESC“ „$NAME“
do_stop
case „$?“ in
0|1) [ „$SERVICEVERBOSE“ != no ] && log_end_msg 0 ;;
2) [ „$SERVICEVERBOSE“ != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc „$DAEMON“ „$NAME“ && exit 0 || exit $?
;;
restart|force-reload)
log_daemon_msg „Restarting $DESC“ „$NAME“
do_stop
case „$?“ in
0|1)
do_start
case „$?“ in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
stop)
[ „$SERVICEVERBOSE“ != no ] && log_daemon_msg „Stopping $DESC“ „$NAME“
do_stop
case „$?“ in
0|1) [ „$SERVICEVERBOSE“ != no ] && log_end_msg 0 ;;
2) [ „$SERVICEVERBOSE“ != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc „$DAEMON“ „$NAME“ && exit 0 || exit $?
;;
restart|force-reload)
log_daemon_msg „Restarting $DESC“ „$NAME“
do_stop
case „$?“ in
0|1)
do_start
case „$?“ in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo „Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}“ >&2
exit 3
;;
esac
:
Pingback: HTTPS für Gogs aktivieren | seeseekey.net
Pingback: Probleme mit dem Init-Script von Gogs | seeseekey.net
Pingback: Gitea installieren › seeseekey.net