In diesem Artikel wird erläutert, wie Sie eine Laravel-Umgebung mit dem Entwicklungscontainer von VS Code erstellen. Sie können eine Umgebung mit hoher Geschwindigkeit erstellen, solange Sie über die zu verwendenden Tools verfügen. Da Sie Docker verwenden, können Sie sie als einheitliche Entwicklungsumgebung für Ihr Team verwenden. Wenn Sie es vorerst verschieben möchten, verwenden Sie bitte den Repository-Link.
https://github.com/naoyayamamoto/laravel-docker-sample Da es als Vorlagen-Repository vorbereitet ist, kann es auch als Vorlage verwendet werden.
Verwenden Sie die oben genannten Werkzeuge. Installationsdetails werden für "Docker" und "Visual Studio Code" weggelassen. "Visual Studio Code Remote - Container" ist ein VS Code-Plug-In von Microsoft. Sie können es über den Link in VS Code installieren.
$ git clone https://github.com/naoyayamamoto/laravel-docker-sample
$ code laravel-docker-sample
#Wenn Sie den Befehl code nicht haben, öffnen Sie das Repository mit VS Code
Gehen Sie zu "http: // localhost: 8000" und Sie sollten die Startseite von Laravel sehen.
Wenn Sie devcontainer öffnen, wird die Docker-Umgebung basierend auf .devcontainer / docker-compose.yml
erstellt.
Wir verwenden die folgenden Container und werden sie jeweils erläutern.
nginx:alpine (web)
.devcontainer / docker / nginx / default.conf
und senden Sie den Prozess an php-fpmmysql:8 (db)
.devcontainer / docker / mysql / my.cnf
wird geladen (japanische Grundeinstellungen)MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'`` MYSQL_DATABASE: laravel
ist gesetzt, daher wird kein Root-Passwort erstellt, die anfängliche Tabelle laravel
wird erstellt.devcontainer / docker / php / Dockerfile
Komponist
・ Knoten
・ npm
・ Garn
kann verwendet werden.devcontainer / docker / php / php-fpm.d / zzz-www.conf
, um php-fpm auf sock auszuführenEine Docker-Datei, die für die Produktion erstellt wird, wurde dem Repository hinzugefügt. Verwenden Sie sie daher als Anpassungsquelle. Wir verwenden einen mehrstufigen Build, um js zu kompilieren und Composer im Voraus zu installieren, um das endgültige Image so klein wie möglich zu halten. Ich habe Build-Tests nur mit Github-Aktionen bestanden.
Als Referenz ist dies eine Einstellung bei Verwendung mit Kubernetes. Es wird angenommen, dass Nginx und PHP als 1POD ausgeführt werden.
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-conf
data:
default.conf: |
access_log /dev/stdout main;
error_log /dev/stderr warn;
server {
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
gzip on;
gzip_http_version 1.0;
gzip_disable "msie6";
gzip_proxied any;
gzip_min_length 1024;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
open_file_cache max=100000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
listen 80;
root /workspace/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
---
kind: Service
apiVersion: v1
metadata:
name: laravel-service
spec:
selector:
app: laravel
ports:
- protocol: TCP
port: 80
targetPort: 80
name: laravel-http
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: laravel
labels:
app: laravel
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: laravel
template:
metadata:
labels:
app: laravel
spec:
containers:
- name: app
image: myimage
volumeMounts:
- mountPath: /var/run/php-fpm
name: php-fpm-socket
- mountPath: /shared
name: public-contents
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "cp -aT /workspace/public /shared"]
- name: web
image: nginx:alpine
ports:
- containerPort: 80
volumeMounts:
- mountPath: /var/run/php-fpm
name: php-fpm-socket
- mountPath: /etc/nginx/conf.d
name: nginx-conf
- mountPath: /workspace/public
name: public-contents
volumes:
- name: php-fpm-socket
emptyDir: {}
- name: public-contents
emptyDir: {}
- name: nginx-conf
configMap:
name: nginx-conf
items:
- key: default.conf
path: default.conf
Recommended Posts