set up environment
This commit is contained in:
commit
daa2685ed9
2 changed files with 173 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
/.idea
|
||||
172
shell.nix
Normal file
172
shell.nix
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
{ pkgs ? import <nixpkgs> {} }:
|
||||
|
||||
pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
# PHP and tools
|
||||
php83
|
||||
php83Packages.composer
|
||||
|
||||
# Node.js and npm
|
||||
nodejs_20
|
||||
|
||||
# Container tools
|
||||
podman
|
||||
podman-compose
|
||||
|
||||
# Database client (optional, for direct DB access)
|
||||
mariadb-client
|
||||
|
||||
# Utilities
|
||||
git
|
||||
curl
|
||||
gnumake
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
# Export user/group IDs for Docker permission matching
|
||||
export USER_ID=$(id -u)
|
||||
export GROUP_ID=$(id -g)
|
||||
# Use keep-id for proper permission mapping in rootless podman
|
||||
export PODMAN_USERNS=keep-id
|
||||
|
||||
# Define helper functions
|
||||
dev-rebuild() {
|
||||
echo "🔨 Rebuilding development environment..."
|
||||
PODMAN_USERNS=keep-id podman-compose down -v
|
||||
PODMAN_USERNS=keep-id podman-compose build --no-cache app
|
||||
PODMAN_USERNS=keep-id podman-compose up -d
|
||||
echo "✅ Rebuild complete! Check logs with: dev-logs"
|
||||
}
|
||||
|
||||
dev-rebuild-quick() {
|
||||
echo "⚡ Quick rebuild (keeping volumes)..."
|
||||
PODMAN_USERNS=keep-id podman-compose down
|
||||
PODMAN_USERNS=keep-id podman-compose build app
|
||||
PODMAN_USERNS=keep-id podman-compose up -d
|
||||
echo "✅ Quick rebuild complete!"
|
||||
}
|
||||
|
||||
dev-up() {
|
||||
echo "🚀 Starting development environment..."
|
||||
PODMAN_USERNS=keep-id podman-compose up -d
|
||||
echo "✅ Dev environment started!"
|
||||
}
|
||||
|
||||
dev-down() {
|
||||
echo "🛑 Stopping development environment..."
|
||||
podman-compose down
|
||||
echo "✅ Dev environment stopped!"
|
||||
}
|
||||
|
||||
dev-restart() {
|
||||
echo "🔄 Restarting development environment..."
|
||||
podman-compose restart
|
||||
echo "✅ Dev environment restarted!"
|
||||
}
|
||||
|
||||
dev-logs() {
|
||||
podman-compose logs -f "$@"
|
||||
}
|
||||
|
||||
dev-shell() {
|
||||
podman-compose exec app sh
|
||||
}
|
||||
|
||||
dev-artisan() {
|
||||
podman-compose exec app php artisan "$@"
|
||||
}
|
||||
|
||||
dev-fix-permissions() {
|
||||
echo "🔧 Fixing file permissions..."
|
||||
echo "This will require sudo to fix Docker-created files"
|
||||
sudo chown -R $(id -u):$(id -g) storage/ bootstrap/cache/ vendor/ node_modules/ 2>/dev/null || true
|
||||
echo "✅ Permissions fixed!"
|
||||
}
|
||||
|
||||
prod-build() {
|
||||
local TAG="''${1:-latest}"
|
||||
local REGISTRY="codeberg.org"
|
||||
local NAMESPACE="lvl0"
|
||||
local IMAGE_NAME="buckets"
|
||||
|
||||
echo "🔨 Building production image..."
|
||||
podman build -f Dockerfile -t ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG} .
|
||||
|
||||
echo "✅ Build complete: ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG}"
|
||||
echo "Run 'prod-push' to push to Codeberg"
|
||||
}
|
||||
|
||||
prod-push() {
|
||||
local TAG="''${1:-latest}"
|
||||
local REGISTRY="codeberg.org"
|
||||
local NAMESPACE="lvl0"
|
||||
local IMAGE_NAME="buckets"
|
||||
|
||||
echo "📤 Pushing to Codeberg registry..."
|
||||
if podman push ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG}; then
|
||||
echo "✅ Image pushed to ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG}"
|
||||
else
|
||||
echo "❌ Failed to push image. Did you run 'prod-build' first?"
|
||||
echo " Also make sure you're logged in with 'prod-login'"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
prod-build-push() {
|
||||
local TAG="''${1:-latest}"
|
||||
prod-build "$TAG" && prod-push "$TAG"
|
||||
}
|
||||
|
||||
prod-login() {
|
||||
echo "📝 Logging into Codeberg registry..."
|
||||
podman login codeberg.org
|
||||
}
|
||||
|
||||
echo "🚀 Buckets Development Environment"
|
||||
echo "======================================="
|
||||
echo "PHP: $(php --version | head -n1)"
|
||||
echo "Node: $(node --version)"
|
||||
echo "Podman: $(podman --version)"
|
||||
echo "Podman-compose: $(podman-compose --version 2>/dev/null || echo 'checking...')"
|
||||
echo ""
|
||||
echo "Development commands:"
|
||||
echo " dev-up - Start development environment"
|
||||
echo " dev-down - Stop development environment"
|
||||
echo " dev-restart - Restart containers"
|
||||
echo " dev-rebuild - Full rebuild (removes volumes)"
|
||||
echo " dev-rebuild-quick - Quick rebuild (keeps volumes)"
|
||||
echo " dev-logs [svc] - Follow logs (default: all)"
|
||||
echo " dev-shell - Enter app container"
|
||||
echo " dev-artisan - Run artisan commands"
|
||||
echo " dev-fix-permissions - Fix Docker-created file permissions"
|
||||
echo ""
|
||||
echo "Production commands:"
|
||||
echo " prod-login - Login to Codeberg registry"
|
||||
echo " prod-build [tag] - Build production image (default: latest)"
|
||||
echo " prod-push [tag] - Push image to Codeberg"
|
||||
echo " prod-build-push - Build and push in one command"
|
||||
echo ""
|
||||
|
||||
# Auto-start prompt
|
||||
if [ -f "docker-compose.yml" ]; then
|
||||
read -p "Start development containers? (y/N) " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Starting containers..."
|
||||
podman-compose up -d
|
||||
|
||||
# Wait a moment for containers to start
|
||||
sleep 3
|
||||
|
||||
echo ""
|
||||
echo "✅ Services should be available at:"
|
||||
echo " App: http://localhost:8000"
|
||||
echo " Vite: http://localhost:5173"
|
||||
echo " Mailhog: http://localhost:8025"
|
||||
echo " MariaDB: localhost:3306"
|
||||
echo ""
|
||||
echo "Run 'podman-compose logs -f app' to follow logs"
|
||||
fi
|
||||
fi
|
||||
'';
|
||||
}
|
||||
Loading…
Reference in a new issue