{ description = "Laravel application with artisan serve behind a proxy"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; }; outputs = { self, nixpkgs }: let pkgs = import nixpkgs { system = "x86_64-linux"; }; in { # Define the default package defaultPackage.x86_64-linux = pkgs.writeShellScriptBin "laravel-server" '' #!/usr/bin/env bash export PATH=${pkgs.php}/bin:$PATH export PATH=${pkgs.redis}/bin:$PATH export PATH=${pkgs.git}/bin:$PATH export PATH=${pkgs.mariadb}/bin:$PATH export PATH=${pkgs.docker}/bin:$PATH export PATH=${pkgs.docker-compose}/bin:$PATH redis-server --daemonize yes redis-cli ping #mariadb-install-server #php artisan serve --host=127.0.0.1 --port=8000 bash ./nix/buildsteps.sh ''; # Development shell devShell.x86_64-linux = pkgs.mkShell { nativeBuildInputs = [ pkgs.php pkgs.phpPackages.composer pkgs.nginx pkgs.nodejs_20 pkgs.tmux pkgs.redis pkgs.mariadb pkgs.docker pkgs.docker-compose ]; shellHook = '' export LC_ALL=C.UTF-8 export LANG=C.UTF-8 echo "Laravel environment loaded." # Start Redis server as a background process redis-server --daemonize yes echo "Resetting MariaDB Data" # Clean up and create directories for MariaDB data echo "Deleting MariaDB data directory" #rm -rf $(pwd)/nix/docker/maria/mariadb_data #echo "Creating MariaDB data directory" #mkdir -p $(pwd)/nix/docker/maria/mariadb_data echo "Run 'php artisan serve' to start the application." ''; }; # NGINX configuration nginxConfig = pkgs.writeText "nginx.conf" '' server { listen 80; server_name localhost; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ''; # Systemd services nixosConfigurations.default = pkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ { systemd.services.laravel = { enabled=true; description = "Laravel PHP Artisan Service"; wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStart = "${self.defaultPackage.x86_64-linux}"; Restart = "always"; WorkingDirectory = ./app; }; }; systemd.services.nginx-proxy = { enabled=true; description = "NGINX Proxy for Laravel"; wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStart = "${pkgs.nginx}/bin/nginx -c ${self.nginxConfig}"; Restart = "always"; }; services.mariadb = { enable = true; package = nixpkgs.pkgs.mariadb; # Ensure you have the correct version of MariaDB dataDir = "/var/lib/mysql"; socket = "/var/run/mysqld/mysqld.sock"; port = 3306; # Additional configuration settings rootPassword = "your_secure_password"; # Set the root password }; }; } ]; }; }; }