먼저 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 에러가 발생할 수 있다.
이 경우 아래 순서로 아파치 설정을 변경해야 한다.
- Rewrite Module 활성화
- 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]
'코딩 > Laravel' 카테고리의 다른 글
라라벨 - 파일 업로드 (0) | 2024.06.24 |
---|---|
laravel - AJAX 전송 시 Content-Type 지정 (Error 405) (0) | 2024.06.24 |
Laravel - MSSQL 서버 연결 실패 오류 SSL routines:tls_process_server_certificate:certificate verify failed (0) | 2023.08.29 |
Laravel - MSSQL 서버 연동 오류 QueryException could not find driver (0) | 2023.08.29 |
Laravel - 라라벨 GROUP BY 에러 SQLSTATE[42000]: Syntax error or access violation: 1055 (0) | 2023.02.08 |