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개발환경
'서버 & 인프라' 카테고리의 다른 글
| Ubuntu 22.04 UFW 방화벽 설정 가이드 (GitLab, Nexus, Apache, MySQL, vLLM 운영 서버) (0) | 2026.06.02 |
|---|---|
| Ubuntu 22.04 LVM 디스크 용량 확장 방법 (100GB → 3.6TB 적용 사례) (0) | 2026.06.01 |
| Ubuntu 22.04 Nexus Repository 3.92.3 설치 및 데이터 복원 (0) | 2026.06.01 |
| Docker Compose 로컬 개발환경 구축 방법: Spring Boot, MySQL, Redis 예제로 이해하기 (0) | 2026.06.01 |
| Ubuntu Apache PHP 사이트 배포 시 403 Forbidden, 500 Internal Server Error 해결 방법 (0) | 2026.06.01 |
