Cet article explique comment créer un environnement Laravel à l'aide du conteneur de développement de VS Code. Vous pouvez créer un environnement à grande vitesse tant que vous disposez des outils à utiliser, et puisque vous utilisez Docker, vous pouvez l'utiliser comme environnement de développement unifié pour votre équipe. Si vous souhaitez le déplacer pour le moment, veuillez utiliser le lien du référentiel.
https://github.com/naoyayamamoto/laravel-docker-sample Comme il est préparé en tant que référentiel de modèles, il peut également être utilisé comme modèle.
Utilisez les outils ci-dessus.
Les détails d'installation sont omis pour Docker
et Visual Studio Code
.
Visual Studio Code Remote --Containers
est un plug-in VS Code créé par Microsoft. Vous pouvez l'installer dans VS Code à partir du lien.
$ git clone https://github.com/naoyayamamoto/laravel-docker-sample
$ code laravel-docker-sample
#Si vous n'avez pas la commande code, ouvrez le référentiel avec VS Code
Remote-Containers: Reopen in Container
pour commencer à préparer l'environnement.Allez sur http: // localhost: 8000
et vous devriez voir la page initiale de Laravel.
Lorsque vous ouvrez devcontainer, l'environnement Docker sera construit sur la base de .devcontainer / docker-compose.yml
.
Nous utilisons les conteneurs suivants et nous vous expliquerons chacun d'eux.
nginx:alpine (web)
php artisan serve
.devcontainer / docker / nginx / default.conf
et envoyez le processus à php-fpmmysql:8 (db)
.devcontainer / docker / mysql / my.cnf
est chargé (paramètres de base japonais)MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'`` MYSQL_DATABASE: laravel
est définie, donc aucun mot de passe root, la table initiale laravel
est créée.devcontainer / docker / php / Dockerfile
composer
・ node
・ npm
・ yarn
peut être utilisé.devcontainer / docker / php / php-fpm.d / zzz-www.conf
pour exécuter php-fpm sur chaussetteDB_HOST: db
est défini, il est prioritaire sur le paramètre dans .env et connecté au conteneur de base de données.Un Dockerfile qui construit pour la production a été ajouté au référentiel, veuillez donc l'utiliser comme source de personnalisation. Nous utilisons une construction en plusieurs étapes pour compiler js et installer composer à l'avance pour garder l'image finale aussi petite que possible. Je réussis uniquement les tests de construction avec les actions Github.
Pour référence, il s'agit d'un paramètre lors de l'utilisation avec kubernetes. On suppose que nginx et php sont exécutés en tant que 1POD.
---
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