Merge pull request #4238 from peaklabs-dev/dep-and-remove-unused-stuff
Chore: Remove unused stuff, update dependecies
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -35,3 +35,4 @@ scripts/load-test/*
|
|||||||
.ignition.json
|
.ignition.json
|
||||||
.env.dusk.local
|
.env.dusk.local
|
||||||
docker/coolify-realtime/node_modules
|
docker/coolify-realtime/node_modules
|
||||||
|
.DS_Store
|
||||||
|
65
.gitpod.yml
65
.gitpod.yml
@@ -1,65 +0,0 @@
|
|||||||
tasks:
|
|
||||||
- name: Setup Spin environment and Composer dependencies
|
|
||||||
# Fix because of https://github.com/gitpod-io/gitpod/issues/16614
|
|
||||||
before: sudo curl -o /usr/local/bin/docker-compose -fsSL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-$(uname -m)
|
|
||||||
init: |
|
|
||||||
cp .env.development.example .env &&
|
|
||||||
sed -i "s#APP_URL=http://localhost#APP_URL=$(gp url 8000)#g" .env
|
|
||||||
sed -i "s#USERID=#USERID=33333#g" .env
|
|
||||||
sed -i "s#GROUPID=#GROUPID=33333#g" .env
|
|
||||||
composer install --ignore-platform-reqs
|
|
||||||
./vendor/bin/spin up -d
|
|
||||||
./vendor/bin/spin exec -u webuser coolify php artisan key:generate
|
|
||||||
./vendor/bin/spin exec -u webuser coolify php artisan storage:link
|
|
||||||
./vendor/bin/spin exec -u webuser coolify php artisan migrate:fresh --seed
|
|
||||||
cat .coolify-logo
|
|
||||||
gp sync-done spin-is-ready
|
|
||||||
|
|
||||||
- name: Install Node dependencies and run Vite
|
|
||||||
command: |
|
|
||||||
echo "Waiting for Sail environment to boot up."
|
|
||||||
gp sync-await spin-is-ready
|
|
||||||
./vendor/bin/spin exec vite npm install
|
|
||||||
./vendor/bin/spin exec vite npm run dev -- --host
|
|
||||||
|
|
||||||
- name: Laravel Queue Worker, listening to code changes
|
|
||||||
command: |
|
|
||||||
echo "Waiting for Sail environment to boot up."
|
|
||||||
gp sync-await spin-is-ready
|
|
||||||
./vendor/bin/spin exec -u webuser coolify php artisan queue:listen
|
|
||||||
|
|
||||||
ports:
|
|
||||||
- port: 5432
|
|
||||||
onOpen: ignore
|
|
||||||
name: PostgreSQL
|
|
||||||
visibility: public
|
|
||||||
- port: 5173
|
|
||||||
onOpen: ignore
|
|
||||||
visibility: public
|
|
||||||
name: Node Server for Vite
|
|
||||||
- port: 8000
|
|
||||||
onOpen: ignore
|
|
||||||
visibility: public
|
|
||||||
name: Coolify
|
|
||||||
|
|
||||||
# Configure vscode
|
|
||||||
vscode:
|
|
||||||
extensions:
|
|
||||||
- bmewburn.vscode-intelephense-client
|
|
||||||
- ikappas.composer
|
|
||||||
- ms-azuretools.vscode-docker
|
|
||||||
- ecmel.vscode-html-css
|
|
||||||
- MehediDracula.php-namespace-resolver
|
|
||||||
- wmaurer.change-case
|
|
||||||
- Equinusocio.vsc-community-material-theme
|
|
||||||
- EditorConfig.EditorConfig
|
|
||||||
- streetsidesoftware.code-spell-checker
|
|
||||||
- rangav.vscode-thunder-client
|
|
||||||
- PKief.material-icon-theme
|
|
||||||
- cierra.livewire-vscode
|
|
||||||
- lennardv.livewire-goto-updated
|
|
||||||
- bradlc.vscode-tailwindcss
|
|
||||||
- heybourn.headwind
|
|
||||||
- adrianwilczynski.alpine-js-intellisense
|
|
||||||
- amiralizadeh9480.laravel-extra-intellisense
|
|
||||||
- shufo.vscode-blade-formatter
|
|
11
README.md
11
README.md
@@ -22,6 +22,9 @@ curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
|
|||||||
```
|
```
|
||||||
You can find the installation script source [here](./scripts/install.sh).
|
You can find the installation script source [here](./scripts/install.sh).
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Please refer to the [docs](https://coolify.io/docs/installation) for more information about the installation.
|
||||||
|
|
||||||
# Support
|
# Support
|
||||||
|
|
||||||
Contact us at [coolify.io/docs/contact](https://coolify.io/docs/contact).
|
Contact us at [coolify.io/docs/contact](https://coolify.io/docs/contact).
|
||||||
@@ -121,7 +124,6 @@ By subscribing to the cloud version, you get the Coolify server for the same pri
|
|||||||
- Better support
|
- Better support
|
||||||
- Less maintenance for you
|
- Less maintenance for you
|
||||||
|
|
||||||
|
|
||||||
# Recognitions
|
# Recognitions
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -138,6 +140,13 @@ By subscribing to the cloud version, you get the Coolify server for the same pri
|
|||||||
|
|
||||||
<a href="https://trendshift.io/repositories/634" target="_blank"><img src="https://trendshift.io/api/badge/repositories/634" alt="coollabsio%2Fcoolify | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
<a href="https://trendshift.io/repositories/634" target="_blank"><img src="https://trendshift.io/api/badge/repositories/634" alt="coollabsio%2Fcoolify | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
||||||
|
|
||||||
|
# Core Maintainers
|
||||||
|
|
||||||
|
| Andras Bacsai | Peak |
|
||||||
|
|------------|------------|
|
||||||
|
| <img src="https://github.com/andrasbacsai.png" width="200px" alt="Andras Bacsai" /> | <img src="https://github.com/peaklabs-dev.png" width="200px" alt="Peak Labs" /> |
|
||||||
|
| <a href="https://x.com/heyandras"><img src="https://raw.githubusercontent.com/gauravghongde/social-icons/master/SVG/Color/Twitter.svg" width="25px"></a> <a href="https://github.com/andrasbacsai"><img src="https://raw.githubusercontent.com/gauravghongde/social-icons/master/SVG/Color/Github.svg" width="25px"></a> | <a href="https://x.com/peaklabs_dev"><img src="https://raw.githubusercontent.com/gauravghongde/social-icons/master/SVG/Color/Twitter.svg" width="25px"></a> <a href="https://github.com/peaklabs-dev"><img src="https://raw.githubusercontent.com/gauravghongde/social-icons/master/SVG/Color/Github.svg" width="25px"></a> |
|
||||||
|
|
||||||
# Repo Activity
|
# Repo Activity
|
||||||
|
|
||||||

|

|
||||||
|
29
RELEASE.md
29
RELEASE.md
@@ -1,6 +1,6 @@
|
|||||||
# Coolify Release Guide
|
# Coolify Release Guide
|
||||||
|
|
||||||
This guide outlines the release process for Coolify, intended for developers and those interested in understanding how releases are managed and deployed.
|
This guide outlines the release process for Coolify, intended for developers and those interested in understanding how Coolify releases are managed and deployed.
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
- [Release Process](#release-process)
|
- [Release Process](#release-process)
|
||||||
@@ -19,19 +19,19 @@ This guide outlines the release process for Coolify, intended for developers and
|
|||||||
- Improvements, fixes, and new features are developed on the `next` branch or separate feature branches.
|
- Improvements, fixes, and new features are developed on the `next` branch or separate feature branches.
|
||||||
|
|
||||||
2. **Merging to `main`**
|
2. **Merging to `main`**
|
||||||
- Once ready, changes are merged from the `next` branch into the `main` branch.
|
- Once ready, changes are merged from the `next` branch into the `main` branch (via a pull request).
|
||||||
|
|
||||||
3. **Building the Release**
|
3. **Building the Release**
|
||||||
- After merging to `main`, GitHub Actions automatically builds release images for all architectures and pushes them to the GitHub Container Registry with the version tag and the `latest` tag.
|
- After merging to `main`, GitHub Actions automatically builds release images for all architectures and pushes them to the GitHub Container Registry and Docker Hub with the specific version tag and the `latest` tag.
|
||||||
|
|
||||||
4. **Creating a GitHub Release**
|
4. **Creating a GitHub Release**
|
||||||
- A new GitHub release is manually created with details of the changes made in the version.
|
- A new GitHub release is manually created with details of the changes made in the version.
|
||||||
|
|
||||||
5. **Updating the CDN**
|
5. **Updating the CDN**
|
||||||
- To make a new version publicly available, the version information on the CDN needs to be updated: [https://cdn.coollabs.io/coolify/versions.json](https://cdn.coollabs.io/coolify/versions.json)
|
- To make a new version publicly available, the version information on the CDN needs to be updated manually. After that the new version number will be available at [https://cdn.coollabs.io/coolify/versions.json](https://cdn.coollabs.io/coolify/versions.json).
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> The CDN update may not occur immediately after the GitHub release. It can take hours or even days due to additional testing, stability checks, or potential hotfixes. **The update becomes available only after the CDN is updated.**
|
> The CDN update may not occur immediately after the GitHub release. It can take hours or even days due to additional testing, stability checks, or potential hotfixes. **The update becomes available only after the CDN is updated. After the CDN is updated, a discord announcement will be made in the Production Release channel.**
|
||||||
|
|
||||||
## Version Types
|
## Version Types
|
||||||
|
|
||||||
@@ -39,10 +39,10 @@ This guide outlines the release process for Coolify, intended for developers and
|
|||||||
<summary><strong>Stable (coming soon)</strong></summary>
|
<summary><strong>Stable (coming soon)</strong></summary>
|
||||||
|
|
||||||
- **Stable**
|
- **Stable**
|
||||||
- The production version suitable for stable, production environments (generally recommended).
|
- The production version suitable for stable, production environments (recommended).
|
||||||
- **Update Frequency:** Every 2 to 4 weeks, with more frequent possible hotfixes.
|
- **Update Frequency:** Every 2 to 4 weeks, with more frequent possible fixes.
|
||||||
- **Release Size:** Larger but less frequent releases. Multiple nightly versions are consolidated into a single stable release.
|
- **Release Size:** Larger but less frequent releases. Multiple nightly versions are consolidated into a single stable release.
|
||||||
- **Versioning Scheme:** Follows semantic versioning (e.g., `v4.0.0`).
|
- **Versioning Scheme:** Follows semantic versioning (e.g., `v4.0.0`, `4.1.0`, etc.).
|
||||||
- **Installation Command:**
|
- **Installation Command:**
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
|
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
|
||||||
@@ -57,7 +57,7 @@ This guide outlines the release process for Coolify, intended for developers and
|
|||||||
- The latest development version, suitable for testing the latest changes and experimenting with new features.
|
- The latest development version, suitable for testing the latest changes and experimenting with new features.
|
||||||
- **Update Frequency:** Daily or bi-weekly updates.
|
- **Update Frequency:** Daily or bi-weekly updates.
|
||||||
- **Release Size:** Smaller, more frequent releases.
|
- **Release Size:** Smaller, more frequent releases.
|
||||||
- **Versioning Scheme:** TO BE DETERMINED
|
- **Versioning Scheme:** Follows semantic versioning (e.g., `4.1.0-nightly.1`, `4.1.0-nightly.2`, etc.).
|
||||||
- **Installation Command:**
|
- **Installation Command:**
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://cdn.coollabs.io/coolify-nightly/install.sh | bash -s next
|
curl -fsSL https://cdn.coollabs.io/coolify-nightly/install.sh | bash -s next
|
||||||
@@ -73,7 +73,7 @@ This guide outlines the release process for Coolify, intended for developers and
|
|||||||
- **Purpose:** Allows users to test and provide feedback on new features and changes before they become stable.
|
- **Purpose:** Allows users to test and provide feedback on new features and changes before they become stable.
|
||||||
- **Update Frequency:** Available if we think beta testing is necessary.
|
- **Update Frequency:** Available if we think beta testing is necessary.
|
||||||
- **Release Size:** Same size as stable release as it will become the next stabe release after some time.
|
- **Release Size:** Same size as stable release as it will become the next stabe release after some time.
|
||||||
- **Versioning Scheme:** Follows semantic versioning (e.g., `4.1.0-beta.1`).
|
- **Versioning Scheme:** Follows semantic versioning (e.g., `4.1.0-beta.1`, `4.1.0-beta.2`, etc.).
|
||||||
- **Installation Command:**
|
- **Installation Command:**
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
|
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
|
||||||
@@ -117,12 +117,15 @@ When a new version is released and a new GitHub release is created, it doesn't i
|
|||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> The cloud version of Coolify may be several versions behind the latest GitHub releases even if the CDN is updated. This is intentional to ensure stability and reliability for cloud users and Andras will manully update the cloud version when the update is ready.
|
> The cloud version of Coolify may be several versions behind the latest GitHub releases even if the CDN is updated. This is intentional to ensure stability and reliability for cloud users and Andras will manully update the cloud version when the update is ready.
|
||||||
|
|
||||||
## Manually Update to Specific Versions
|
## Manually Update/ Downgrade to Specific Versions
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Updating to unreleased versions is not recommended and may cause issues. Use at your own risk!
|
> Updating to unreleased versions is not recommended and can cause issues.
|
||||||
|
|
||||||
To update your Coolify instance to a specific (unreleased) version, use the following command:
|
> [!IMPORTANT]
|
||||||
|
> Downgrading is supported but not recommended and can cause issues because of database migrations and other changes.
|
||||||
|
|
||||||
|
To update your Coolify instance to a specific version, use the following command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash -s <version>
|
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash -s <version>
|
||||||
|
23
SECURITY.md
23
SECURITY.md
@@ -2,15 +2,24 @@
|
|||||||
|
|
||||||
## Supported Versions
|
## Supported Versions
|
||||||
|
|
||||||
Use this section to tell people about which versions of your project are
|
Currently supported, maintained and updated versions:
|
||||||
currently being supported with security updates.
|
|
||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported | Support Status |
|
||||||
| ------- | ------------------ |
|
| ------- | ------------------ | -------------- |
|
||||||
| > 4 | :white_check_mark: |
|
| 4.x | :white_check_mark: | Active Development & Security Updates |
|
||||||
| 3 | :x: |
|
| < 4.0 | :x: | End of Life (no security updates) |
|
||||||
|
|
||||||
|
## Security Updates
|
||||||
|
|
||||||
|
We take security seriously. Security updates are released as soon as possible after a vulnerability is discovered and verified.
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
If you have any vulnerability please report at hi@coollabs.io
|
If you discover a security vulnerability, please follow these steps:
|
||||||
|
|
||||||
|
1. **DO NOT** disclose the vulnerability publicly.
|
||||||
|
2. Send a detailed report to: `hi@coollabs.io`.
|
||||||
|
3. Include in your report:
|
||||||
|
- A description of the vulnerability
|
||||||
|
- Steps to reproduce the issue
|
||||||
|
- Potential impact
|
||||||
|
@@ -1,66 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Actions\License;
|
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Http;
|
|
||||||
use Lorisleiva\Actions\Concerns\AsAction;
|
|
||||||
|
|
||||||
class CheckResaleLicense
|
|
||||||
{
|
|
||||||
use AsAction;
|
|
||||||
|
|
||||||
public function handle()
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$settings = instanceSettings();
|
|
||||||
if (isDev()) {
|
|
||||||
$settings->update([
|
|
||||||
'is_resale_license_active' => true,
|
|
||||||
]);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// if (!$settings->resale_license) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
$base_url = config('coolify.license_url');
|
|
||||||
$instance_id = config('app.id');
|
|
||||||
$data = Http::withHeaders([
|
|
||||||
'Accept' => 'application/json',
|
|
||||||
])->get("$base_url/lemon/validate", [
|
|
||||||
'license_key' => $settings->resale_license,
|
|
||||||
'instance_id' => $instance_id,
|
|
||||||
])->json();
|
|
||||||
if (data_get($data, 'valid') === true && data_get($data, 'license_key.status') === 'active') {
|
|
||||||
$settings->update([
|
|
||||||
'is_resale_license_active' => true,
|
|
||||||
]);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$data = Http::withHeaders([
|
|
||||||
'Accept' => 'application/json',
|
|
||||||
])->get("$base_url/lemon/activate", [
|
|
||||||
'license_key' => $settings->resale_license,
|
|
||||||
'instance_id' => $instance_id,
|
|
||||||
])->json();
|
|
||||||
if (data_get($data, 'activated') === true) {
|
|
||||||
$settings->update([
|
|
||||||
'is_resale_license_active' => true,
|
|
||||||
]);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (data_get($data, 'license_key.status') === 'active') {
|
|
||||||
throw new \Exception('Invalid license key.');
|
|
||||||
}
|
|
||||||
throw new \Exception('Cannot activate license key.');
|
|
||||||
} catch (\Throwable $e) {
|
|
||||||
$settings->update([
|
|
||||||
'resale_license' => null,
|
|
||||||
'is_resale_license_active' => false,
|
|
||||||
]);
|
|
||||||
throw $e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -13,7 +13,7 @@ class CleanupDocker
|
|||||||
{
|
{
|
||||||
$settings = instanceSettings();
|
$settings = instanceSettings();
|
||||||
$helperImageVersion = data_get($settings, 'helper_version');
|
$helperImageVersion = data_get($settings, 'helper_version');
|
||||||
$helperImage = config('coolify.helper_image');
|
$helperImage = config('constants.coolify.helper_image');
|
||||||
$helperImageWithVersion = "$helperImage:$helperImageVersion";
|
$helperImageWithVersion = "$helperImage:$helperImageVersion";
|
||||||
|
|
||||||
$commands = [
|
$commands = [
|
||||||
|
@@ -169,7 +169,7 @@ Files:
|
|||||||
');
|
');
|
||||||
$license_key = $server->settings->logdrain_newrelic_license_key;
|
$license_key = $server->settings->logdrain_newrelic_license_key;
|
||||||
$base_uri = $server->settings->logdrain_newrelic_base_uri;
|
$base_uri = $server->settings->logdrain_newrelic_base_uri;
|
||||||
$base_path = config('coolify.base_config_path');
|
$base_path = config('constants.coolify.base_config_path');
|
||||||
|
|
||||||
$config_path = $base_path.'/log-drains';
|
$config_path = $base_path.'/log-drains';
|
||||||
$fluent_bit_config = $config_path.'/fluent-bit.conf';
|
$fluent_bit_config = $config_path.'/fluent-bit.conf';
|
||||||
|
@@ -32,7 +32,15 @@ class Dev extends Command
|
|||||||
{
|
{
|
||||||
// Generate OpenAPI documentation
|
// Generate OpenAPI documentation
|
||||||
echo "Generating OpenAPI documentation.\n";
|
echo "Generating OpenAPI documentation.\n";
|
||||||
$process = Process::run(['/var/www/html/vendor/bin/openapi', 'app', '-o', 'openapi.yaml']);
|
// https://github.com/OAI/OpenAPI-Specification/releases
|
||||||
|
$process = Process::run([
|
||||||
|
'/var/www/html/vendor/bin/openapi',
|
||||||
|
'app',
|
||||||
|
'-o',
|
||||||
|
'openapi.yaml',
|
||||||
|
'--version',
|
||||||
|
'3.1.0',
|
||||||
|
]);
|
||||||
$error = $process->errorOutput();
|
$error = $process->errorOutput();
|
||||||
$error = preg_replace('/^.*an object literal,.*$/m', '', $error);
|
$error = preg_replace('/^.*an object literal,.*$/m', '', $error);
|
||||||
$error = preg_replace('/^\h*\v+/m', '', $error);
|
$error = preg_replace('/^\h*\v+/m', '', $error);
|
||||||
@@ -49,7 +57,7 @@ class Dev extends Command
|
|||||||
{
|
{
|
||||||
// Generate APP_KEY if not exists
|
// Generate APP_KEY if not exists
|
||||||
|
|
||||||
if (empty(env('APP_KEY'))) {
|
if (empty(config('app.key'))) {
|
||||||
echo "Generating APP_KEY.\n";
|
echo "Generating APP_KEY.\n";
|
||||||
Artisan::call('key:generate');
|
Artisan::call('key:generate');
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,7 @@ class Horizon extends Command
|
|||||||
|
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
if (config('coolify.is_horizon_enabled')) {
|
if (config('constants.horizon.is_horizon_enabled')) {
|
||||||
$this->info('Horizon is enabled. Starting.');
|
$this->info('Horizon is enabled. Starting.');
|
||||||
$this->call('horizon');
|
$this->call('horizon');
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@@ -77,8 +77,8 @@ class Init extends Command
|
|||||||
echo "Could not setup dynamic configuration: {$e->getMessage()}\n";
|
echo "Could not setup dynamic configuration: {$e->getMessage()}\n";
|
||||||
}
|
}
|
||||||
$settings = instanceSettings();
|
$settings = instanceSettings();
|
||||||
if (! is_null(env('AUTOUPDATE', null))) {
|
if (! is_null(config('constants.coolify.autoupdate', null))) {
|
||||||
if (env('AUTOUPDATE') == true) {
|
if (config('constants.coolify.autoupdate') == true) {
|
||||||
$settings->update(['is_auto_update_enabled' => true]);
|
$settings->update(['is_auto_update_enabled' => true]);
|
||||||
} else {
|
} else {
|
||||||
$settings->update(['is_auto_update_enabled' => false]);
|
$settings->update(['is_auto_update_enabled' => false]);
|
||||||
|
@@ -15,7 +15,15 @@ class OpenApi extends Command
|
|||||||
{
|
{
|
||||||
// Generate OpenAPI documentation
|
// Generate OpenAPI documentation
|
||||||
echo "Generating OpenAPI documentation.\n";
|
echo "Generating OpenAPI documentation.\n";
|
||||||
$process = Process::run(['/var/www/html/vendor/bin/openapi', 'app', '-o', 'openapi.yaml']);
|
// https://github.com/OAI/OpenAPI-Specification/releases
|
||||||
|
$process = Process::run([
|
||||||
|
'/var/www/html/vendor/bin/openapi',
|
||||||
|
'app',
|
||||||
|
'-o',
|
||||||
|
'openapi.yaml',
|
||||||
|
'--version',
|
||||||
|
'3.1.0',
|
||||||
|
]);
|
||||||
$error = $process->errorOutput();
|
$error = $process->errorOutput();
|
||||||
$error = preg_replace('/^.*an object literal,.*$/m', '', $error);
|
$error = preg_replace('/^.*an object literal,.*$/m', '', $error);
|
||||||
$error = preg_replace('/^\h*\v+/m', '', $error);
|
$error = preg_replace('/^\h*\v+/m', '', $error);
|
||||||
|
@@ -12,7 +12,7 @@ class Scheduler extends Command
|
|||||||
|
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
if (config('coolify.is_scheduler_enabled')) {
|
if (config('constants.horizon.is_scheduler_enabled')) {
|
||||||
$this->info('Scheduler is enabled. Starting.');
|
$this->info('Scheduler is enabled. Starting.');
|
||||||
$this->call('schedule:work');
|
$this->call('schedule:work');
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@@ -57,7 +57,7 @@ class SyncBunny extends Command
|
|||||||
|
|
||||||
PendingRequest::macro('storage', function ($fileName) use ($that) {
|
PendingRequest::macro('storage', function ($fileName) use ($that) {
|
||||||
$headers = [
|
$headers = [
|
||||||
'AccessKey' => env('BUNNY_STORAGE_API_KEY'),
|
'AccessKey' => config('constants.bunny.storage_api_key'),
|
||||||
'Accept' => 'application/json',
|
'Accept' => 'application/json',
|
||||||
'Content-Type' => 'application/octet-stream',
|
'Content-Type' => 'application/octet-stream',
|
||||||
];
|
];
|
||||||
@@ -69,7 +69,7 @@ class SyncBunny extends Command
|
|||||||
});
|
});
|
||||||
PendingRequest::macro('purge', function ($url) use ($that) {
|
PendingRequest::macro('purge', function ($url) use ($that) {
|
||||||
$headers = [
|
$headers = [
|
||||||
'AccessKey' => env('BUNNY_API_KEY'),
|
'AccessKey' => config('constants.bunny.api_key'),
|
||||||
'Accept' => 'application/json',
|
'Accept' => 'application/json',
|
||||||
];
|
];
|
||||||
$that->info('Purging: '.$url);
|
$that->info('Purging: '.$url);
|
||||||
|
@@ -151,7 +151,7 @@ class SshMultiplexingHelper
|
|||||||
|
|
||||||
private static function isMultiplexingEnabled(): bool
|
private static function isMultiplexingEnabled(): bool
|
||||||
{
|
{
|
||||||
return config('constants.ssh.mux_enabled') && ! config('coolify.is_windows_docker_desktop');
|
return config('constants.ssh.mux_enabled') && ! config('constants.coolify.is_windows_docker_desktop');
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function validateSshKey(string $sshKeyLocation): void
|
private static function validateSshKey(string $sshKeyLocation): void
|
||||||
|
@@ -147,7 +147,7 @@ class OtherController extends Controller
|
|||||||
public function feedback(Request $request)
|
public function feedback(Request $request)
|
||||||
{
|
{
|
||||||
$content = $request->input('content');
|
$content = $request->input('content');
|
||||||
$webhook_url = config('coolify.feedback_discord_webhook');
|
$webhook_url = config('constants.webhooks.feedback_discord_webhook');
|
||||||
if ($webhook_url) {
|
if ($webhook_url) {
|
||||||
Http::post($webhook_url, [
|
Http::post($webhook_url, [
|
||||||
'content' => $content,
|
'content' => $content,
|
||||||
|
@@ -1323,7 +1323,7 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
private function prepare_builder_image()
|
private function prepare_builder_image()
|
||||||
{
|
{
|
||||||
$settings = instanceSettings();
|
$settings = instanceSettings();
|
||||||
$helperImage = config('coolify.helper_image');
|
$helperImage = config('constants.coolify.helper_image');
|
||||||
$helperImage = "{$helperImage}:{$settings->helper_version}";
|
$helperImage = "{$helperImage}:{$settings->helper_version}";
|
||||||
// Get user home directory
|
// Get user home directory
|
||||||
$this->serverUserHomeDir = instant_remote_process(['echo $HOME'], $this->server);
|
$this->serverUserHomeDir = instant_remote_process(['echo $HOME'], $this->server);
|
||||||
|
@@ -524,7 +524,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
private function getFullImageName(): string
|
private function getFullImageName(): string
|
||||||
{
|
{
|
||||||
$settings = instanceSettings();
|
$settings = instanceSettings();
|
||||||
$helperImage = config('coolify.helper_image');
|
$helperImage = config('constants.coolify.helper_image');
|
||||||
$latestVersion = $settings->helper_version;
|
$latestVersion = $settings->helper_version;
|
||||||
|
|
||||||
return "{$helperImage}:{$latestVersion}";
|
return "{$helperImage}:{$latestVersion}";
|
||||||
|
@@ -20,7 +20,7 @@ class PullHelperImageJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
|
|
||||||
public function handle(): void
|
public function handle(): void
|
||||||
{
|
{
|
||||||
$helperImage = config('coolify.helper_image');
|
$helperImage = config('constants.coolify.helper_image');
|
||||||
$latest_version = instanceSettings()->helper_version;
|
$latest_version = instanceSettings()->helper_version;
|
||||||
instant_remote_process(["docker pull -q {$helperImage}:{$latest_version}"], $this->server, false);
|
instant_remote_process(["docker pull -q {$helperImage}:{$latest_version}"], $this->server, false);
|
||||||
}
|
}
|
||||||
|
@@ -1,37 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Livewire\Dev;
|
|
||||||
|
|
||||||
use Livewire\Component;
|
|
||||||
|
|
||||||
class Compose extends Component
|
|
||||||
{
|
|
||||||
public string $compose = '';
|
|
||||||
|
|
||||||
public string $base64 = '';
|
|
||||||
|
|
||||||
public $services;
|
|
||||||
|
|
||||||
public function mount()
|
|
||||||
{
|
|
||||||
$this->services = get_service_templates();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setService(string $selected)
|
|
||||||
{
|
|
||||||
$this->base64 = data_get($this->services, $selected.'.compose');
|
|
||||||
if ($this->base64) {
|
|
||||||
$this->compose = base64_decode($this->base64);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function updatedCompose($value)
|
|
||||||
{
|
|
||||||
$this->base64 = base64_encode($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function render()
|
|
||||||
{
|
|
||||||
return view('livewire.dev.compose');
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,58 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Livewire\Settings;
|
|
||||||
|
|
||||||
use App\Actions\License\CheckResaleLicense;
|
|
||||||
use App\Models\InstanceSettings;
|
|
||||||
use Livewire\Component;
|
|
||||||
|
|
||||||
class License extends Component
|
|
||||||
{
|
|
||||||
public InstanceSettings $settings;
|
|
||||||
|
|
||||||
public ?string $instance_id = null;
|
|
||||||
|
|
||||||
protected $rules = [
|
|
||||||
'settings.resale_license' => 'nullable',
|
|
||||||
'settings.is_resale_license_active' => 'nullable',
|
|
||||||
];
|
|
||||||
|
|
||||||
protected $validationAttributes = [
|
|
||||||
'settings.resale_license' => 'License',
|
|
||||||
'instance_id' => 'Instance Id (Do not change this)',
|
|
||||||
'settings.is_resale_license_active' => 'Is License Active',
|
|
||||||
];
|
|
||||||
|
|
||||||
public function mount()
|
|
||||||
{
|
|
||||||
if (! isCloud()) {
|
|
||||||
abort(404);
|
|
||||||
}
|
|
||||||
if (! isInstanceAdmin()) {
|
|
||||||
return redirect()->route('home');
|
|
||||||
}
|
|
||||||
$this->instance_id = config('app.id');
|
|
||||||
$this->settings = instanceSettings();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function render()
|
|
||||||
{
|
|
||||||
return view('livewire.settings.license');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function submit()
|
|
||||||
{
|
|
||||||
$this->validate();
|
|
||||||
$this->settings->save();
|
|
||||||
if ($this->settings->resale_license) {
|
|
||||||
try {
|
|
||||||
CheckResaleLicense::run();
|
|
||||||
$this->dispatch('reloadWindow');
|
|
||||||
} catch (\Throwable $e) {
|
|
||||||
session()->flash('error', 'Something went wrong. Please contact support. <br>Error: '.$e->getMessage());
|
|
||||||
|
|
||||||
return redirect()->route('settings.license');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -27,7 +27,7 @@ class Index extends Component
|
|||||||
|
|
||||||
public function mount()
|
public function mount()
|
||||||
{
|
{
|
||||||
if (config('coolify.waitlist') == false) {
|
if (config('constants.waitlist.enabled') == false) {
|
||||||
return redirect()->route('register');
|
return redirect()->route('register');
|
||||||
}
|
}
|
||||||
$this->waitingInLine = Waitlist::whereVerified(true)->count();
|
$this->waitingInLine = Waitlist::whereVerified(true)->count();
|
||||||
|
@@ -464,7 +464,7 @@ $schema://$host {
|
|||||||
|
|
||||||
public function proxyPath()
|
public function proxyPath()
|
||||||
{
|
{
|
||||||
$base_path = config('coolify.base_config_path');
|
$base_path = config('constants.coolify.base_config_path');
|
||||||
$proxyType = $this->proxyType();
|
$proxyType = $this->proxyType();
|
||||||
$proxy_path = "$base_path/proxy";
|
$proxy_path = "$base_path/proxy";
|
||||||
// TODO: should use /traefik for already exisiting configurations?
|
// TODO: should use /traefik for already exisiting configurations?
|
||||||
|
@@ -1171,7 +1171,7 @@ class Service extends BaseModel
|
|||||||
$services = get_service_templates();
|
$services = get_service_templates();
|
||||||
$service = data_get($services, str($this->name)->beforeLast('-')->value, []);
|
$service = data_get($services, str($this->name)->beforeLast('-')->value, []);
|
||||||
|
|
||||||
return data_get($service, 'documentation', config('constants.docs.base_url'));
|
return data_get($service, 'documentation', config('constants.urls.docs'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function applications()
|
public function applications()
|
||||||
|
@@ -172,7 +172,7 @@ class Team extends Model implements SendsDiscord, SendsEmail
|
|||||||
{
|
{
|
||||||
return Attribute::make(
|
return Attribute::make(
|
||||||
get: function () {
|
get: function () {
|
||||||
if (config('coolify.self_hosted') || $this->id === 0) {
|
if (config('constants.coolify.self_hosted') || $this->id === 0) {
|
||||||
$subscription = 'self-hosted';
|
$subscription = 'self-hosted';
|
||||||
} else {
|
} else {
|
||||||
$subscription = data_get($this, 'subscription');
|
$subscription = data_get($this, 'subscription');
|
||||||
|
@@ -50,7 +50,7 @@ class FortifyServiceProvider extends ServiceProvider
|
|||||||
if (! $settings->is_registration_enabled) {
|
if (! $settings->is_registration_enabled) {
|
||||||
return redirect()->route('login');
|
return redirect()->route('login');
|
||||||
}
|
}
|
||||||
if (config('coolify.waitlist')) {
|
if (config('constants.waitlist.enabled')) {
|
||||||
return redirect()->route('waitlist.index');
|
return redirect()->route('waitlist.index');
|
||||||
} else {
|
} else {
|
||||||
return view('auth.register', [
|
return view('auth.register', [
|
||||||
|
@@ -359,7 +359,7 @@ function isDev(): bool
|
|||||||
|
|
||||||
function isCloud(): bool
|
function isCloud(): bool
|
||||||
{
|
{
|
||||||
return ! config('coolify.self_hosted');
|
return ! config('constants.coolify.self_hosted');
|
||||||
}
|
}
|
||||||
|
|
||||||
function translate_cron_expression($expression_to_validate): string
|
function translate_cron_expression($expression_to_validate): string
|
||||||
@@ -994,7 +994,7 @@ function generateEnvValue(string $command, Service|Application|null $service = n
|
|||||||
|
|
||||||
function getRealtime()
|
function getRealtime()
|
||||||
{
|
{
|
||||||
$envDefined = env('PUSHER_PORT');
|
$envDefined = config('constants.pusher.port');
|
||||||
if (empty($envDefined)) {
|
if (empty($envDefined)) {
|
||||||
$url = Url::fromString(Request::getSchemeAndHttpHost());
|
$url = Url::fromString(Request::getSchemeAndHttpHost());
|
||||||
$port = $url->getPort();
|
$port = $url->getPort();
|
||||||
|
@@ -14,13 +14,13 @@
|
|||||||
"php": "^8.2",
|
"php": "^8.2",
|
||||||
"3sidedcube/laravel-redoc": "^1.0",
|
"3sidedcube/laravel-redoc": "^1.0",
|
||||||
"danharrin/livewire-rate-limiting": "^1.1",
|
"danharrin/livewire-rate-limiting": "^1.1",
|
||||||
"doctrine/dbal": "^3.6",
|
"doctrine/dbal": "^4.2",
|
||||||
"guzzlehttp/guzzle": "^7.5.0",
|
"guzzlehttp/guzzle": "^7.5.0",
|
||||||
"laravel/fortify": "^1.16.0",
|
"laravel/fortify": "^1.16.0",
|
||||||
"laravel/framework": "^11",
|
"laravel/framework": "^11.0",
|
||||||
"laravel/horizon": "^5.29.1",
|
"laravel/horizon": "^5.29.1",
|
||||||
"laravel/pail": "^1.1",
|
"laravel/pail": "^1.1",
|
||||||
"laravel/prompts": "^0.1.6",
|
"laravel/prompts": "^0.1.18|^0.2.0|^0.3.0",
|
||||||
"laravel/sanctum": "^4.0",
|
"laravel/sanctum": "^4.0",
|
||||||
"laravel/socialite": "^5.14.0",
|
"laravel/socialite": "^5.14.0",
|
||||||
"laravel/tinker": "^2.8.1",
|
"laravel/tinker": "^2.8.1",
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
"lcobucci/jwt": "^5.0.0",
|
"lcobucci/jwt": "^5.0.0",
|
||||||
"league/flysystem-aws-s3-v3": "^3.0",
|
"league/flysystem-aws-s3-v3": "^3.0",
|
||||||
"league/flysystem-sftp-v3": "^3.0",
|
"league/flysystem-sftp-v3": "^3.0",
|
||||||
"livewire/livewire": "3.4.9",
|
"livewire/livewire": "^3.5",
|
||||||
"log1x/laravel-webfonts": "^1.0",
|
"log1x/laravel-webfonts": "^1.0",
|
||||||
"lorisleiva/laravel-actions": "^2.7",
|
"lorisleiva/laravel-actions": "^2.7",
|
||||||
"nubs/random-name-generator": "^2.2",
|
"nubs/random-name-generator": "^2.2",
|
||||||
@@ -37,17 +37,16 @@
|
|||||||
"poliander/cron": "^3.0",
|
"poliander/cron": "^3.0",
|
||||||
"purplepixie/phpdns": "^2.1",
|
"purplepixie/phpdns": "^2.1",
|
||||||
"pusher/pusher-php-server": "^7.2",
|
"pusher/pusher-php-server": "^7.2",
|
||||||
"resend/resend-laravel": "^0.13.0",
|
"resend/resend-laravel": "^0.15.0",
|
||||||
"sentry/sentry-laravel": "^4.6",
|
"sentry/sentry-laravel": "^4.6",
|
||||||
"socialiteproviders/microsoft-azure": "^5.1",
|
"socialiteproviders/microsoft-azure": "^5.1",
|
||||||
"spatie/laravel-activitylog": "^4.7.3",
|
"spatie/laravel-activitylog": "^4.7.3",
|
||||||
"spatie/laravel-data": "^3.4.3",
|
"spatie/laravel-data": "^4.11",
|
||||||
"spatie/laravel-ray": "^1.32.4",
|
|
||||||
"spatie/laravel-schemaless-attributes": "^2.4",
|
"spatie/laravel-schemaless-attributes": "^2.4",
|
||||||
"spatie/url": "^2.2",
|
"spatie/url": "^2.2",
|
||||||
"stripe/stripe-php": "^12.0",
|
"stripe/stripe-php": "^16.2.0",
|
||||||
"symfony/yaml": "^6.2",
|
"symfony/yaml": "^7.1.6",
|
||||||
"visus/cuid2": "^2.0.0",
|
"visus/cuid2": "^4.1.0",
|
||||||
"yosymfony/toml": "^1.0",
|
"yosymfony/toml": "^1.0",
|
||||||
"zircote/swagger-php": "^4.10"
|
"zircote/swagger-php": "^4.10"
|
||||||
},
|
},
|
||||||
@@ -59,12 +58,13 @@
|
|||||||
"laravel/telescope": "^5.2",
|
"laravel/telescope": "^5.2",
|
||||||
"mockery/mockery": "^1.5.1",
|
"mockery/mockery": "^1.5.1",
|
||||||
"nunomaduro/collision": "^8.1",
|
"nunomaduro/collision": "^8.1",
|
||||||
"pestphp/pest": "^2.16",
|
"pestphp/pest": "^3.5",
|
||||||
"phpstan/phpstan": "^1.10",
|
"phpstan/phpstan": "^1.12.10",
|
||||||
"phpunit/phpunit": "^10.0.19",
|
"phpunit/phpunit": "^11.4",
|
||||||
"serversideup/spin": "^1.1.0",
|
"serversideup/spin": "^2.3",
|
||||||
"spatie/laravel-ignition": "^2.1.0",
|
"spatie/laravel-ignition": "^2.1.0",
|
||||||
"symfony/http-client": "^6.2"
|
"spatie/laravel-ray": "^1.37",
|
||||||
|
"symfony/http-client": "^7.1"
|
||||||
},
|
},
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
|
3494
composer.lock
generated
3494
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,47 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'docs' => [
|
'coolify' => [
|
||||||
'base_url' => 'https://coolify.io/docs',
|
'version' => '4.0.0-beta.368',
|
||||||
|
'self_hosted' => env('SELF_HOSTED', true),
|
||||||
|
'autoupdate' => env('AUTOUPDATE', false),
|
||||||
|
'base_config_path' => env('BASE_CONFIG_PATH', '/data/coolify'),
|
||||||
|
'helper_image' => env('HELPER_IMAGE', 'ghcr.io/coollabsio/coolify-helper'),
|
||||||
|
'is_windows_docker_desktop' => env('IS_WINDOWS_DOCKER_DESKTOP', false),
|
||||||
|
],
|
||||||
|
|
||||||
|
'urls' => [
|
||||||
|
'docs' => 'https://coolify.io/docs',
|
||||||
'contact' => 'https://coolify.io/docs/contact',
|
'contact' => 'https://coolify.io/docs/contact',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'services' => [
|
||||||
|
// Temporary disabled until cache is implemented
|
||||||
|
// 'official' => 'https://cdn.coollabs.io/coolify/service-templates.json',
|
||||||
|
'official' => 'https://raw.githubusercontent.com/coollabsio/coolify/main/templates/service-templates.json',
|
||||||
|
],
|
||||||
|
|
||||||
|
'terminal' => [
|
||||||
|
'protocol' => env('TERMINAL_PROTOCOL'),
|
||||||
|
'host' => env('TERMINAL_HOST'),
|
||||||
|
'port' => env('TERMINAL_PORT'),
|
||||||
|
],
|
||||||
|
|
||||||
|
'pusher' => [
|
||||||
|
'host' => env('PUSHER_HOST'),
|
||||||
|
'port' => env('PUSHER_PORT'),
|
||||||
|
'app_key' => env('PUSHER_APP_KEY'),
|
||||||
|
],
|
||||||
|
|
||||||
|
'horizon' => [
|
||||||
|
'is_horizon_enabled' => env('HORIZON_ENABLED', true),
|
||||||
|
'is_scheduler_enabled' => env('SCHEDULER_ENABLED', true),
|
||||||
|
],
|
||||||
|
|
||||||
|
'docker' => [
|
||||||
|
'minimum_required_version' => '26.0',
|
||||||
|
],
|
||||||
|
|
||||||
'ssh' => [
|
'ssh' => [
|
||||||
'mux_enabled' => env('MUX_ENABLED', env('SSH_MUX_ENABLED', true)),
|
'mux_enabled' => env('MUX_ENABLED', env('SSH_MUX_ENABLED', true)),
|
||||||
'mux_persist_time' => env('SSH_MUX_PERSIST_TIME', 3600),
|
'mux_persist_time' => env('SSH_MUX_PERSIST_TIME', 3600),
|
||||||
@@ -12,23 +49,14 @@ return [
|
|||||||
'server_interval' => 20,
|
'server_interval' => 20,
|
||||||
'command_timeout' => 7200,
|
'command_timeout' => 7200,
|
||||||
],
|
],
|
||||||
'docker' => [
|
|
||||||
'minimum_required_version' => '26.0',
|
|
||||||
],
|
|
||||||
'waitlist' => [
|
|
||||||
'expiration' => 10,
|
|
||||||
],
|
|
||||||
'invitation' => [
|
'invitation' => [
|
||||||
'link' => [
|
'link' => [
|
||||||
'base_url' => '/invitations/',
|
'base_url' => '/invitations/',
|
||||||
'expiration_days' => 3,
|
'expiration_days' => 3,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'services' => [
|
|
||||||
// Temporary disabled until cache is implemented
|
|
||||||
// 'official' => 'https://cdn.coollabs.io/coolify/service-templates.json',
|
|
||||||
'official' => 'https://raw.githubusercontent.com/coollabsio/coolify/main/templates/service-templates.json',
|
|
||||||
],
|
|
||||||
'limits' => [
|
'limits' => [
|
||||||
'trial_period' => 0,
|
'trial_period' => 0,
|
||||||
'server' => [
|
'server' => [
|
||||||
@@ -48,4 +76,23 @@ return [
|
|||||||
'dynamic' => true,
|
'dynamic' => true,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'waitlist' => [
|
||||||
|
'enabled' => env('WAITLIST', false),
|
||||||
|
'expiration' => 10,
|
||||||
|
],
|
||||||
|
|
||||||
|
'sentry' => [
|
||||||
|
'sentry_dsn' => env('SENTRY_DSN'),
|
||||||
|
],
|
||||||
|
|
||||||
|
'webhooks' => [
|
||||||
|
'feedback_discord_webhook' => env('FEEDBACK_DISCORD_WEBHOOK'),
|
||||||
|
'dev_webhook' => env('SERVEO_URL'),
|
||||||
|
],
|
||||||
|
|
||||||
|
'bunny' => [
|
||||||
|
'storage_api_key' => env('BUNNY_STORAGE_API_KEY'),
|
||||||
|
'api_key' => env('BUNNY_API_KEY'),
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
@@ -1,17 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'sentry_dsn' => env('SENTRY_DSN'),
|
|
||||||
'docs' => 'https://coolify.io/docs/',
|
|
||||||
'contact' => 'https://coolify.io/docs/contact',
|
|
||||||
'feedback_discord_webhook' => env('FEEDBACK_DISCORD_WEBHOOK'),
|
|
||||||
'self_hosted' => env('SELF_HOSTED', true),
|
|
||||||
'waitlist' => env('WAITLIST', false),
|
|
||||||
'license_url' => 'https://licenses.coollabs.io',
|
|
||||||
'dev_webhook' => env('SERVEO_URL'),
|
|
||||||
'is_windows_docker_desktop' => env('IS_WINDOWS_DOCKER_DESKTOP', false),
|
|
||||||
'base_config_path' => env('BASE_CONFIG_PATH', '/data/coolify'),
|
|
||||||
'helper_image' => env('HELPER_IMAGE', 'ghcr.io/coollabsio/coolify-helper'),
|
|
||||||
'is_horizon_enabled' => env('HORIZON_ENABLED', true),
|
|
||||||
'is_scheduler_enabled' => env('SCHEDULER_ENABLED', true),
|
|
||||||
];
|
|
@@ -3,11 +3,11 @@
|
|||||||
return [
|
return [
|
||||||
|
|
||||||
// @see https://docs.sentry.io/product/sentry-basics/dsn-explainer/
|
// @see https://docs.sentry.io/product/sentry-basics/dsn-explainer/
|
||||||
'dsn' => config('coolify.sentry_dsn'),
|
'dsn' => config('constants.sentry.sentry_dsn'),
|
||||||
|
|
||||||
// The release version of your application
|
// The release version of your application
|
||||||
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
|
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
|
||||||
'release' => '4.0.0-beta.368',
|
'release' => config('constants.coolify.version'),
|
||||||
|
|
||||||
// When left empty or `null` the Laravel environment will be used
|
// When left empty or `null` the Laravel environment will be used
|
||||||
'environment' => config('app.env'),
|
'environment' => config('app.env'),
|
||||||
|
@@ -24,9 +24,8 @@ class PopulateSshKeysDirectorySeeder extends Seeder
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (isDev()) {
|
if (isDev()) {
|
||||||
$user = env('PUID').':'.env('PGID');
|
Process::run('chown -R 9999:9999 '.storage_path('app/ssh/keys'));
|
||||||
Process::run("chown -R $user ".storage_path('app/ssh/keys'));
|
Process::run('chown -R 9999:9999 '.storage_path('app/ssh/mux'));
|
||||||
Process::run("chown -R $user ".storage_path('app/ssh/mux'));
|
|
||||||
} else {
|
} else {
|
||||||
Process::run('chown -R 9999:root '.storage_path('app/ssh/keys'));
|
Process::run('chown -R 9999:root '.storage_path('app/ssh/keys'));
|
||||||
Process::run('chown -R 9999:root '.storage_path('app/ssh/mux'));
|
Process::run('chown -R 9999:root '.storage_path('app/ssh/mux'));
|
||||||
|
@@ -100,7 +100,7 @@ class ProductionSeeder extends Seeder
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! isCloud() && config('coolify.is_windows_docker_desktop') == false) {
|
if (! isCloud() && config('constants.coolify.is_windows_docker_desktop') == false) {
|
||||||
$coolify_key_name = '@host.docker.internal';
|
$coolify_key_name = '@host.docker.internal';
|
||||||
$ssh_keys_directory = Storage::disk('ssh-keys')->files();
|
$ssh_keys_directory = Storage::disk('ssh-keys')->files();
|
||||||
$coolify_key = collect($ssh_keys_directory)->firstWhere(fn ($item) => str($item)->contains($coolify_key_name));
|
$coolify_key = collect($ssh_keys_directory)->firstWhere(fn ($item) => str($item)->contains($coolify_key_name));
|
||||||
@@ -127,7 +127,7 @@ class ProductionSeeder extends Seeder
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (config('coolify.is_windows_docker_desktop')) {
|
if (config('constants.coolify.is_windows_docker_desktop')) {
|
||||||
PrivateKey::updateOrCreate(
|
PrivateKey::updateOrCreate(
|
||||||
[
|
[
|
||||||
'id' => 0,
|
'id' => 0,
|
||||||
|
@@ -60,7 +60,7 @@ services:
|
|||||||
SOKETI_DEFAULT_APP_SECRET: "${PUSHER_APP_SECRET:-coolify}"
|
SOKETI_DEFAULT_APP_SECRET: "${PUSHER_APP_SECRET:-coolify}"
|
||||||
entrypoint: ["/bin/sh", "/soketi-entrypoint.sh"]
|
entrypoint: ["/bin/sh", "/soketi-entrypoint.sh"]
|
||||||
vite:
|
vite:
|
||||||
image: node:20
|
image: node:20-alpine
|
||||||
pull_policy: always
|
pull_policy: always
|
||||||
working_dir: /var/www/html
|
working_dir: /var/www/html
|
||||||
environment:
|
environment:
|
||||||
@@ -74,8 +74,9 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- coolify
|
- coolify
|
||||||
testing-host:
|
testing-host:
|
||||||
image: "ghcr.io/coollabsio/coolify-testing-host:latest"
|
build:
|
||||||
pull_policy: always
|
context: .
|
||||||
|
dockerfile: ./docker/testing-host/Dockerfile
|
||||||
init: true
|
init: true
|
||||||
container_name: coolify-testing-host
|
container_name: coolify-testing-host
|
||||||
volumes:
|
volumes:
|
||||||
@@ -88,7 +89,7 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- coolify
|
- coolify
|
||||||
mailpit:
|
mailpit:
|
||||||
image: "axllent/mailpit:latest"
|
image: axllent/mailpit:latest
|
||||||
pull_policy: always
|
pull_policy: always
|
||||||
container_name: coolify-mail
|
container_name: coolify-mail
|
||||||
ports:
|
ports:
|
||||||
|
@@ -86,7 +86,7 @@ services:
|
|||||||
retries: 10
|
retries: 10
|
||||||
timeout: 2s
|
timeout: 2s
|
||||||
redis:
|
redis:
|
||||||
image: redis:alpine
|
image: redis:7-alpine
|
||||||
pull_policy: always
|
pull_policy: always
|
||||||
container_name: coolify-redis
|
container_name: coolify-redis
|
||||||
restart: always
|
restart: always
|
||||||
|
@@ -4,7 +4,7 @@ services:
|
|||||||
restart: always
|
restart: always
|
||||||
working_dir: /var/www/html
|
working_dir: /var/www/html
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- 'host.docker.internal:host-gateway'
|
- host.docker.internal:host-gateway
|
||||||
networks:
|
networks:
|
||||||
- coolify
|
- coolify
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -18,7 +18,7 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- coolify
|
- coolify
|
||||||
redis:
|
redis:
|
||||||
image: redis:alpine
|
image: redis:7-alpine
|
||||||
container_name: coolify-redis
|
container_name: coolify-redis
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
@@ -26,7 +26,7 @@ services:
|
|||||||
soketi:
|
soketi:
|
||||||
container_name: coolify-realtime
|
container_name: coolify-realtime
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- 'host.docker.internal:host-gateway'
|
- host.docker.internal:host-gateway
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- coolify
|
- coolify
|
||||||
|
@@ -1,16 +1,29 @@
|
|||||||
FROM alpine:3.17
|
# Versions
|
||||||
|
# https://hub.docker.com/_/alpine
|
||||||
ARG TARGETPLATFORM
|
ARG BASE_IMAGE=alpine:3.20
|
||||||
# https://download.docker.com/linux/static/stable/
|
# https://download.docker.com/linux/static/stable/
|
||||||
ARG DOCKER_VERSION=26.1.3
|
ARG DOCKER_VERSION=27.3.1
|
||||||
# https://github.com/docker/compose/releases
|
# https://github.com/docker/compose/releases
|
||||||
ARG DOCKER_COMPOSE_VERSION=2.27.1
|
ARG DOCKER_COMPOSE_VERSION=2.30.3
|
||||||
# https://github.com/docker/buildx/releases
|
# https://github.com/docker/buildx/releases
|
||||||
ARG DOCKER_BUILDX_VERSION=0.14.1
|
ARG DOCKER_BUILDX_VERSION=0.18.0
|
||||||
# https://github.com/buildpacks/pack/releases
|
# https://github.com/buildpacks/pack/releases
|
||||||
ARG PACK_VERSION=0.35.1
|
ARG PACK_VERSION=0.35.1
|
||||||
# https://github.com/railwayapp/nixpacks/releases
|
# https://github.com/railwayapp/nixpacks/releases
|
||||||
ARG NIXPACKS_VERSION=1.29.0
|
ARG NIXPACKS_VERSION=1.29.0
|
||||||
|
# https://hub.docker.com/r/minio/mc/tags
|
||||||
|
ARG MINIO_VERSION=RELEASE.2024-03-07T00-31-49Z
|
||||||
|
|
||||||
|
FROM minio/mc:${MINIO_VERSION} AS minio-client
|
||||||
|
|
||||||
|
FROM ${BASE_IMAGE} AS base
|
||||||
|
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
ARG DOCKER_VERSION
|
||||||
|
ARG DOCKER_COMPOSE_VERSION
|
||||||
|
ARG DOCKER_BUILDX_VERSION
|
||||||
|
ARG PACK_VERSION
|
||||||
|
ARG NIXPACKS_VERSION
|
||||||
|
|
||||||
USER root
|
USER root
|
||||||
WORKDIR /artifacts
|
WORKDIR /artifacts
|
||||||
@@ -34,9 +47,8 @@ RUN if [[ ${TARGETPLATFORM} == 'linux/arm64' ]]; then \
|
|||||||
chmod +x ~/.docker/cli-plugins/docker-compose /usr/bin/docker /usr/local/bin/pack /root/.docker/cli-plugins/docker-buildx \
|
chmod +x ~/.docker/cli-plugins/docker-compose /usr/bin/docker /usr/local/bin/pack /root/.docker/cli-plugins/docker-buildx \
|
||||||
;fi
|
;fi
|
||||||
|
|
||||||
COPY --from=minio/mc:RELEASE.2024-09-09T07-53-10Z /usr/bin/mc /usr/bin/mc
|
COPY --from=minio-client /usr/bin/mc /usr/bin/mc
|
||||||
RUN chmod +x /usr/bin/mc
|
RUN chmod +x /usr/bin/mc
|
||||||
|
|
||||||
ENTRYPOINT ["/sbin/tini", "--"]
|
ENTRYPOINT ["/sbin/tini", "--"]
|
||||||
CMD ["tail", "-f", "/dev/null"]
|
CMD ["tail", "-f", "/dev/null"]
|
||||||
|
|
||||||
|
8
docker/coolify-realtime/package-lock.json
generated
8
docker/coolify-realtime/package-lock.json
generated
@@ -7,7 +7,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@xterm/addon-fit": "0.10.0",
|
"@xterm/addon-fit": "0.10.0",
|
||||||
"@xterm/xterm": "5.5.0",
|
"@xterm/xterm": "5.5.0",
|
||||||
"axios": "1.7.5",
|
"axios": "1.7.7",
|
||||||
"cookie": "1.0.1",
|
"cookie": "1.0.1",
|
||||||
"dotenv": "16.4.5",
|
"dotenv": "16.4.5",
|
||||||
"node-pty": "1.0.0",
|
"node-pty": "1.0.0",
|
||||||
@@ -36,9 +36,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/axios": {
|
"node_modules/axios": {
|
||||||
"version": "1.7.5",
|
"version": "1.7.7",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
|
||||||
"integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==",
|
"integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"follow-redirects": "^1.15.6",
|
"follow-redirects": "^1.15.6",
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
"@xterm/addon-fit": "0.10.0",
|
"@xterm/addon-fit": "0.10.0",
|
||||||
"@xterm/xterm": "5.5.0",
|
"@xterm/xterm": "5.5.0",
|
||||||
"cookie": "1.0.1",
|
"cookie": "1.0.1",
|
||||||
"axios": "1.7.5",
|
"axios": "1.7.7",
|
||||||
"dotenv": "16.4.5",
|
"dotenv": "16.4.5",
|
||||||
"node-pty": "1.0.0",
|
"node-pty": "1.0.0",
|
||||||
"ws": "8.18.0"
|
"ws": "8.18.0"
|
||||||
|
@@ -1,10 +1,21 @@
|
|||||||
FROM serversideup/php:8.2-fpm-nginx-v2.2.1
|
# Versions
|
||||||
|
# https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-nginx-alpine
|
||||||
|
ARG SERVERSIDEUP_PHP_VERSION=8.2-fpm-nginx-v2.2.1
|
||||||
|
# https://github.com/minio/mc/releases
|
||||||
|
ARG MINIO_VERSION=RELEASE.2024-11-05T11-29-45Z
|
||||||
|
# https://github.com/cloudflare/cloudflared/releases
|
||||||
|
ARG CLOUDFLARED_VERSION=2024.11.0
|
||||||
|
# https://www.postgresql.org/support/versioning/ - Can not updated automatically so keep it at 15
|
||||||
|
ARG POSTGRES_VERSION=15
|
||||||
|
|
||||||
|
FROM minio/mc:${MINIO_VERSION} AS minio-client
|
||||||
|
|
||||||
|
FROM serversideup/php:${SERVERSIDEUP_PHP_VERSION}
|
||||||
|
|
||||||
ARG TARGETPLATFORM
|
ARG TARGETPLATFORM
|
||||||
# https://github.com/cloudflare/cloudflared/releases
|
ARG CLOUDFLARED_VERSION
|
||||||
ARG CLOUDFLARED_VERSION=2024.4.1
|
ARG MINIO_VERSION
|
||||||
|
ARG POSTGRES_VERSION
|
||||||
ARG POSTGRES_VERSION=15
|
|
||||||
|
|
||||||
# Use build arguments for caching
|
# Use build arguments for caching
|
||||||
ARG BUILDTIME_DEPS="dirmngr ca-certificates software-properties-common gnupg gnupg2 apt-transport-https curl"
|
ARG BUILDTIME_DEPS="dirmngr ca-certificates software-properties-common gnupg gnupg2 apt-transport-https curl"
|
||||||
@@ -41,7 +52,7 @@ RUN --mount=type=cache,target=/root/.cache \
|
|||||||
curl -L https://github.com/cloudflare/cloudflared/releases/download/${CLOUDFLARED_VERSION}/cloudflared-linux-arm64 -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared \
|
curl -L https://github.com/cloudflare/cloudflared/releases/download/${CLOUDFLARED_VERSION}/cloudflared-linux-arm64 -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared \
|
||||||
;fi"
|
;fi"
|
||||||
|
|
||||||
COPY --from=minio/mc:RELEASE.2024-09-09T07-53-10Z /usr/bin/mc /usr/bin/mc
|
COPY --from=minio-client /usr/bin/mc /usr/bin/mc
|
||||||
RUN chmod +x /usr/bin/mc
|
RUN chmod +x /usr/bin/mc
|
||||||
|
|
||||||
RUN { \
|
RUN { \
|
||||||
|
@@ -1,4 +1,15 @@
|
|||||||
FROM serversideup/php:8.2-fpm-nginx-v2.2.1 AS base
|
# Versions
|
||||||
|
# https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-nginx-alpine
|
||||||
|
ARG SERVERSIDEUP_PHP_VERSION=8.2-fpm-nginx-v2.2.1
|
||||||
|
# https://github.com/minio/mc/releases
|
||||||
|
ARG MINIO_VERSION=RELEASE.2024-11-05T11-29-45Z
|
||||||
|
# https://github.com/cloudflare/cloudflared/releases
|
||||||
|
ARG CLOUDFLARED_VERSION=2024.11.0
|
||||||
|
# https://www.postgresql.org/support/versioning/ - Can not updated automatically so keep it at 15
|
||||||
|
ARG POSTGRES_VERSION=15
|
||||||
|
|
||||||
|
|
||||||
|
FROM serversideup/php:${SERVERSIDEUP_PHP_VERSION} AS base
|
||||||
WORKDIR /var/www/html
|
WORKDIR /var/www/html
|
||||||
|
|
||||||
COPY composer.json composer.lock ./
|
COPY composer.json composer.lock ./
|
||||||
@@ -11,12 +22,13 @@ COPY --from=base --chown=9999:9999 /var/www/html .
|
|||||||
RUN npm install
|
RUN npm install
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
FROM serversideup/php:8.2-fpm-nginx-v2.2.1
|
FROM minio/mc:${MINIO_VERSION} AS minio-client
|
||||||
|
|
||||||
|
FROM serversideup/php:${SERVERSIDEUP_PHP_VERSION}
|
||||||
|
|
||||||
ARG TARGETPLATFORM
|
ARG TARGETPLATFORM
|
||||||
# https://github.com/cloudflare/cloudflared/releases
|
ARG CLOUDFLARED_VERSION
|
||||||
ARG CLOUDFLARED_VERSION=2024.4.1
|
ARG POSTGRES_VERSION
|
||||||
ARG POSTGRES_VERSION=15
|
|
||||||
ARG CI=true
|
ARG CI=true
|
||||||
|
|
||||||
WORKDIR /var/www/html
|
WORKDIR /var/www/html
|
||||||
@@ -29,7 +41,7 @@ RUN curl -fSsL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmo
|
|||||||
RUN echo deb [arch=amd64,arm64,ppc64el signed-by=/usr/share/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt/ jammy-pgdg main | tee -a /etc/apt/sources.list.d/postgresql.list
|
RUN echo deb [arch=amd64,arm64,ppc64el signed-by=/usr/share/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt/ jammy-pgdg main | tee -a /etc/apt/sources.list.d/postgresql.list
|
||||||
|
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
RUN apt-get install postgresql-client-$POSTGRES_VERSION -y
|
RUN apt-get install postgresql-client-${POSTGRES_VERSION} -y
|
||||||
|
|
||||||
# Coolify requirements
|
# Coolify requirements
|
||||||
RUN apt-get install -y php8.2-pgsql openssh-client git git-lfs jq lsof vim
|
RUN apt-get install -y php8.2-pgsql openssh-client git git-lfs jq lsof vim
|
||||||
@@ -47,8 +59,10 @@ COPY --chmod=755 docker/prod/etc/s6-overlay/ /etc/s6-overlay/
|
|||||||
|
|
||||||
RUN php artisan route:clear
|
RUN php artisan route:clear
|
||||||
RUN php artisan view:clear
|
RUN php artisan view:clear
|
||||||
|
RUN php artisan config:clear
|
||||||
RUN php artisan route:cache
|
RUN php artisan route:cache
|
||||||
RUN php artisan view:cache
|
RUN php artisan view:cache
|
||||||
|
RUN php artisan config:cache
|
||||||
|
|
||||||
RUN echo "alias ll='ls -al'" >>/etc/bash.bashrc
|
RUN echo "alias ll='ls -al'" >>/etc/bash.bashrc
|
||||||
RUN echo "alias a='php artisan'" >>/etc/bash.bashrc
|
RUN echo "alias a='php artisan'" >>/etc/bash.bashrc
|
||||||
@@ -71,5 +85,5 @@ RUN { \
|
|||||||
echo 'post_max_size=256M'; \
|
echo 'post_max_size=256M'; \
|
||||||
} > /etc/php/current_version/cli/conf.d/upload-limits.ini
|
} > /etc/php/current_version/cli/conf.d/upload-limits.ini
|
||||||
|
|
||||||
COPY --from=minio/mc:RELEASE.2024-09-09T07-53-10Z /usr/bin/mc /usr/bin/mc
|
COPY --from=minio-client /usr/bin/mc /usr/bin/mc
|
||||||
RUN chmod +x /usr/bin/mc
|
RUN chmod +x /usr/bin/mc
|
@@ -1,16 +1,22 @@
|
|||||||
|
# Versions
|
||||||
|
# https://download.docker.com/linux/static/stable/
|
||||||
|
ARG DOCKER_VERSION=27.3.1
|
||||||
|
# https://github.com/docker/compose/releases
|
||||||
|
ARG DOCKER_COMPOSE_VERSION=2.30.3
|
||||||
|
# https://github.com/docker/buildx/releases
|
||||||
|
ARG DOCKER_BUILDX_VERSION=0.18.0
|
||||||
|
|
||||||
|
|
||||||
FROM debian:12-slim
|
FROM debian:12-slim
|
||||||
|
|
||||||
ARG TARGETPLATFORM
|
ARG TARGETPLATFORM
|
||||||
# https://download.docker.com/linux/static/stable/
|
ARG DOCKER_VERSION
|
||||||
ARG DOCKER_VERSION=26.1.2
|
ARG DOCKER_COMPOSE_VERSION
|
||||||
# https://github.com/docker/compose/releases
|
ARG DOCKER_BUILDX_VERSION
|
||||||
ARG DOCKER_COMPOSE_VERSION=2.27.0
|
|
||||||
# https://github.com/docker/buildx/releases
|
|
||||||
ARG DOCKER_BUILDX_VERSION=0.14.0
|
|
||||||
|
|
||||||
USER root
|
USER root
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
ENV PATH "$PATH:/host/usr/local/sbin:/host/usr/local/bin:/host/usr/sbin:/host/usr/bin:/host/sbin:/host/bin"
|
ENV PATH="/host/usr/local/sbin:/host/usr/local/bin:/host/usr/sbin:/host/usr/bin:/host/sbin:/host/bin:$PATH"
|
||||||
|
|
||||||
RUN apt update && apt -y install openssh-client openssh-server curl wget git jq jc
|
RUN apt update && apt -y install openssh-client openssh-server curl wget git jq jc
|
||||||
RUN mkdir -p ~/.docker/cli-plugins
|
RUN mkdir -p ~/.docker/cli-plugins
|
||||||
|
@@ -1,23 +0,0 @@
|
|||||||
# This is an example dynamic configuration.
|
|
||||||
http:
|
|
||||||
routers:
|
|
||||||
catchall:
|
|
||||||
entryPoints:
|
|
||||||
- http
|
|
||||||
- https
|
|
||||||
service: noop
|
|
||||||
rule: HostRegexp(`{catchall:.*}`)
|
|
||||||
priority: 1
|
|
||||||
middlewares:
|
|
||||||
- redirect-regexp
|
|
||||||
services:
|
|
||||||
noop:
|
|
||||||
loadBalancer:
|
|
||||||
servers:
|
|
||||||
- url: ''
|
|
||||||
middlewares:
|
|
||||||
redirect-regexp:
|
|
||||||
redirectRegex:
|
|
||||||
regex: '(.*)'
|
|
||||||
replacement: 'https://coolify.io'
|
|
||||||
permanent: false
|
|
@@ -1,14 +0,0 @@
|
|||||||
# This is an example dynamic configuration.
|
|
||||||
http:
|
|
||||||
routers:
|
|
||||||
coolify-http:
|
|
||||||
entryPoints:
|
|
||||||
- http
|
|
||||||
service: coolify
|
|
||||||
rule: Host(`coolify.io`)
|
|
||||||
services:
|
|
||||||
coolify:
|
|
||||||
loadBalancer:
|
|
||||||
servers:
|
|
||||||
-
|
|
||||||
url: 'http://coolify:80'
|
|
@@ -1,4 +1,4 @@
|
|||||||
openapi: 3.0.0
|
openapi: 3.1.0
|
||||||
info:
|
info:
|
||||||
title: Coolify
|
title: Coolify
|
||||||
version: '0.1'
|
version: '0.1'
|
||||||
|
@@ -9,7 +9,7 @@ CDN="https://cdn.coollabs.io/coolify-nightly"
|
|||||||
DATE=$(date +"%Y%m%d-%H%M%S")
|
DATE=$(date +"%Y%m%d-%H%M%S")
|
||||||
|
|
||||||
VERSION="1.6"
|
VERSION="1.6"
|
||||||
DOCKER_VERSION="26.0"
|
DOCKER_VERSION="27.3"
|
||||||
# TODO: Ask for a user
|
# TODO: Ask for a user
|
||||||
CURRENT_USER=$USER
|
CURRENT_USER=$USER
|
||||||
|
|
||||||
|
1084
package-lock.json
generated
1084
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
33
package.json
33
package.json
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"name": "coolify",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -6,28 +7,24 @@
|
|||||||
"build": "vite build"
|
"build": "vite build"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vitejs/plugin-vue": "4.5.1",
|
"@vitejs/plugin-vue": "5.2.0",
|
||||||
"autoprefixer": "10.4.19",
|
"autoprefixer": "10.4.20",
|
||||||
"axios": "1.7.5",
|
"axios": "1.7.7",
|
||||||
"laravel-echo": "1.16.1",
|
"laravel-echo": "1.17.0",
|
||||||
"laravel-vite-plugin": "0.8.1",
|
"laravel-vite-plugin": "1.0.6",
|
||||||
"postcss": "8.4.38",
|
"postcss": "8.4.49",
|
||||||
"pusher-js": "8.4.0-rc2",
|
"pusher-js": "8.4.0-rc2",
|
||||||
"tailwindcss": "3.4.4",
|
"tailwind-scrollbar": "^3.1.0",
|
||||||
"vite": "4.5.5",
|
"tailwindcss": "3.4.14",
|
||||||
"vue": "3.4.29"
|
"vite": "5.4.11",
|
||||||
|
"vue": "3.5.12"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tailwindcss/forms": "0.5.7",
|
"@tailwindcss/forms": "0.5.9",
|
||||||
"@tailwindcss/typography": "0.5.13",
|
"@tailwindcss/typography": "0.5.15",
|
||||||
"@xterm/addon-fit": "^0.10.0",
|
"@xterm/addon-fit": "^0.10.0",
|
||||||
"@xterm/xterm": "^5.5.0",
|
"@xterm/xterm": "^5.5.0",
|
||||||
"alpinejs": "3.14.0",
|
"alpinejs": "3.14.3",
|
||||||
"cookie": "^0.7.0",
|
"ioredis": "5.4.1"
|
||||||
"dotenv": "^16.4.5",
|
|
||||||
"ioredis": "5.4.1",
|
|
||||||
"node-pty": "^1.0.0",
|
|
||||||
"tailwindcss-scrollbar": "0.1.0",
|
|
||||||
"ws": "^8.17.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,21 +0,0 @@
|
|||||||
<IfModule mod_rewrite.c>
|
|
||||||
<IfModule mod_negotiation.c>
|
|
||||||
Options -MultiViews -Indexes
|
|
||||||
</IfModule>
|
|
||||||
|
|
||||||
RewriteEngine On
|
|
||||||
|
|
||||||
# Handle Authorization Header
|
|
||||||
RewriteCond %{HTTP:Authorization} .
|
|
||||||
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
|
||||||
|
|
||||||
# Redirect Trailing Slashes If Not A Folder...
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
|
||||||
RewriteCond %{REQUEST_URI} (.+)/$
|
|
||||||
RewriteRule ^ %1 [L,R=301]
|
|
||||||
|
|
||||||
# Send Requests To Front Controller...
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-f
|
|
||||||
RewriteRule ^ index.php [L]
|
|
||||||
</IfModule>
|
|
@@ -4,8 +4,6 @@
|
|||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
html,
|
html,
|
||||||
body {
|
body {
|
||||||
@apply h-full bg-neutral-50 text-neutral-800 dark:bg-base dark:text-neutral-400;
|
@apply h-full bg-neutral-50 text-neutral-800 dark:bg-base dark:text-neutral-400;
|
||||||
@@ -172,10 +170,6 @@ section {
|
|||||||
@apply bg-error;
|
@apply bg-error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* [type='checkbox']:checked {
|
|
||||||
background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='black' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
|
|
||||||
} */
|
|
||||||
|
|
||||||
.menu {
|
.menu {
|
||||||
@apply flex items-center gap-1;
|
@apply flex items-center gap-1;
|
||||||
}
|
}
|
||||||
@@ -197,7 +191,7 @@ section {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.scrollbar {
|
.scrollbar {
|
||||||
@apply scrollbar-thumb-coollabs-100 dark:scrollbar-track-coolgray-200 scrollbar-track-neutral-200 scrollbar-w-2;
|
@apply scrollbar-thumb-coollabs-100 dark:scrollbar-track-coolgray-200 scrollbar-track-neutral-200 scrollbar-thin;
|
||||||
}
|
}
|
||||||
|
|
||||||
.main {
|
.main {
|
||||||
|
32
resources/js/bootstrap.js
vendored
32
resources/js/bootstrap.js
vendored
@@ -1,32 +0,0 @@
|
|||||||
/**
|
|
||||||
* We'll load the axios HTTP library which allows us to easily issue requests
|
|
||||||
* to our Laravel back-end. This library automatically handles sending the
|
|
||||||
* CSRF token as a header based on the value of the "XSRF" token cookie.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// import axios from 'axios';
|
|
||||||
// window.axios = axios;
|
|
||||||
|
|
||||||
// window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Echo exposes an expressive API for subscribing to channels and listening
|
|
||||||
* for events that are broadcast by Laravel. Echo and event broadcasting
|
|
||||||
* allows your team to easily build robust real-time web applications.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// import Echo from 'laravel-echo';
|
|
||||||
|
|
||||||
// import Pusher from 'pusher-js';
|
|
||||||
// window.Pusher = Pusher;
|
|
||||||
|
|
||||||
// window.Echo = new Echo({
|
|
||||||
// broadcaster: 'pusher',
|
|
||||||
// key: import.meta.env.VITE_PUSHER_APP_KEY,
|
|
||||||
// cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1',
|
|
||||||
// wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`,
|
|
||||||
// wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,
|
|
||||||
// wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,
|
|
||||||
// forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',
|
|
||||||
// enabledTransports: ['ws', 'wss'],
|
|
||||||
// });
|
|
@@ -18,7 +18,7 @@
|
|||||||
@else
|
@else
|
||||||
<div>Transactional emails are not active on this instance.</div>
|
<div>Transactional emails are not active on this instance.</div>
|
||||||
<div>See how to set it in our <a class="dark:text-white" target="_blank"
|
<div>See how to set it in our <a class="dark:text-white" target="_blank"
|
||||||
href="{{ config('constants.docs.base_url') }}">docs</a>, or how to
|
href="{{ config('constants.urls.docs') }}">docs</a>, or how to
|
||||||
manually reset password.
|
manually reset password.
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
$disableTwoStepConfirmation = data_get(InstanceSettings::get(), 'disable_two_step_confirmation');
|
$disableTwoStepConfirmation = data_get(InstanceSettings::get(), 'disable_two_step_confirmation');
|
||||||
@endphp
|
@endphp
|
||||||
|
|
||||||
<div x-data="{
|
<div wire:ignore x-data="{
|
||||||
modalOpen: false,
|
modalOpen: false,
|
||||||
step: {{ empty($checkboxes) ? 2 : 1 }},
|
step: {{ empty($checkboxes) ? 2 : 1 }},
|
||||||
initialStep: {{ empty($checkboxes) ? 2 : 1 }},
|
initialStep: {{ empty($checkboxes) ? 2 : 1 }},
|
||||||
@@ -106,8 +106,8 @@
|
|||||||
this.selectedActions.push(id);
|
this.selectedActions.push(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}" @keydown.escape.window="modalOpen = false; resetModal()" :class="{ 'z-40': modalOpen }"
|
}" @keydown.escape.window="modalOpen = false; resetModal()"
|
||||||
class="relative w-auto h-auto">
|
:class="{ 'z-40': modalOpen }" class="relative w-auto h-auto">
|
||||||
@if ($customButton)
|
@if ($customButton)
|
||||||
@if ($buttonFullWidth)
|
@if ($buttonFullWidth)
|
||||||
<x-forms.button @click="modalOpen=true" class="w-full">
|
<x-forms.button @click="modalOpen=true" class="w-full">
|
||||||
@@ -302,7 +302,8 @@
|
|||||||
</x-forms.button>
|
</x-forms.button>
|
||||||
@endif
|
@endif
|
||||||
<x-forms.button
|
<x-forms.button
|
||||||
x-bind:disabled="!disableTwoStepConfirmation && confirmWithText && userConfirmationText !== confirmationText"
|
x-bind:disabled="!disableTwoStepConfirmation && confirmWithText && userConfirmationText !==
|
||||||
|
confirmationText"
|
||||||
class="w-auto" isError
|
class="w-auto" isError
|
||||||
@click="
|
@click="
|
||||||
if (dispatchEvent) {
|
if (dispatchEvent) {
|
||||||
@@ -337,11 +338,14 @@
|
|||||||
Your Password
|
Your Password
|
||||||
</label>
|
</label>
|
||||||
<form @submit.prevent="false" @keydown.enter.prevent>
|
<form @submit.prevent="false" @keydown.enter.prevent>
|
||||||
<input type="text" name="username" autocomplete="username" value="{{ auth()->user()->email }}" style="display: none;">
|
<input type="text" name="username" autocomplete="username"
|
||||||
<input type="password" id="password-confirm-{{ $passwordConfirm }}" x-model="password"
|
value="{{ auth()->user()->email }}" style="display: none;">
|
||||||
class="w-full input" placeholder="Enter your password" autocomplete="current-password">
|
<input type="password" id="password-confirm-{{ $passwordConfirm }}"
|
||||||
|
x-model="password" class="w-full input" placeholder="Enter your password"
|
||||||
|
autocomplete="current-password">
|
||||||
</form>
|
</form>
|
||||||
<p x-show="passwordError" x-text="passwordError" class="mt-1 text-sm text-red-500"></p>
|
<p x-show="passwordError" x-text="passwordError" class="mt-1 text-sm text-red-500">
|
||||||
|
</p>
|
||||||
@error('password')
|
@error('password')
|
||||||
<p class="mt-1 text-sm text-red-500">{{ $message }}</p>
|
<p class="mt-1 text-sm text-red-500">{{ $message }}</p>
|
||||||
@enderror
|
@enderror
|
||||||
|
@@ -262,7 +262,7 @@
|
|||||||
your self-hosted instance?
|
your self-hosted instance?
|
||||||
<x-forms.button>
|
<x-forms.button>
|
||||||
<a class="font-bold dark:text-white hover:no-underline"
|
<a class="font-bold dark:text-white hover:no-underline"
|
||||||
href="{{ config('coolify.contact') }}">Contact
|
href="{{ config('constants.urls.contact') }}">Contact
|
||||||
Us</a>
|
Us</a>
|
||||||
</x-forms.button>
|
</x-forms.button>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -7,12 +7,6 @@
|
|||||||
href="{{ route('settings.index') }}">
|
href="{{ route('settings.index') }}">
|
||||||
<button>Configuration</button>
|
<button>Configuration</button>
|
||||||
</a>
|
</a>
|
||||||
@if (isCloud())
|
|
||||||
<a class="{{ request()->routeIs('settings.license') ? 'dark:text-white' : '' }}"
|
|
||||||
href="{{ route('settings.license') }}">
|
|
||||||
<button>Resale License</button>
|
|
||||||
</a>
|
|
||||||
@endif
|
|
||||||
<a class="{{ request()->routeIs('settings.backup') ? 'dark:text-white' : '' }}"
|
<a class="{{ request()->routeIs('settings.backup') ? 'dark:text-white' : '' }}"
|
||||||
href="{{ route('settings.backup') }}">
|
href="{{ route('settings.backup') }}">
|
||||||
<button>Backup</button>
|
<button>Backup</button>
|
||||||
|
@@ -14,7 +14,7 @@
|
|||||||
<a href="/">
|
<a href="/">
|
||||||
<x-forms.button>Go back home</x-forms.button>
|
<x-forms.button>Go back home</x-forms.button>
|
||||||
</a>
|
</a>
|
||||||
<a target="_blank" class="text-xs" href="{{ config('coolify.contact') }}">Contact
|
<a target="_blank" class="text-xs" href="{{ config('constants.urls.contact') }}">Contact
|
||||||
support
|
support
|
||||||
<x-external-link />
|
<x-external-link />
|
||||||
</a>
|
</a>
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
<a href="/">
|
<a href="/">
|
||||||
<x-forms.button>Go back home</x-forms.button>
|
<x-forms.button>Go back home</x-forms.button>
|
||||||
</a>
|
</a>
|
||||||
<a target="_blank" class="text-xs" href="{{ config('coolify.contact') }}">Contact
|
<a target="_blank" class="text-xs" href="{{ config('constants.urls.contact') }}">Contact
|
||||||
support
|
support
|
||||||
<x-external-link />
|
<x-external-link />
|
||||||
</a>
|
</a>
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
<a href="/">
|
<a href="/">
|
||||||
<x-forms.button>Go back home</x-forms.button>
|
<x-forms.button>Go back home</x-forms.button>
|
||||||
</a>
|
</a>
|
||||||
<a target="_blank" class="text-xs" href="{{ config('coolify.contact') }}">Contact
|
<a target="_blank" class="text-xs" href="{{ config('constants.urls.contact') }}">Contact
|
||||||
support
|
support
|
||||||
<x-external-link />
|
<x-external-link />
|
||||||
</a>
|
</a>
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
<a href="/">
|
<a href="/">
|
||||||
<x-forms.button>Go back home</x-forms.button>
|
<x-forms.button>Go back home</x-forms.button>
|
||||||
</a>
|
</a>
|
||||||
<a target="_blank" class="text-xs" href="{{ config('coolify.contact') }}">Contact
|
<a target="_blank" class="text-xs" href="{{ config('constants.urls.contact') }}">Contact
|
||||||
support
|
support
|
||||||
<x-external-link />
|
<x-external-link />
|
||||||
</a>
|
</a>
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
<a href="/">
|
<a href="/">
|
||||||
<x-forms.button>Go back home</x-forms.button>
|
<x-forms.button>Go back home</x-forms.button>
|
||||||
</a>
|
</a>
|
||||||
<a target="_blank" class="text-xs" href="{{ config('coolify.contact') }}">Contact
|
<a target="_blank" class="text-xs" href="{{ config('constants.urls.contact') }}">Contact
|
||||||
support
|
support
|
||||||
<x-external-link />
|
<x-external-link />
|
||||||
</a>
|
</a>
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
<a href="/">
|
<a href="/">
|
||||||
<x-forms.button>Go back home</x-forms.button>
|
<x-forms.button>Go back home</x-forms.button>
|
||||||
</a>
|
</a>
|
||||||
<a target="_blank" class="text-xs" href="{{ config('coolify.contact') }}">Contact
|
<a target="_blank" class="text-xs" href="{{ config('constants.urls.contact') }}">Contact
|
||||||
support
|
support
|
||||||
<x-external-link />
|
<x-external-link />
|
||||||
</a>
|
</a>
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
<a href="/">
|
<a href="/">
|
||||||
<x-forms.button>Go back home</x-forms.button>
|
<x-forms.button>Go back home</x-forms.button>
|
||||||
</a>
|
</a>
|
||||||
<a target="_blank" class="text-xs" href="{{ config('coolify.contact') }}">Contact
|
<a target="_blank" class="text-xs" href="{{ config('constants.urls.contact') }}">Contact
|
||||||
support
|
support
|
||||||
<x-external-link />
|
<x-external-link />
|
||||||
</a>
|
</a>
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
<a href="/">
|
<a href="/">
|
||||||
<x-forms.button>Go back home</x-forms.button>
|
<x-forms.button>Go back home</x-forms.button>
|
||||||
</a>
|
</a>
|
||||||
<a target="_blank" class="text-xs" href="{{ config('coolify.contact') }}">Contact
|
<a target="_blank" class="text-xs" href="{{ config('constants.urls.contact') }}">Contact
|
||||||
support
|
support
|
||||||
<x-external-link />
|
<x-external-link />
|
||||||
</a>
|
</a>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
patience.
|
patience.
|
||||||
</p>
|
</p>
|
||||||
<div class="flex items-center mt-10 gap-x-6">
|
<div class="flex items-center mt-10 gap-x-6">
|
||||||
<a target="_blank" class="text-xs" href="{{ config('coolify.contact') }}">Contact
|
<a target="_blank" class="text-xs" href="{{ config('constants.urls.contact') }}">Contact
|
||||||
support
|
support
|
||||||
<x-external-link />
|
<x-external-link />
|
||||||
</a>
|
</a>
|
||||||
|
@@ -84,9 +84,9 @@
|
|||||||
window.Pusher = Pusher;
|
window.Pusher = Pusher;
|
||||||
window.Echo = new Echo({
|
window.Echo = new Echo({
|
||||||
broadcaster: 'pusher',
|
broadcaster: 'pusher',
|
||||||
cluster: "{{ env('PUSHER_HOST') }}" || window.location.hostname,
|
cluster: "{{ config('constants.pusher.host') }}" || window.location.hostname,
|
||||||
key: "{{ env('PUSHER_APP_KEY') }}" || 'coolify',
|
key: "{{ config('constants.pusher.app_key') }}" || 'coolify',
|
||||||
wsHost: "{{ env('PUSHER_HOST') }}" || window.location.hostname,
|
wsHost: "{{ config('constants.pusher.host') }}" || window.location.hostname,
|
||||||
wsPort: "{{ getRealtime() }}",
|
wsPort: "{{ getRealtime() }}",
|
||||||
wssPort: "{{ getRealtime() }}",
|
wssPort: "{{ getRealtime() }}",
|
||||||
forceTLS: false,
|
forceTLS: false,
|
||||||
|
@@ -1,13 +0,0 @@
|
|||||||
<div class="pb-10" x-data>
|
|
||||||
<h1>Compose</h1>
|
|
||||||
<div>All kinds of compose files.</div>
|
|
||||||
<h3 class="pt-4">Services</h3>
|
|
||||||
@foreach ($services as $serviceName => $value)
|
|
||||||
<x-forms.button wire:click="setService('{{ $serviceName }}')">{{ Str::headline($serviceName) }}</x-forms.button>
|
|
||||||
@endforeach
|
|
||||||
<h3 class="pt-4">Base64 En/Decode</h3>
|
|
||||||
<x-forms.button x-on:click="copyToClipboard('{{ $base64 }}')">Copy Base64 Compose</x-forms.button>
|
|
||||||
<div class="pt-4">
|
|
||||||
<x-forms.textarea realtimeValidation rows="40" id="compose"></x-forms.textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@@ -1,15 +0,0 @@
|
|||||||
<div>
|
|
||||||
<h2>S3 Test</h2>
|
|
||||||
<form wire:submit="save">
|
|
||||||
<input type="file" wire:model="file">
|
|
||||||
@error('file')
|
|
||||||
<span class="error">{{ $message }}</span>
|
|
||||||
@enderror
|
|
||||||
<div wire:loading wire:target="file">Uploading to server...</div>
|
|
||||||
@if ($file)
|
|
||||||
<x-forms.button type="submit">Upload file to s3:/files</x-forms.button>
|
|
||||||
@endif
|
|
||||||
</form>
|
|
||||||
<h4>Functions</h4>
|
|
||||||
<x-forms.button wire:click="get_files">Get s3:/files</x-forms.button>
|
|
||||||
</div>
|
|
@@ -26,9 +26,9 @@
|
|||||||
<script>
|
<script>
|
||||||
// expose terminal config to the terminal.js file
|
// expose terminal config to the terminal.js file
|
||||||
window.terminalConfig = {
|
window.terminalConfig = {
|
||||||
protocol: "{{ env('TERMINAL_PROTOCOL') }}",
|
protocol: "{{ config('constants.terminal.protocol') }}",
|
||||||
host: "{{ env('TERMINAL_HOST') }}",
|
host: "{{ config('constants.terminal.host') }}",
|
||||||
port: "{{ env('TERMINAL_PORT') }}"
|
port: "{{ config('constants.terminal.port') }}"
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@endscript
|
@endscript
|
||||||
|
@@ -100,7 +100,7 @@
|
|||||||
placeholder="1.1.1.1,8.8.8.8" />
|
placeholder="1.1.1.1,8.8.8.8" />
|
||||||
<h4 class="pt-6">Update</h4>
|
<h4 class="pt-6">Update</h4>
|
||||||
<div class="text-right md:w-96">
|
<div class="text-right md:w-96">
|
||||||
@if (!is_null(env('AUTOUPDATE', null)))
|
@if (!is_null(config('constants.coolify.autoupdate', null)))
|
||||||
<div class="text-right md:w-96">
|
<div class="text-right md:w-96">
|
||||||
<x-forms.checkbox instantSave helper="AUTOUPDATE is set in .env file, you need to modify it there."
|
<x-forms.checkbox instantSave helper="AUTOUPDATE is set in .env file, you need to modify it there."
|
||||||
disabled id="is_auto_update_enabled" label="Enabled" />
|
disabled id="is_auto_update_enabled" label="Enabled" />
|
||||||
@@ -117,7 +117,7 @@
|
|||||||
<x-forms.button wire:click='checkManually'>Check Manually</x-forms.button>
|
<x-forms.button wire:click='checkManually'>Check Manually</x-forms.button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@if (is_null(env('AUTOUPDATE', null)) && $is_auto_update_enabled)
|
@if (is_null(config('constants.coolify.autoupdate', null)) && $is_auto_update_enabled)
|
||||||
<x-forms.input required id="auto_update_frequency" label="Auto Update Frequency" placeholder="0 0 * * *"
|
<x-forms.input required id="auto_update_frequency" label="Auto Update Frequency" placeholder="0 0 * * *"
|
||||||
helper="Cron expression for auto update frequency (automatically update coolify).<br>You can use every_minute, hourly, daily, weekly, monthly, yearly.<br><br>Default is every day at 00:00" />
|
helper="Cron expression for auto update frequency (automatically update coolify).<br>You can use every_minute, hourly, daily, weekly, monthly, yearly.<br><br>Default is every day at 00:00" />
|
||||||
@endif
|
@endif
|
||||||
|
@@ -1,28 +0,0 @@
|
|||||||
<div>
|
|
||||||
<x-settings.navbar />
|
|
||||||
<h2>Resale License</h2>
|
|
||||||
<form wire:submit='submit' class="flex flex-col gap-2">
|
|
||||||
<div>
|
|
||||||
@if ($settings->is_resale_license_active)
|
|
||||||
<div class="text-success">License is active</div>
|
|
||||||
@else
|
|
||||||
<div class="text-error">License is not active</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
|
||||||
<div class="flex gap-2">
|
|
||||||
<x-forms.input type="password" id="settings.resale_license"
|
|
||||||
placeholder="eg: BE558E91-0CC5-4AA2-B1C0-B6403C2988DD" label="License Key" />
|
|
||||||
<x-forms.input type="password" id="instance_id" label="Instance Id (do not change this)" disabled />
|
|
||||||
</div>
|
|
||||||
<div class="flex gap-2">
|
|
||||||
<x-forms.button type="submit">
|
|
||||||
Check License
|
|
||||||
</x-forms.button>
|
|
||||||
</div>
|
|
||||||
@if (session()->has('error'))
|
|
||||||
<div class="text-error">
|
|
||||||
{!! session('error') !!}
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
</form>
|
|
||||||
</div>
|
|
@@ -254,7 +254,7 @@
|
|||||||
const name = @js($name);
|
const name = @js($name);
|
||||||
const isDev = @js(config('app.env')) ===
|
const isDev = @js(config('app.env')) ===
|
||||||
'local';
|
'local';
|
||||||
const devWebhook = @js(config('coolify.dev_webhook'));
|
const devWebhook = @js(config('constants.webhooks.dev_webhook'));
|
||||||
if (isDev && devWebhook) {
|
if (isDev && devWebhook) {
|
||||||
baseUrl = devWebhook;
|
baseUrl = devWebhook;
|
||||||
}
|
}
|
||||||
|
@@ -45,7 +45,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pt-4">
|
<div class="pt-4">
|
||||||
If you have any problems, please <a class="underline dark:text-white" href="{{ config('coolify.contact') }}"
|
If you have any problems, please <a class="underline dark:text-white" href="{{ config('constants.urls.contact') }}"
|
||||||
target="_blank">contact us.</a>
|
target="_blank">contact us.</a>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Controllers\MagicController;
|
|
||||||
use App\Http\Controllers\OauthController;
|
use App\Http\Controllers\OauthController;
|
||||||
use App\Http\Controllers\UploadController;
|
use App\Http\Controllers\UploadController;
|
||||||
use App\Http\Middleware\ApiAllowed;
|
use App\Http\Middleware\ApiAllowed;
|
||||||
@@ -10,7 +9,6 @@ use App\Livewire\Boarding\Index as BoardingIndex;
|
|||||||
use App\Livewire\Dashboard;
|
use App\Livewire\Dashboard;
|
||||||
use App\Livewire\Destination\Index as DestinationIndex;
|
use App\Livewire\Destination\Index as DestinationIndex;
|
||||||
use App\Livewire\Destination\Show as DestinationShow;
|
use App\Livewire\Destination\Show as DestinationShow;
|
||||||
use App\Livewire\Dev\Compose as Compose;
|
|
||||||
use App\Livewire\ForcePasswordReset;
|
use App\Livewire\ForcePasswordReset;
|
||||||
use App\Livewire\Notifications\Discord as NotificationDiscord;
|
use App\Livewire\Notifications\Discord as NotificationDiscord;
|
||||||
use App\Livewire\Notifications\Email as NotificationEmail;
|
use App\Livewire\Notifications\Email as NotificationEmail;
|
||||||
@@ -51,7 +49,6 @@ use App\Livewire\Server\Proxy\Show as ProxyShow;
|
|||||||
use App\Livewire\Server\Resources as ResourcesShow;
|
use App\Livewire\Server\Resources as ResourcesShow;
|
||||||
use App\Livewire\Server\Show as ServerShow;
|
use App\Livewire\Server\Show as ServerShow;
|
||||||
use App\Livewire\Settings\Index as SettingsIndex;
|
use App\Livewire\Settings\Index as SettingsIndex;
|
||||||
use App\Livewire\Settings\License as SettingsLicense;
|
|
||||||
use App\Livewire\SettingsBackup;
|
use App\Livewire\SettingsBackup;
|
||||||
use App\Livewire\SettingsEmail;
|
use App\Livewire\SettingsEmail;
|
||||||
use App\Livewire\SettingsOauth;
|
use App\Livewire\SettingsOauth;
|
||||||
@@ -85,9 +82,6 @@ Route::group(['middleware' => ['auth:sanctum', ApiAllowed::class]], function ()
|
|||||||
Route::get('/docs/api', DocumentationController::class)->name('redoc.documentation');
|
Route::get('/docs/api', DocumentationController::class)->name('redoc.documentation');
|
||||||
Route::get('/docs/api/definition', DefinitionController::class)->name('redoc.definition');
|
Route::get('/docs/api/definition', DefinitionController::class)->name('redoc.definition');
|
||||||
});
|
});
|
||||||
if (isDev()) {
|
|
||||||
Route::get('/dev/compose', Compose::class)->name('dev.compose');
|
|
||||||
}
|
|
||||||
|
|
||||||
Route::get('/admin', AdminIndex::class)->name('admin.index');
|
Route::get('/admin', AdminIndex::class)->name('admin.index');
|
||||||
|
|
||||||
@@ -127,7 +121,6 @@ Route::middleware(['auth', 'verified'])->group(function () {
|
|||||||
Route::get('/settings/backup', SettingsBackup::class)->name('settings.backup');
|
Route::get('/settings/backup', SettingsBackup::class)->name('settings.backup');
|
||||||
Route::get('/settings/email', SettingsEmail::class)->name('settings.email');
|
Route::get('/settings/email', SettingsEmail::class)->name('settings.email');
|
||||||
Route::get('/settings/oauth', SettingsOauth::class)->name('settings.oauth');
|
Route::get('/settings/oauth', SettingsOauth::class)->name('settings.oauth');
|
||||||
Route::get('/settings/license', SettingsLicense::class)->name('settings.license');
|
|
||||||
|
|
||||||
Route::get('/profile', ProfileIndex::class)->name('profile');
|
Route::get('/profile', ProfileIndex::class)->name('profile');
|
||||||
|
|
||||||
|
@@ -1,2 +0,0 @@
|
|||||||
psql -U postgres -c "create table if not exists test (id SERIAL UNIQUE NOT NULL,article TEXT);"
|
|
||||||
psql -U postgres -c "insert into test (article) select md5(random()::text) from generate_series(1, 1000000) s(i);"
|
|
@@ -9,7 +9,7 @@ CDN="https://cdn.coollabs.io/coolify"
|
|||||||
DATE=$(date +"%Y%m%d-%H%M%S")
|
DATE=$(date +"%Y%m%d-%H%M%S")
|
||||||
|
|
||||||
VERSION="1.6"
|
VERSION="1.6"
|
||||||
DOCKER_VERSION="26.0"
|
DOCKER_VERSION="27.3"
|
||||||
# TODO: Ask for a user
|
# TODO: Ask for a user
|
||||||
CURRENT_USER=$USER
|
CURRENT_USER=$USER
|
||||||
|
|
||||||
|
@@ -12,7 +12,8 @@ const colors = {
|
|||||||
"coolgray-400": "#282828",
|
"coolgray-400": "#282828",
|
||||||
"coolgray-500": "#323232",
|
"coolgray-500": "#323232",
|
||||||
}
|
}
|
||||||
module.exports = {
|
|
||||||
|
export default {
|
||||||
darkMode: "selector",
|
darkMode: "selector",
|
||||||
content: [
|
content: [
|
||||||
'./storage/framework/views/*.php',
|
'./storage/framework/views/*.php',
|
||||||
@@ -30,7 +31,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
require("tailwindcss-scrollbar"),
|
require("tailwind-scrollbar"),
|
||||||
require("@tailwindcss/typography"),
|
require("@tailwindcss/typography"),
|
||||||
require("@tailwindcss/forms")
|
require("@tailwindcss/forms")
|
||||||
],
|
],
|
||||||
|
@@ -5,22 +5,13 @@ import vue from "@vitejs/plugin-vue";
|
|||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
server: {
|
server: {
|
||||||
watch: {
|
watch: {
|
||||||
ignored: ['**/_data/**'],
|
ignored: [
|
||||||
|
"**/dev_*_data/**",
|
||||||
|
"**/storage/**",
|
||||||
|
],
|
||||||
},
|
},
|
||||||
host: "0.0.0.0",
|
host: "0.0.0.0",
|
||||||
hmr: process.env.GITPOD_WORKSPACE_URL
|
hmr: {
|
||||||
? {
|
|
||||||
// Due to port forwarding, we have to replace
|
|
||||||
// 'https' with the forwarded port, as this
|
|
||||||
// is the URI created by GitPod.
|
|
||||||
host: process.env.GITPOD_WORKSPACE_URL.replace(
|
|
||||||
"https://",
|
|
||||||
"5173-"
|
|
||||||
),
|
|
||||||
protocol: "wss",
|
|
||||||
clientPort: 443,
|
|
||||||
}
|
|
||||||
: {
|
|
||||||
host: process.env.VITE_HOST,
|
host: process.env.VITE_HOST,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user