diff options
| -rw-r--r-- | README.md | 210 |
1 files changed, 112 insertions, 98 deletions
@@ -1,3 +1,10 @@ +# Разворачивание git+Сgit под OpenResty + +Идея в том, что наружу показываются только публичные репозитории через Cgit, а репозитории приватные остаются доступными только по ssh. + + +## Создание нового пользователя и создание папок публичных и приватных репозиториев + ``` sudo adduser --system --shell /bin/bash --group --disabled-password git @@ -8,179 +15,186 @@ sudo -u git -i mkdir -p ~/repositories/public mkdir -p ~/repositories/private mkdir ~/.ssh - -# Задаем жесткие права доступа (чтение/запись только для владельца) chmod 700 ~/.ssh ``` -``` -ssh-keygen -t ed25519 -f ~/.ssh/id_git_server -C "git-admin" -cat ~/.ssh/id_git_server.pub - -Host my-git-server - HostName IP_ВАШЕГО_СЕРВЕРА - User git - IdentityFile ~/.ssh/id_git_server +## Создание репозитория (под созданным пользователем) ``` +sudo -u git mkdir -p /home/git/repositories/public/new.git +sudo -u git git init --bare /home/git/repositories/public/new.git ``` -nano ~/.ssh/authorized_keys -``` +## Установка Сgit ``` - -sudo nano /usr/local/bin/git-create -sudo chmod +x /usr/local/bin/git-create +sudo apt update +sudo apt install cgit spawn-fcgi fcgiwrap +sudo systemctl status fcgiwrap.socket ``` -``` -sudo -u git mkdir -p /home/git/repositories/private/new.git -sudo -u git git init --bare /home/git/repositories/private/new.git +Cgit работает от www-data, поэтому даем права, но только на публичные репозитории -``` ``` -git remote remove origin +sudo chown -R git:www-data /home/git/repositories/public +sudo find /home/git/repositories/public -type d -exec chmod 750 {} \; +sudo find /home/git/repositories/public -type f -exec chmod 640 {} \; +sudo chmod +x /home/git +sudo chmod +x /home/git/repositories +sudo chmod +x /home/git/repositories/public +sudo chmod -R 755 /usr/share/cgit/ -git remote add origin git@IP_ВАШЕГО_СЕРВЕРА:/home/git/repositories/private/api.git +``` -git push -u origin --all +Подстветка синтаксиса: ``` +sudo apt update +sudo apt install python3-pygments +sudo apt install python3-markdown +sudo chmod +x /usr/lib/cgit/filters/syntax-highlighting.py +sudo chmod +x /usr/lib/cgit/filters/about-formatting.sh +``` -```cd /var/www/new -git init -git add . -git commit -m "Initial commit" - -git-create private new +about-formatting.sh заменяем на about-formatting.sh из этого репозитория, чтобы не перебирал разные варианты рендеринга. -git push -u origin --all +Перед этим провяерем, что markdown рендерится ``` - -## Установка cgit +python3 -m markdown --version +echo "# Тестовый заголовок" | /usr/lib/cgit/filters/about-formatting.sh readme.md ``` -sudo apt update -sudo apt install cgit spawn-fcgi fcgiwrap -sudo systemctl status fcgiwrap.socket -``` -``` -sudo chown -R git:www-data /home/git/repositories/public -sudo find /home/git/repositories/public -type d -exec chmod 750 {} \; -sudo find /home/git/repositories/public -type f -exec chmod 640 {} \; -sudo chmod +x /home/git -sudo chmod +x /home/git/repositories -sudo chmod +x /home/git/repositories/public +Настраиваем конфиг ``` +sudo nano /etc/cgitrc +``` -Для запуска из корня: +В нем должно быть так если хотим, чтобы Cgit работал в location / (virtual-root=/). Если в другом - вставляем другой, по умолчанию (если строки этой нет) работает от /git/ ``` -sudo nano /etc/cgitrc - +cache-size=1000 virtual-root=/ css=/cgit-css/cgit.css logo=/cgit-css/cgit.png favicon=/cgit-css/favicon.ico -enable-git-config=1 +source-filter=/usr/lib/cgit/filters/syntax-highlighting.py +about-filter=/usr/lib/cgit/filters/about-formatting.sh +readme=:README.md +readme=:readme.md +readme=:README.txt +readme=:README +root-readme=:README.md +enable-git-config=0 remove-suffix=1 scan-path=/home/git/repositories/public -main-title=Asustem.ru +main-title=Мои репозитории snapshots=tar.gz zip +``` +Тест: -sudo chmod -R 755 /usr/share/cgit/ +``` +CGIT_CONFIG=/etc/cgitrc /usr/lib/cgit/cgit.cgi ``` -Тест: + +При необходимости рестартуем cgit ``` -CGIT_CONFIG=/etc/cgitrc /usr/lib/cgit/cgit.cgi +sudo systemctl restart fcgiwrap ``` -Конфигурация nginx: +В конфиг OpenResty добавляем location в нужное место: ``` location /cgit-css/ { - alias /usr/share/cgit/; - try_files $uri =404; - } - - location / { - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi; - fastcgi_param PATH_INFO $uri; - fastcgi_param QUERY_STRING $args; - fastcgi_pass unix:/run/fcgiwrap.socket; - } -``` + alias /usr/share/cgit/; + try_files $uri =404; +} + +location / { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME /usr/lib/cgit/cgit.cgi; + fastcgi_param PATH_INFO $uri; + fastcgi_param QUERY_STRING $args; + fastcgi_pass unix:/run/fcgiwrap.socket; +} ``` -.git/config -[gitweb] - description = Мой тестовый репозиторий - owner = user +# Клиентская часть + +Выпускаем ключи + ``` +ssh-keygen -t ed25519 -f ~/.ssh/id_git_server -C "git-admin" +cat ~/.ssh/id_git_server.pub ``` -sudo apt update -sudo apt install python3-pygments -sudo apt install python3-markdown -sudo chmod +x /usr/lib/cgit/filters/syntax-highlighting.py -sudo chmod +x /usr/lib/cgit/filters/about-formatting.sh + +Ключ копируем текстом и вставляем на сервере + ``` +nano ~/.ssh/authorized_keys ``` -source-filter=/usr/lib/cgit/filters/syntax-highlighting.py -about-filter=/usr/lib/cgit/filters/about-formatting.sh -readme=:README.md -readme=:readme.md -readme=:README.txt -readme=:README +Чтобы git знал какой ключ используем: + +``` +nano ~/.ssh/config ``` +Добавляем: + ``` -sudo systemctl restart fcgiwrap +Host my-git-server + HostName IP_ВАШЕГО_СЕРВЕРА + User git + IdentityFile ~/.ssh/id_git_server ``` +Добавляем репозиторий в созданный на сервере тестовый (в папке локального репозитория): + + ``` -sudo nano /usr/lib/cgit/filters/about-formatting.sh -python3 -m markdown --version -echo "# Тестовый заголовок" | /usr/lib/cgit/filters/about-formatting.sh readme.md +git remote remove origin +git remote add origin git@IP_ВАШЕГО_СЕРВЕРА:/home/git/repositories/public/new.git + +git push -u origin --all ``` +Создаем скрипт для автоматического создания репозитория: + + ``` -virtual-root=/ -css=/cgit-css/cgit.css -logo=/cgit-css/cgit.png -favicon=/cgit-css/favicon.ico -source-filter=/usr/lib/cgit/filters/syntax-highlighting.py -about-filter=/usr/lib/cgit/filters/about-formatting.sh -readme=:README.md -readme=:readme.md -readme=:README.txt -readme=:README -root-readme=README.md -enable-git-config=1 -remove-suffix=1 -scan-path=/home/git/repositories/public -main-title=Asustem.ru -snapshots=tar.gz zip +sudo nano /usr/local/bin/git-create +sudo chmod +x /usr/local/bin/git-create + +``` + +В этот скрипт вставляем код из git-create из этого репозитория и далее создаем репозитории с использованием его: + + +``` +git init +git add . +git commit -m "Initial commit" +git-create private new +git push -u origin --all + ``` |
