Ubuntu 22.04 개발 서버 구축기 - Apache, PHP, MySQL, GitLab, Nexus, vLLM 포털 구성 및 트러블슈팅

Ubuntu 22.04 환경에서 Apache, PHP, MySQL, GitLab CE, Nexus Repository, vLLM AI 서버를 구축하고 하나의 Dev Portal에서 통합 관리하는 방법을 정리했습니다. 설치 과정에서 발생한 403 Forbidden, HTTP 500, Nexus 포트 충돌, vLLM 정보 수집 문제 등 실제 운영 중 겪은 오류와 해결 방법까지 상세히 소개합니다.

Ubuntu 22.04 개발 서버 구축기

최근 Ubuntu 22.04 서버에 개발 환경을 구축하면서 Apache, PHP, MySQL, GitLab, Nexus Repository, vLLM AI 서버까지 하나의 화면에서 관리할 수 있는 Dev Portal을 구성했습니다.

단순히 서비스를 설치하는 것에서 끝나지 않고, 실제 운영 환경에서 자주 발생하는 포트 충돌, 권한 문제, PHP 오류, AI 서버 정보 수집 문제까지 해결하면서 구축한 경험을 정리합니다.

이번 글을 통해 Ubuntu 22.04 기반 개발 서버를 구축하려는 분들이 시행착오를 줄이고 빠르게 환경을 구성하는 데 도움이 되길 바랍니다.


구축 환경

항목버전
OS Ubuntu 22.04.5 LTS
Apache Apache/2.4.52
PHP PHP 8.0.30
MySQL MySQL 8.0.45
Java OpenJDK 17.0.19
GitLab GitLab CE 17.x
Nexus Nexus Repository 3.x
AI vLLM
Frontend Bootstrap 5.x

최종 구성

구축 완료 후 다음과 같은 서비스들을 하나의 포털에서 관리하도록 구성했습니다.

Project Manager

http://localhost:8081/login.php
 

GitLab

http://localhost:9999
 

Nexus Repository

http://localhost:9998
 

vLLM API

http://localhost:8001
 

GitLab 설치

GitLab CE 설치

 
sudo EXTERNAL_URL="http://localhost:9999" apt install gitlab-ce
 

설정 적용

 
sudo gitlab-ctl reconfigure
 

서비스 상태 확인

 
sudo gitlab-ctl status
 

GitLab 초기 비밀번호 확인

GitLab 설치 후 root 계정의 초기 비밀번호는 다음 명령으로 확인할 수 있습니다.

 
sudo cat /etc/gitlab/initial_root_password
 

Nexus Repository 설치

Java 17 설치

 
sudo apt install openjdk-17-jdk -y
 

Nexus 다운로드

 
wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
 

압축 해제

 
tar -xvf nexus-*.tar.gz
 

Nexus 포트 변경

기본적으로 Nexus는 8081 포트를 사용합니다.

설정 파일 수정

 
vi nexus/etc/nexus-default.properties
 

기본 설정

 
application-port=8081
 

변경 설정

 
application-port=9998
 

Nexus Repository 포트 충돌 오류

오류 내용

Failed to bind to /0.0.0.0:8081
 

원인

8081 포트를 Apache Dev Portal에서 이미 사용 중이었습니다.

확인 방법

 
sudo lsof -i :8081
 

해결 방법

Nexus 포트를 다른 포트로 변경합니다.

 
application-port=9998
 

Apache VirtualHost 설정

Dev Portal 서비스 운영을 위해 별도 포트를 사용했습니다.

 
<VirtualHost *:8081>

    ServerName localhost

    DocumentRoot /home/project-manager/dist

    <Directory /home/project-manager/dist>
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>
 

Apache 403 Forbidden 오류

오류 내용

Forbidden
You don't have permission to access this resource.
 

원인

DocumentRoot는 정상 설정되었지만 Apache 계정이 홈 디렉터리에 접근할 수 없었습니다.


권한 확인

 
ls -ld /home
ls -ld /home/project-manager
 

해결 방법

 
sudo chmod o+x /home
sudo chmod o+x /home/project-manager
sudo chmod -R o+rX /home/project-manager/dist
 

Apache HTTP 500 오류

오류 내용

HTTP ERROR 500
 

원인

대부분 PHP 코드 오류 또는 권한 문제였습니다.


PHP 오류 표시 활성화

 
ini_set('display_errors',1);
error_reporting(E_ALL);
 

Apache 로그 확인

 
sudo tail -f /var/log/apache2/error.log
 

실제 운영 환경에서는 에러 로그를 확인하는 것이 가장 빠른 해결 방법입니다.


Bootstrap 경로 오류

문제

 
<link rel="stylesheet" href="css/bootstrap.min.css">
 

CSS가 로드되지 않는 문제가 발생했습니다.


원인

실제 파일 경로와 HTML 참조 경로가 달랐습니다.


해결

 
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">

<script src="bootstrap/js/bootstrap.bundle.min.js"></script>
 

Dev Portal 구축

서비스들을 한 화면에서 접근할 수 있도록 Bootstrap 기반 포털을 제작했습니다.

서비스 카드

Project Manager
GitLab
Nexus Repository
AI Server
 

서버 정보 표시

포털에서 다음 정보를 확인할 수 있도록 구성했습니다.

  • Ubuntu 버전
  • Apache 버전
  • PHP 버전
  • MySQL 버전
  • Java 버전
  • GitLab 버전
  • Nexus 버전
  • vLLM 상태

vLLM 서버 정보 수집

현재 실행 프로세스 확인

 
ps -ef | grep vllm
 

예시 결과

/usr/bin/python3 \
-m vllm.entrypoints.openai.api_server \
--model /home/user/models/qwen2.5-14b-instruct-int4 \
--served-model-name qwen14b \
--port 8001
 

vLLM 모델명 추출

 
$vllmModelName = shell_exec("
ps -ef |
grep vllm |
grep -v grep |
sed -n 's/.*--served-model-name \\([^ ]*\\).*/\\1/p'
");
 

결과

qwen14b
 

vLLM 모델 경로 추출

 
$vllmModelPath = shell_exec("
ps -ef |
grep vllm |
grep -v grep |
sed -n 's/.*--model \\([^ ]*\\).*/\\1/p'
");
 

결과

/home/user/models/qwen2.5-14b-instruct-int4
 

vLLM 버전 확인 실패

시도

 
python3 -c "import vllm; print(vllm.__version__)"
 

오류

ModuleNotFoundError: No module named 'vllm'
 

원인

Apache 실행 계정에서는 vLLM이 설치된 Python 환경에 접근할 수 없었습니다.


해결 방법

실제 운영에 필요한 정보 위주로 표시하도록 변경했습니다.

  • Model Name
  • Model Path
  • API Port
  • Process Status

vLLM Process 줄바꿈 문제

문제

긴 프로세스 실행 명령이 화면을 벗어났습니다.


해결

 
.process-box{
    font-family:monospace;
    white-space:pre-wrap;
    word-break:break-all;
    overflow-wrap:break-word;
}
 

GitLab 버전 확인

 
gitlab-rake gitlab:env:info
 

Nexus 버전 확인

 
curl http://localhost:9998/service/rest/v1/status
 

최종 Dev Portal 구성

CoForward Development Portal

서비스

  • Project Manager
  • GitLab
  • Nexus Repository
  • AI Server

서버 정보

  • Ubuntu 22.04.5
  • Apache 2.4.52
  • PHP 8.0.30
  • MySQL 8.0.45
  • OpenJDK 17

AI Server 정보

  • vLLM
  • qwen14b
  • API Port 8001
  • GPU 정보
  • 모델 경로
  • 프로세스 상태

운영하면서 느낀 점

이번 Ubuntu 22.04 개발 서버 구축의 목표는 단순히 서비스를 설치하는 것이 아니라 운영 편의성을 높이는 것이었습니다.

GitLab과 Nexus Repository는 개발 및 배포 환경의 핵심 역할을 담당하고 있으며, 최근에는 AI 모델 운영을 위한 vLLM 서버까지 함께 관리해야 하는 경우가 많아졌습니다.

Dev Portal을 통해 GitLab, Nexus, Project Manager, vLLM 상태를 한 번에 확인할 수 있게 되면서 SSH 접속 없이도 현재 서버 상태를 쉽게 파악할 수 있게 되었습니다.

특히 vLLM의 모델명, 모델 경로, API 포트 정보를 자동으로 수집하여 표시하도록 구성한 부분은 AI 서버 운영 과정에서 매우 유용하게 활용되고 있습니다.

앞으로는 Docker 기반 배포 자동화, Jenkins 연동, GPU 모니터링, AI 모델 스위칭 기능까지 추가하여 더욱 통합된 개발 운영 포털로 확장할 계획입니다.


연관글

Ubuntu 22.04 Nexus Repository 3.92.3 설치 및 데이터 복원

Ubuntu Apache PHP 사이트 배포 시 403 Forbidden, 500 Internal Server Error 해결 방법

Ubuntu22.04,Apache,PHP,MySQL,GitLab,NexusRepository,vLLM,DevPortal,LinuxServer,UbuntuServer,GitLabCE,Nexus3,OpenJDK17,AI서버,서버구축,Apache403,HTTP500,Ubuntu개발환경