composer require "downtoworld/laravel-devops:*"
Publish the required files:
php artisan vendor:publish --tag=laravel-devops
- Create the Docker network
cloudflared(bridge) - Deploy the Docker container as specified @ Cloudflare -> Zero Trust -> Access -> Tunnels -> Create a tunnel (Additionally: attach the container to the previously created network by specifying
--network cloudflared) - Create a Git-repo based Stack @ Portainer webUI
- At Compose path specify:
docker-compose-prod.yml - Enable GitOps updates
- Fill the required environment variables:
APP_NAME: several Laravel configurations use it for prefixingAPP_KEY: can be generated on your local environmentAPP_DOMAIN: domain of the app in production Example: yourdomain.comAPP_DOCKER_STACK: the name of the stack you are configuring @ Portainer. Example: mystack- [You can also configure here any Laravel env variables like
APP_NAMEorAPP_DEBUG]
- Deploy the stack
- At Compose path specify:
- Add public hostnames to the tunnel @ Cloudflare:
- Webpage (Nginx): yourdomain.com HTTP mystack-nginx-1:80
- S3 Storage (Minio): cdn.yourdomain.com HTTP mystack-minio-1:9000
- Websocket server (Soketi): ws.yourdomain.com HTTPS (tls-check-disabled and ws-enabled options) mystack-soketi-1:6001
- Run
docker run -d --name cloudflare-docker-dns --restart always --network cloudflared -e DNS_FORWARDER=127.0.0.11 cytopia/bindand copy it's assigned IP (your-assigned-ip) from Portainer UI. - Go to Portainer networks and copy
cloudflaredassigned IPV4 IPAM Subnet (your-network-ip-range) - Go to Cloudflare -> Zero Trust -> Access -> Tunnels and configure a new
Private networkat your tunnel withCIDR: your-network-ip-range - Go to Cloudflare Zero Trust Settings -> WARP Client -> Configure "Default" Device Settings:
- Add a Local Domain Fallback:
domain: cloudflaredDNS Servers: your-assigned-ip - Set Split Tunnels to
Include IPs and domainsand addSelector: IP AddressValue: your-network-ip-range
- Add a Local Domain Fallback:
- Give your email access at Cloudflare Zero Trust Settings -> WARP Client -> Device enrollment permissions.
- Install Cloudflare WARP on your computer, connect it to your Zero Trust org and enable it.
- Now you can access all your cloudflared-network-connected docker containers locally as
mystack-service-1.cloudflared:port
The list of services you can access:
- mystack-mysql-1.cloudflared:3306
User: rootPassword: secret - mystack-redis-1.cloudflared:6379 no-password
- http://mystack-seq-1.cloudflared
- http://mystack-minio-1.cloudflared:8900
- http://mystack-mailpit-1.cloudflared:8025
- http://mystack-meilisearch-1.cloudflared:7700
Application environment variables can be managed at docker-compose-prod.env file.
Scheduler and Horizon supervisors are running separately on their containers.
8.2 version is running by default but can be switched to 8.1 or 7.4 using the APP_PHP_VERSION environment variable.
- Big one for Cloudflare Team for making this possible for free.
- Portainer project made it possible with their GitOps updates.
- ServerSideUp team made it possible with their PHP Docker images.