add initial implementation of the http-server
message: add initial implementation of the http-server change_hash: APsMce7qqUtJPVAOn1p8FlI9/OazPFbSoL1Ycoxw5tU1 credentials: - type: pgp_signature pub_key_id: 95C46FA6A41148AC body: iQIzBAABAgAdFiEEJ6tQKp6olvZKJ0lwlcRvpqQRSKwFAl5It7AACgkQlcRvpqQRSKwVcA//ZjIpYtcGiZjVU39YzgzsN4JNO9wttzOMy3hC01wxe4XzLh0SCX9oCIHqaRMQbcdcvC3BEuu70IyJHKow+lBMhNTeGBOjVS4tHqKqskLP4LsU05U+jhXF4wZFxtApgOvEX43G/156g2RC28VFXCm5XDeNHiMggz3fbRzoY5YCPz7WudQTDFVW/t+ULLEKGyZMZ56vfScxziQqs1R1eQBCPvwGTD/h6pSOMGrdLSk8vrGtYdewqWum88H6eXsfgu1Lo1JGfe0Gf1R5CedzUATOfZ1J7T0WfYQRiBS0qpOmA/Ys1ef/YyKWyUnfvTrr+NR2cB3AqdS61mLwXcDqrGrasKos+aOF5N4v/3DvoEnlRFlln+LpQJFDIj8uDRw6ODvJh1sg7yVPnBiJcKWt8jkpHM2KS6gWAZ7iHBbyj+AsXpw4qs81WVZV4/Hq/uDp+OxHz/H+DALanULzXJCX8+WEC0Kf/rTtb5G9nuYlI6kJ09DQzD7Po20cHavmY8ZCc97F8bqNT2Pm5zkP/DemthazhU0gCh5Tyvph7v5xaWHK12gsBpANUI33h/tXfzirv4z7OWTiYIQ8fYEekt8/zBtujq7dTsbOpVDrD0M5NDKMi1rnYm/bH914Q2XdIh5ZXsgmYmM4aVI54fwfonUjCyf6rihAlkFZNdWXFsiTmzGLqyw= account: mediocregopher
This commit is contained in:
parent
f0310bda75
commit
181802ba0e
35
cmd/http-server/Dockerfile
Normal file
35
cmd/http-server/Dockerfile
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
FROM debian:jessie
|
||||||
|
|
||||||
|
# Setup Container
|
||||||
|
VOLUME ["/repos"]
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
# Setup APT
|
||||||
|
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
|
||||||
|
|
||||||
|
# Update, Install Prerequisites, Clean Up APT
|
||||||
|
RUN DEBIAN_FRONTEND=noninteractive apt-get -y update && \
|
||||||
|
apt-get -y install git wget nginx-full fcgiwrap && \
|
||||||
|
apt-get clean
|
||||||
|
|
||||||
|
# Setup Container User
|
||||||
|
RUN useradd -M -s /bin/false git --uid 1000
|
||||||
|
|
||||||
|
# Setup nginx fcgi services to run as user git, group git
|
||||||
|
RUN sed -i 's/FCGI_USER="www-data"/FCGI_USER="git"/g' /etc/init.d/fcgiwrap && \
|
||||||
|
sed -i 's/FCGI_GROUP="www-data"/FCGI_GROUP="git"/g' /etc/init.d/fcgiwrap && \
|
||||||
|
sed -i 's/FCGI_SOCKET_OWNER="www-data"/FCGI_SOCKET_OWNER="git"/g' /etc/init.d/fcgiwrap && \
|
||||||
|
sed -i 's/FCGI_SOCKET_GROUP="www-data"/FCGI_SOCKET_GROUP="git"/g' /etc/init.d/fcgiwrap
|
||||||
|
|
||||||
|
# Create config files for container startup and nginx
|
||||||
|
COPY nginx.conf /etc/nginx/nginx.conf
|
||||||
|
|
||||||
|
# Create pre-receive
|
||||||
|
COPY dehub /usr/bin/dehub
|
||||||
|
COPY "pre-receive" /pre-receive
|
||||||
|
|
||||||
|
# Create start.sh
|
||||||
|
COPY start.sh /start.sh
|
||||||
|
RUN chmod +x /start.sh
|
||||||
|
|
||||||
|
ENTRYPOINT ["/start.sh"]
|
9
cmd/http-server/README.md
Normal file
9
cmd/http-server/README.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# dehub-server
|
||||||
|
|
||||||
|
This directory provides a simple Docker image which can be spun up to run a
|
||||||
|
dehub-enabled server (i.e. one in which incoming commits will be verified prior
|
||||||
|
to being accepted into their branch).
|
||||||
|
|
||||||
|
The Dockerfile being used is based on
|
||||||
|
[gitbox](https://github.com/nmarus/docker-gitbox), so thank you to nmarus for
|
||||||
|
the great work there.
|
43
cmd/http-server/nginx.conf
Normal file
43
cmd/http-server/nginx.conf
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
user git git;
|
||||||
|
worker_processes 1;
|
||||||
|
pid /run/nginx.pid;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
tcp_nopush on;
|
||||||
|
tcp_nodelay on;
|
||||||
|
keepalive_timeout 15;
|
||||||
|
types_hash_max_size 2048;
|
||||||
|
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log;
|
||||||
|
error_log /var/log/nginx/error.log;
|
||||||
|
|
||||||
|
server_names_hash_bucket_size 64;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name MYSERVER default;
|
||||||
|
|
||||||
|
access_log /var/log/nginx/MYSERVER.access.log combined;
|
||||||
|
error_log /var/log/nginx/MYSERVER.error.log error;
|
||||||
|
|
||||||
|
#git SMART HTTP
|
||||||
|
location ~ /(.*\.git.*) {
|
||||||
|
client_max_body_size 0;
|
||||||
|
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
|
||||||
|
fastcgi_param GIT_HTTP_EXPORT_ALL "";
|
||||||
|
fastcgi_param GIT_PROJECT_ROOT /repos;
|
||||||
|
fastcgi_param PATH_INFO /$1;
|
||||||
|
include /etc/nginx/fastcgi_params;
|
||||||
|
fastcgi_pass unix:/var/run/fcgiwrap.socket;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
cmd/http-server/pre-receive
Normal file
3
cmd/http-server/pre-receive
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
exec dehub -bare hook --pre-receive
|
6
cmd/http-server/run.sh
Normal file
6
cmd/http-server/run.sh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
docker run \
|
||||||
|
--rm -it \
|
||||||
|
--name gitbox \
|
||||||
|
-p 8080:80 \
|
||||||
|
-v $(pwd)/srv:/repos \
|
||||||
|
gitbox
|
93
cmd/http-server/start.sh
Normal file
93
cmd/http-server/start.sh
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
QUIET=false
|
||||||
|
#SFLOG="/start.log"
|
||||||
|
|
||||||
|
#print timestamp
|
||||||
|
timestamp() {
|
||||||
|
date +"%Y-%m-%d %T"
|
||||||
|
}
|
||||||
|
|
||||||
|
#screen/file logger
|
||||||
|
sflog() {
|
||||||
|
#if $1 is not null
|
||||||
|
if [ ! -z ${1+x} ]; then
|
||||||
|
message=$1
|
||||||
|
else
|
||||||
|
#exit function
|
||||||
|
return 1;
|
||||||
|
fi
|
||||||
|
#if $QUIET is not true
|
||||||
|
if ! $($QUIET); then
|
||||||
|
echo "${message}"
|
||||||
|
fi
|
||||||
|
#if $SFLOG is not null
|
||||||
|
if [ ! -z ${SFLOG+x} ]; then
|
||||||
|
#if $2 is regular file or does not exist
|
||||||
|
if [ -f ${SFLOG} ] || [ ! -e ${SFLOG} ]; then
|
||||||
|
echo "$(timestamp) ${message}" >> ${SFLOG}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#start services function
|
||||||
|
startc() {
|
||||||
|
sflog "Services for container are being started..."
|
||||||
|
/etc/init.d/fcgiwrap start > /dev/null
|
||||||
|
/etc/init.d/nginx start > /dev/null
|
||||||
|
sflog "The container services have started..."
|
||||||
|
}
|
||||||
|
|
||||||
|
#stop services function
|
||||||
|
stopc() {
|
||||||
|
sflog "Services for container are being stopped..."
|
||||||
|
/etc/init.d/nginx stop > /dev/null
|
||||||
|
/etc/init.d/fcgiwrap stop > /dev/null
|
||||||
|
sflog "Services for container have successfully stopped. Exiting."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
#trap "docker stop <container>" and shuts services down cleanly
|
||||||
|
trap "(stopc)" TERM INT
|
||||||
|
|
||||||
|
#startup
|
||||||
|
|
||||||
|
#test for ENV varibale $FQDN
|
||||||
|
if [ ! -z ${FQDN+x} ]; then
|
||||||
|
sflog "FQDN is set to ${FQDN}"
|
||||||
|
else
|
||||||
|
export FQDN=dehub
|
||||||
|
sflog "FQDN is set to ${FQDN}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#modify config files with fqdn
|
||||||
|
sed -i "s,MYSERVER,${FQDN},g" /etc/nginx/nginx.conf &> /dev/null
|
||||||
|
|
||||||
|
# create the individual repo directories
|
||||||
|
while [ ! -z "$1" ]; do
|
||||||
|
dir="/repos/$1.git";
|
||||||
|
if [ ! -d "$dir" ]; then
|
||||||
|
echo "Initializing repo $1"
|
||||||
|
mkdir "$dir"
|
||||||
|
git init --bare "$dir"
|
||||||
|
git config -f "$dir/config" http.receivepack true
|
||||||
|
git config -f "$dir/config" receive.denyNonFastForwards true
|
||||||
|
chown -R git:git "$dir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$dir/hooks"
|
||||||
|
cp /pre-receive "$dir/hooks/"
|
||||||
|
chmod +x "$dir/hooks/pre-receive"
|
||||||
|
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
#start init.d services
|
||||||
|
startc
|
||||||
|
|
||||||
|
#pause script to keep container running...
|
||||||
|
sflog "Services for container successfully started."
|
||||||
|
sflog "Dumping logs"
|
||||||
|
tail -f /var/log/nginx/*.log
|
Loading…
Reference in New Issue
Block a user