본문 바로가기
Programming/Raspberry Pi

Redmine을 위한 Git 원격 저장소 생성 php 페이지 만들기[1/2]

by BACKK0M 2018. 11. 29.
반응형

저는 기존에 Docker를 활용하여 라즈베리파이에 Redmine + Git + Mysql을 세팅하였습니다.

1편: Raspberry Pi(라즈베리파이) Docker + Redmine + Mysql + Git 세팅하기 [1편: Docker란? (1/7)]

2편: Raspberry Pi(라즈베리파이) Docker + Redmine + Mysql + Git 세팅하기 [2편: Docker 설치하기 (2/7)]

3편: Raspberry Pi(라즈베리파이) Docker + Redmine + Mysql + Git 세팅하기 [3편: Mysql 컨테이너 생성(3/7)]

4편: Raspberry Pi(라즈베리파이) Docker + Redmine + Mysql + Git 세팅하기 [4편: Mysql 컨테이너 세팅(4/7)]

5편: Raspberry Pi(라즈베리파이) Docker + Redmine + Mysql + Git 세팅하기 [5편: Redmine 컨테이너 생성(5/7)]

6편: Raspberry Pi(라즈베리파이) Docker + Redmine + Mysql + Git 세팅하기 [6편: Redmine 컨테이너 세팅(6/7)]

7편: Raspberry Pi(라즈베리파이) Docker + Redmine + Mysql + Git 세팅하기 [7편: Redmine Git과 연동 (7/7)]

 

Host와 Redmine Container간 공유된 디렉토리에 bare repository를 생성하여 이를 Redmine에서 불러와 사용하도록 되어 있습니다.

하지만 여기에서의 단점(?)은 원격 저장소를 생성할 때마다 ssh로 접속하여 bare repository를 생성해주어야 한다는 점이었습니다.

 

이런 번거로움을 없애기 위해 php를 통해 bare repository를 생성해주는 bash shell을 실행시키고자 합니다.

 

과정은 이렇습니다.

1. apache2, php 설치 및 확인

1. bare repository를 생성하는 스크립트 작성

3. php파일 생성 및 세팅

4. 동작 확인

 

그럼 시작하겠습니다.

※ 저는 라즈베리파이로 작업하였습니다!

 

1. apache2, php 설치 및 확인

패키지 업데이트 및 아파치와 php를 설치해줍니다.
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install apache2
$ sudo apt-get install php
 
※ apache2 설치시 오류가 발생할 경우 php만 설치해보세요. apache2도 같이 설치 될것입니다.
 
필요에 따라 apache2의 사용 포트를 변경해줍니다(저는 Docker의 다른 Container가 80 포트를 사용하고 있어서요 ㅎ).
$ sudo nano /etc/apache2/ports.conf
Listen 80 이라 적혀있는 부분에서 숫자 부분을 원하는 숫자로 바꿔줍니다(포트번호 입니다).
 
예) Listen 8888
 
$ sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80> 이라 적혀있는 부분에서 숫자 부분을 위와 같은 숫자로 바꿔줍니다.
 
예) <VirtualHost *:8888>
 
설치가 제대로 되었는지 확인하기 위해 아래의 과정을 진행합니다.
$ sudo nano /var/www/html/phpinfo.php
<?php
phpinfo()
?>

저장 후 아파치를 재시작해줍니다.

$ sudo service apache2 restart

 

페이지에 접속해봅니다.

Host의 IP:Port(설정한 Host 포트번호)

 

아파치 디폴트 페이지가 나타난다면 제대로 설치가 된것입니다.

 

php설치 확인을 위해 아래의 페이지로 접속해봅니다.

Host의 IP:Port/phpinfo.php

 

php 디폴트 페이지가 나타난다면 제대로 설치가 된것입니다.

 

테스트 후 index.html과 phpinfo.php 파일을 제거해줍니다.

$ cd /var/www/html

$ rm index.html

$ rm phpinfo.php

 

2. bare repository를 생성하는 스크립트 작성

우선 아파치 디렉토리 내에 git 저장소들이 모여있는 디렉토리를 심볼릭 링크를 해줍니다(바로가기라 생각하시면 됩니다).
$ cd /var/www/html 
$ ln -s ~/redmine_backup/repositories/
 
※ 굵은 표시로 되어있는 부분이 git 저장소를 저장해놓은 디렉토리입니다. 여러분이 원하시는 디렉토리로 하시면 됩니다.
 
그 다음 shell script를 작성해줍니다.
$ sudo nano create_git_repos.sh
#!/bin/bash

#run
sudo git init --bare --shared /var/www/html/repositories/$1
sudo chown -R pi:pi /var/www/html/repositories/$1

$1은 스크립트를 실행할 때 받는 파라미터의 값 중 첫 번째 값을 의미합니다.

예를들어 아래의 명령어를 실행한다면

 

sudo sh create_git_repos.sh hello

 

해당 경로에 hello라는 bare repository가 생성되게 됩니다.

 

chown -R pi:pi 명령어를 사용하여 소유자 및 소유그룹을 바꿔주게 됩니다(필요에 따라 수정해주시면 됩니다).

 

 

3. php파일 생성 및 세팅

두 개의 php 파일을 생성해줍니다.

$ sudo nano index.php
<html>
<body>
    <form method="POST" action="create_git_repos.php">
        Git Bare Repository Name:  <input type="text" name="id" />
        <input type="submit" />
    </form>
</body>
</html>
 

POST 메소드를 사용하여 원격 저장소 이름을 서버로 전달해줍니다.

 

$ sudo nano create_git_repos.php
<?php
$repos_name = $_POST['id'];
if ($repos_name == '') {
  echo "빈 공백이 있어서는 안됩니다.";
} else {
  $cmd = 'sudo sh /var/www/html/create_git_repos.sh '.$repos_name;
  try {
    $msg = shell_exec($cmd);
    if ($msg == '') {
      echo "저장소가 생성되지 못하였습니다.";
    } else {
      echo "저장소가 생성되었습니다.";
    }
  } catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
  }
}
?> 

 

받아온 원격 저장소 이름을 repos_name 이라는 변수에 담아주고 이름이 빈 공백이 아닐 경우 shell_exec 명령어를 사용하여 shell script를 실행해줍니다.

 

저장소를 생성할 때 나타나는 문구를 msg 변수에 저장하였고, 만약 제대로 저장되었다면 저장소가 생성되었다는 문구를 웹페이지 상에 띄우게 됩니다.

(이름이 중복된 저장소가 있는지 없는지에 대한 판별을 나중에 다시 하도록 하겠습니다)

 

이대로 바로 시작하면 좋겠지만 아파치의 root권한이 필요하게 됩니다.

아래의 파일을 수정해줍니다.

 

$ sudo nano /etc/sudoers

 

맨 아래에 다음 문구를 추가해줍니다.

www-data ALL=NOPASSWD: ALL

 

저장해준 뒤 아파치를 재시작해줍니다.

$ sudo service apache2 restart

 

3. 동작 확인

구동 확인을 해보겠습니다.
http://자기 IP주소:설정포트번호
 

위의 사진처럼 페이지가 나타납니다. 원하는 저장소 이름을 입력한 뒤 제출 버튼을 눌러줍니다.

 

 

 

저장소가 생성되었습니다 라는 문구가 나타나면 제대로 생성된것입니다.

해당 디렉토리로 이동하여 확인해봅니다.

 

$ cd /var/www/html/repositories

 

이제 레드마인에서 git 저장소를 연결할 수 있습니다.

Raspberry Pi(라즈베리파이) Docker + Redmine + Mysql + Git 세팅하기 [7편: Redmine Git과 연동 (7/7)]

 

반응형