Laravel 프로젝트를 로컬에서 잘 돌리다가 막상 실서버에 배포하려면 막막할 때가 있습니다. Forge 같은 유료 툴 없이, VPS에 직접 손으로 올리는 방법을 처음부터 끝까지 정리했습니다. 이 글을 따라하면 30분 안에 Vultr VPS에 Laravel 프로젝트를 배포할 수 있습니다.
대상 독자: Laravel 개발 경험이 있고, 직접 VPS 서버에 배포해보고 싶은 분
사전 준비
이 가이드에서 사용하는 환경은 다음과 같습니다.
- VPS: Vultr Regular Cloud Compute 1GB ($6/월) — 신규 가입 시 $100 크레딧 제공
- OS: Ubuntu 24.04 LTS
- 웹서버: Nginx
- PHP: 8.2
- 데이터베이스: MySQL 8.0
Vultr 계정이 없다면 먼저 가입이 필요합니다. 신규 가입 시 $100 크레딧이 제공되어 한 달 이상 무료로 테스트할 수 있습니다.
Step 1: Vultr 인스턴스 생성
Vultr 대시보드에서 Deploy > Cloud Compute 선택 후 다음 옵션으로 설정합니다.
- Location: Seoul (서울 리전 선택 — 국내 접속 속도 최적)
- Image: Ubuntu 24.04 LTS x64
- Plan: Regular Cloud Compute → 1 vCPU / 1GB RAM / 25GB SSD ($6/월)
- Additional Features: IPv6 체크 (무료)
- Server Hostname: 원하는 이름 입력
Deploy Now를 클릭하면 약 60초 안에 서버가 준비됩니다. IP 주소를 메모해둡니다.
Step 2: 서버 초기 셋팅
SSH로 접속합니다. 초기 비밀번호는 Vultr 대시보드에서 확인 가능합니다.
ssh root@[서버IP]
먼저 패키지를 업데이트하고 배포용 유저를 생성합니다.
apt update && apt upgrade -y
# 배포용 유저 생성
adduser deploy
usermod -aG sudo deploy
# 방화벽 설정
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable
Step 3: Nginx + PHP 8.2 + MySQL 설치
# Nginx 설치
apt install nginx -y
# PHP 8.2 + 필수 익스텐션
add-apt-repository ppa:ondrej/php -y
apt update
apt install php8.2 php8.2-fpm php8.2-mysql php8.2-xml \
php8.2-mbstring php8.2-curl php8.2-zip php8.2-bcmath -y
# MySQL 8.0
apt install mysql-server -y
mysql_secure_installation
MySQL 보안 설정이 끝나면 Laravel용 데이터베이스와 유저를 생성합니다.
mysql -u root -p
CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY '강력한패스워드';
GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Step 4: Composer 설치
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer
Step 5: Laravel 프로젝트 배포
deploy 유저로 전환 후 진행합니다.
su - deploy
cd /var/www
# Git으로 프로젝트 클론
git clone https://github.com/[계정]/[리포지토리].git myapp
cd myapp
# Composer 의존성 설치
composer install --optimize-autoloader --no-dev
# 환경 설정
cp .env.example .env
php artisan key:generate
# .env 수정 (DB 정보 입력)
nano .env
.env에서 DB 설정을 입력합니다.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=강력한패스워드
마이그레이션과 권한 설정을 완료합니다.
php artisan migrate --force
# 권한 설정
sudo chown -R www-data:www-data /var/www/myapp
sudo chmod -R 755 /var/www/myapp/storage
sudo chmod -R 755 /var/www/myapp/bootstrap/cache
Step 6: Nginx 설정 + SSL
Nginx 설정 파일을 작성합니다.
sudo nano /etc/nginx/sites-available/myapp
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/myapp/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
마지막으로 Let’s Encrypt로 HTTPS를 적용합니다.
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
자주 만나는 에러
| 에러 | 원인 | 해결 |
|---|---|---|
| 500 Server Error | .env 파일 없음 또는 APP_KEY 미설정 | php artisan key:generate 실행 |
| Permission Denied (storage) | storage 폴더 권한 문제 | chmod -R 775 storage bootstrap/cache |
| SQLSTATE Connection Refused | DB 설정 오류 | .env의 DB_HOST를 127.0.0.1로 확인 |
| Nginx 502 Bad Gateway | PHP-FPM 소켓 경로 불일치 | php8.2-fpm 소켓 경로 확인 |
| Class not found | autoload 캐시 문제 | composer dump-autoload 실행 |
마무리
이 가이드에서 다룬 내용을 정리하면 다음과 같습니다.
- Vultr 서울 리전 인스턴스 생성
- Ubuntu 22.04 초기 보안 셋팅
- Nginx + PHP 8.2 + MySQL 8.0 스택 구성
- Laravel 프로젝트 Git 배포 + Nginx 설정
- Let’s Encrypt HTTPS 적용
다음 단계로는 Laravel Forge를 활용한 자동화 배포 또는 GitHub Actions CI/CD 파이프라인 구성을 추천합니다.
💡 이 튜토리얼에서 사용한 서비스
Vultr 서울 리전 VPS — 국내 최저 지연시간, 신규 가입 시 $100 크레딧 제공
위 링크는 제휴 링크입니다. 클릭 후 가입 시 추가 비용 없이 블로그 운영에 도움이 됩니다.
