Laravel은 PHP 기반의 인기 있는 웹 애플리케이션 프레임워크입니다. 우분투 서버에 Laravel 프로젝트를 배포하는 과정은 크게 웹 서버 설정과 Laravel 프로젝트 설정으로 나눠집니다. 웹 서버로는 Apache와 Nginx 두 가지를 주로 사용합니다. 각 웹 서버에 대한 배포 방법을 자세히 설명드리겠습니다.
1. 기본 요구 사항 설치
배포 전 우분투 서버에 필요한 패키지들을 먼저 설치해야 합니다.
sudo apt update
sudo apt upgrade
sudo apt install apache2 php php-cli php-fpm php-mbstring php-xml php-curl php-mysql unzip git curl
그리고 Laravel은 Composer를 통해 의존성 패키지를 관리하므로 Composer를 설치합니다.
sudo apt install composer
2. Laravel 프로젝트 준비
Laravel 프로젝트 파일을 준비합니다. Git을 통해 프로젝트를 클론하거나, 프로젝트 폴더를 서버로 직접 업로드합니다.
cd /var/www
git clone https://github.com/your-username/your-laravel-project.git
cd your-laravel-project
composer install
.env 파일 설정
Laravel 프로젝트의 환경 설정 파일인 .env
를 서버 환경에 맞게 수정합니다.
cp .env.example .env
이후 .env
파일을 열어 데이터베이스, 캐시, 세션 등 설정을 수정합니다.
nano .env
앱 키 생성
php artisan key:generate
3. Apache 웹 서버 설정
3.1. Apache 설치 및 활성화
먼저 Apache가 설치되어 있는지 확인합니다. 없으면 다음 명령어로 설치합니다.
sudo apt install apache2
Apache를 활성화합니다.
sudo systemctl enable apache2
sudo systemctl start apache2
3.2. Apache 가상 호스트 설정
Apache의 설정 파일을 열고 가상 호스트를 추가합니다. Laravel 프로젝트를 위한 가상 호스트 파일을 /etc/apache2/sites-available/
폴더에 생성합니다.
sudo nano /etc/apache2/sites-available/your-project.conf
다음과 같은 설정을 추가합니다.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName your-domain.com
DocumentRoot /var/www/your-laravel-project/public
<Directory /var/www/your-laravel-project/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
3.3. Apache 설정 활성화
sudo a2ensite your-project.conf
sudo a2enmod rewrite
설정 파일을 활성화한 후 Apache 서버를 재시작합니다.
sudo systemctl restart apache2
4. Nginx 웹 서버 설정
4.1. Nginx 설치 및 활성화
먼저 Nginx가 설치되어 있는지 확인하고 없으면 설치합니다.
sudo apt install nginx
Nginx를 활성화합니다.
sudo systemctl enable nginx
sudo systemctl start nginx
4.2. Nginx 서버 블록 설정
Nginx 설정 파일을 열고 Laravel 프로젝트를 위한 서버 블록을 추가합니다. /etc/nginx/sites-available/
폴더에 설정 파일을 생성합니다.
sudo nano /etc/nginx/sites-available/your-project
다음과 같이 설정합니다.
server {
listen 80;
server_name your-domain.com;
root /var/www/your-laravel-project/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
error_log /var/log/nginx/your-project_error.log;
access_log /var/log/nginx/your-project_access.log;
}
4.3. Nginx 설정 활성화
Nginx에서 이 서버 블록을 활성화하려면 /etc/nginx/sites-enabled/
에 심볼릭 링크를 만들어야 합니다.
sudo ln -s /etc/nginx/sites-available/your-project /etc/nginx/sites-enabled/
4.4. Nginx 설정 테스트 및 재시작
Nginx 설정 파일에 오류가 없는지 확인하고, 문제가 없으면 Nginx를 재시작합니다.
sudo nginx -t
sudo systemctl restart nginx
5. 파일 권한 설정
Laravel 프로젝트는 storage
와 bootstrap/cache
디렉터리에 쓰기 권한을 요구합니다. 다음 명령어를 사용해 권한을 설정합니다.
sudo chown -R www-data:www-data /var/www/your-laravel-project
sudo chmod -R 775 /var/www/your-laravel-project/storage
sudo chmod -R 775 /var/www/your-laravel-project/bootstrap/cache
6. 데이터베이스 설정
MySQL을 사용하는 경우, 데이터베이스를 설정하고 Laravel .env
파일에 연결 정보를 입력합니다.
- MySQL에 접속합니다.
sudo mysql -u root -p
- 데이터베이스를 생성합니다.
CREATE DATABASE your_database;
CREATE USER 'your_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'localhost';
FLUSH PRIVILEGES;
.env
파일에 데이터베이스 설정을 입력합니다.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database
DB_USERNAME=your_user
DB_PASSWORD=your_password
7. Laravel 마이그레이션 실행
데이터베이스 설정이 완료되었으면, Laravel 마이그레이션을 실행하여 테이블을 생성합니다.
php artisan migrate
8. SSL 설정 (선택 사항)
HTTPS를 활성화하려면 SSL 인증서를 설정해야 합니다. Let’s Encrypt를 사용하여 무료 SSL 인증서를 설정할 수 있습니다.
8.1. Certbot 설치
sudo apt install certbot python3-certbot-nginx
8.2. SSL 인증서 발급
sudo certbot --nginx -d your-domain.com
8.3. 자동 갱신 설정
Let’s Encrypt 인증서는 90일마다 갱신해야 하므로, 자동 갱신을 설정합니다.
sudo certbot renew --dry-run
결론
이렇게 Apache와 Nginx에서 Laravel 프로젝트를 배포하는 방법을 설명했습니다. 각 웹 서버에 맞는 설정을 통해, Laravel 애플리케이션을 안정적으로 운영할 수 있습니다. 배포 후에는 서버의 보안을 강화하고, 적절한 백업 및 모니터링을 설정하는 것도 잊지 마세요.