저는 기존에 Docker를 활용하여 라즈베리파이에 Redmine + Git + Mysql을 세팅하였습니다.
1편:
2편:
3편:
4편:
5편:
6편:
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 설치 및 확인
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install apache2
$ sudo apt-get install php
$ sudo nano /etc/apache2/ports.conf
$ sudo nano /etc/apache2/sites-available/000-default.conf
$ 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를 생성하는 스크립트 작성
$ cd /var/www/html
$ ln -s ~/redmine_backup/repositories/
$ 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. 동작 확인
위의 사진처럼 페이지가 나타납니다. 원하는 저장소 이름을 입력한 뒤 제출 버튼을 눌러줍니다.
저장소가 생성되었습니다 라는 문구가 나타나면 제대로 생성된것입니다.
해당 디렉토리로 이동하여 확인해봅니다.
$ cd /var/www/html/repositories
이제 레드마인에서 git 저장소를 연결할 수 있습니다.
'Programming > Raspberry Pi' 카테고리의 다른 글
Raspberry Pi 4 개봉기 (0) | 2020.05.09 |
---|---|
Redmine을 위한 Git 원격 저장소 생성 php 페이지 만들기[2/2] (0) | 2019.01.30 |
Docker Mysql Server 주기적으로 백업하기(crontab 활용하기) (0) | 2018.08.07 |
Raspberry Pi(라즈베리파이) Docker + Redmine + Mysql + Git 세팅하기 [7편: Redmine Git과 연동 (7/7)] (2) | 2018.07.13 |
Raspberry Pi(라즈베리파이) Docker + Redmine + Mysql + Git 세팅하기 [6편: Redmine 컨테이너 세팅(6/7)] (0) | 2018.07.13 |