본문으로 바로가기

Laravel - 리눅스 Ubuntu 라라벨 설치

category 코딩/Laravel 2022. 6. 24. 15:08

 

먼저 Composer 가 없다면 설치한다.

 

$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer

 

Composer 를 사용해서 laravel 을 설치할 것인데, 설치 전 아래 경로를 한번 보자.

 

$ ll /root/.config/composer/
total 16
drwxr-xr-x 2 root root 4096 Jul 11 13:44 ./
drwxr-xr-x 3 root root 4096 Jul 11 13:44 ../
-rw-r--r-- 1 root root  799 Jul 11 13:44 keys.dev.pub
-rw-r--r-- 1 root root  799 Jul 11 13:44 keys.tags.pub

 

별게 없다. laravel 설치 후에 다시 보자.

 

$ composer global require laravel/installer

 

이제 살펴보면

 

$ ll /root/.config/composer/
total 64
drwxr-xr-x 3 root root  4096 Jul 11 13:48 ./
drwxr-xr-x 3 root root  4096 Jul 11 13:44 ../
-rw-r--r-- 1 root root    13 Jul 11 13:48 .htaccess
-rw-r--r-- 1 root root    63 Jul 11 13:48 composer.json
-rw-r--r-- 1 root root 35280 Jul 11 13:48 composer.lock
-rw-r--r-- 1 root root   799 Jul 11 13:44 keys.dev.pub
-rw-r--r-- 1 root root   799 Jul 11 13:44 keys.tags.pub
drwxr-xr-x 7 root root  4096 Jul 11 13:48 vendor/
$ ll /root/.config/composer/vendor/bin/
total 12
drwxr-xr-x 2 root root 4096 Jul 11 13:48 ./
drwxr-xr-x 7 root root 4096 Jul 11 13:48 ../
-rwxr-xr-x 1 root root 3345 Jul 11 13:48 laravel*

 

이것저것 많이 생겼고 laravel 명령어는 laravel 디렉토리 아래에 있다.

laravel 명령어를 실행 가능하도록 PATH 에 등록한다.

 

$ vi .bash_profile
# Get the aliases and functions

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

if [ -f ~/.profile ]; then
    . ~/.profile
fi

PATH=$PATH:/root/.config/composer/vendor/bin

export PATH

 

이제 아파치 DocumentRoot 디렉토리로 이동해서 프로젝트 하나를 생성해 본다.

사실 어느 디렉토리든지 상관은 없다.

 

$ cd /var/www/html
$ laravel new example
   _                               _
  | |                             | |
  | |     __ _ _ __ __ ___   _____| |
  | |    / _` | '__/ _` \ \ / / _ \ |
  | |___| (_| | | | (_| |\ V /  __/ |
  |______\__,_|_|  \__,_| \_/ \___|_|
$ ll example/
total 380
drwxr-xr-x 12 root      root        4096 Jul 11 14:27 ./
drwxr-xr-x 11 lifelike2 lifelike2   4096 Jul 11 14:27 ../
-rw-r--r--  1 root      root         258 Apr 12  2022 .editorconfig
-rw-r--r--  1 root      root         950 Jul 11 14:27 .env
-rw-r--r--  1 root      root         899 Jul 11 14:27 .env.example
-rw-r--r--  1 root      root         152 Apr 12  2022 .gitattributes
-rw-r--r--  1 root      root         207 Apr 12  2022 .gitignore
-rw-r--r--  1 root      root         194 Apr 12  2022 .styleci.yml
-rw-r--r--  1 root      root        3958 Apr 12  2022 README.md
drwxr-xr-x  7 root      root        4096 Apr 12  2022 app/
-rwxr-xr-x  1 root      root        1686 Apr 12  2022 artisan*
drwxr-xr-x  3 root      root        4096 Apr 12  2022 bootstrap/
-rw-r--r--  1 root      root        1745 Apr 12  2022 composer.json
-rw-r--r--  1 root      root      284138 Jul 11 14:27 composer.lock
drwxr-xr-x  2 root      root        4096 Apr 12  2022 config/
drwxr-xr-x  5 root      root        4096 Apr 12  2022 database/
-rw-r--r--  1 root      root         473 Apr 12  2022 package.json
-rw-r--r--  1 root      root        1202 Apr 12  2022 phpunit.xml
drwxr-xr-x  2 root      root        4096 Apr 12  2022 public/
drwxr-xr-x  6 root      root        4096 Apr 12  2022 resources/
drwxr-xr-x  2 root      root        4096 Apr 12  2022 routes/
-rw-r--r--  1 root      root         569 Apr 12  2022 server.php
drwxr-xr-x  5 root      root        4096 Apr 12  2022 storage/
drwxr-xr-x  4 root      root        4096 Apr 12  2022 tests/
drwxr-xr-x 42 root      root        4096 Jul 11 14:27 vendor/
-rw-r--r--  1 root      root         559 Apr 12  2022 webpack.mix.js

 

마지막으로 서버를 실행시키고 브라우저를 띄워서 접속해 본다.

 

$ cd example
$ php artisan serve --host x.x.x.x --port 8000
Starting Laravel development server: http://x.x.x.x:8000
[Tue Jul 11 14:29:28 2023] PHP 7.4.3-4ubuntu2.19 Development Server (http://x.x.x.x:8000) started
[Tue Jul 11 14:29:36 2023] 125.133.49.131:62019 Accepted
[Tue Jul 11 14:29:36 2023] 125.133.49.131:62019 Closing
[Tue Jul 11 14:29:37 2023] 125.133.49.131:62025 Accepted
[Tue Jul 11 14:29:37 2023] 125.133.49.131:62025 [200]: GET /favicon.ico
[Tue Jul 11 14:29:37 2023] 125.133.49.131:62025 Closing

라라벨 프로젝트를 아파치 서버로 실행

이번에는 아파치로 실행해 보자. DocumentRoot 를 프로젝트 하위의 public 디렉토리로 지정해야 한다.

 

$ vi cat /etc/apache2/apache2.conf
...(생략)...
<VirtualHost x.x.x.x:80>
...(생략)...
    DocumentRoot /var/www/html/example/public
    ErrorLog logs/laravel-error_log
    CustomLog logs/laravel-access_log common
</VirtualHost>

 

아파치를 restart 한 후 브라우저에서 접속해 보면 에러가 표시될 수 있다.

 

Error Message

UnexpectedValueException
The stream or file "/var/www/html/example/storage/logs/laravel.log" could not be opened in append mode: failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file "/var/www/html/example/storage/logs/laravel.log" could not be opened in append mode: failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file

file_put_contents(/var/www/html/example/storage/framework/sessions/V8MEIk0GJw8TyLsI7HLuTaVRM2b1KUGVyB0az8we): failed to open stream: Permission denied Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}} Context: {"exception":{}}

 

로그, 세션 파일을 생성할 수 없어서 발생하는 에러이다.

본래 라라벨 프로젝트를 생성하면 두가지 디렉토리에 적절한 권한 설정이 필요하다.

 

$ chmod -R 755 storage bootstrap/cache

 

이제 접속이 잘 된다.

 

아파치로 실행한 라라벨 프로젝트 라우팅

마지막으로 아파치에서도 라우팅이 잘 동작하는지 점검해 보자.

resources/views/hello.blade.php 파일을 생성하고 routes/web.php 파일에 기입해 둔다.

 

Route::get('/hello', function () {
    return view('hello');
});

 

브라우저에서 http://서버/hello 형식의 URL 로 접속해 본다. 404 Not Found 에러가 발생할 수 있다.

이 경우 아래 순서로 아파치 설정을 변경해야 한다.

 

  1. Rewrite Module 활성화
  2. conf 파일에 <Directory></Directory> 설정

 

Rewrite Module 이 이미 있는지 확인 방법

  • phpinfo() 구문으로 Loaded Modules 항목에 mod_rewrite 가 있는지 확인
  • apachectl -M 명령어로 rewrite_module (shared) 항목이 있는지 확인
  • 아파치/mods-available/ 디렉토리에 rewrite.load 파일이 있는지 확인

 

없다면 a2enmod rewrite 명령어로 설치한다.

 

conf 파일 설정

아래 구문을 추가한다.

conf/httpd.conf 또는 sites-available/default 또는 sites-available/000-default.conf 등등 OS 와 구성환경에 맞는 파일에.

 

<Directory /var/www/html/example/public/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

 

접속이 안되는 경우 public/.htaccess 파일 확인

프로젝트 생성 시에 public/.htaccess 파일이 자동으로 생성되었을 것이므로, 라우팅 관련하여 더 이상 설정할 것이 없다.

만약 없거나 접속이 안된다면 아래 내용으로 생성하면 된다.

 

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]