diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..da9e48a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +# Use the official Node.js image as the base image +FROM node:latest + +# install nginx +RUN apt-get update && apt-get install -y nginx git fcgiwrap spawn-fcgi +ENV GIT_PEAR=/srv/repos/pear +EXPOSE 80 +STOPSIGNAL SIGTERM +# Set the working directory inside the container +WORKDIR /app + +# Clone the gitpear repository from GitHub +RUN git clone https://github.com/dzdidi/gitpear.git + +# Change the working directory to the gitpear directory +WORKDIR /app/gitpear + +# Install the dependencies using npm +RUN npm install + +# Link the gitpear package globally +RUN npm link + +RUN mkdir -p /srv/repos/pear + + +COPY default /etc/nginx/sites-enabled/default + +WORKDIR /app +COPY entrypoint.sh . +RUN chmod +x entrypoint.sh + +ENTRYPOINT ["/bin/bash", "-c", "/app/entrypoint.sh"] + + diff --git a/default b/default new file mode 100644 index 0000000..a9a71d1 --- /dev/null +++ b/default @@ -0,0 +1,18 @@ +server { + listen 80; + server_name _; + + # This is where the repositories live on the server + root /srv/repos/pear; + + + location ~ (/.*) { + fastcgi_pass unix:/var/run/fcgiwrap.socket; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; + # export all repositories under GIT_PROJECT_ROOT + fastcgi_param GIT_HTTP_EXPORT_ALL ""; + fastcgi_param GIT_PROJECT_ROOT /srv/repos/pear; + fastcgi_param PATH_INFO $1; + } +} diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..560b1af --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# if $1 includes an url +exec > >(tee -a "/tmp/deployment.log") 2>&1 + +export GIT_PEAR=/srv/repos/pear +git pear daemon -s +# if $1 exists +if [ -n "$1" ]; then + REPO_NAME=$1 +fi + + + +if [[ $REPO_NAME =~ ^https.* ]]; then + ORIGINAL_NAME=$(basename $REPO_NAME .git) + mkdir -p /srv/repos/"$ORIGINAL_NAME" + git clone $REPO_NAME /srv/repos/"$ORIGINAL_NAME" + cd /srv/repos/"$ORIGINAL_NAME" + git pear init -s +# enter pear repo and expose http + cd /srv/repos/pear/"$ORIGINAL_NAME"/ + echo "[http]" >> config + echo " receivepack = true" >> config +fi + + +if [[ ! $REPO_NAME =~ ^https.* ]]; then + mkdir -p /srv/repos/"$REPO_NAME" + cd /srv/repos/"$REPO_NAME" + git init + git pear init -s + # enter pear repo and expose http + cd /srv/repos/pear/"$REPO_NAME"/ + echo "[http]" >> config + echo " receivepack = true" >> config +# git config --bool core.bare true +fi +echo "REPO_NAME: $REPO_NAME" >> /tmp/debug.log +echo "ORIGINAL_NAME: $ORIGINAL_NAME" >> /tmp/debug.log +echo "GIT_PEAR: $GIT_PEAR" >> /tmp/debug.log +echo "PEAR_KEY: $PEAR_KEY" >> /tmp/debug.log +echo "PEAR_REPO: $PEAR_REPO" >> /tmp/debug.log + +/etc/init.d/fcgiwrap start +chmod 766 /var/run/fcgiwrap.socket +nginx -g "daemon off;" \ No newline at end of file