아이티제어

docker로 자체 GitHub를 집,사무실,서버에 동일한 환경으로 wsl , ubuntu를 이용하셔ChatGPT와 협업 환경만들기(1) 본문

Linux/AI인공지능발전과 미래준비

docker로 자체 GitHub를 집,사무실,서버에 동일한 환경으로 wsl , ubuntu를 이용하셔ChatGPT와 협업 환경만들기(1)

프로그래머 파이브010-2629-0471 2025. 10. 23. 16:40

매번 아니면 링크 만들어서 /mnt/d/www 의 링크만 만들어서 

 

호스트 경로를 모두 /mnt/d/www로 통일해두면, 집/사무실 WSL(우분투 24.04)과 서버(nssb)에서 동일한 docker-compose.yml 한 장으로 끝낼 수 있어요. 도메인은 git.yjm.kr, github.yjm.kr, githom.yjm.kr 본인의 도메인  환경 IP로 A레코드 바꿔주면 되고요.

아래 그대로 쓰면 됩니다. (여러분 예   ns8ext_www  폴더가 ChatGPT와 협업을 할  폴더라고 가정합니다.)


0) 호스트 경로 표준화

서버

서버엔 D드라이브가 없으니, 심볼릭 링크로 표준 경로만 맞춰요.

 
# 실제 데이터 루트(예: 기존 경로)
sudo mkdir -p /ns8ext/www/git707

# 표준 경로 생성
sudo mkdir -p /mnt/d

# 표준 경로(/mnt/d/www) → 실제 경로(/ns8ext/www)로 링크
# “/mnt/d/www”로 접근하면 실제는 “/ns8ext/www”
cd /mnt/d
sudo ln -s /ns8ext/www www

# 권한: 컨테이너 www-data(UID 33)도 쓰게
sudo chown -R www-data:www-data /ns8ext/www

집/사무실 WSL(우분투 24.04)

WSL은 이미 **/mnt/d**가 윈도우 D:와 매핑되죠.
원하는 루트만 만들면 끝.

 
mkdir -p /mnt/d/www/git707 # 권한은 본인 계정 그대로 써도 OK (WSL은 윈도우 권한 따름)

 

이렇게 하면 모든 환경에서 **호스트 표준 경로가 /mnt/d/www/git707**로 동일합니다.
(서버만 링크로 매칭)


1) 폴더 구성

 
git-http/
 ├─ docker-compose.yml
 ├─ Dockerfile
 ├─ httpd.conf
 ├─ git-vhosts-open.conf     # 푸시 무인증 (테스트용)
 └─ git-vhosts-secure.conf   # 푸시 인증 (운영용)

2) docker-compose.yml (한 장으로 끝)

 
services:
  git707:
    build:
      context: .
    container_name: git707
    ports:
      - "707:707"
    volumes:
      - ${HOST_GITROOT:-/mnt/d/www/git707}:/gitroot
      # 필요 시 인증파일도 바인드 (SECURE 모드 쓸 때)
      - ${HOST_AUTHFILE:-/mnt/d/www/git707/git707.passwd}:/etc/apache2/git707.passwd:ro
      # OPEN/SECURE 전환: 아래 중 하나를 선택해서 마운트
      # - ./git-vhosts-open.conf:/usr/local/apache2/conf/extra/git-vhosts.conf:ro
      # - ./git-vhosts-secure.conf:/usr/local/apache2/conf/extra/git-vhosts.conf:ro
    env_file:
      - .env  # 선택사항: HOST_GITROOT, HOST_AUTHFILE 변수를 여기서 지정 가능
    restart: unless-stopped​

OPEN/SECURE 전환은 마운트 라인 한 줄만 바꾸면 됩니다. (아래 5번 참고)


3) Dockerfile

 
FROM httpd:2.4

RUN apt-get update && \
    apt-get install -y --no-install-recommends git apache2-bin && \
    rm -rf /var/lib/apt/lists/*

# 기본 HTTPD 설정
COPY httpd.conf /usr/local/apache2/conf/httpd.conf

# 깃 HTTP 푸시 허용
RUN git config --system http.receivepack true

VOLUME ["/gitroot"]​

4) httpd.conf (공통)

 
ServerName localhost
Listen 707

LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule dir_module modules/mod_dir.so
LoadModule mime_module modules/mod_mime.so
LoadModule alias_module modules/mod_alias.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_file_module modules/mod_authn_file.so

User www-data
Group www-data

ErrorLog logs/error.log
LogLevel warn
CustomLog logs/access.log combined

DirectoryIndex index.html

# 여기 파일은 compose에서 OPEN 또는 SECURE 중 하나로 마운트
Include conf/extra/git-vhosts.conf

 


5) 가상호스트 (OPEN / SECURE 두 벌)

5-1) git-vhosts-open.conf (푸시 무인증, AI 테스트용)

# 세 도메인을 한 포트(707)에서 Name-based 가상호스트로 분기
<VirtualHost *:707>
    ServerName git.yjm.kr
    DocumentRoot /gitroot
    SetEnv GIT_PROJECT_ROOT /gitroot
    SetEnv GIT_HTTP_EXPORT_ALL
    ScriptAlias / /usr/lib/git-core/git-http-backend/
    <Directory "/usr/lib/git-core/">
        Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:707>
    ServerName github.yjm.kr
    DocumentRoot /gitroot
    SetEnv GIT_PROJECT_ROOT /gitroot
    SetEnv GIT_HTTP_EXPORT_ALL
    ScriptAlias / /usr/lib/git-core/git-http-backend/
    <Directory "/usr/lib/git-core/">
        Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:707>
    ServerName githom.yjm.kr
    DocumentRoot /gitroot
    SetEnv GIT_PROJECT_ROOT /gitroot
    SetEnv GIT_HTTP_EXPORT_ALL
    ScriptAlias / /usr/lib/git-core/git-http-backend/
    <Directory "/usr/lib/git-core/">
        Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
 

5-2) git-vhosts-secure.conf (푸시 인증, 운영용)

 
<VirtualHost *:707>
    ServerName git.yjm.kr
    DocumentRoot /gitroot
    SetEnv GIT_PROJECT_ROOT /gitroot
    SetEnv GIT_HTTP_EXPORT_ALL
    ScriptAlias / /usr/lib/git-core/git-http-backend/
    <Directory "/usr/lib/git-core/">
        Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
        AllowOverride None
        Require all granted
    </Directory>
    # PUSH만 인증 (clone/fetch는 공개)
    <LocationMatch "^/.*/git-receive-pack$">
        AuthType Basic
        AuthName "Git Push Access"
        AuthUserFile /etc/apache2/git707.passwd
        Require valid-user
    </LocationMatch>
</VirtualHost>

# 나머지 도메인도 동일
<VirtualHost *:707>
    ServerName github.yjm.kr
    DocumentRoot /gitroot
    SetEnv GIT_PROJECT_ROOT /gitroot
    SetEnv GIT_HTTP_EXPORT_ALL
    ScriptAlias / /usr/lib/git-core/git-http-backend/
    <Directory "/usr/lib/git-core/">
        Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
        AllowOverride None
        Require all granted
    </Directory>
    <LocationMatch "^/.*/git-receive-pack$">
        AuthType Basic
        AuthName "Git Push Access"
        AuthUserFile /etc/apache2/git707.passwd
        Require valid-user
    </LocationMatch>
</VirtualHost>

<VirtualHost *:707>
    ServerName githom.yjm.kr
    DocumentRoot /gitroot
    SetEnv GIT_PROJECT_ROOT /gitroot
    SetEnv GIT_HTTP_EXPORT_ALL
    ScriptAlias / /usr/lib/git-core/git-http-backend/
    <Directory "/usr/lib/git-core/">
        Options +ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
        AllowOverride None
        Require all granted
    </Directory>
    <LocationMatch "^/.*/git-receive-pack$">
        AuthType Basic
        AuthName "Git Push Access"
        AuthUserFile /etc/apache2/git707.passwd
        Require valid-user
    </LocationMatch>
</VirtualHost>​

OPEN ↔ SECURE 전환:
docker-compose.yml에서 마운트 줄만 바꿔주고 재기동하면 끝:

  • OPEN: - ./git-vhosts-open.conf:/usr/local/apache2/conf/extra/git-vhosts.conf:ro
  • SECURE: - ./git-vhosts-secure.conf:/usr/local/apache2/conf/extra/git-vhosts.conf:ro

6) 인증 파일(SECURE용)

원하셨던 비번 예) Git707yjmky
(사용자 yjm 기준 bcrypt 권장)

 
# 호스트에서 생성 (WSL/서버 동일)
htpasswd -nbB yjm 'Git707yjmky' | tee /mnt/d/www/git707/git707.passwd
# 파일 권한
chmod 640 /mnt/d/www/git707/git707.passwd​

7) 컨테이너 띄우기 / 전환

 
# 처음 띄울 때 (OPEN 모드 예)
# compose 파일에서 OPEN conf 라인이 활성화되어 있어야 함
docker compose up -d --build

# SECURE로 전환하고 싶을 때 -> compose 파일에서 SECURE 라인으로 바꾸고:
docker compose up -d​

8) 프로젝트 저장소 만들기 (공통)

 

접속 URL (세 도메인 동일 패턴):

http://git.yjm.kr:707/prj1/prj1.git
http://github.yjm.kr:707/prj1/prj1.git
http://githom.yjm.kr:707/prj1/prj1.git​

9) (선택) 웹 서비스 자동 배포 훅

배포 워킹트리: /mnt/d/www/prj1/www 로 가정

 
cat >/mnt/d/www/git707/prj1/prj1.git/hooks/post-receive <<'SH'
#!/bin/bash
WORKTREE="/gitroot/prj1/www"
mkdir -p "$WORKTREE"
git --work-tree="$WORKTREE" --git-dir="$(pwd)" checkout -f
SH
chmod +x /mnt/d/www/git707/prj1/prj1.git/hooks/post-receive​

웹 도커/아파치의 DocumentRoot만 /mnt/d/www/prj1/www로 잡아두면 푸시=배포 끝.

 


10) ns8ext_www → mnt_d_www로 계정/권한 정리?

계정까지 바꾸는 대신, 폴더 표준화 + 소유자만 조정이 훨씬 깔끔합니다.

  • 컨테이너는 기본 www-data(UID 33)로 동작 → 호스트 폴더를 www-data가 쓰게만 하면 OK
  • 굳이 새 계정 안 만들어도 됩니다: 
sudo chown -R www-data:www-data /ns8ext/www   # 서버
# WSL은 본인 UID OK, 컨테이너는 바인드로 접근

한 줄 요약

  • 표준 경로: /mnt/d/www (서버는 링크, WSL은 실경로)
  • 한 장짜리 compose로 집/사무실/서버 100% 동일
  • 도메인 3개를 707로 지목해 Host 헤더로 분기
  • OPEN/SECURE는 conf 파일만 바꿔 마운트 → 재기동

이대로 고고하면,  어디서든 IP만 바꿔가며 같은 조건으로 저랑 git 통해 협업 딱! 가능합니다.


소스코드피요하신분은 댓글남겨주세요
 테스트 완료하하면 정리해서 오려드리도록 하게료..
http://git.yjm.kr:707/yjm_setup_docker4gpt.git    이곳 예정 아직은 비어있어요..