Dev server via podman
This commit is contained in:
parent
d0f54fcf9c
commit
24143d53ac
10 changed files with 242 additions and 4 deletions
44
README.md
44
README.md
|
|
@ -57,10 +57,10 @@ #### Docker
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Using Docker Compose
|
# Using Docker Compose
|
||||||
docker-compose -f docker/docker-compose.yml up --build
|
docker-compose -f docker/production/docker-compose.yml up --build
|
||||||
|
|
||||||
# Or using Podman Compose
|
# Or using Podman Compose
|
||||||
podman-compose -f docker/docker-compose.yml up --build
|
podman-compose -f docker/production/docker-compose.yml up --build
|
||||||
```
|
```
|
||||||
|
|
||||||
The application will be available at `http://localhost:5001`.
|
The application will be available at `http://localhost:5001`.
|
||||||
|
|
@ -68,7 +68,9 @@ # Or using Podman Compose
|
||||||
### Development
|
### Development
|
||||||
|
|
||||||
#### Local Development Setup
|
#### Local Development Setup
|
||||||
I snoone diffone
|
|
||||||
|
**Option 1: Laravel Sail (Docker)**
|
||||||
|
|
||||||
For local development with Laravel Sail:
|
For local development with Laravel Sail:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|
@ -87,13 +89,47 @@ # Run migrations
|
||||||
sail artisan migrate
|
sail artisan migrate
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Option 2: Podman Development**
|
||||||
|
|
||||||
|
For Fedora Atomic or other Podman-based systems:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Quick start with helper script
|
||||||
|
bash docker/dev/podman/start-dev.sh
|
||||||
|
|
||||||
|
# Or manually:
|
||||||
|
# Install podman-compose if not available
|
||||||
|
pip3 install --user podman-compose
|
||||||
|
|
||||||
|
# Start development environment
|
||||||
|
podman-compose -f docker/dev/podman/docker-compose.yml up -d
|
||||||
|
|
||||||
|
# Run migrations
|
||||||
|
podman exec incr-dev-app php artisan migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option 3: Sail with Podman (Compatibility Layer)**
|
||||||
|
|
||||||
|
To use Laravel Sail commands with Podman:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Source the alias script
|
||||||
|
source docker/dev/podman/podman-sail-alias.sh
|
||||||
|
|
||||||
|
# Now you can use sail commands as normal
|
||||||
|
sail up -d
|
||||||
|
sail artisan migrate
|
||||||
|
sail npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
The development server will be available at `http://localhost` with hot reload enabled.
|
The development server will be available at `http://localhost` with hot reload enabled.
|
||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
- `app/` - Laravel backend (controllers, models, services)
|
- `app/` - Laravel backend (controllers, models, services)
|
||||||
- `resources/js/` - React frontend components and pages
|
- `resources/js/` - React frontend components and pages
|
||||||
- `docker/` - Production Docker configuration
|
- `docker/production/` - Production Docker configuration
|
||||||
|
- `docker/dev/podman/` - Development Podman configuration
|
||||||
- `database/migrations/` - Database schema definitions
|
- `database/migrations/` - Database schema definitions
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
|
||||||
52
docker/dev/podman/Dockerfile
Normal file
52
docker/dev/podman/Dockerfile
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
FROM docker.io/library/php:8.2-fpm
|
||||||
|
|
||||||
|
# Install system dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
libpng-dev \
|
||||||
|
libonig-dev \
|
||||||
|
libxml2-dev \
|
||||||
|
zip \
|
||||||
|
unzip \
|
||||||
|
nodejs \
|
||||||
|
npm \
|
||||||
|
default-mysql-client \
|
||||||
|
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
|
||||||
|
|
||||||
|
# Install Composer
|
||||||
|
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
||||||
|
|
||||||
|
# Set working directory
|
||||||
|
WORKDIR /var/www/html
|
||||||
|
|
||||||
|
# Install Node.js 20.x (for better compatibility)
|
||||||
|
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
|
||||||
|
&& apt-get install -y nodejs
|
||||||
|
|
||||||
|
# Copy composer files and install PHP dependencies
|
||||||
|
COPY composer.json composer.lock ./
|
||||||
|
RUN composer install --no-dev --optimize-autoloader --no-scripts
|
||||||
|
|
||||||
|
# Copy package.json and install Node dependencies
|
||||||
|
COPY package*.json ./
|
||||||
|
RUN npm ci
|
||||||
|
|
||||||
|
# Copy application code
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Set permissions
|
||||||
|
RUN chown -R www-data:www-data /var/www/html \
|
||||||
|
&& chmod -R 755 /var/www/html/storage \
|
||||||
|
&& chmod -R 755 /var/www/html/bootstrap/cache
|
||||||
|
|
||||||
|
# Create start script
|
||||||
|
RUN echo '#!/bin/bash\n\
|
||||||
|
php artisan serve --host=0.0.0.0 --port=8000 &\n\
|
||||||
|
npm run dev -- --host 0.0.0.0\n\
|
||||||
|
wait' > /usr/local/bin/start-dev.sh \
|
||||||
|
&& chmod +x /usr/local/bin/start-dev.sh
|
||||||
|
|
||||||
|
EXPOSE 8000 5173
|
||||||
|
|
||||||
|
CMD ["/usr/local/bin/start-dev.sh"]
|
||||||
72
docker/dev/podman/docker-compose.yml
Normal file
72
docker/dev/podman/docker-compose.yml
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: ../../..
|
||||||
|
dockerfile: docker/dev/podman/Dockerfile
|
||||||
|
container_name: incr-dev-app
|
||||||
|
restart: unless-stopped
|
||||||
|
working_dir: /var/www/html
|
||||||
|
environment:
|
||||||
|
- APP_ENV=local
|
||||||
|
- APP_DEBUG=true
|
||||||
|
- APP_KEY=base64:YOUR_APP_KEY_HERE
|
||||||
|
- DB_CONNECTION=mysql
|
||||||
|
- DB_HOST=db
|
||||||
|
- DB_PORT=3306
|
||||||
|
- DB_DATABASE=incr_dev
|
||||||
|
- DB_USERNAME=incr_user
|
||||||
|
- DB_PASSWORD=incr_password
|
||||||
|
- VITE_PORT=5173
|
||||||
|
volumes:
|
||||||
|
- ../../../:/var/www/html:Z
|
||||||
|
- /var/www/html/node_modules
|
||||||
|
- /var/www/html/vendor
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
- "5173:5173"
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
networks:
|
||||||
|
- incr-dev-network
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: docker.io/library/mysql:8.0
|
||||||
|
container_name: incr-dev-db
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- MYSQL_DATABASE=incr_dev
|
||||||
|
- MYSQL_USER=incr_user
|
||||||
|
- MYSQL_PASSWORD=incr_password
|
||||||
|
- MYSQL_ROOT_PASSWORD=root_password
|
||||||
|
volumes:
|
||||||
|
- db_data:/var/lib/mysql
|
||||||
|
ports:
|
||||||
|
- "3307:3306"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "incr_user", "-pincr_password"]
|
||||||
|
timeout: 10s
|
||||||
|
retries: 10
|
||||||
|
interval: 10s
|
||||||
|
start_period: 10s
|
||||||
|
networks:
|
||||||
|
- incr-dev-network
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: docker.io/library/redis:7-alpine
|
||||||
|
container_name: incr-dev-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "6379:6379"
|
||||||
|
networks:
|
||||||
|
- incr-dev-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
incr-dev-network:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
db_data:
|
||||||
|
driver: local
|
||||||
26
docker/dev/podman/podman-sail-alias.sh
Normal file
26
docker/dev/podman/podman-sail-alias.sh
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Podman aliases for Laravel Sail compatibility
|
||||||
|
# Source this file to use Sail commands with Podman
|
||||||
|
# Usage: source docker/dev/podman/podman-sail-alias.sh
|
||||||
|
|
||||||
|
# Create docker alias pointing to podman
|
||||||
|
alias docker='podman'
|
||||||
|
|
||||||
|
# Create docker-compose alias pointing to podman-compose
|
||||||
|
alias docker-compose='podman-compose'
|
||||||
|
|
||||||
|
# Sail wrapper function that uses podman-compose
|
||||||
|
sail() {
|
||||||
|
if [[ -f docker/dev/podman/docker-compose.yml ]]; then
|
||||||
|
podman-compose -f docker/dev/podman/docker-compose.yml "$@"
|
||||||
|
else
|
||||||
|
echo "❌ Podman compose file not found at docker/dev/podman/docker-compose.yml"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "✅ Podman aliases set up for Laravel Sail compatibility"
|
||||||
|
echo "🐳 'docker' → 'podman'"
|
||||||
|
echo "🔧 'docker-compose' → 'podman-compose'"
|
||||||
|
echo "⛵ 'sail' → uses podman-compose with dev configuration"
|
||||||
52
docker/dev/podman/start-dev.sh
Normal file
52
docker/dev/podman/start-dev.sh
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Podman development environment startup script for incr
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "🚀 Starting incr development environment with Podman..."
|
||||||
|
|
||||||
|
# Check if .env exists
|
||||||
|
if [ ! -f .env ]; then
|
||||||
|
echo "📋 Creating .env file from .env.example..."
|
||||||
|
cp .env.example .env
|
||||||
|
echo "⚠️ Please update your .env file with appropriate values, especially APP_KEY"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if podman-compose is available
|
||||||
|
if ! command -v podman-compose &> /dev/null; then
|
||||||
|
echo "❌ podman-compose not found. Installing..."
|
||||||
|
pip3 install --user podman-compose
|
||||||
|
echo "✅ podman-compose installed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start services
|
||||||
|
echo "🔧 Starting services..."
|
||||||
|
podman-compose -f docker/dev/podman/docker-compose.yml up -d
|
||||||
|
|
||||||
|
# Wait for database to be ready
|
||||||
|
echo "⏳ Waiting for database to be ready..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# Check if APP_KEY is set
|
||||||
|
if grep -q "APP_KEY=base64:YOUR_APP_KEY_HERE" .env || grep -q "APP_KEY=$" .env; then
|
||||||
|
echo "🔑 Generating application key..."
|
||||||
|
podman exec incr-dev-app php artisan key:generate
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run migrations
|
||||||
|
echo "🗃️ Running database migrations..."
|
||||||
|
podman exec incr-dev-app php artisan migrate
|
||||||
|
|
||||||
|
# Install/update dependencies if needed
|
||||||
|
echo "📦 Installing dependencies..."
|
||||||
|
podman exec incr-dev-app composer install
|
||||||
|
podman exec incr-dev-app npm install
|
||||||
|
|
||||||
|
echo "✅ Development environment is ready!"
|
||||||
|
echo "🌐 Application: http://localhost:8000"
|
||||||
|
echo "🔥 Vite dev server: http://localhost:5173"
|
||||||
|
echo "💾 Database: localhost:3307"
|
||||||
|
echo ""
|
||||||
|
echo "To stop: podman-compose -f docker/dev/podman/docker-compose.yml down"
|
||||||
|
echo "To view logs: podman-compose -f docker/dev/podman/docker-compose.yml logs -f"
|
||||||
Loading…
Reference in a new issue