Merge pull request #17 from aljazceru/master

adding docker stuff
This commit is contained in:
DZ
2024-02-11 11:21:51 +00:00
committed by GitHub
4 changed files with 114 additions and 1 deletions

35
Dockerfile Normal file
View File

@@ -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"]

View File

@@ -90,7 +90,7 @@ Collaboration is possible with the following flow between Alice and Bob in a pee
``` ```
cd Repo cd Repo
git pear init -s git pear init -s
git pear list git pear list -s
# outputs: # outputs:
# Repo pear://<Alice public key>/Repo # Repo pear://<Alice public key>/Repo
``` ```
@@ -165,3 +165,15 @@ Supported authentication methods are `native` and `nip98`. The `nip98` authentic
* `git fetch pear` * `git fetch pear`
2. From there she can do 2. From there she can do
* `git diff pear/feat/david` or `git pull pear feat/david` ... merge to master and push to `pear` * `git diff pear/feat/david` or `git pull pear feat/david` ... merge to master and push to `pear`
## Migrate existing public repository to gitpear
Docker image automatically clones the repository and exposes it over http and pear.
Example:
```
git clone https://github.com/dzdidi/gitpear.git
cd gitpear
docker build -t gitpear .
docker run -it -p 80:80 -e REPO_URL=https://github.com/dzdidi/repo.git gitpear
```

18
default Normal file
View File

@@ -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;
}
}

48
entrypoint.sh Normal file
View File

@@ -0,0 +1,48 @@
#!/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
PEAR_KEY=$(git pear key)
PEAR_REPO=$(git pear list -s)
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;"