Here you can see and manage your subscription.
7 |
3 | {{ data_get_str($server, 'name')->limit(10) }} > Server Destinations | Coolify
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/resources/views/livewire/team/create.blade.php:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/database/seeders/ServiceApplicationSeeder.php:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/Enums/ApplicationDeploymentStatus.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Save
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/Models/SharedEnvironmentVariable.php:
--------------------------------------------------------------------------------
1 | 'string',
13 | 'value' => 'encrypted',
14 | ];
15 | }
16 |
--------------------------------------------------------------------------------
/resources/views/livewire/switch-team.blade.php:
--------------------------------------------------------------------------------
1 |
2 | Switch team
3 | @foreach (auth()->user()->teams as $team)
4 | {{ $team->name }}
5 | @endforeach
6 |
7 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | indent_size = 4
7 | indent_style = space
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
14 | [*.{yml,yaml}]
15 | indent_size = 2
16 |
17 | [docker-compose.yml]
18 | indent_size = 4
19 |
--------------------------------------------------------------------------------
/.env.windows-docker-desktop.example:
--------------------------------------------------------------------------------
1 | IS_WINDOWS_DOCKER_DESKTOP=true
2 |
3 | APP_ID=coolify-windows-docker-desktop
4 | APP_NAME=Coolify
5 | APP_KEY=base64:ssTlCmrIE/q7whnKMvT6DwURikg69COzGsAwFVROm80=
6 |
7 | DB_PASSWORD=coolify
8 | REDIS_PASSWORD=coolify
9 |
10 | PUSHER_APP_ID=coolify
11 | PUSHER_APP_KEY=coolify
12 | PUSHER_APP_SECRET=coolify
13 |
--------------------------------------------------------------------------------
/app/Data/ServerMetadata.php:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/Enums/ProcessStatus.php:
--------------------------------------------------------------------------------
1 | dispatch('proxyStatusUpdated');
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/.env.development.example:
--------------------------------------------------------------------------------
1 | APP_NAME=Coolify-localhost
2 | APP_ID=development
3 | APP_ENV=local
4 | APP_KEY=
5 | APP_DEBUG=true
6 | APP_URL=http://localhost
7 | APP_PORT=8000
8 | MUX_ENABLED=false
9 |
10 | DUSK_DRIVER_URL=http://selenium:4444
11 |
12 | ## For Andras only
13 | # To purge cache
14 | BUNNY_API_KEY=
15 | # To upload assets
16 | BUNNY_STORAGE_API_KEY=
17 |
--------------------------------------------------------------------------------
/examples/traefik-dynamic-coolify.yaml:
--------------------------------------------------------------------------------
1 | # This is an example dynamic configuration.
2 | http:
3 | routers:
4 | coolify-http:
5 | entryPoints:
6 | - http
7 | service: coolify
8 | rule: Host(`coolify.io`)
9 | services:
10 | coolify:
11 | loadBalancer:
12 | servers:
13 | -
14 | url: 'http://coolify:80'
--------------------------------------------------------------------------------
/app/Models/ScheduledTaskExecution.php:
--------------------------------------------------------------------------------
1 | belongsTo(ScheduledTask::class);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/Actions/Server/StopSentinel.php:
--------------------------------------------------------------------------------
1 |
2 | Destination
3 | The destination server / network where your application will be deployed to.
4 |
5 |
Server: {{ data_get($destination, 'server.name') }}
6 |
Destination Network: {{ $destination->network }}
7 |
8 |
9 |
--------------------------------------------------------------------------------
/scripts/cloud_upgrade.sh:
--------------------------------------------------------------------------------
1 | set -e
2 | export IMAGE=$1
3 | docker system prune -af
4 | docker compose pull
5 | read -p "Press Enter to update Coolify to $IMAGE..." last_version
9 | docker compose logs -f
10 |
--------------------------------------------------------------------------------
/resources/views/components/use-magic-bar.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @if (isset($link))
3 | Create a new one
4 |
5 | here.
6 |
7 | {{-- @else
8 | Use the magic
9 | bar (press
/ ) to create a new one. --}}
10 | @endif
11 |
12 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | /.phpunit.cache
2 | /node_modules
3 | /public/build
4 | /public/hot
5 | /public/storage
6 | /storage/*.key
7 | /vendor
8 | .env
9 | .env.backup
10 | .env.secrets
11 | .phpunit.result.cache
12 | Homestead.json
13 | Homestead.yaml
14 | auth.json
15 | npm-debug.log
16 | yarn-error.log
17 | /.fleet
18 | /.idea
19 | /.vscode
20 | /.npm
21 | /.bash_history
22 | /_data
23 | .rnd
24 | /.ssh
25 |
--------------------------------------------------------------------------------
/app/Models/PersonalAccessToken.php:
--------------------------------------------------------------------------------
1 |
2 | Your server ({{ $name }}) has high disk usage ({{ $disk_usage }}% used). Threshold is {{ $threshold }}%.
3 |
4 | Please cleanup your disk to prevent data-loss. Here are some [tips](https://coolify.io/docs/knowledge-base/server/automated-cleanup).
5 |
6 | (You can change the threshold in the Server Settings menu.)
7 |
8 |
--------------------------------------------------------------------------------
/resources/views/emails/invitation-link.blade.php:
--------------------------------------------------------------------------------
1 |
2 | You have been invited to "{{ $team }}" on "{{ config('app.name') }}".
3 |
4 | Please [click here]({{ $invitation_link }}) to accept the invitation.
5 |
6 | If you have any questions, please contact the team owner.
7 |
8 | If it was not you who requested this invitation, please ignore this email.
9 |
10 |
--------------------------------------------------------------------------------
/other/scripts/get-subs.php:
--------------------------------------------------------------------------------
1 | $handle = fopen("/tmp/export.csv", "w");
2 | App\Models\Team::chunk(100, function ($teams) use ($handle) {
3 | foreach ($teams as $team) {
4 | if ($team->subscription->stripe_invoice_paid == true) {
5 | foreach ($team->members as $member) {
6 | fputcsv($handle, [$member->email, $member->name], ",");
7 | }
8 | }
9 | }
10 | });
11 | fclose($handle);
12 |
--------------------------------------------------------------------------------
/resources/views/emails/application-deployment-failed.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @if ($pull_request_id === 0)
3 | Failed to deploy a new version of {{ $name }} at [{{ $fqdn }}]({{ $fqdn }}) .
4 | @else
5 | Failed to deploy a pull request #{{ $pull_request_id }} of {{ $name }} at
6 | [{{ $fqdn }}]({{ $fqdn }}).
7 | @endif
8 |
9 | [View Deployment Logs]({{ $deployment_url }})
10 |
11 |
--------------------------------------------------------------------------------
/resources/views/emails/application-deployment-success.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @if ($pull_request_id === 0)
3 | A new version of {{ $name }} is available at [{{ $fqdn }}]({{ $fqdn }}) .
4 | @else
5 | Pull request #{{ $pull_request_id }} of {{ $name }} deployed successfully
6 | [{{ $fqdn }}]({{ $fqdn }}).
7 | @endif
8 |
9 | [View Deployment Logs]({{ $deployment_url }})
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/Http/Middleware/EncryptCookies.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | //
16 | ];
17 | }
18 |
--------------------------------------------------------------------------------
/app/Models/ScheduledDatabaseBackupExecution.php:
--------------------------------------------------------------------------------
1 | belongsTo(ScheduledDatabaseBackup::class);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/resources/views/livewire/server/proxy/new-dynamic-configuration.blade.php:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/resources/views/components/limit-reached.blade.php:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/resources/views/emails/server-lost-connection.blade.php:
--------------------------------------------------------------------------------
1 |
2 | Coolify cannot connect to your server ({{ $name }}). Please check your server and make sure it is running.
3 |
4 | All automations & integrations are turned off!
5 |
6 | IMPORTANT: We automatically try to revive your server and turn on all automations & integrations.
7 |
8 | If you have any questions, please contact us.
9 |
10 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/footer.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/Http/Middleware/VerifyCsrfToken.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | //
16 | ];
17 | }
18 |
--------------------------------------------------------------------------------
/resources/views/emails/waitlist-confirmation.blade.php:
--------------------------------------------------------------------------------
1 |
2 | Someone added this email to the Coolify Cloud's waitlist. [Click here]({{ $confirmation_url }}) to confirm!
3 |
4 | The link will expire in {{ config('constants.waitlist.expiration') }} minutes.
5 |
6 | You have no idea what [Coolify Cloud](https://coolify.io) is or this waitlist? [Click here]({{ $cancel_url }}) to remove you from the waitlist.
7 |
8 |
--------------------------------------------------------------------------------
/resources/views/emails/before-trial-conversion.blade.php:
--------------------------------------------------------------------------------
1 |
2 | We would like to inform you that a {{ config('constants.limits.trial_period') }} days of trial has been added to all subscription plans.
3 |
4 | You can try out Coolify, without payment information for free. If you like it, you can upgrade to a paid plan at any time.
5 |
6 | [Click here](https://app.coolify.io/subscription/new) to start your trial.
7 |
8 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/application/previews-compose.blade.php:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/resource/environment-select.blade.php:
--------------------------------------------------------------------------------
1 |
2 | Create/Edit Environments
3 | -----
4 | @foreach ($environments as $environment)
5 | {{ $environment->name }}
6 |
7 | @endforeach
8 |
9 |
--------------------------------------------------------------------------------
/database/seeders/ProjectSettingSeeder.php:
--------------------------------------------------------------------------------
1 | settings->wildcard_domain = 'wildcard.example.com';
13 | // $first_project->settings->save();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/resources/views/server/create.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @if ($private_keys->count() === 0)
3 | Create Private Key
4 | You need to create a private key before you can create a server.
5 |
6 | @else
7 |
8 | @endif
9 |
10 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/header.blade.php:
--------------------------------------------------------------------------------
1 | @props(['url'])
2 |
3 |
12 |
13 |
--------------------------------------------------------------------------------
/app/Livewire/Storage/Index.php:
--------------------------------------------------------------------------------
1 | s3 = S3Storage::ownedByCurrentTeam()->get();
15 | }
16 |
17 | public function render()
18 | {
19 | return view('livewire.storage.index');
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | Use this section to tell people about which versions of your project are
6 | currently being supported with security updates.
7 |
8 | | Version | Supported |
9 | | ------- | ------------------ |
10 | | > 4 | :white_check_mark: |
11 | | 3 | :x: |
12 |
13 |
14 | ## Reporting a Vulnerability
15 |
16 | If you have any vulnerability please report at hi@coollabs.io
17 |
--------------------------------------------------------------------------------
/resources/views/components/status/stopped.blade.php:
--------------------------------------------------------------------------------
1 | @props([
2 | 'status' => 'Stopped',
3 | ])
4 |
5 |
6 |
7 |
8 | {{ str($status)->before(':')->headline() }}
9 |
10 |
11 |
--------------------------------------------------------------------------------
/database/seeders/ProjectSeeder.php:
--------------------------------------------------------------------------------
1 | 'My first project',
14 | 'description' => 'This is a test project in development',
15 | 'team_id' => 0,
16 | ]);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/Livewire/CommandCenter/Index.php:
--------------------------------------------------------------------------------
1 | servers = Server::isReachable()->get();
15 | }
16 |
17 | public function render()
18 | {
19 | return view('livewire.command-center.index');
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/Models/GitlabApp.php:
--------------------------------------------------------------------------------
1 | morphMany(Application::class, 'source');
15 | }
16 |
17 | public function privateKey()
18 | {
19 | return $this->belongsTo(PrivateKey::class);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/Browser/Pages/Page.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | public static function siteElements(): array
15 | {
16 | return [
17 | '@element' => '#selector',
18 | ];
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/Providers/BroadcastServiceProvider.php:
--------------------------------------------------------------------------------
1 | 'Swarm Docker 1',
17 | // 'server_id' => 1,
18 | // ]);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/tests/Browser/ExampleTest.php:
--------------------------------------------------------------------------------
1 | browse(function (Browser $browser) {
16 | $browser->visit('/')
17 | ->assertSee('Laravel');
18 | });
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrimStrings.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | 'current_password',
16 | 'password',
17 | 'password_confirmation',
18 | ];
19 | }
20 |
--------------------------------------------------------------------------------
/public/vendor/horizon/mix-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "/app.js": "/app.js?id=b4f3f08e60211bd6948ec35e5e9de9a1",
3 | "/app-dark.css": "/app-dark.css?id=15c72df05e2b1147fa3e4b0670cfb435",
4 | "/app.css": "/app.css?id=4d6a1a7fe095eedc2cb2a4ce822ea8a5",
5 | "/img/favicon.png": "/img/favicon.png?id=1542bfe8a0010dcbee710da13cce367f",
6 | "/img/horizon.svg": "/img/horizon.svg?id=904d5b5185fefb09035384e15bfca765",
7 | "/img/sprite.svg": "/img/sprite.svg?id=afc4952b74895bdef3ab4ebe9adb746f"
8 | }
9 |
--------------------------------------------------------------------------------
/tests/CreatesApplication.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class)->bootstrap();
18 |
19 | return $app;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrustHosts.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | public function hosts(): array
15 | {
16 | return [
17 | $this->allSubdomainsOfApplicationUrl(),
18 | ];
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/resources/views/emails/container-restarted.blade.php:
--------------------------------------------------------------------------------
1 |
2 | A resource ({{ $containerName }}) has been restarted automatically on {{ $serverName }}, because it was stopped unexpectedly.
3 |
4 | @if ($containerName === 'coolify-proxy')
5 | Coolify Proxy should run on your server as you have FQDNs set up in one of your resources.
6 |
7 | If you don't want to use Coolify Proxy, please remove FQDN from your resources or set Proxy type to Custom(None).
8 | @endif
9 |
10 |
--------------------------------------------------------------------------------
/resources/views/emails/daily-backup.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @foreach ($databases as $database_name => $databases)
3 |
4 | @if(data_get($databases,'failed_count') > 0)
5 |
6 |
7 |
8 | "{{ $database_name }}" backups: There were some failed backups. Please login and check the logs for more details.
9 |
10 |
11 |
12 | @else
13 |
14 | "{{ $database_name }}" backups: All backups were successful.
15 |
16 | @endif
17 |
18 | @endforeach
19 |
20 |
--------------------------------------------------------------------------------
/resources/views/livewire/server/proxy/modal.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Close
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/templates/compose/pocketbase.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://pocketbase.io/docs/
2 | # slogan: Open Source backend for your next SaaS and Mobile app in 1 file
3 | # tags: pocketbase,backend,saas,mobile,api
4 | # logo: svgs/pocketbase.svg
5 | # port: 8080
6 |
7 | services:
8 | pocketbase:
9 | image: ghcr.io/coollabsio/pocketbase:latest
10 | environment:
11 | - SERVICE_FQDN_POCKETBASE_8080
12 | volumes:
13 | - pocketbase-data:/app/pb_data
14 | - pocketbase-hooks:/app/pb_hooks
15 |
--------------------------------------------------------------------------------
/app/Actions/Server/RunCommand.php:
--------------------------------------------------------------------------------
1 | value);
16 |
17 | return $activity;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/Livewire/Project/Database/BackupNow.php:
--------------------------------------------------------------------------------
1 | backup
16 | ));
17 | $this->dispatch('success', 'Backup queued. It will be available in a few minutes.');
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/Actions/Fortify/PasswordValidationRules.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected function passwordRules(): array
15 | {
16 | return ['required', 'string', new Password, 'confirmed'];
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/Http/Middleware/Authenticate.php:
--------------------------------------------------------------------------------
1 | expectsJson() ? null : route('login');
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/Livewire/Server/Index.php:
--------------------------------------------------------------------------------
1 | servers = Server::ownedByCurrentTeam()->get();
16 | }
17 |
18 | public function render()
19 | {
20 | return view('livewire.server.index');
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/public/svgs/wordpress.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/Http/Middleware/PreventRequestsDuringMaintenance.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | 'webhooks/*',
16 | '/api/health',
17 | ];
18 | }
19 |
--------------------------------------------------------------------------------
/templates/compose/cloudflared.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/
2 | # slogan: Client for Cloudflare Tunnel, a daemon that exposes private services through the Cloudflare edge.
3 | # logo: svgs/cloudflared.svg
4 |
5 | services:
6 | cloudflared:
7 | container_name: cloudflare-tunnel
8 | image: cloudflare/cloudflared:latest
9 | restart: unless-stopped
10 | command: tunnel run
11 | environment:
12 | - TUNNEL_TOKEN=$CLOUDFLARE_TUNNEL_TOKEN
13 |
--------------------------------------------------------------------------------
/database/seeders/ApplicationSettingsSeeder.php:
--------------------------------------------------------------------------------
1 | load(['settings']);
16 | $application_1->settings->is_debug_enabled = false;
17 | $application_1->settings->save();
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/resources/views/livewire/command-center/index.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | Command Center | Coolify
4 |
5 | Command Center
6 | Execute commands on your servers without leaving the browser.
7 | @if ($servers->count() > 0)
8 |
9 | @else
10 |
11 |
No servers found. Without a server, you won't be able to do much.
12 |
13 | @endif
14 |
15 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/new/docker-image.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
Create a new Application
3 |
You can deploy an existing Docker Image from any Registry.
4 |
11 |
12 |
--------------------------------------------------------------------------------
/resources/views/livewire/server/proxy/logs.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | Proxy Logs | Coolify
4 |
5 |
6 |
7 |
8 |
9 |
Logs
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/Livewire/Subscription/Actions.php:
--------------------------------------------------------------------------------
1 | server_limits = Team::serverLimit();
15 | }
16 |
17 | public function stripeCustomerPortal()
18 | {
19 | $session = getStripeCustomerPortalSession(currentTeam());
20 | redirect($session->url);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/Models/BaseModel.php:
--------------------------------------------------------------------------------
1 | uuid) {
17 | $model->uuid = (string) new Cuid2(7);
18 | }
19 | });
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/database/seeders/ApplicationPreviewSeeder.php:
--------------------------------------------------------------------------------
1 | $application_1->id,
17 | // 'pull_request_id' => 1
18 | // ]);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/database/init-script.blade.php:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/add-empty.blade.php:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/panel.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{ Illuminate\Mail\Markdown::parse($slot) }}
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/Livewire/SharedVariables/Project/Index.php:
--------------------------------------------------------------------------------
1 | projects = Project::ownedByCurrentTeam()->get();
16 | }
17 |
18 | public function render()
19 | {
20 | return view('livewire.shared-variables.project.index');
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/database/seeders/StandaloneDockerSeeder.php:
--------------------------------------------------------------------------------
1 | 0,
17 | 'name' => 'Standalone Docker 1',
18 | 'network' => 'coolify',
19 | 'server_id' => 0,
20 | ]);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/Livewire/Project/New/EmptyProject.php:
--------------------------------------------------------------------------------
1 | generate_random_name(),
14 | 'team_id' => currentTeam()->id,
15 | ]);
16 |
17 | return redirect()->route('project.show', ['project_uuid' => $project->uuid, 'environment_name' => 'production']);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/Livewire/SharedVariables/Environment/Index.php:
--------------------------------------------------------------------------------
1 | projects = Project::ownedByCurrentTeam()->get();
16 | }
17 |
18 | public function render()
19 | {
20 | return view('livewire.shared-variables.environment.index');
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/resources/views/livewire/server/show.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ data_get_str($server, 'name')->limit(10) }} > Server Configurations | Coolify
4 |
5 |
6 |
7 | @if ($server->isFunctional() && $server->isMetricsEnabled())
8 |
9 |
10 |
11 | @endif
12 |
13 |
14 |
--------------------------------------------------------------------------------
/templates/compose/dashboard.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/phntxx/dashboard?tab=readme-ov-file#dashboard
2 | # slogan: A dashboard, inspired by SUI.
3 | # tags: dashboard, web, search, bookmarks
4 | # port: 8080
5 |
6 | services:
7 | dashboard:
8 | image: phntxx/dashboard:latest
9 | environment:
10 | - SERVICE_FQDN_DASHBOARD_8080
11 | volumes:
12 | - dashboard-data:/app/data
13 | healthcheck:
14 | test: ["CMD", "curl", "-f", "http://127.0.0.1:8080"]
15 | interval: 2s
16 | timeout: 10s
17 | retries: 15
18 |
--------------------------------------------------------------------------------
/app/Livewire/Team/Member/Index.php:
--------------------------------------------------------------------------------
1 | user()->isAdminFromSession()) {
15 | $this->invitations = TeamInvitation::whereTeamId(currentTeam()->id)->get();
16 | }
17 | }
18 |
19 | public function render()
20 | {
21 | return view('livewire.team.member.index');
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/resources/views/components/security/navbar.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
Security
3 |
Security related settings.
4 |
14 |
15 |
--------------------------------------------------------------------------------
/app/Console/Commands/Horizon.php:
--------------------------------------------------------------------------------
1 | info('Horizon is enabled. Starting.');
17 | $this->call('horizon');
18 | exit(0);
19 | } else {
20 | exit(0);
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/Livewire/Storage/Show.php:
--------------------------------------------------------------------------------
1 | storage = S3Storage::ownedByCurrentTeam()->whereUuid(request()->storage_uuid)->first();
15 | if (! $this->storage) {
16 | abort(404);
17 | }
18 | }
19 |
20 | public function render()
21 | {
22 | return view('livewire.storage.show');
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/database/seeders/ServerSeeder.php:
--------------------------------------------------------------------------------
1 | 0,
14 | 'name' => 'localhost',
15 | 'description' => 'This is a test docker container in development mode',
16 | 'ip' => 'coolify-testing-host',
17 | 'team_id' => 0,
18 | 'private_key_id' => 0,
19 | ]);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/phpunit.dusk.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 | ./tests/Browser
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.phpunit.cache
2 | /node_modules
3 | /public/build
4 | /public/hot
5 | /public/storage
6 | /storage/*.key
7 | /vendor
8 | .env
9 | .env.backup
10 | .env.secrets
11 | .phpunit.result.cache
12 | Homestead.json
13 | Homestead.yaml
14 | auth.json
15 | npm-debug.log
16 | yarn-error.log
17 | /.fleet
18 | /.idea
19 | /.vscode
20 | /.npm
21 | /.bash_history
22 | /_data
23 | _testing_hosts/
24 | _volumes/
25 | .lesshst
26 | psysh_history
27 | .psql_history
28 | _ide_helper.php
29 | .gitignore
30 | .phpstorm.meta.php
31 | _ide_helper_models.php
32 | .rnd
33 | /.ssh
34 | scripts/load-test/*
35 |
--------------------------------------------------------------------------------
/app/Http/Middleware/ValidateSignature.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | protected $except = [
15 | // 'fbclid',
16 | // 'utm_campaign',
17 | // 'utm_content',
18 | // 'utm_medium',
19 | // 'utm_source',
20 | // 'utm_term',
21 | ];
22 | }
23 |
--------------------------------------------------------------------------------
/app/Livewire/Team/Storage/Show.php:
--------------------------------------------------------------------------------
1 | storage = S3Storage::ownedByCurrentTeam()->whereUuid(request()->storage_uuid)->first();
15 | if (! $this->storage) {
16 | abort(404);
17 | }
18 | }
19 |
20 | public function render()
21 | {
22 | return view('livewire.storage.show');
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/public/svgs/odoo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/compose/slash.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/yourselfhosted/slash
2 | # slogan: An open source, self-hosted links shortener and sharing platform.
3 | # tags: links, shortener, sharing, url, short, link, sharing
4 | # port: 5231
5 |
6 | services:
7 | slash:
8 | image: yourselfhosted/slash
9 | environment:
10 | - SERVICE_FQDN_SLASH_5231
11 | volumes:
12 | - slash-data:/var/opt/slash
13 | healthcheck:
14 | test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:5231"]
15 | interval: 2s
16 | timeout: 10s
17 | retries: 15
18 |
--------------------------------------------------------------------------------
/app/Listeners/MaintenanceModeEnabledNotification.php:
--------------------------------------------------------------------------------
1 | 'NODE_ENV',
16 | // 'value' => 'production',
17 | // 'is_build_time' => true,
18 | // 'application_id' => 1,
19 | // ]);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/public/svgs/unleash.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/views/auth/verify-email.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Verification Email Sent
5 |
6 | To activate your account, please open the email and follow the
7 | instructions.
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/new/simple-dockerfile.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
Create a new Application
3 |
You can deploy a simple Dockerfile, without Git.
4 |
15 |
16 |
--------------------------------------------------------------------------------
/templates/compose/budge.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/linuxserver/budge
2 | # slogan: A budgeting personal finance app.
3 | # tags: personal finance, budgeting, expense tracking
4 |
5 | services:
6 | budge:
7 | image: lscr.io/linuxserver/budge:latest
8 | environment:
9 | - SERVICE_FQDN_BUDGE
10 | - PUID=1000
11 | - PGID=1000
12 | - TZ=Europe/Madrid
13 | volumes:
14 | - budge-config:/config
15 | healthcheck:
16 | test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
17 | interval: 2s
18 | timeout: 10s
19 | retries: 15
20 |
--------------------------------------------------------------------------------
/app/Console/Commands/Scheduler.php:
--------------------------------------------------------------------------------
1 | info('Scheduler is enabled. Starting.');
17 | $this->call('schedule:work');
18 | exit(0);
19 | } else {
20 | exit(0);
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/examples/traefik-dynamic-catch-all.yaml:
--------------------------------------------------------------------------------
1 | # This is an example dynamic configuration.
2 | http:
3 | routers:
4 | catchall:
5 | entryPoints:
6 | - http
7 | - https
8 | service: noop
9 | rule: HostRegexp(`{catchall:.*}`)
10 | priority: 1
11 | middlewares:
12 | - redirect-regexp
13 | services:
14 | noop:
15 | loadBalancer:
16 | servers:
17 | - url: ''
18 | middlewares:
19 | redirect-regexp:
20 | redirectRegex:
21 | regex: '(.*)'
22 | replacement: 'https://coolify.io'
23 | permanent: false
--------------------------------------------------------------------------------
/templates/compose/wordpress-without-database.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://wordpress.org
2 | # slogan: Wordpress is open source software you can use to create a beautiful website, blog, or app.
3 | # tags: cms, blog, content, management
4 | # logo: svgs/wordpress.svg
5 |
6 | services:
7 | wordpress:
8 | image: wordpress:latest
9 | volumes:
10 | - wordpress-files:/var/www/html
11 | environment:
12 | - SERVICE_FQDN_WORDPRESS
13 | healthcheck:
14 | test: ["CMD", "curl", "-f", "http://127.0.0.1"]
15 | interval: 2s
16 | timeout: 10s
17 | retries: 10
18 |
--------------------------------------------------------------------------------
/templates/compose/whoogle.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/benbusby/whoogle-search?tab=readme-ov-file
2 | # slogan: Whoogle is a self-hosted, privacy-focused search engine front-end for accessing Google search results without tracking and data collection.
3 | # tags: privacy, search engine
4 | # port: 5000
5 |
6 | services:
7 | whoogle:
8 | image: benbusby/whoogle-search:latest
9 | environment:
10 | - SERVICE_FQDN_WHOOGLE_5000
11 | healthcheck:
12 | test: ["CMD", "curl", "-f", "http://127.0.0.1:5000"]
13 | interval: 2s
14 | timeout: 10s
15 | retries: 15
16 |
--------------------------------------------------------------------------------
/resources/views/livewire/dev/s3-test.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
S3 Test
3 |
13 |
Functions
14 |
Get s3:/files
15 |
16 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/database/backup/execution.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ data_get_str($database, 'name')->limit(10) }} > Backup | Coolify
4 |
5 | Backups
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/resources/views/livewire/server/proxy/show.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | Proxy Configuration | Coolify
4 |
5 |
6 | @if ($server->isFunctional())
7 |
13 | @else
14 | Server is not validated. Validate first.
15 | @endif
16 |
17 |
--------------------------------------------------------------------------------
/app/Listeners/ProxyStartedNotification.php:
--------------------------------------------------------------------------------
1 | server = data_get($event, 'data');
17 | $this->server->setupDefault404Redirect();
18 | $this->server->setupDynamicProxyConfiguration();
19 | $this->server->proxy->force_stop = false;
20 | $this->server->save();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/database/seeders/LocalPersistentVolumeSeeder.php:
--------------------------------------------------------------------------------
1 | 'test-pv',
18 | 'mount_path' => '/data',
19 | 'resource_id' => 1,
20 | 'resource_type' => Application::class,
21 | ]);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/templates/compose/homepage.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://gethomepage.dev/latest/
2 | # slogan: A modern, fully static, fast, secure fully proxied, highly customizable application dashboard
3 | # tags: dashboard, homepage
4 | # logo: svgs/homepage.png
5 | # port: 3000
6 |
7 | services:
8 | homepage:
9 | image: ghcr.io/gethomepage/homepage:latest
10 | environment:
11 | - SERVICE_FQDN_HOMEPAGE_3000
12 | - HOMEPAGE_VAR_BASE=${SERVICE_FQDN_HOMEPAGE}
13 | volumes:
14 | - homepage-config:/app/config
15 | - homepage-images:/app/public/images
16 | - /var/run/docker.sock:/var/run/docker.sock
17 |
--------------------------------------------------------------------------------
/app/View/Components/Services/Explanation.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/views/livewire/server/proxy/dynamic-configuration-navbar.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
File: {{ str_replace('|', '.', $fileName) }}
3 |
4 |
5 |
7 |
8 |
9 |
Delete
10 |
11 |
--------------------------------------------------------------------------------
/app/Livewire/LayoutPopups.php:
--------------------------------------------------------------------------------
1 | user()->currentTeam()->id;
12 |
13 | return [
14 | "echo-private:team.{$teamId},TestEvent" => 'testEvent',
15 | ];
16 | }
17 |
18 | public function testEvent()
19 | {
20 | $this->dispatch('success', 'Realtime events configured!');
21 | }
22 |
23 | public function render()
24 | {
25 | return view('livewire.layout-popups');
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/public/svgs/appwrite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/compose/heimdall.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/linuxserver/Heimdall
2 | # slogan: Heimdall is a dashboard for managing and organizing your server applications.
3 | # tags: dashboard, server, applications, interface
4 |
5 | services:
6 | heimdall:
7 | image: lscr.io/linuxserver/heimdall:latest
8 | environment:
9 | - SERVICE_FQDN_HEIMDALL
10 | - PUID=1000
11 | - PGID=1000
12 | - TZ=Europe/Madrid
13 | volumes:
14 | - heimdall-config:/config
15 | healthcheck:
16 | test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
17 | interval: 2s
18 | timeout: 10s
19 | retries: 15
20 |
--------------------------------------------------------------------------------
/templates/compose/grocy.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/grocy/grocy
2 | # slogan: Grocy is a web-based household management and grocery list application.
3 | # tags: groceries, household, management, grocery, shopping
4 | # logo: svgs/grocy.svg
5 |
6 | services:
7 | grocy:
8 | image: lscr.io/linuxserver/grocy:latest
9 | environment:
10 | - SERVICE_FQDN_GROCY
11 | - PUID=1000
12 | - PGID=1000
13 | - TZ=Europe/Madrid
14 | volumes:
15 | - grocy-config:/config
16 | healthcheck:
17 | test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
18 | interval: 2s
19 | timeout: 10s
20 | retries: 15
21 |
--------------------------------------------------------------------------------
/app/Livewire/Project/Shared/ScheduledTask/Executions.php:
--------------------------------------------------------------------------------
1 | selectedKey) {
23 | $this->selectedKey = null;
24 |
25 | return;
26 | }
27 | $this->selectedKey = $key;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/templates/compose/nocodb.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://nocodb.com/
2 | # slogan: NocoDB is an open source Airtable alternative. Turns any MySQL, PostgreSQL, SQL Server, SQLite & MariaDB into a smart-spreadsheet.
3 | # tags: nocodb,airtable,mysql,postgresql,sqlserver,sqlite,mariadb
4 | # logo: svgs/nocodb.svg
5 | # port: 8080
6 |
7 | services:
8 | nocodb:
9 | image: nocodb/nocodb
10 | environment:
11 | - SERVICE_FQDN_NOCODB_8080
12 | volumes:
13 | - nocodb-data:/usr/app/data/
14 | healthcheck:
15 | test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:8080"]
16 | interval: 5s
17 | timeout: 20s
18 | retries: 10
19 |
--------------------------------------------------------------------------------
/app/Models/OauthSetting.php:
--------------------------------------------------------------------------------
1 | empty($value) ? null : Crypt::decryptString($value),
18 | set: fn (?string $value) => empty($value) ? null : Crypt::encryptString($value),
19 | );
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/View/Components/Status/Index.php:
--------------------------------------------------------------------------------
1 | 'Local PostgreSQL',
15 | 'description' => 'Local PostgreSQL for testing',
16 | 'redis_password' => 'redis',
17 | 'environment_id' => 1,
18 | 'destination_id' => 0,
19 | 'destination_type' => StandaloneDocker::class,
20 | ]);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/database/seeders/ServerSettingSeeder.php:
--------------------------------------------------------------------------------
1 | load(['settings']);
16 | $server_2->settings->wildcard_domain = 'http://127.0.0.1.sslip.io';
17 | $server_2->settings->is_build_server = false;
18 | $server_2->settings->is_usable = true;
19 | $server_2->settings->is_reachable = true;
20 | $server_2->settings->save();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/resources/views/livewire/dev/compose.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
Compose
3 |
All kinds of compose files.
4 |
Services
5 | @foreach ($services as $serviceName => $value)
6 |
{{ Str::headline($serviceName) }}
7 | @endforeach
8 |
Base64 En/Decode
9 |
Copy Base64 Compose
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/View/Components/Server/Sidebar.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
19 | })->purpose('Display an inspiring quote');
20 |
--------------------------------------------------------------------------------
/templates/compose/metube.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/alexta69/metube
2 | # slogan: A web GUI for youtube-dl with playlist support. It enables you to effortlessly download videos from YouTube and dozens of other sites.
3 | # tags: youtube, download, videos, playlist
4 | # port: 8081
5 |
6 | services:
7 | metube:
8 | image: ghcr.io/alexta69/metube:latest
9 | environment:
10 | - SERVICE_FQDN_METUBE_8081
11 | - UID=1000
12 | - GID=1000
13 | volumes:
14 | - metube-downloads:/downloads
15 | healthcheck:
16 | test: ["CMD", "curl", "-f", "http://127.0.0.1:8081"]
17 | interval: 2s
18 | timeout: 10s
19 | retries: 15
20 |
--------------------------------------------------------------------------------
/app/Notifications/Channels/DiscordChannel.php:
--------------------------------------------------------------------------------
1 | toDiscord($notifiable);
16 | $webhookUrl = $notifiable->routeNotificationForDiscord();
17 | if (! $webhookUrl) {
18 | return;
19 | }
20 | dispatch(new SendMessageToDiscordJob($message, $webhookUrl));
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_22_071057_add_nixpkgsarchive_to_applications.php:
--------------------------------------------------------------------------------
1 | string('nixpkgsarchive')->nullable();
13 | });
14 | }
15 |
16 | public function down(): void
17 | {
18 | Schema::table('teams', function (Blueprint $table) {
19 | $table->dropColumn('nixpkgsarchive');
20 | });
21 | }
22 | };
23 |
--------------------------------------------------------------------------------
/database/seeders/S3StorageSeeder.php:
--------------------------------------------------------------------------------
1 | 'Local MinIO',
17 | 'description' => 'Local MinIO S3 Storage',
18 | 'key' => 'minioadmin',
19 | 'secret' => 'minioadmin',
20 | 'bucket' => 'local',
21 | 'endpoint' => 'http://coolify-minio:9000',
22 | 'team_id' => 0,
23 | ]);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/templates/compose/classicpress-without-database.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://www.classicpress.net/
2 | # slogan: A lightweight, stable, instantly familiar free open-source content management system, based on WordPress without the block editor (Gutenberg).
3 | # tags: cms, blog, content, management
4 | # logo: svgs/classicpress.svg
5 |
6 | services:
7 | classicpress:
8 | image: classicpress/classicpress:latest
9 | volumes:
10 | - classicpress-files:/var/www/html
11 | environment:
12 | - SERVICE_FQDN_CLASSICPRESS
13 | healthcheck:
14 | test: ["CMD", "curl", "-f", "http://127.0.0.1"]
15 | interval: 2s
16 | timeout: 10s
17 | retries: 10
18 |
--------------------------------------------------------------------------------
/templates/compose/embystat.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/mregni/EmbyStat
2 | # slogan: EmnyStat is a web analytics tool, designed to provide insight into website traffic and user behavior.
3 | # tags: media, server, movies, tv, music
4 | # port: 6555
5 |
6 | services:
7 | embystat:
8 | image: lscr.io/linuxserver/embystat:latest
9 | environment:
10 | - SERVICE_FQDN_EMBYSTAT_6555
11 | - PUID=1000
12 | - PGID=1000
13 | - TZ=Europe/Madrid
14 | volumes:
15 | - embystat-config:/config
16 | healthcheck:
17 | test: ["CMD", "curl", "-f", "http://127.0.0.1:6555"]
18 | interval: 2s
19 | timeout: 10s
20 | retries: 15
21 |
--------------------------------------------------------------------------------
/resources/views/livewire/help.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
Your feedback helps us to improve Coolify. Thank you! 💜
3 |
10 |
11 |
--------------------------------------------------------------------------------
/templates/compose/dokuwiki.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://www.dokuwiki.org/
2 | # slogan: A lightweight and easy-to-use wiki platform for creating and managing documentation and knowledge bases.
3 | # tags: wiki, documentation, knowledge, base
4 | # logo: svgs/dokuwiki.png
5 |
6 | services:
7 | dokuwiki:
8 | image: lscr.io/linuxserver/dokuwiki:latest
9 | environment:
10 | - SERVICE_FQDN_DOKUWIKI
11 | - PUID=1000
12 | - PGID=1000
13 | - TZ=Europe/Madrid
14 | volumes:
15 | - dokuwiki-config:/config
16 | healthcheck:
17 | test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
18 | interval: 2s
19 | timeout: 10s
20 | retries: 15
21 |
--------------------------------------------------------------------------------
/app/Livewire/Subscription/Show.php:
--------------------------------------------------------------------------------
1 | route('dashboard');
13 | }
14 | if (auth()->user()?->isMember()) {
15 | return redirect()->route('dashboard');
16 | }
17 | if (! data_get(currentTeam(), 'subscription')) {
18 | return redirect()->route('subscription.index');
19 | }
20 | }
21 |
22 | public function render()
23 | {
24 | return view('livewire.subscription.show');
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_22_071058_add_nixpkgsarchive_to_applications_remove.php:
--------------------------------------------------------------------------------
1 | dropColumn('nixpkgsarchive');
13 | });
14 | }
15 |
16 | public function down(): void
17 | {
18 | Schema::table('teams', function (Blueprint $table) {
19 | $table->string('nixpkgsarchive')->nullable();
20 | });
21 | }
22 | };
23 |
--------------------------------------------------------------------------------
/database/seeders/StandalonePostgresqlSeeder.php:
--------------------------------------------------------------------------------
1 | 'Local PostgreSQL',
15 | 'description' => 'Local PostgreSQL for testing',
16 | 'postgres_password' => 'postgres',
17 | 'environment_id' => 1,
18 | 'destination_id' => 0,
19 | 'destination_type' => StandaloneDocker::class,
20 | ]);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/resources/views/livewire/server/configure-cloudflare-tunnels.blade.php:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/templates/compose/uptime-kuma.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/louislam/uptime-kuma?tab=readme-ov-file
2 | # slogan: Uptime Kuma is a monitoring tool for tracking the status and performance of your applications in real-time.
3 | # tags: monitoring, status, performance, web, services, applications, real-time
4 | # logo: svgs/uptime-kuma.svg
5 | # port: 3001
6 |
7 | services:
8 | uptime-kuma:
9 | image: louislam/uptime-kuma:1
10 | environment:
11 | - SERVICE_FQDN_UPTIME-KUMA_3001
12 | volumes:
13 | - uptime-kuma:/app/data
14 | healthcheck:
15 | test: ["CMD-SHELL", "extra/healthcheck"]
16 | interval: 2s
17 | timeout: 10s
18 | retries: 15
19 |
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews -Indexes
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Handle Authorization Header
9 | RewriteCond %{HTTP:Authorization} .
10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
11 |
12 | # Redirect Trailing Slashes If Not A Folder...
13 | RewriteCond %{REQUEST_FILENAME} !-d
14 | RewriteCond %{REQUEST_URI} (.+)/$
15 | RewriteRule ^ %1 [L,R=301]
16 |
17 | # Send Requests To Front Controller...
18 | RewriteCond %{REQUEST_FILENAME} !-d
19 | RewriteCond %{REQUEST_FILENAME} !-f
20 | RewriteRule ^ index.php [L]
21 |
22 |
--------------------------------------------------------------------------------
/resources/views/components/status/degraded.blade.php:
--------------------------------------------------------------------------------
1 | @props([
2 | 'status' => 'Degraded',
3 | ])
4 |
5 |
6 |
7 |
8 |
9 | {{ str($status)->before(':')->headline() }}
10 |
11 | @if (!str($status)->startsWith('Proxy') && !str($status)->contains('('))
12 | ({{ str($status)->after(':') }})
13 | @endif
14 |
15 |
16 |
--------------------------------------------------------------------------------
/templates/compose/pairdrop.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://pairdrop.net/
2 | # slogan: Pairdrop is a self-hosted file sharing and collaboration platform, offering secure file sharing and collaboration capabilities for efficient teamwork.
3 | # tags: file, sharing, collaboration, teamwork
4 | # port: 3000
5 |
6 | services:
7 | pairdrop:
8 | image: lscr.io/linuxserver/pairdrop:latest
9 | environment:
10 | - SERVICE_FQDN_PAIRDROP_3000
11 | - PUID=1000
12 | - PGID=1000
13 | - TZ=Europe/Madrid
14 | - DEBUG_MODE=false
15 | healthcheck:
16 | test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
17 | interval: 2s
18 | timeout: 10s
19 | retries: 15
20 |
--------------------------------------------------------------------------------
/templates/compose/rabbitmq.yaml:
--------------------------------------------------------------------------------
1 | # ignore: true
2 | # documentation: https://www.rabbitmq.com/documentation.html
3 | # slogan: With tens of thousands of users, RabbitMQ is one of the most popular open source message brokers.
4 | # tags: message broker, message queue, message-oriented middleware, MOM, AMQP, MQTT, STOMP, messaging
5 |
6 | services:
7 | rabbitmq:
8 | image: rabbitmq:3
9 | environment:
10 | - SERVICE_FQDN_RABBITMQ_5672
11 | - RABBITMQ_DEFAULT_USER=$SERVICE_USER_RABBITMQ
12 | - RABBITMQ_DEFAULT_PASS=$SERVICE_PASSWORD_RABBITMQ
13 | healthcheck:
14 | test: rabbitmq-diagnostics -q ping
15 | interval: 30s
16 | timeout: 30s
17 | retries: 3
18 |
--------------------------------------------------------------------------------
/templates/compose/snapdrop.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/RobinLinus/snapdrop
2 | # slogan: A self-hosted file-sharing service for secure and convenient file transfers, whether on a local network or the internet.
3 | # tags: file, sharing, transfer, local, network, internet
4 |
5 | services:
6 | snapdrop:
7 | image: lscr.io/linuxserver/snapdrop:latest
8 | environment:
9 | - SERVICE_FQDN_SNAPDROP
10 | - PUID=1000
11 | - PGID=1000
12 | - TZ=Europe/Madrid
13 | volumes:
14 | - snapdrop-config:/config
15 | healthcheck:
16 | test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
17 | interval: 2s
18 | timeout: 10s
19 | retries: 15
20 |
--------------------------------------------------------------------------------
/templates/compose/docuseal.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://www.docuseal.co/
2 | # slogan: Document Signing for Everyone free forever for individuals, extensible for businesses and developers. Open Source Alternative to DocuSign, PandaDoc and more.
3 | # tags: documentation
4 | # logo: svgs/docuseal.png
5 | # port: 3000
6 |
7 | services:
8 | docuseal:
9 | image: docuseal/docuseal:latest
10 | environment:
11 | - SERVICE_FQDN_DOCUSEAL_3000
12 | - HOST=${SERVICE_FQDN_DOCUSEAL}
13 | volumes:
14 | - docuseal-data:/data
15 | healthcheck:
16 | test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:3000"]
17 | interval: 5s
18 | timeout: 20s
19 | retries: 10
20 |
--------------------------------------------------------------------------------
/app/Providers/AuthServiceProvider.php:
--------------------------------------------------------------------------------
1 |
14 | */
15 | protected $policies = [
16 | // 'App\Models\Model' => 'App\Policies\ModelPolicy',
17 | ];
18 |
19 | /**
20 | * Register any authentication / authorization services.
21 | */
22 | public function boot(): void
23 | {
24 | //
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/templates/compose/syncthing.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://syncthing.net/
2 | # slogan: Syncthing synchronizes files between two or more computers in real time.
3 | # tags: filestorage, data, synchronization
4 | # logo: svgs/syncthing.svg
5 | # port: 8384
6 |
7 | services:
8 | syncthing:
9 | image: 'lscr.io/linuxserver/syncthing:latest'
10 | environment:
11 | - SERVICE_FQDN_SYNCTHING_8384
12 | - PUID=1000
13 | - PGID=1000
14 | - TZ=Etc/UTC
15 | volumes:
16 | - 'syncthing-config:/config'
17 | - 'syncthing-data1:/data1'
18 | - 'syncthing-data2:/data2'
19 | ports:
20 | - '22000:22000/tcp'
21 | - '22000:22000/udp'
22 | - '21027:21027/udp'
23 |
--------------------------------------------------------------------------------
/resources/views/components/helper.blade.php:
--------------------------------------------------------------------------------
1 | merge(['class' => 'group']) }}>
2 |
3 | @isset($icon)
4 | {{ $icon }}
5 | @else
6 |
7 |
9 |
10 | @endisset
11 |
12 |
13 |
18 |
19 |
--------------------------------------------------------------------------------
/resources/views/components/loading-on-button.blade.php:
--------------------------------------------------------------------------------
1 | @props(['text' => null])
2 |
3 | @if (isset($text))
4 |
{{ $text }}
5 | @endif
6 |
8 |
9 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/templates/compose/statusnook.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://statusnook.com
2 | # slogan: Effortlessly deploy a status page and start monitoring endpoints in minutes
3 | # tags: go,html,monitoring,sqlite,self,hosted,status,page,htmx,smtp,slack
4 | # logo: svgs/statusnook.svg
5 | # port: 8000
6 |
7 | services:
8 | statusnook:
9 | environment:
10 | - SERVICE_FQDN_STATUSNOOK_8000
11 | volumes:
12 | - "statusnook-data:/app/statusnook-data"
13 | image: goksan/statusnook
14 | healthcheck:
15 | test:
16 | - CMD
17 | - wget
18 | - "-q"
19 | - "--spider"
20 | - "http://127.0.0.1:8000"
21 | interval: 2s
22 | timeout: 10s
23 | retries: 15
24 |
--------------------------------------------------------------------------------
/database/seeders/GitSeeder.php:
--------------------------------------------------------------------------------
1 | 'https://api.github.com',
20 | // 'html_url' => 'https://github.com',
21 | // 'is_public' => false,
22 | // 'private_key_id' => $private_key_1->id,
23 | // 'project_id' => $project->id,
24 | // ]);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/Livewire/Project/Index.php:
--------------------------------------------------------------------------------
1 | private_keys = PrivateKey::ownedByCurrentTeam()->get();
21 | $this->projects = Project::ownedByCurrentTeam()->get();
22 | $this->servers = Server::ownedByCurrentTeam()->count();
23 | }
24 |
25 | public function render()
26 | {
27 | return view('livewire.project.index');
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/resources/views/components/loading.blade.php:
--------------------------------------------------------------------------------
1 | @props(['text' => null])
2 |
3 | @if (isset($text))
4 |
{{ $text }}
5 | @endif
6 |
8 |
9 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/resources/views/errors/402.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.base')
2 |
3 |
4 |
5 |
402
6 |
Payment required.
7 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/templates/compose/duplicati.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://duplicati.readthedocs.io
2 | # slogan: Duplicati is a backup solution, allowing you to make scheduled backups with encryption.
3 | # tags: backup, encryption
4 | # logo: svgs/duplicati.webp
5 | # port: 8200
6 |
7 | services:
8 | duplicati:
9 | image: lscr.io/linuxserver/duplicati:latest
10 | environment:
11 | - SERVICE_FQDN_DUPLICATI_8200
12 | - PUID=1000
13 | - PGID=1000
14 | - TZ=Europe/Madrid
15 | volumes:
16 | - duplicati-config:/config
17 | - duplicati-backups:/backups
18 | healthcheck:
19 | test: ["CMD", "curl", "-f", "http://127.0.0.1:8200"]
20 | interval: 2s
21 | timeout: 10s
22 | retries: 15
23 |
--------------------------------------------------------------------------------
/app/Livewire/Server/Create.php:
--------------------------------------------------------------------------------
1 | private_keys = PrivateKey::ownedByCurrentTeam()->get();
18 | if (! isCloud()) {
19 | $this->limit_reached = false;
20 |
21 | return;
22 | }
23 | $this->limit_reached = Team::serverLimitReached();
24 | }
25 |
26 | public function render()
27 | {
28 | return view('livewire.server.create');
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/templates/compose/mediawiki.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://www.mediawiki.org
2 | # slogan: MediaWiki is a collaboration and documentation platform brought to you by a vibrant community.
3 | # tags: wiki, collaboration, documentation
4 | # logo: svgs/mediawiki.ico
5 | # port: 80
6 |
7 | services:
8 | mediawiki:
9 | image: mediawiki:latest
10 | environment:
11 | - SERVICE_FQDN_MEDIAWIKI_80
12 | volumes:
13 | - mediawiki-images:/var/www/html/images
14 | - mediawiki-sqlite:/var/www/html/data
15 | - ./LocalSettings.php:/var/www/html/LocalSettings.php
16 | healthcheck:
17 | test: ["CMD", "curl", "-f", "http://localhost:80"]
18 | interval: 5s
19 | timeout: 20s
20 | retries: 10
21 |
--------------------------------------------------------------------------------
/app/Actions/Shared/PullImage.php:
--------------------------------------------------------------------------------
1 | saveComposeConfigs();
15 |
16 | $commands[] = 'cd '.$resource->workdir();
17 | $commands[] = "echo 'Saved configuration files to {$resource->workdir()}.'";
18 | $commands[] = 'docker compose pull';
19 |
20 | $server = data_get($resource, 'server');
21 |
22 | if (! $server) {
23 | return;
24 | }
25 |
26 | instant_remote_process($commands, $resource->server);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/Console/Commands/CleanupQueue.php:
--------------------------------------------------------------------------------
1 | keys('*:laravel*');
19 | foreach ($keys as $key) {
20 | $keyWithoutPrefix = str_replace($prefix, '', $key);
21 | Redis::connection()->del($keyWithoutPrefix);
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/resources/views/components/page-loading.blade.php:
--------------------------------------------------------------------------------
1 | @props(['text' => "Loading..."])
2 |
3 | @if (isset($text))
4 |
{{ $text }}
5 | @endif
6 |
8 |
9 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/templates/compose/babybuddy.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://docs.baby-buddy.net
2 | # slogan: It helps parents track their baby's daily activities, growth, and health with ease.
3 | # tags: baby, parents, health, growth, activities
4 | # logo: svgs/babybuddy.png
5 |
6 | services:
7 | babybuddy:
8 | image: lscr.io/linuxserver/babybuddy:latest
9 | environment:
10 | - SERVICE_FQDN_BABYBUDDY
11 | - PUID=1000
12 | - PGID=1000
13 | - TZ=Europe/Madrid
14 | - CSRF_TRUSTED_ORIGINS=$SERVICE_FQDN_BABYBUDDY
15 | volumes:
16 | - babybuddy-config:/config
17 | healthcheck:
18 | test: ["CMD", "curl", "-f", "http://127.0.0.1:8000"]
19 | interval: 2s
20 | timeout: 10s
21 | retries: 15
22 |
--------------------------------------------------------------------------------
/app/Livewire/VerifyEmail.php:
--------------------------------------------------------------------------------
1 | rateLimit(1, 300);
16 | auth()->user()->sendVerificationEmail();
17 | $this->dispatch('success', 'Email verification link sent!');
18 |
19 | } catch (\Exception $e) {
20 | ray($e);
21 |
22 | return handleError($e, $this);
23 | }
24 | }
25 |
26 | public function render()
27 | {
28 | return view('livewire.verify-email');
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_11_190528_add_dockerfile_to_applications_table.php:
--------------------------------------------------------------------------------
1 | longText('dockerfile')->nullable();
16 | });
17 | }
18 |
19 | public function down(): void
20 | {
21 | Schema::table('applications', function (Blueprint $table) {
22 | $table->dropColumn('dockerfile');
23 | });
24 | }
25 | };
26 |
--------------------------------------------------------------------------------
/app/Jobs/ServerStorageSaveJob.php:
--------------------------------------------------------------------------------
1 | localFileVolume->saveStorageOnServer();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/bootstrap/helpers/s3.php:
--------------------------------------------------------------------------------
1 | endpoint) {
10 | $is_digital_ocean = Str::contains($s3->endpoint, 'digitaloceanspaces.com');
11 | }
12 | config()->set('filesystems.disks.custom-s3', [
13 | 'driver' => 's3',
14 | 'region' => $s3['region'],
15 | 'key' => $s3['key'],
16 | 'secret' => $s3['secret'],
17 | 'bucket' => $s3['bucket'],
18 | 'endpoint' => $s3['endpoint'],
19 | 'use_path_style_endpoint' => true,
20 | 'bucket_endpoint' => $is_digital_ocean,
21 | 'aws_url' => $s3->awsUrl(),
22 | ]);
23 | }
24 |
--------------------------------------------------------------------------------
/templates/compose/vikunja.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://vikunja.io
2 | # slogan: The open-source, self-hostable to-do app. Organize everything, on all platforms.
3 | # tags: productivity,todo
4 | # logo: svgs/vikunja.svg
5 | # port: 3456
6 |
7 | services:
8 | vikunja:
9 | image: vikunja/vikunja
10 | environment:
11 | - SERVICE_FQDN_VIKUNJA
12 | - VIKUNJA_SERVICE_PUBLICURL=$SERVICE_FQDN_VIKUNJA
13 | - VIKUNJA_SERVICE_JWTSECRET=$SERVICE_PASSWORD_JWTSECRET
14 | - VIKUNJA_SERVICE_ENABLEREGISTRATION=true
15 | volumes:
16 | - vikunja-data:/app/vikunja/
17 | healthcheck:
18 | test: ["CMD", "wget", "--spider", "http://127.0.0.1:3456"]
19 | interval: 5s
20 | timeout: 20s
21 | retries: 10
22 |
--------------------------------------------------------------------------------
/app/View/Components/ResourceView.php:
--------------------------------------------------------------------------------
1 | softDeletes();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('services', function (Blueprint $table) {
25 | $table->dropSoftDeletes();
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/templates/compose/n8n.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://n8n.io
2 | # slogan: n8n is an extendable workflow automation tool.
3 | # tags: n8n,workflow,automation,open,source,low,code
4 | # logo: svgs/n8n.png
5 | # port: 5678
6 |
7 | services:
8 | n8n:
9 | image: docker.n8n.io/n8nio/n8n
10 | environment:
11 | - SERVICE_FQDN_N8N_5678
12 | - N8N_EDITOR_BASE_URL=${SERVICE_FQDN_N8N}
13 | - WEBHOOK_URL=${SERVICE_FQDN_N8N}
14 | - N8N_HOST=${SERVICE_URL_N8N}
15 | - GENERIC_TIMEZONE=Europe/Berlin
16 | - TZ=Europe/Berlin
17 | volumes:
18 | - n8n-data:/home/node/.n8n
19 | healthcheck:
20 | test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:5678/"]
21 | interval: 5s
22 | timeout: 20s
23 | retries: 10
24 |
--------------------------------------------------------------------------------
/public/svgs/openblocks.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/tests/Browser/Pages/HomePage.php:
--------------------------------------------------------------------------------
1 |
29 | */
30 | public function elements(): array
31 | {
32 | return [
33 | '@element' => '#selector',
34 | ];
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/database/migrations/2023_03_28_062150_create_kubernetes_table.php:
--------------------------------------------------------------------------------
1 | id();
16 | $table->string('uuid')->unique();
17 |
18 | $table->timestamps();
19 | });
20 | }
21 |
22 | /**
23 | * Reverse the migrations.
24 | */
25 | public function down(): void
26 | {
27 | Schema::dropIfExists('kubernetes');
28 | }
29 | };
30 |
--------------------------------------------------------------------------------
/public/svgs/git.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/templates/compose/appsmith.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://appsmith.com
2 | # slogan: A low-code application platform for building internal tools.
3 | # tags: lowcode,nocode,no,low,platform
4 | # logo: svgs/appsmith.svg
5 |
6 | services:
7 | appsmith:
8 | image: index.docker.io/appsmith/appsmith-ce:latest
9 | environment:
10 | - SERVICE_FQDN_APPSMITH
11 | - APPSMITH_MAIL_ENABLED=false
12 | - APPSMITH_DISABLE_TELEMETRY=true
13 | - APPSMITH_DISABLE_INTERCOM=true
14 | - APPSMITH_SENTRY_DSN=
15 | - APPSMITH_SMART_LOOK_ID=
16 | volumes:
17 | - stacks-data:/appsmith-stacks
18 | healthcheck:
19 | test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
20 | interval: 5s
21 | timeout: 20s
22 | retries: 10
23 |
--------------------------------------------------------------------------------
/app/View/Components/Forms/Button.php:
--------------------------------------------------------------------------------
1 | noStyle) {
21 | $this->defaultClass = '';
22 | }
23 | }
24 |
25 | public function render(): View|Closure|string
26 | {
27 | return view('components.forms.button');
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/Events/TestEvent.php:
--------------------------------------------------------------------------------
1 | teamId = auth()->user()->currentTeam()->id;
20 | }
21 |
22 | public function broadcastOn(): array
23 | {
24 | return [
25 | new PrivateChannel("team.{$this->teamId}"),
26 | ];
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/templates/compose/emby.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://emby.media/support/articles/Home.html
2 | # slogan: A media server software that allows you to organize, stream, and access your multimedia content effortlessly.
3 | # tags: media, server, movies, tv, music
4 | # logo: svgs/emby.png
5 | # port: 8096
6 |
7 | services:
8 | emby:
9 | image: lscr.io/linuxserver/emby:latest
10 | environment:
11 | - SERVICE_FQDN_EMBY_8096
12 | - PUID=1000
13 | - PGID=1000
14 | - TZ=Europe/Madrid
15 | volumes:
16 | - emby-config:/config
17 | - emby-tvshows:/tvshows
18 | - emby-movies:/movies
19 | healthcheck:
20 | test: ["CMD", "curl", "-f", "http://127.0.0.1:8096"]
21 | interval: 2s
22 | timeout: 10s
23 | retries: 15
24 |
--------------------------------------------------------------------------------
/templates/compose/grafana.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://grafana.com
2 | # slogan: Grafana is the open source analytics & monitoring solution for every database.
3 | # tags: grafana,analytics,monitoring,dashboard
4 | # logo: svgs/grafana.svg
5 | # port: 3000
6 |
7 | services:
8 | grafana:
9 | image: grafana/grafana-oss
10 | environment:
11 | - SERVICE_FQDN_GRAFANA_3000
12 | - GF_SERVER_ROOT_URL=${SERVICE_FQDN_GRAFANA}
13 | - GF_SERVER_DOMAIN=${SERVICE_FQDN_GRAFANA}
14 | - GF_SECURITY_ADMIN_PASSWORD=${SERVICE_PASSWORD_GRAFANA}
15 | volumes:
16 | - grafana-data:/var/lib/grafana
17 | healthcheck:
18 | test: ["CMD", "curl", "-f", "http://127.0.0.1:3000/api/health"]
19 | interval: 5s
20 | timeout: 20s
21 | retries: 10
22 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_22_071048_add_boarding_to_teams.php:
--------------------------------------------------------------------------------
1 | boolean('show_boarding')->default(false);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('teams', function (Blueprint $table) {
25 | $table->dropColumn('show_boarding');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/resources/views/errors/503.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.base')
2 |
3 |
4 |
503
5 |
We are working on serious things.
6 |
Service Unavailable. Be right back. Thanks for your
7 | patience.
8 |
9 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/database/create-scheduled-backup.blade.php:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/templates/compose/gitea.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://docs.gitea.com
2 | # slogan: Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting.
3 | # tags: version control, collaboration, code, hosting, lightweight
4 | # logo: svgs/gitea.svg
5 |
6 | services:
7 | gitea:
8 | image: gitea/gitea:latest
9 | environment:
10 | - SERVICE_FQDN_GITEA_3000
11 | - USER_UID=1000
12 | - USER_GID=1000
13 | ports:
14 | - 22222:22
15 | volumes:
16 | - gitea-data:/data
17 | - gitea-timezone:/etc/timezone:ro
18 | - gitea-localtime:/etc/localtime:ro
19 | healthcheck:
20 | test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
21 | interval: 2s
22 | timeout: 10s
23 | retries: 15
24 |
--------------------------------------------------------------------------------
/templates/compose/nextcloud.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://docs.nextcloud.com
2 | # slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management.
3 | # tags: cloud, collaboration, communication, filestorage, data
4 | # logo: svgs/nextcloud.svg
5 |
6 | services:
7 | nextcloud:
8 | image: lscr.io/linuxserver/nextcloud:latest
9 | environment:
10 | - SERVICE_FQDN_NEXTCLOUD
11 | - PUID=1000
12 | - PGID=1000
13 | - TZ=Europe/Madrid
14 | volumes:
15 | - nextcloud-config:/config
16 | - nextcloud-data:/data
17 | healthcheck:
18 | test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
19 | interval: 2s
20 | timeout: 10s
21 | retries: 15
22 |
--------------------------------------------------------------------------------
/templates/compose/stirling-pdf.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://github.com/Stirling-Tools/Stirling-PDF
2 | # slogan: Stirling is a powerful web based PDF manipulation tool
3 | # tags: pdf, manipulation, web, tool
4 | # logo: svgs/stirling.png
5 | # port: 8080
6 |
7 | services:
8 | stirling-pdf:
9 | image: frooodle/s-pdf:latest
10 | volumes:
11 | - stirling-training-data:/usr/share/tesseract-ocr/5/tessdata
12 | - stirling-configs:/configs
13 | - stirling-custom-files:/customFiles/
14 | - stirling-logs:/logs/
15 | environment:
16 | - SERVICE_FQDN_SPDF_8080
17 | - DOCKER_ENABLE_SECURITY=false
18 | healthcheck:
19 | test: 'curl --fail -I http://127.0.0.1:8080 || exit 1'
20 | interval: 5s
21 | timeout: 20s
22 | retries: 10
23 |
--------------------------------------------------------------------------------
/app/Models/ScheduledTask.php:
--------------------------------------------------------------------------------
1 | belongsTo(Service::class);
15 | }
16 |
17 | public function application()
18 | {
19 | return $this->belongsTo(Application::class);
20 | }
21 |
22 | public function latest_log(): HasOne
23 | {
24 | return $this->hasOne(ScheduledTaskExecution::class)->latest();
25 | }
26 |
27 | public function executions(): HasMany
28 | {
29 | return $this->hasMany(ScheduledTaskExecution::class);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/database/migrations/2023_09_23_111816_add_destination_to_services_table.php:
--------------------------------------------------------------------------------
1 | nullableMorphs('destination');
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('services', function (Blueprint $table) {
25 | $table->dropMorphs('destination');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2023_12_19_124111_add_swarm_cluster_grouping.php:
--------------------------------------------------------------------------------
1 | integer('swarm_cluster')->nullable();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('servers', function (Blueprint $table) {
25 | $table->dropColumn('swarm_cluster');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_04_16_083919_add_service_type_on_creation.php:
--------------------------------------------------------------------------------
1 | string('service_type')->nullable();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('services', function (Blueprint $table) {
25 | $table->dropColumn('service_type');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/shared/storages/all.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | @foreach ($resource->persistentStorages as $storage)
4 | @if ($resource->type() === 'service')
5 |
7 | @else
8 |
11 | @endif
12 | @endforeach
13 |
14 |
15 |
--------------------------------------------------------------------------------
/templates/compose/phpmyadmin.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://phpmyadmin.net
2 | # slogan: phpMyAdmin is a web-based database management tool for administering your MySQL and MariaDB databases through a user-friendly interface.
3 | # tags: database management
4 | # logo: svgs/phpmyadmin.svg
5 |
6 | services:
7 | phpmyadmin:
8 | image: lscr.io/linuxserver/phpmyadmin:latest
9 | environment:
10 | - SERVICE_FQDN_PHPMYADMIN
11 | - PUID=1000
12 | - PGID=1000
13 | - TZ=Europe/Madrid
14 | - PMA_ARBITRARY=1
15 | - PMA_ABSOLUTE_URI=$SERVICE_FQDN_PHPMYADMIN
16 | volumes:
17 | - phpmyadmin-config:/config
18 | healthcheck:
19 | test: ["CMD", "curl", "-f", "http://127.0.0.1:80"]
20 | interval: 2s
21 | timeout: 10s
22 | retries: 15
23 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_15_111125_update_users_table.php:
--------------------------------------------------------------------------------
1 | boolean('force_password_reset')->default(false);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('users', function (Blueprint $table) {
25 | $table->dropColumn('force_password_reset');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2023_09_23_111813_update_users_databases_table.php:
--------------------------------------------------------------------------------
1 | boolean('marketing_emails')->default(true);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('users', function (Blueprint $table) {
25 | $table->dropColumn('marketing_emails');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_03_28_114620_add_watch_paths_to_apps.php:
--------------------------------------------------------------------------------
1 | longText('watch_paths')->nullable();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('applications', function (Blueprint $table) {
25 | $table->dropColumn('watch_paths');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_05_07_124019_add_server_metrics.php:
--------------------------------------------------------------------------------
1 | boolean('is_metrics_enabled')->default(true);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('servers', function (Blueprint $table) {
25 | $table->dropColumn('is_metrics_enabled');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/seeders/UserSeeder.php:
--------------------------------------------------------------------------------
1 | create([
13 | 'id' => 0,
14 | 'name' => 'Root User',
15 | 'email' => 'test@example.com',
16 | ]);
17 | User::factory()->create([
18 | 'id' => 1,
19 | 'name' => 'Normal User (but in root team)',
20 | 'email' => 'test2@example.com',
21 | ]);
22 | User::factory()->create([
23 | 'id' => 2,
24 | 'name' => 'Normal User (not in root team)',
25 | 'email' => 'test3@example.com',
26 | ]);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/templates/compose/meilisearch.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://www.meilisearch.com
2 | # slogan: MeiliSearch is a powerful, fast, easy to use and deploy search engine.
3 | # tags: search,engine,fulltext,full,text,meilisearch
4 | # logo: svgs/meilisearch.svg
5 | # port: 7700
6 |
7 | services:
8 | meilisearch:
9 | image: getmeili/meilisearch:latest
10 | environment:
11 | - SERVICE_FQDN_MEILISEARCH_7700
12 | - MEILI_NO_ANALYTICS=${MEILI_NO_ANALYTICS:-true}
13 | - MEILI_ENV=${MEILI_ENV:-production}
14 | - MEILI_MASTER_KEY=${SERVICE_PASSWORD_MEILISEARCH}
15 | volumes:
16 | - meilisearch-data:/meili_data
17 | healthcheck:
18 | test: ["CMD", "curl", "-f", "http://127.0.0.1:7700/health"]
19 | interval: 2s
20 | timeout: 10s
21 | retries: 15
22 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrustProxies.php:
--------------------------------------------------------------------------------
1 | |string|null
14 | */
15 | protected $proxies = '*';
16 |
17 | /**
18 | * The headers that should be used to detect proxies.
19 | *
20 | * @var int
21 | */
22 | protected $headers =
23 | Request::HEADER_X_FORWARDED_FOR |
24 | Request::HEADER_X_FORWARDED_HOST |
25 | Request::HEADER_X_FORWARDED_PORT |
26 | Request::HEADER_X_FORWARDED_PROTO |
27 | Request::HEADER_X_FORWARDED_AWS_ELB;
28 | }
29 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_22_071060_change_invitation_link_length.php:
--------------------------------------------------------------------------------
1 | text('link')->change();
16 |
17 | });
18 | }
19 |
20 | /**
21 | * Reverse the migrations.
22 | */
23 | public function down(): void
24 | {
25 | Schema::table('team_invitations', function (Blueprint $table) {
26 | $table->string('link')->change();
27 | });
28 | }
29 | };
30 |
--------------------------------------------------------------------------------
/database/migrations/2023_10_08_111819_add_server_unreachable_count.php:
--------------------------------------------------------------------------------
1 | integer('unreachable_count')->default(0);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('servers', function (Blueprint $table) {
25 | $table->dropColumn('unreachable_count');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2023_12_30_134507_add_description_to_environments.php:
--------------------------------------------------------------------------------
1 | string('description')->nullable();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('environments', function (Blueprint $table) {
25 | $table->dropColumn('description');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_03_08_180457_nullable_password.php:
--------------------------------------------------------------------------------
1 | string('password')->nullable()->change();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('users', function (Blueprint $table) {
25 | $table->string('password')->nullable(false)->change();
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "type": "module",
4 | "scripts": {
5 | "dev": "vite",
6 | "build": "vite build"
7 | },
8 | "devDependencies": {
9 | "@vitejs/plugin-vue": "4.5.1",
10 | "autoprefixer": "10.4.19",
11 | "axios": "1.7.2",
12 | "laravel-echo": "1.16.1",
13 | "laravel-vite-plugin": "0.8.1",
14 | "postcss": "8.4.38",
15 | "pusher-js": "8.4.0-rc2",
16 | "tailwindcss": "3.4.4",
17 | "vite": "4.5.3",
18 | "vue": "3.4.29"
19 | },
20 | "dependencies": {
21 | "@tailwindcss/forms": "0.5.7",
22 | "@tailwindcss/typography": "0.5.13",
23 | "alpinejs": "3.14.0",
24 | "ioredis": "5.4.1",
25 | "tailwindcss-scrollbar": "0.1.0"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/html/message.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {{-- Header --}}
3 |
4 |
5 | {{ config('app.name') }}
6 |
7 |
8 |
9 | {{-- Body --}}
10 | {{ $slot }}
11 |
12 | {{-- Subcopy --}}
13 | @isset($subcopy)
14 |
15 |
16 | {{ $subcopy }}
17 |
18 |
19 | @endisset
20 |
21 | {{-- Footer --}}
22 |
23 |
24 | © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/resources/views/vendor/mail/text/message.blade.php:
--------------------------------------------------------------------------------
1 |
2 | {{-- Header --}}
3 |
4 |
5 | {{ config('app.name') }}
6 |
7 |
8 |
9 | {{-- Body --}}
10 | {{ $slot }}
11 |
12 | {{-- Subcopy --}}
13 | @isset($subcopy)
14 |
15 |
16 | {{ $subcopy }}
17 |
18 |
19 | @endisset
20 |
21 | {{-- Footer --}}
22 |
23 |
24 | © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/database/migrations/2023_06_23_110548_next_channel_updates.php:
--------------------------------------------------------------------------------
1 | boolean('next_channel')->default(false);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('instance_settings', function (Blueprint $table) {
25 | $table->dropColumn('next_channel');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2023_10_18_072519_add_custom_labels_applications_table.php:
--------------------------------------------------------------------------------
1 | text('custom_labels')->nullable();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('applications', function (Blueprint $table) {
25 | $table->dropColumn('custom_labels');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_06_142951_add_description_field_to_applications_table.php:
--------------------------------------------------------------------------------
1 | string('description')->nullable();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('applications', function (Blueprint $table) {
25 | $table->dropColumn('description');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_05_10_085215_make_stripe_comment_longer.php:
--------------------------------------------------------------------------------
1 | longText('stripe_comment')->change();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('subscriptions', function (Blueprint $table) {
25 | $table->string('stripe_comment')->change();
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/app/Models/TeamInvitation.php:
--------------------------------------------------------------------------------
1 | belongsTo(Team::class);
21 | }
22 |
23 | public function isValid()
24 | {
25 | $createdAt = $this->created_at;
26 | $diff = $createdAt->diffInMinutes(now());
27 | if ($diff <= config('constants.invitation.link.expiration')) {
28 | return true;
29 | } else {
30 | $this->delete();
31 |
32 | return false;
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/database/migrations/2023_08_15_111126_update_servers_add_unreachable_count_table.php:
--------------------------------------------------------------------------------
1 | integer('unreachable_count')->default(0);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('servers', function (Blueprint $table) {
25 | $table->dropColumn('unreachable_count');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_01_29_072322_change_env_variable_length.php:
--------------------------------------------------------------------------------
1 | text('value')->change();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('shared_environment_variables', function (Blueprint $table) {
25 | $table->string('value')->change();
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_02_23_143119_add_custom_server_limits_to_teams_ultimate.php:
--------------------------------------------------------------------------------
1 | integer('custom_server_limit')->nullable();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('teams', function (Blueprint $table) {
25 | $table->dropColumn('custom_server_limit');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_02_25_222150_add_server_force_disabled_field.php:
--------------------------------------------------------------------------------
1 | boolean('force_disabled')->default(false);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('server_settings', function (Blueprint $table) {
25 | $table->dropColumn('force_disabled');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/public/svgs/chatwoot.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/database/backup/index.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ data_get_str($database, 'name')->limit(10) }} > Backups | Coolify
4 |
5 | Backups
6 |
7 |
8 |
9 |
10 |
Scheduled Backups
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/View/Components/Status/Services.php:
--------------------------------------------------------------------------------
1 | complexStatus = $service->status();
21 | }
22 |
23 | /**
24 | * Get the view / contents that represent the component.
25 | */
26 | public function render(): View|Closure|string
27 | {
28 | return view('components.status.services');
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/database/migrations/2023_09_23_111814_update_local_file_volumes_table.php:
--------------------------------------------------------------------------------
1 | boolean('is_directory')->default(false);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('local_file_volumes', function (Blueprint $table) {
25 | $table->dropColumn('is_directory');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2023_11_07_123731_add_target_build_dockerfile.php:
--------------------------------------------------------------------------------
1 | string('dockerfile_target_build')->nullable();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('applications', function (Blueprint $table) {
25 | $table->dropColumn('dockerfile_target_build');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_01_25_073212_add_server_id_to_queues.php:
--------------------------------------------------------------------------------
1 | integer('server_id')->nullable();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('application_deployment_queues', function (Blueprint $table) {
25 | $table->dropColumn('server_id');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_02_08_112304_add_dynamic_timeout_for_deployments.php:
--------------------------------------------------------------------------------
1 | integer('dynamic_timeout')->default(3600);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('server_settings', function (Blueprint $table) {
25 | $table->dropColumn('dynamic_timeout');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_04_17_132541_add_rollback_queues.php:
--------------------------------------------------------------------------------
1 | boolean('rollback')->default(false);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('application_deployment_queues', function (Blueprint $table) {
25 | $table->dropColumn('rollback');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_06_20_102551_add_server_api_sentinel.php:
--------------------------------------------------------------------------------
1 | boolean('is_server_api_enabled')->default(false);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('server_settings', function (Blueprint $table) {
25 | $table->dropColumn('is_server_api_enabled');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2024_06_21_143358_add_api_deployment_type.php:
--------------------------------------------------------------------------------
1 | boolean('is_api')->default(false);
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('application_deployment_queues', function (Blueprint $table) {
25 | $table->dropColumn('is_api');
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/resources/views/livewire/project/service/edit-domain.blade.php:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/templates/compose/jellyfin.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://jellyfin.org
2 | # slogan: Jellyfin is a media server for hosting and streaming your media collection.
3 | # tags: media, server, movies, tv, music
4 | # logo: svgs/jellyfin.svg
5 | # port: 8096
6 |
7 | services:
8 | jellyfin:
9 | image: lscr.io/linuxserver/jellyfin:latest
10 | environment:
11 | - SERVICE_FQDN_JELLYFIN_8096
12 | - PUID=1000
13 | - PGID=1000
14 | - TZ=Europe/Madrid
15 | - JELLYFIN_PublishedServerUrl=$SERVICE_FQDN_JELLYFIN
16 | volumes:
17 | - jellyfin-config:/config
18 | - jellyfin-tvshows:/data/tvshows
19 | - jellyfin-movies:/data/movies
20 | healthcheck:
21 | test: ["CMD", "curl", "-f", "http://127.0.0.1:8096"]
22 | interval: 2s
23 | timeout: 10s
24 | retries: 15
25 |
--------------------------------------------------------------------------------
/templates/compose/openblocks.yaml:
--------------------------------------------------------------------------------
1 | # documentation: https://openblocks.dev
2 | # slogan: OpenBlocks is a self-hosted, open-source, low-code platform for building internal tools.
3 | # tags: openblocks,low,code,platform,open,source,low,code
4 | # logo: svgs/openblocks.svg
5 | # port: 3000
6 |
7 | services:
8 | openblocks:
9 | image: openblocksdev/openblocks-ce
10 | environment:
11 | - SERVICE_FQDN_OPENBLOCKS_3000
12 | - ENABLE_USER_SIGN_UP=${ENABLE_USER_SIGN_UP:-true}
13 | - ENCRYPTION_PASSWORD=$SERVICE_PASSWORD_ENCRYPTION
14 | - ENCRYPTION_SALT=$SERVICE_PASSWORD_SALT
15 | volumes:
16 | - openblocks-data:/openblocks-stacks
17 | healthcheck:
18 | test: ["CMD", "curl", "-f", "http://127.0.0.1:3000/health"]
19 | interval: 5s
20 | timeout: 20s
21 | retries: 10
22 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php:
--------------------------------------------------------------------------------
1 | string('email')->primary();
16 | $table->string('token');
17 | $table->timestamp('created_at')->nullable();
18 | });
19 | }
20 |
21 | /**
22 | * Reverse the migrations.
23 | */
24 | public function down(): void
25 | {
26 | Schema::dropIfExists('password_reset_tokens');
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2023_06_23_114131_change_env_var_value_length.php:
--------------------------------------------------------------------------------
1 | text('value')->nullable()->change();
16 | });
17 | }
18 |
19 | /**
20 | * Reverse the migrations.
21 | */
22 | public function down(): void
23 | {
24 | Schema::table('environment_variables', function (Blueprint $table) {
25 | $table->string('value')->nullable()->change();
26 | });
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/database/migrations/2023_09_20_083549_update_environment_variables_table.php:
--------------------------------------------------------------------------------
1 | foreignId('service_id')->nullable();
16 |
17 | });
18 | }
19 |
20 | /**
21 | * Reverse the migrations.
22 | */
23 | public function down(): void
24 | {
25 | Schema::table('environment_variables', function (Blueprint $table) {
26 | $table->dropColumn('service_id');
27 | });
28 | }
29 | };
30 |
--------------------------------------------------------------------------------