Important
Aquest article és obsolet i pot contenir informació desactualitzada. Si us plau, consulta la documentació més recent per obtenir la informació actualitzada.
Laravel és un entorn de treball PHP gratuït, de codi obert i el més popular que et permet desenvolupar aplicacions web escalables i flexibles fàcilment. És un entorn de treball PHP simple, flexible i lleuger, i té una sintaxi llegible per desenvolupar aplicacions modernes i potents des de zero.
Laravel és la millor opció per a tu si busques dissenyar una aplicació de pròxima generació.
En aquest tutorial, et mostrem com contenidoritzar una aplicació web utilitzant l'entorn de treball Laravel i Nginx com a servidor web al servidor Ubuntu 18.04.
Requisits previs
• Un servidor que executi Ubuntu 18.04 amb un mínim de 2 GB de RAM.
• Una contrasenya de root configurada al teu servidor al núvol.
Comencem
Abans de començar, et recomanem que actualitzis el sistema a l'última versió. Pots fer-ho executant l'ordre següent:
# apt-get update && apt-get upgrade -yUn cop el sistema s'hagi actualitzat, reinicia'l per aplicar els canvis.
Després, hauràs d'instal·lar alguns paquets necessaris al sistema. Pots instal·lar-los tots executant l'ordre següent:
# apt-get install apt-transport-https ca-certificates curl software-properties-common -yUn cop tots els paquets estiguin instal·lats, pots passar al pas següent.
Instal·la Docker i Docker Compose
A continuació, hauràs d'instal·lar Docker i Docker Compose al teu servidor. Per defecte, l'última versió de Docker no està disponible al repositori per defecte de Ubuntu 18.04, per la qual cosa hauràs d'afegir el repositori amb aquesta finalitat.
Primer, descarrega i afegeix la clau GPG utilitzant l'ordre següent:
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -Després, afegeix el repositori Docker amb l'ordre següent:
# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"Un cop s'hagi afegit el repositori, actualitza el sistema i instal·la Docker i Docker Compose executant l'ordre següent:
# apt-get update -y
# apt install docker-ce -y
# apt-get install docker-compose -yUn cop s'hagi completat la instal·lació, pots comprovar l'estat del servei de Docker amb l'ordre següent:
# systemctl status dockerDescarrega Laravel i instal·la les dependències
A continuació, hauràs de descarregar l'entorn de treball Laravel i instal·lar les dependències necessàries amb la imatge de Docker PHP composer.
Primer, descarrega l'última versió de Laravel amb l'ordre següent:
# git clone https://github.com/laravel/laravel.git laravelA continuació, instal·la les dependències necessàries amb l'ordre següent:
# cd laravel
# docker run --rm -v $(pwd):/app composer installHauries de veure el resultat següent:
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
L'ordre anterior crearà un contenidor temporal i copiarà el contingut del teu directori ~/laravel al contenidor.
Contenidorització de Laravel amb Docker
A continuació, hauràs de crear un fitxer nou docker-compose.yml i un fitxer Docker per al teu projecte Laravel.
Primer, crea un fitxer docker-compose dins del teu directori ~/laravel:
# nano ~/laravel/docker-compose.ymlAfegeix les línies següents:
version: '3'
services:
#Servei PHP
app:
build:
context: .
dockerfile: Dockerfile
image: php:7.2-fpm-buster
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
#Servei Nginx
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
- app-network
#Servei MySQL
db:
image: mysql:5.7.22
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laraveldb
MYSQL_ROOT_PASSWORD: password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
#Xarxes Docker
networks:
app-network:
driver: bridge
#Volums
volumes:
dbdata:
driver: local
Desa i tanca el fitxer quan hagis acabat.
Després, crea un fitxer Docker per crear i personalitzar imatges amb tot el programari necessari per a la teva aplicació dins del directori ~/laravel:
# nano ~/laravel/Dockerfile Afegeix les línies següents:
FROM php:7.2-fpm-buster
# Copia composer.lock i composer.json
COPY composer.lock composer.json /var/www/
# Estableix el directori de treball
WORKDIR /var/www
# Instal·la les dependències
RUN apt-get update && apt-get install -y \
build-essential \
mysql-client \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
nano \
curl
# Buida la memòria cau
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Instal·la les extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd
# Instal·la composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Afegeix un usuari per a l'aplicació laravel
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copia el contingut del directori de l'aplicació existent
COPY . /var/www
# Copia els permisos del directori de l'aplicació existent
COPY --chown=www:www . /var/www
# Canvia l'usuari actual a www
USER www
# Exposa el port 9000 i inicia el servidor php-fpm
EXPOSE 9000
CMD ["php-fpm"]
Desa i tanca el fitxer quan hagis acabat.
Configura PHP, MySQL i Nginx per a Laravel
A continuació, hauràs de crear un directori php dins del teu directori ~/laravel i crear el local.ini dins del directori ~/laravel/php:
# mkdir ~/laravel/php
# nano ~/laravel/php/local.iniAfegeix les línies següents:
# upload_max_filesize=40M
# post_max_size=40MDesa i tanca el fitxer quan hagis acabat.
Després hauràs de crear el directori nginx/conf.d dins del teu directori ~/laravel i crear un fitxer app.conf per a la configuració de Nginx:
# mkdir -p ~/laravel/nginx/conf.d
# nano ~/laravel/nginx/conf.d/app.confAfegeix les línies següents:
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
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;
}
}
Desa i tanca el fitxer quan hagis acabat.
Després, crea el directori MySQL dins del teu directori ~/laravel i crea el fitxer my.cnf amb els paràmetres necessaris:
# mkdir ~/laravel/mysql
# nano ~/laravel/mysql/my.cnf Afegeix les línies següents:
[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/general.log
Desplega Laravel amb els serveis Nginx i MySQL
En aquest punt hem definit tots els serveis al fitxer docker-compose i hem creat un fitxer de configuració per a cada servei. Després, crea una còpia del fitxer per defecte .env.example amb l'ordre següent:
# cp .env.example .envAra executa l'ordre següent per descarregar totes les imatges necessàries i construir serveis de contenidor basats en la configuració 'docker-compose.yml' amb l'ordre següent:
# docker-compose up -dUn cop el procés s'hagi completat, pots comprovar els contenidors actius amb l'ordre següent:
# docker psHauries de veure el resultat següent:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f5a749a605dc digitalocean.com/php "docker-php-entrypoi…" About a minute ago Up About a minute 9000/tcp app
79eae5da35c6 mysql:5.7.22 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp db
b8181f7a7a54 nginx:alpine "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp webserver
Configura el contenidor de Laravel
Després, hauràs de modificar el fitxer .env dins del contenidor app de Laravel.
Pots editar fàcilment qualsevol fitxer dins del contenidor amb l'ordre "docker-compose exec". Primer, obre el fitxer .env dins del contenidor app amb l'ordre següent:
# docker-compose exec app nano .envCanvia les línies següents:
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=laraveluser
DB_PASSWORD=password
Desa i tanca el fitxer. Ara genera la clau d'aplicació de Laravel i buida la memòria cau amb l'ordre següent:
# docker-compose exec app php artisan key:generate
# docker-compose exec app php artisan config:cacheDesprés, migra la base de dades utilitzant l'ordre següent:
docker-compose exec app php artisan migrateAccedeix a la interfície web de Laravel
En aquest punt, has contenidoritzat Laravel amb Docker, Nginx i MySQL. Ara, obre el navegador web i escriu l'URL http://TU-servidor-ip. Se't redirigirà al tauler de control de Laravel per defecte:
Enhorabona! Has contenidoritzat una aplicació web amb Docker utilitzant l'entorn de treball Laravel i Nginx com a servidor web en un servidor al núvol Ubuntu 18.04.