Laravel 설치 · 14 min read · Sep 23, 2025
우분투 22.04에서 Docker로 Laravel 설치하는 방법

Laravel은 현대 PHP 애플리케이션을 구축하기 위한 도구와 리소스를 제공하는 무료 오픈 소스 PHP 프레임워크입니다. 다양한 호환 패키지와 확장 기능을 갖춘 Laravel은 많은 개발자들이 선택하는 프레임워크로 인기를 끌고 있습니다. Laravel은 Eloquent라는 ORM(객체 관계 매퍼)을 포함한 강력한 데이터베이스 도구와 데이터베이스 마이그레이션을 생성하기 위한 내장 메커니즘을 제공합니다. 개발자들은 Artisan이라는 명령줄 도구를 사용하여 새로운 모델, 컨트롤러 및 기타 애플리케이션 구성 요소를 부트스트랩할 수 있으며, 이는 전체 애플리케이션 개발 속도를 높입니다.
애플리케이션을 컨테이너화하는 것은 애플리케이션과 그 구성 요소를 경량 환경인 컨테이너에서 실행할 수 있도록 조정하는 과정을 의미합니다. 이 가이드는 Docker Compose를 사용하여 개발을 위한 Laravel 애플리케이션을 컨테이너화하는 방법을 설명합니다.
우리는 Laravel 애플리케이션을 위해 세 개의 Docker 컨테이너를 생성할 것입니다.
- PHP 8.2-FPM을 실행하는
app서비스 - MySQL 8.0을 실행하는
db서비스 - Laravel 애플리케이션을 사용자에게 제공하기 전에 PHP 코드를 구문 분석하기 위해
app서비스를 사용하는nginx서비스
우리는 또한 Let’s Encrypt를 사용하여 Laravel 웹사이트에 대한 SSL 인증서를 생성할 것입니다.
전제 조건
- 우분투 22.04를 실행하는 서버.
- sudo 권한이 있는 비루트 사용자.
- 서버를 가리키는 완전한 도메인 이름(FQDN). 우리의 목적을 위해
example.com을 도메인 이름으로 사용할 것입니다. - 모든 것이 업데이트되었는지 확인하십시오.
$ sudo apt update - 기본 유틸리티 패키지를 설치합니다. 일부는 이미 설치되어 있을 수 있습니다.
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
1단계 - 방화벽 구성
첫 번째 단계는 방화벽을 구성하는 것입니다. 우분투는 기본적으로 ufw(간단한 방화벽)를 제공합니다.
방화벽이 실행 중인지 확인하십시오.
$ sudo ufw status다음과 같은 출력이 표시되어야 합니다.
Status: inactiveSSH 포트를 허용하여 방화벽이 활성화될 때 현재 연결이 끊어지지 않도록 합니다.
$ sudo ufw allow OpenSSHHTTP 및 HTTPS 포트도 허용합니다.
$ sudo ufw allow http
$ sudo ufw allow https방화벽을 활성화합니다.
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup방화벽 상태를 다시 확인하십시오.
$ sudo ufw status유사한 출력을 볼 수 있어야 합니다.
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)2단계 - SSL 설치
진행하기 전에 먼저 도메인에 대한 SSL 인증서를 생성합시다. 우리는 이를 Docker 외부에서 생성할 것입니다. 유지 관리가 더 쉽기 때문입니다. 나중에 인증서를 컨테이너와 동기화하여 정기적으로 갱신하고 새로 고칠 것입니다.
SSL 인증서를 생성하기 위해 Certbot을 설치해야 합니다. Ubuntu의 리포지토리를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.
우분투 22.04는 기본적으로 Snapd가 설치되어 있습니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오. Snapd 버전이 최신인지 확인하십시오.
$ sudo snap install core
$ sudo snap refresh coreCertbot을 설치합니다.
$ sudo snap install --classic certbot다음 명령을 사용하여 Certbot 명령이 /usr/bin 디렉토리에 대한 심볼릭 링크를 생성하여 실행되도록 합니다.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot다음 명령을 실행하여 SSL 인증서를 생성합니다.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com위 명령은 서버의 /etc/letsencrypt/live/example.com 디렉토리에 인증서를 다운로드합니다.
Diffie-Hellman 그룹 인증서를 생성합니다.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096SSL 갱신이 잘 작동하는지 확인하기 위해 프로세스를 드라이 런합니다.
$ sudo certbot renew --dry-run오류가 없으면 모든 준비가 완료된 것입니다. 인증서는 자동으로 갱신됩니다.
Docker를 설정하고 Laravel을 설치한 후 갱신 프로세스를 수정해야 합니다. 이는 나중 섹션에서 다룰 것입니다.
3단계 - Docker 및 Docker Compose 설치
우분투 22.04는 이전 버전의 Docker를 제공합니다. 최신 버전을 설치하려면 먼저 Docker GPG 키를 가져옵니다.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgDocker 리포지토리 파일을 생성합니다.
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null시스템 리포지토리 목록을 업데이트합니다.
$ sudo apt update최신 버전의 Docker를 설치합니다.
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin실행 중인지 확인합니다.
$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2023-01-14 10:41:35 UTC; 2min 1s ago
TriggeredBy: ? docker.socket
Docs: https://docs.docker.com
Main PID: 2054 (dockerd)
Tasks: 52
Memory: 22.5M
CPU: 248ms
CGroup: /system.slice/docker.service
?? 2054 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock기본적으로 Docker는 루트 권한이 필요합니다. docker 명령을 실행할 때마다 sudo를 사용하지 않으려면 사용자 이름을 docker 그룹에 추가하십시오.
$ sudo usermod -aG docker $(whoami)이 변경을 활성화하려면 서버에서 로그아웃한 후 다시 로그인해야 하거나 다음 명령을 사용할 수 있습니다.
$ su - ${USER}사용자가 Docker 그룹에 추가되었는지 확인합니다.
$ groups
navjot wheel docker4단계 - Laravel 다운로드 및 종속성 설치
첫 번째 단계는 최신 버전의 Laravel을 다운로드하고 PHP 패키지 관리자 Composer를 포함한 종속성을 설치하는 것입니다.
Laravel 애플리케이션 디렉토리를 생성합니다.
$ mkdir ~/laravel디렉토리로 이동합니다.
$ cd ~/laravel최신 Laravel 릴리스를 디렉토리에 클론합니다. 명령 끝에 있는 .를 잊지 마세요. 이는 Git이 현재 디렉토리에 파일을 클론하도록 의미합니다.
$ git clone https://github.com/laravel/laravel.git .Docker의 Compose 이미지를 사용하여 Laravel 프로젝트에 필요한 디렉토리를 마운트합니다. 이를 통해 Composer를 전역적으로 설치할 필요가 없습니다.
$ docker run --rm -v $(pwd):/app composer install위 명령은 현재 디렉토리에 바인드 마운트된 일회성 컨테이너를 생성한 후 제거됩니다. Laravel 디렉토리의 내용을 컨테이너로 복사하고, 컨테이너 내에서 Composer가 생성한 vendor 폴더가 현재 디렉토리로 다시 복사되도록 보장합니다.
현재 로그인한 사용자에게 소유권을 부여하기 위해 Laravel 디렉토리의 권한을 설정합니다.
$ sudo chown -R $USER:$USER ~/laravel5단계 - Docker Compose 파일 생성
Docker compose 파일을 생성하고 편집을 위해 엽니다.
$ nano docker-compose.yml다음 코드를 붙여넣습니다. 여기서 우리는 세 가지 서비스를 정의합니다: app, webserver, 및 db. db 서비스 아래의 MYSQL_ROOT_PASSWORD를 원하는 강력한 비밀번호로 교체하십시오.
services:
app:
build:
context: .
dockerfile: Dockerfile
image: howtoforge/app
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
volumes:
- ./:/var/www
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
webserver:
container_name: webserver
image: nginx:alpine
restart: unless-stopped
tty: true
ports:
- 80:80
- 443:443
volumes:
- ./:/var/www
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/logs:/var/log/nginx
- /etc/ssl/certs/dhparam.pem:/etc/ssl/certs/dhparam.pem
- /etc/letsencrypt:/etc/letsencrypt
logging:
options:
max-size: "10m"
max-file: "3"
networks:
- app-network
db:
image: mysql:latest
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: MYSQL_ROOT_PASSWORD
MYSQL_USER: laraveluser
MYSQL_PASSWORD: password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
volumes:
dbdata:
driver: local
networks:
app-network:
driver: bridge파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.
서비스를 자세히 살펴보겠습니다.
app- 이 서비스는 Laravel 애플리케이션을 정의하고howtoforge/app라는 사용자 정의 Docker 이미지를 실행합니다. 우리는 다음 단계에서 이 이미지를 생성할 것입니다. 컨테이너 내에서 Laravel의 작업 디렉토리는/var/www로 설정되어 있으며, 이는 호스트의 현재 디렉토리에 매핑됩니다. 우리는 또한 PHP 컨테이너에 복사되는 PHP 구성 파일을 마운트합니다. 이는 나중에 단계에서 구성할 것입니다.webserver- 이 서비스는 Nginx Docker 이미지를 사용하여 컨테이너를 생성하고 호스트에 포트 80과 443을 노출합니다. 우리는 또한 Nginx 로그, 사용자 정의 구성, Laravel 애플리케이션 디렉토리 및 SSL 인증서에 대한 바인드 마운트를 설정합니다.db- 이 서비스는 MySQL Docker 이미지를 사용하여 컨테이너를 생성하고 데이터베이스 이름과 MySQL 루트 비밀번호를 설정하는 환경 변수를 정의합니다. 데이터베이스 이름은 원하는 대로 지정할 수 있으며MYSQL_ROOT_PASSWORD를 원하는 강력한 비밀번호로 교체하십시오. 또한 데이터베이스에 접근할 수 있는 MySQL 사용자 이름(MYSQL_USER_NAME)과 비밀번호(MYSQL_USER_PASSWORD)를 설정하십시오. 이 서비스는 또한 컨테이너의 포트 3306을 호스트의 포트 3306에 매핑합니다. 우리는 또한 사용자 정의 MySQL 구성 및 MySQL 데이터에 대한 로컬 볼륨을 바인드 마운트합니다. 이를 통해db서비스를 재시작해도 데이터를 잃지 않게 됩니다.
서비스 간의 통신을 가능하게 하기 위해 app-network라는 Docker 네트워크를 생성했습니다. 이는 브리지 네트워크로 설정되어 있습니다. 이 네트워크에 연결된 컨테이너는 서로 통신할 수 있습니다. 브리지 네트워크 드라이버는 호스트 머신에 규칙을 설치하여 서로 다른 브리지 네트워크의 컨테이너가 직접 통신할 수 없도록 합니다.
6단계 - Dockerfile 생성
Dockerfile은 사용자 정의 이미지를 생성하는 데 사용됩니다. Laravel에 대한 표준 이미지는 없기 때문에 사용자 정의 이미지를 생성하기 위해 Dockerfile을 정의해야 합니다. 이 파일에는 애플리케이션 요구 사항에 따라 패키지를 설치하고 Linux 환경을 구성하는 명령이 포함되어 있습니다. 사용자 정의 이미지를 Docker Hub 또는 개인 Docker 레지스트리에 게시할 수도 있습니다. Dockerfile 튜토리얼에서 자세히 알아볼 수 있습니다.
Dockerfile을 생성하고 편집을 위해 엽니다.
$ nano Dockerfile다음 코드를 붙여넣습니다.
FROM php:8.2-fpm
# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
libzip-dev \
unzip \
git \
curl \
libonig-dev
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Copy existing application directory contents to the working directory
COPY . /var/www
# Assign permissions of the working directory to the www-data user
RUN chown -R www-data:www-data \
/var/www/storage \
/var/www/bootstrap/cache
# Assign writing permissions to logs and framework directories
RUN chmod 775 storage/logs \
/var/www/storage/framework/sessions \
/var/www/storage/framework/views
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.
여기서 어떤 일이 일어나고 있는지 살펴보겠습니다. 먼저, 우리는 php:8.2-fpm Docker 이미지를 기반으로 사용자 정의 이미지를 생성합니다. 이는 PHP 8.2-FPM이 설치된 Debian 기반 이미지입니다. Dockerfile은 다양한 지시어를 사용하여 작업을 수행합니다. RUN 지시어는 컨테이너 내에서 업데이트, 설치 및 설정을 구성하는 명령을 지정하고, COPY 지시어는 파일을 컨테이너로 복사하며, EXPOSE 지시어는 컨테이너에서 포트를 노출하고, CMD 지시어는 명령을 실행합니다.
먼저, 호스트의 Laravel 디렉토리에서 Composer 파일을 컨테이너의 /var/www 디렉토리로 복사합니다. 또한 컨테이너의 작업 디렉토리를 /var/www로 설정합니다. 그런 다음 Laravel이 작동하는 데 필요한 다양한 필수 패키지와 PHP 확장(예: mbstring, gd, exif, zip, pdo_mysql 및 pcntl)을 설치합니다. 그런 다음 Composer 패키지 관리자를 설치합니다.
다음으로, Laravel 디렉토리의 모든 파일을 컨테이너로 복사하고 www-data 사용자에 대한 작업 디렉토리의 권한을 설정합니다. 이는 Debian 플랫폼에서 PHP가 기본적으로 사용하는 사용자입니다. 마지막으로 PHP-FPM 서비스에 대해 9000 포트를 노출하고 컨테이너를 시작하기 위해 PHP 명령을 실행합니다.
7단계 - PHP 구성
PHP 디렉토리를 생성합니다.
$ mkdir ~/laravel/phplocal.ini 파일을 생성하고 편집을 위해 엽니다.
$ nano local.ini다음 코드를 붙여넣습니다.
upload_max_filesize=40M
post_max_size=40M파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다. 이 지시어는 업로드된 파일의 최대 크기를 설정합니다. 필요에 따라 값을 변경할 수 있습니다. 기본 지시어를 재정의하기 위해 PHP 특정 구성을 추가할 수 있습니다.
8단계 - Nginx 구성
사이트 구성을 위한 Nginx 디렉토리를 생성합니다.
$ mkdir ~/laravel/nginx/conf.d -pPHP-FPM을 FastCGI 서버로 사용하여 Laravel을 제공하기 위해 Nginx 구성 파일을 생성해야 합니다.
app.conf 파일을 생성하고 편집을 위해 엽니다.
$ nano ~/laravel/nginx/conf.d/app.conf다음 코드를 붙여넣습니다.
server {
# Redirect any http requests to https
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
client_max_body_size 40m;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_ecdh_curve secp384r1;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.
위 파일은 Nginx가 Laravel 사이트의 HTTP 및 HTTPS 버전을 제공하고 모든 HTTP 요청을 자동으로 HTTPS로 리디렉션하도록 구성합니다. client_max_body_size 변수의 값이 이전 단계에서 설정한 업로드 크기와 일치하는지 확인하십시오.
PHP 위치 블록에서 fastcgi_pass 지시어는 app 서비스가 9000 포트의 TCP 소켓에서 수신 대기하고 있음을 지정합니다. PHP-FPM 서버는 Unix 소켓에서도 수신 대기할 수 있지만, 이는 TCP 소켓에 비해 장점이 있습니다. 그러나 서비스가 서로 다른 호스트에서 실행되는 경우에는 작동하지 않습니다. 여기서는 app 컨테이너가 webserver 컨테이너와 다른 호스트에서 실행되고 있습니다.
9단계 - MySQL 구성
MySQL을 구성하여 일반 쿼리 로그를 활성화하고 해당 로그 파일을 지정합니다.
MySQL 디렉토리를 생성합니다.
$ mkdir ~/laravel/mysqlmy.cnf 파일을 생성하고 편집을 위해 엽니다.
$ nano ~/laravel/my.cnf다음 코드를 붙여넣습니다.
[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/general.log파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.
10단계 - 환경 파일 설정
모든 서비스를 생성하고 구성했으므로 이제 컨테이너를 시작할 시간입니다. 그러나 그렇게 하기 전에 Laravel의 환경 변수를 구성해야 합니다. Laravel은 기본 환경 파일인 .env.example을 제공합니다.
예제 환경 파일의 복사본을 생성합니다.
$ cp .env.example .env.env 파일을 편집을 위해 엽니다.
$ nano .envDB_CONNECTION으로 시작하는 블록을 찾아 변수의 값을 요구 사항에 맞게 업데이트합니다.
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laraveluser
DB_PASSWORD=your_laravel_db_passwordDB_HOST의 값은 db 서비스가 됩니다. DB_NAME, DB_USERNAME, 및 DB_PASSWORD의 값은 Docker compose 파일의 4단계에서 선택한 데이터베이스 이름, 사용자 이름 및 비밀번호가 됩니다.
파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.
11단계 - 컨테이너 시작 및 Laravel 설치 완료
드디어 컨테이너를 시작할 시간입니다.
$ docker compose up -d이 명령은 처음 실행될 때 Nginx, MySQL 이미지를 가져오고 우리가 생성한 Dockerfile을 사용하여 app 이미지를 생성합니다. 프로세스가 완료되면 다음 명령을 사용하여 컨테이너의 상태를 확인할 수 있습니다.
$ docker ps다음과 유사한 출력을 볼 수 있습니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a57be976c0fa mysql:latest "docker-entrypoint.s…" 6 hours ago Up 6 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp db
85e515c4a404 howtoforge/app "docker-php-entrypoi…" 6 hours ago Up 6 hours 9000/tcp app
8418bbc83bd3 nginx:alpine "/docker-entrypoint.…" 6 hours ago Up 6 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp webserver컨테이너가 실행 중이면 docker compose exec 명령을 사용하여 컨테이너 내에서 명령을 실행하여 Laravel 설치를 완료할 시간입니다.
애플리케이션 키를 생성하고 이를 .env 파일에 복사하여 사용자 세션을 보호하고 사용자 데이터를 암호화합니다.
$ docker compose exec app php artisan key:generateLaravel 애플리케이션 캐시를 생성합니다.
$ docker compose exec app php artisan config:cache이 명령은 구성 설정을 /var/www/bootstrap/cache/config.php 파일로 로드합니다.
브라우저에서 https://example.com을 방문하면 Laravel 설치가 성공적으로 완료되었음을 나타내는 페이지를 볼 수 있습니다.

12단계 - SSL 갱신 구성
이제 Laravel 사이트가 활성화되었으므로 SSL 설정을 다시 방문하여 갱신을 구성할 시간입니다. 이를 위해 webserver 서비스를 중지한 후 갱신을 시작하고 인증서가 갱신된 후 서비스를 다시 시작하는 스크립트를 생성해야 합니다. Certbot은 이를 위해 pre_hook 및 post_hook이라는 두 개의 후크를 제공합니다.
스크립트를 저장할 SSL 디렉토리를 생성합니다.
$ mkdir ~/laravel/sslserver-stop.sh 스크립트를 생성합니다.
$ sh -c 'printf "#!/bin/sh\ndocker stop webserver\n" > ~/laravel/ssl/server-stop.sh'server-start.sh 스크립트를 생성합니다.
$ sh -c 'printf "#!/bin/sh\ndocker start webserver\n" > ~/laravel/ssl/server-start.sh'스크립트를 실행 가능하게 만듭니다.
$ chmod +x ~/laravel/ssl/server-*.sh이제 Certbot에 이러한 스크립트를 사용하도록 지시해야 합니다. /etc/letsencrypt/renewal/example.com.conf 파일을 편집하기 위해 엽니다.
$ sudo nano /etc/letsencrypt/renewal/example.com.conf파일 끝에 다음 줄을 붙여넣습니다.
pre_hook = /home//laravel/ssl/server-stop.sh
post_hook = /home//laravel/ssl/server-start.sh 파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.
드라이 런을 통해 인증서 갱신 프로세스를 테스트합니다.
$ sudo certbot renew --dry-run성공을 확인하는 유사한 출력을 받게 됩니다.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Hook 'pre-hook' ran with output:
webserver
Simulating renewal of an existing certificate for example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/example.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hook 'post-hook' ran with output:
webserver이제 SSL 인증서는 자동으로 갱신되며 Docker 컨테이너에서 Laravel 애플리케이션을 제공하는 데 사용됩니다.
13단계 - 데이터 마이그레이션 및 Tinker 콘솔
이제 애플리케이션이 실행 중이므로 데이터를 마이그레이션하고 tinker 명령으로 실험할 수 있습니다. Tinker는 Laravel을 위한 REPL(읽기-평가-출력 루프)입니다. tinker 명령은 Laravel이 미리 로드된 PsySH 콘솔을 시작합니다. PsySH는 PHP를 위한 런타임 개발자 콘솔 및 대화형 디버거입니다. tinker 명령을 사용하면 대화형 셸에서 명령줄을 통해 Laravel 애플리케이션과 상호작용할 수 있습니다.
컨테이너에서 artisan migrate 명령을 사용하여 MySQL 연결을 테스트합니다. 이는 데이터베이스에 migrations 테이블을 생성합니다.
$ docker compose exec app php artisan migrate다음과 같은 출력을 받게 됩니다.
INFO Preparing database.
Creating migration table .............................................................................................. 32ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table .................................................................................. 184ms DONE
2014_10_12_100000_create_password_resets_table ......................................................................... 259ms DONE
2019_08_19_000000_create_failed_jobs_table ............................................................................ 102ms DONE
2019_12_14_000001_create_personal_access_tokens_table .................................................................. 46ms DONE다음으로 tinker 명령을 사용하여 PsySH 콘솔을 시작합니다.
$ docker compose exec app php artisan tinker다음과 같은 프롬프트를 받게 됩니다.
Psy Shell v0.11.10 (PHP 8.2.1 — cli) by Justin Hileman
>콘솔 프롬프트에서 방금 마이그레이션한 데이터를 가져오기 위해 MySQL 연결을 테스트합니다.
> \DB::table('migrations')->get();다음과 같은 출력을 받게 됩니다.
= Illuminate\Support\Collection {#3670
all: [
{#3679
+"id": 1,
+"migration": "2014_10_12_000000_create_users_table",
+"batch": 1,
},
{#3681
+"id": 2,
+"migration": "2014_10_12_100000_create_password_resets_table",
+"batch": 1,
},
{#3682
+"id": 3,
+"migration": "2019_08_19_000000_create_failed_jobs_table",
+"batch": 1,
},
{#3683
+"id": 4,
+"migration": "2019_12_14_000001_create_personal_access_tokens_table",
+"batch": 1,
},
],
}콘솔에서 나가려면 exit를 입력합니다.
> exit
INFO Goodbye.tinker를 사용하여 데이터베이스와 상호작용하고 서비스 및 모델을 실험할 수 있습니다. 이제 Laravel을 사용하여 추가 개발을 시작할 수 있습니다.
결론
이로써 Docker, MySQL 및 PHP를 사용하여 Laravel 애플리케이션을 컨테이너화하고 설치하는 튜토리얼이 마무리되었습니다. 또한 안전한 도메인 이름에서 애플리케이션을 제공했습니다. 질문이 있으시면 아래 댓글에 남겨주세요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.