diff --git a/.gitpod.yml b/.gitpod.yml index 228f1b94c..6d9242770 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -12,7 +12,7 @@ tasks: ./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 + cat .jesus-is-king gp sync-done spin-is-ready - name: Install Node dependencies and run Vite diff --git a/.coolify-logo b/.jesus-is-king similarity index 100% rename from .coolify-logo rename to .jesus-is-king diff --git a/.tinkerwell/snippets/SendEmail.php b/.tinkerwell/snippets/SendEmail.php index 07edfe8cd..8d06b7e02 100644 --- a/.tinkerwell/snippets/SendEmail.php +++ b/.tinkerwell/snippets/SendEmail.php @@ -19,7 +19,7 @@ foreach ($users as $user) { <<id EOF diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 246e0dae5..000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,94 +0,0 @@ -# Citizen Code of Conduct - -## 1. Purpose - -A primary goal of Coolify is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof). - -This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior. - -We invite all those who participate in Coolify to help us create safe and positive experiences for everyone. - -## 2. Open [Source/Culture/Tech] Citizenship - -A supplemental goal of this Code of Conduct is to increase open [source/culture/tech] citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community. - -Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. - -If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know. - -## 3. Expected Behavior - -The following behaviors are expected and requested of all community members: - - * Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community. - * Exercise consideration and respect in your speech and actions. - * Attempt collaboration before conflict. - * Refrain from demeaning, discriminatory, or harassing behavior and speech. - * Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential. - * Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations. - -## 4. Unacceptable Behavior - -The following behaviors are considered harassment and are unacceptable within our community: - - * Violence, threats of violence or violent language directed against another person. - * Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. - * Posting or displaying sexually explicit or violent material. - * Posting or threatening to post other people's personally identifying information ("doxing"). - * Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability. - * Inappropriate photography or recording. - * Inappropriate physical contact. You should have someone's consent before touching them. - * Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances. - * Deliberate intimidation, stalking or following (online or in person). - * Advocating for, or encouraging, any of the above behavior. - * Sustained disruption of community events, including talks and presentations. - -## 5. Weapons Policy - -No weapons will be allowed at Coolify events, community spaces, or in other spaces covered by the scope of this Code of Conduct. Weapons include but are not limited to guns, explosives (including fireworks), and large knives such as those used for hunting or display, as well as any other item used for the purpose of causing injury or harm to others. Anyone seen in possession of one of these items will be asked to leave immediately, and will only be allowed to return without the weapon. Community members are further expected to comply with all state and local laws on this matter. - -## 6. Consequences of Unacceptable Behavior - -Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated. - -Anyone asked to stop unacceptable behavior is expected to comply immediately. - -If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event). - -## 7. Reporting Guidelines - -If you are subject to or witness unacceptable behavior, or have any other concerns, please notify a community organizer as soon as possible. hi@coollabs.io. - - - -Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress. - -## 8. Addressing Grievances - -If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify coollabsio with a concise description of your grievance. Your grievance will be handled in accordance with our existing governing policies. - - - -## 9. Scope - -We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues--online and in-person--as well as in all one-on-one communications pertaining to community business. - -This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members. - -## 10. Contact info - -hi@coollabs.io - -## 11. License and attribution - -The Citizen Code of Conduct is distributed by [Stumptown Syndicate](http://stumptownsyndicate.org) under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). - -Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy). - -_Revision 2.3. Posted 6 March 2017._ - -_Revision 2.2. Posted 4 February 2016._ - -_Revision 2.1. Posted 23 June 2014._ - -_Revision 2.0, adopted by the [Stumptown Syndicate](http://stumptownsyndicate.org) board on 10 January 2013. Posted 17 March 2013._ diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md deleted file mode 100644 index c6a5b3273..000000000 --- a/CONTRIBUTION.md +++ /dev/null @@ -1,34 +0,0 @@ -# Contributing - -> "First, thanks for considering to contribute to my project. - It really means a lot!" - [@andrasbacsai](https://github.com/andrasbacsai) - -You can ask for guidance anytime on our -[Discord server](https://coollabs.io/discord) in the `#contribution` channel. - -## Code Contribution - -### 1) Setup your development environment - -- You need to have Docker Engine (or equivalent) [installed](https://docs.docker.com/engine/install/) on your system. -- For better DX, install [Spin](https://serversideup.net/open-source/spin/). - -### 2) Set your environment variables - -- Copy [.env.development.example](./.env.development.example) to .env. - -## 3) Start & setup Coolify - -- Run `spin up` - You can notice that errors will be thrown. Don't worry. - - If you see weird permission errors, especially on Mac, run `sudo spin up` instead. - -### 4) Start development -You can login your Coolify instance at `localhost:8000` with `test@example.com` and `password`. - -Your horizon (Laravel scheduler): `localhost:8000/horizon` - Only reachable if you logged in with root user. - -Mails are caught by Mailpit: `localhost:8025` - -## New Service Contribution -Check out the docs [here](https://coolify.io/docs/how-to-add-a-service). - diff --git a/README.md b/README.md deleted file mode 100644 index 6e6d80c59..000000000 --- a/README.md +++ /dev/null @@ -1,105 +0,0 @@ -# About the Project - -Coolify is an open-source & self-hostable alternative to Heroku / Netlify / Vercel / etc. - -It helps you to manage your servers, applications, databases on your own hardware, all you need is SSH connection. You can manage VPS, Bare Metal, Raspberry PI's anything. - -Imagine if you could have the ease of a cloud but with your own servers. That is **Coolify**. - -No vendor lock-in, which means that all the configuration for your applications/databases/etc are saved to your server. So if you decide to stop using Coolify (oh nooo), you could still manage your running resources. You just lose the automations and all the magic. 🪄️ - -For more information, take a look at our landing page [here](https://coolify.io). - -# Installation - -```bash -curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash -``` -You can find the installation script source [here](./scripts/install.sh). - -# Support - -Contact us [here](https://coolify.io/docs/contact). - -# Donations -To stay completely free, open-source, no feature behind paywall and evolve the project, we need your help. If you like Coolify, please consider donating to help us fund the future development of the project. - -https://coolify.io/sponsorships - -Thank you so much! - -Special thanks to our biggest sponsors, [CCCareers](https://cccareers.org/) and [Appwrite](https://appwrite.io)! - -cccareers logo -appwrite logo - -## Github Sponsors ($40+) -CryptoJobsList -typebot -BC Direct -Corentin Clichy -Corentin Clichy -Niklas Lausch -Pixel Infinito -Tyler Whitesides -NiftyCo -Imre Ujlaki -Ilias Ism -Paweł Pierścionek -Michael Mazurczak - -## Organizations - - - - - - - - - - - -## Individuals - - - -# Cloud - -If you do not want to self-host Coolify, there is a paid cloud version available: https://app.coolify.io - -For more information & pricing, take a look at our landing page [here](https://coolify.io). - -## Why should I use the Cloud version? -The recommended way to use Coolify is to have one server for Coolify and one (or more) for the resources you are deploying. A server is around 4-5$/month. - -By subscribing to the cloud version, you get the Coolify server for the same price, but with: -- High-availability -- Free email notifications -- Better support -- Less maintenance for you - - -# Recognitions - -

- - Featured on Hacker News - -

- -Coolify - An open-source & self-hostable Heroku, Netlify alternative | Product Hunt - -coollabsio%2Fcoolify | Trendshift - -# Repo Activity - -![Alt](https://repobeats.axiom.co/api/embed/eab1c8066f9c59d0ad37b76c23ebb5ccac4278ae.svg "Repobeats analytics image") - -# Star History - -[![Star History Chart](https://api.star-history.com/svg?repos=coollabsio/coolify&type=Date)](https://star-history.com/#coollabsio/coolify&Date) diff --git a/app/Actions/Server/UpdateCoolify.php b/app/Actions/Server/UpdateCoolify.php index 09efb848e..38743aee7 100644 --- a/app/Actions/Server/UpdateCoolify.php +++ b/app/Actions/Server/UpdateCoolify.php @@ -64,7 +64,7 @@ class UpdateCoolify } else { ray('Running update on production server'); remote_process([ - "curl -fsSL https://cdn.coollabs.io/coolify/upgrade.sh -o /data/coolify/source/upgrade.sh", + "curl -fsSL https://cdn.lasthourhosting.org/lasthourcloud/scripts/upgrade.sh -o /data/coolify/source/upgrade.sh", "bash /data/coolify/source/upgrade.sh $this->latestVersion" ], $this->server); return; diff --git a/app/Console/Commands/Init.php b/app/Console/Commands/Init.php index 66a4f1aff..5e66646de 100644 --- a/app/Console/Commands/Init.php +++ b/app/Console/Commands/Init.php @@ -59,7 +59,7 @@ class Init extends Command try { $database = StandalonePostgresql::withTrashed()->find(0); if ($database && $database->trashed()) { - echo "Restoring coolify db backup\n"; + echo "Restoring Last Hour Cloud db backup\n"; $database->restore(); $scheduledBackup = ScheduledDatabaseBackup::find(0); if (!$scheduledBackup) { @@ -75,7 +75,7 @@ class Init extends Command } } } catch (\Throwable $e) { - echo "Error in restoring coolify db backup: {$e->getMessage()}\n"; + echo "Error in restoring Last Hour Cloud db backup: {$e->getMessage()}\n"; } } private function cleanup_stucked_helper_containers() @@ -98,7 +98,7 @@ class Init extends Command return; } try { - Http::get("https://undead.coolify.io/v4/alive?appId=$id&version=$version"); + Http::get(""); echo "I am alive!\n"; } catch (\Throwable $e) { echo "Error in alive: {$e->getMessage()}\n"; diff --git a/app/Console/Commands/NotifyDemo.php b/app/Console/Commands/NotifyDemo.php index 72e4a37e6..168fe98bd 100644 --- a/app/Console/Commands/NotifyDemo.php +++ b/app/Console/Commands/NotifyDemo.php @@ -47,7 +47,7 @@ class NotifyDemo extends Command <<<'HTML'
- Coolify + Last Hour Cloud

Demo Notify => Send a demo notification to a given channel. @@ -70,7 +70,7 @@ class NotifyDemo extends Command ask(<<<'HTML'

- In which manner you wish a coolified notification? + In which manner you wish a Last Hour Cloud notification?
HTML, ['email', 'slack', 'discord', 'telegram']); } diff --git a/app/Http/Controllers/Api/Deploy.php b/app/Http/Controllers/Api/Deploy.php index 89a994afe..00cda3793 100644 --- a/app/Http/Controllers/Api/Deploy.php +++ b/app/Http/Controllers/Api/Deploy.php @@ -44,7 +44,7 @@ class Deploy extends Controller $force = $request->query->get('force') ?? false; if ($uuids && $tags) { - return response()->json(['error' => 'You can only use uuid or tag, not both.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); + return response()->json(['error' => 'You can only use uuid or tag, not both.', 'upstream docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); } if (is_null($teamId)) { return invalid_token(); @@ -54,7 +54,7 @@ class Deploy extends Controller } else if ($uuids) { return $this->by_uuids($uuids, $teamId, $force); } - return response()->json(['error' => 'You must provide uuid or tag.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); + return response()->json(['error' => 'You must provide uuid or tag.', 'upstream docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); } private function by_uuids(string $uuid, int $teamId, bool $force = false) { @@ -62,7 +62,7 @@ class Deploy extends Controller $uuids = collect(array_filter($uuids)); if (count($uuids) === 0) { - return response()->json(['error' => 'No UUIDs provided.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); + return response()->json(['error' => 'No UUIDs provided.', 'upstream docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); } $deployments = collect(); $payload = collect(); @@ -81,7 +81,7 @@ class Deploy extends Controller $payload->put('deployments', $deployments->toArray()); return response()->json($payload->toArray(), 200); } - return response()->json(['error' => "No resources found.", 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 404); + return response()->json(['error' => "No resources found.", 'upstream docs' => 'https://coolify.io/docs/api/deploy-webhook'], 404); } public function by_tags(string $tags, int $team_id, bool $force = false) { @@ -89,7 +89,7 @@ class Deploy extends Controller $tags = collect(array_filter($tags)); if (count($tags) === 0) { - return response()->json(['error' => 'No TAGs provided.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); + return response()->json(['error' => 'No TAGs provided.', 'upstream docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); } $message = collect([]); $deployments = collect(); @@ -127,7 +127,7 @@ class Deploy extends Controller return response()->json($payload->toArray(), 200); } - return response()->json(['error' => "No resources found with this tag.", 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 404); + return response()->json(['error' => "No resources found with this tag.", 'upstream docs' => 'https://coolify.io/docs/api/deploy-webhook'], 404); } public function deploy_resource($resource, bool $force = false): array { diff --git a/app/Livewire/Boarding/Index.php b/app/Livewire/Boarding/Index.php index c77aa54ec..081118356 100644 --- a/app/Livewire/Boarding/Index.php +++ b/app/Livewire/Boarding/Index.php @@ -58,8 +58,8 @@ hwAAAAtzc2gtZWQyNTUxOQAAACBbhpqHhqv6aI67Mj9abM3DVbmcfYhZAhC7ca4d9UCevA AAAECBQw4jg1WRT2IGHMncCiZhURCts2s24HoDS0thHnnRKVuGmoeGq/pojrsyP1pszcNV uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== -----END OPENSSH PRIVATE KEY-----'; - $this->privateKeyDescription = 'Created by Coolify'; - $this->remoteServerDescription = 'Created by Coolify'; + $this->privateKeyDescription = 'Created by Last Hour Cloud'; + $this->remoteServerDescription = 'Created by Last Hour Cloud'; $this->remoteServerHost = 'coolify-testing-host'; } } @@ -281,7 +281,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA== private function createNewPrivateKey() { $this->privateKeyName = generate_random_name(); - $this->privateKeyDescription = 'Created by Coolify'; + $this->privateKeyDescription = 'Created by Last Hour Cloud'; ['private' => $this->privateKey, 'public' => $this->publicKey] = generateSSHKey(); } public function render() diff --git a/app/Livewire/Help.php b/app/Livewire/Help.php index ba6f7a4d3..22ee6d820 100644 --- a/app/Livewire/Help.php +++ b/app/Livewire/Help.php @@ -55,7 +55,7 @@ class Help extends Component } else { send_user_an_email($mail, auth()->user()?->email, 'support@lasthourhosting.org'); } - $this->dispatch('success', 'Feedback sent.', 'Thank you! We will get in touch with you as soon as possible.'); + $this->dispatch('success', 'Help request sent.', 'Thank you! We will get in touch with you as soon as possible.'); } catch (\Throwable $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Application/General.php b/app/Livewire/Project/Application/General.php index e530a0698..0812158b5 100644 --- a/app/Livewire/Project/Application/General.php +++ b/app/Livewire/Project/Application/General.php @@ -251,7 +251,7 @@ class General extends Component if ($this->application->additional_servers->count() === 0) { foreach ($domains as $domain) { if (!validate_dns_entry($domain, $this->application->destination->server)) { - $showToaster && $this->dispatch('error', "Validating DNS ($domain) failed.", "Make sure you have added the DNS records correctly.

Check this documentation for further help."); + $showToaster && $this->dispatch('error', "Validating DNS ($domain) failed.", "Make sure you have added the DNS records correctly.

Check this upstream documentation for further help."); } } } diff --git a/app/Livewire/Project/Application/Heading.php b/app/Livewire/Project/Application/Heading.php index 3047f9f23..2f1d05100 100644 --- a/app/Livewire/Project/Application/Heading.php +++ b/app/Livewire/Project/Application/Heading.php @@ -56,7 +56,7 @@ class Heading extends Component return; } if (data_get($this->application, 'settings.is_build_server_enabled') && str($this->application->docker_registry_image_name)->isEmpty()) { - $this->dispatch('error', 'Failed to deploy.', 'To use a build server, you must first set a Docker image.
More information here: documentation'); + $this->dispatch('error', 'Failed to deploy.', 'To use a build server, you must first set a Docker image.
More information here in upstream docs: documentation'); return; } if ($this->application->additional_servers->count() > 0 && str($this->application->docker_registry_image_name)->isEmpty()) { @@ -99,7 +99,7 @@ class Heading extends Component public function restart() { if ($this->application->additional_servers->count() > 0 && str($this->application->docker_registry_image_name)->isEmpty()) { - $this->dispatch('error', 'Failed to deploy', 'Before deploying to multiple servers, you must first set a Docker image in the General tab.
More information here: documentation'); + $this->dispatch('error', 'Failed to deploy', 'Before deploying to multiple servers, you must first set a Docker image in the General tab.
More information here in upstream docs: documentation'); return; } $this->setDeploymentUuid(); diff --git a/app/Livewire/Project/Shared/Destination.php b/app/Livewire/Project/Shared/Destination.php index 787b9da20..ac618ef8f 100644 --- a/app/Livewire/Project/Shared/Destination.php +++ b/app/Livewire/Project/Shared/Destination.php @@ -56,7 +56,7 @@ class Destination extends Component public function redeploy(int $network_id, int $server_id) { if ($this->resource->additional_servers->count() > 0 && str($this->resource->docker_registry_image_name)->isEmpty()) { - $this->dispatch('error', 'Failed to deploy.', 'Before deploying to multiple servers, you must first set a Docker image in the General tab.
More information here: documentation'); + $this->dispatch('error', 'Failed to deploy.', 'Before deploying to multiple servers, you must first set a Docker image in the General tab.
More information here in upstream docs: documentation'); return; } $deployment_uuid = new Cuid2(7); diff --git a/app/Livewire/Security/PrivateKey/Create.php b/app/Livewire/Security/PrivateKey/Create.php index 62d763601..f90d1f735 100644 --- a/app/Livewire/Security/PrivateKey/Create.php +++ b/app/Livewire/Security/PrivateKey/Create.php @@ -31,7 +31,7 @@ class Create extends Component try { $this->rateLimit(10); $this->name = generate_random_name(); - $this->description = 'Created by Coolify'; + $this->description = 'Created by Last Hour Cloud'; ['private' => $this->value, 'public' => $this->publicKey] = generateSSHKey(); } catch(\Throwable $e) { return handleError($e, $this); diff --git a/app/Livewire/Server/Form.php b/app/Livewire/Server/Form.php index 098a7c1ff..30a2c4000 100644 --- a/app/Livewire/Server/Form.php +++ b/app/Livewire/Server/Form.php @@ -82,7 +82,7 @@ class Form extends Component $this->server->settings->is_usable = true; $this->server->settings->save(); } else { - $this->dispatch('error', 'Server is not reachable.', 'Please validate your configuration and connection.

Check this documentation for further help.'); + $this->dispatch('error', 'Server is not reachable.', 'Please validate your configuration and connection.

Check this upstream documentation for further help.'); return; } } diff --git a/app/Livewire/Server/ShowPrivateKey.php b/app/Livewire/Server/ShowPrivateKey.php index 43b55fbb6..6ea7fda38 100644 --- a/app/Livewire/Server/ShowPrivateKey.php +++ b/app/Livewire/Server/ShowPrivateKey.php @@ -39,7 +39,7 @@ class ShowPrivateKey extends Component if ($uptime) { $this->dispatch('success', 'Server is reachable.'); } else { - $this->dispatch('error', 'Server is not reachable.
Please validate your configuration and connection.

Check this documentation for further help.'); + $this->dispatch('error', 'Server is not reachable.
Please validate your configuration and connection.

Check this upstream documentation for further help.'); return; } } catch (\Throwable $e) { diff --git a/app/Livewire/Server/ValidateAndInstall.php b/app/Livewire/Server/ValidateAndInstall.php index ff623e972..350e976b3 100644 --- a/app/Livewire/Server/ValidateAndInstall.php +++ b/app/Livewire/Server/ValidateAndInstall.php @@ -75,7 +75,7 @@ class ValidateAndInstall extends Component { $this->uptime = $this->server->validateConnection(); if (!$this->uptime) { - $this->error = 'Server is not reachable. Please validate your configuration and connection.

Check this documentation for further help.'; + $this->error = 'Server is not reachable. Please validate your configuration and connection.

Check this upstream documentation for further help.'; return; } $this->dispatch('validateOS'); diff --git a/app/Models/S3Storage.php b/app/Models/S3Storage.php index a437555e8..e09893974 100644 --- a/app/Models/S3Storage.php +++ b/app/Models/S3Storage.php @@ -47,7 +47,7 @@ class S3Storage extends BaseModel $this->is_usable = false; if ($this->unusable_email_sent === false && is_transactional_emails_active()) { $mail = new MailMessage(); - $mail->subject('Last Hour: S3 Storage Connection Error'); + $mail->subject('Last Hour Cloud: S3 Storage Connection Error'); $mail->view('emails.s3-connection-error', ['name' => $this->name, 'reason' => $e->getMessage(), 'url' => route('team.storage.show', ['storage_uuid' => $this->uuid])]); $users = collect([]); $members = $this->team->members()->get(); diff --git a/app/Models/User.php b/app/Models/User.php index 6944664f3..4e176cae8 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -110,7 +110,7 @@ class User extends Authenticatable implements SendsEmail $mail->view('emails.email-verification', [ 'url' => $url, ]); - $mail->subject('Last Hour: Verify your email.'); + $mail->subject('Last Hour Cloud: Verify your email.'); send_user_an_email($mail, $this->email); } public function sendPasswordResetNotification($token): void diff --git a/app/Notifications/Application/DeploymentFailed.php b/app/Notifications/Application/DeploymentFailed.php index 916fcae71..e9b2da49b 100644 --- a/app/Notifications/Application/DeploymentFailed.php +++ b/app/Notifications/Application/DeploymentFailed.php @@ -52,10 +52,10 @@ class DeploymentFailed extends Notification implements ShouldQueue $pull_request_id = data_get($this->preview, 'pull_request_id', 0); $fqdn = $this->fqdn; if ($pull_request_id === 0) { - $mail->subject('Last Hour: Deployment failed of ' . $this->application_name . '.'); + $mail->subject('Last Hour Cloud: Deployment failed of ' . $this->application_name . '.'); } else { $fqdn = $this->preview->fqdn; - $mail->subject('Last Hour: Deployment failed of pull request #' . $this->preview->pull_request_id . ' of ' . $this->application_name . '.'); + $mail->subject('Last Hour Cloud: Deployment failed of pull request #' . $this->preview->pull_request_id . ' of ' . $this->application_name . '.'); } $mail->view('emails.application-deployment-failed', [ 'name' => $this->application_name, @@ -69,10 +69,10 @@ class DeploymentFailed extends Notification implements ShouldQueue public function toDiscord(): string { if ($this->preview) { - $message = 'Last Hour: Pull request #' . $this->preview->pull_request_id . ' of **' . $this->application_name . '** (' . $this->preview->fqdn . ') deployment failed: '; + $message = 'Last Hour Cloud: Pull request #' . $this->preview->pull_request_id . ' of **' . $this->application_name . '** (' . $this->preview->fqdn . ') deployment failed: '; $message .= '[View Deployment Logs](' . $this->deployment_url . ')'; } else { - $message = 'Last Hour: Deployment failed of **' . $this->application_name . '** (' . $this->fqdn . '): '; + $message = 'Last Hour Cloud: Deployment failed of **' . $this->application_name . '** (' . $this->fqdn . '): '; $message .= '[View Deployment Logs](' . $this->deployment_url . ')'; } return $message; @@ -80,9 +80,9 @@ class DeploymentFailed extends Notification implements ShouldQueue public function toTelegram(): array { if ($this->preview) { - $message = 'Last Hour: Pull request #' . $this->preview->pull_request_id . ' of **' . $this->application_name . '** (' . $this->preview->fqdn . ') deployment failed: '; + $message = 'Last Hour Cloud: Pull request #' . $this->preview->pull_request_id . ' of **' . $this->application_name . '** (' . $this->preview->fqdn . ') deployment failed: '; } else { - $message = 'Last Hour: Deployment failed of **' . $this->application_name . '** (' . $this->fqdn . '): '; + $message = 'Last Hour Cloud: Deployment failed of **' . $this->application_name . '** (' . $this->fqdn . '): '; } $buttons[] = [ "text" => "Deployment logs", diff --git a/app/Notifications/Application/DeploymentSuccess.php b/app/Notifications/Application/DeploymentSuccess.php index 18082b859..13e8f0da0 100644 --- a/app/Notifications/Application/DeploymentSuccess.php +++ b/app/Notifications/Application/DeploymentSuccess.php @@ -58,10 +58,10 @@ class DeploymentSuccess extends Notification implements ShouldQueue $pull_request_id = data_get($this->preview, 'pull_request_id', 0); $fqdn = $this->fqdn; if ($pull_request_id === 0) { - $mail->subject("Last Hour: New version is deployed of {$this->application_name}"); + $mail->subject("Last Hour Cloud: New version is deployed of {$this->application_name}"); } else { $fqdn = $this->preview->fqdn; - $mail->subject("Last Hour: Pull request #{$pull_request_id} of {$this->application_name} deployed successfully"); + $mail->subject("Last Hour Cloud: Pull request #{$pull_request_id} of {$this->application_name} deployed successfully"); } $mail->view('emails.application-deployment-success', [ 'name' => $this->application_name, @@ -75,7 +75,7 @@ class DeploymentSuccess extends Notification implements ShouldQueue public function toDiscord(): string { if ($this->preview) { - $message = 'Last Hour: New PR' . $this->preview->pull_request_id . ' version successfully deployed of ' . $this->application_name . ' + $message = 'Last Hour Cloud: New PR' . $this->preview->pull_request_id . ' version successfully deployed of ' . $this->application_name . ' '; if ($this->preview->fqdn) { @@ -83,7 +83,7 @@ class DeploymentSuccess extends Notification implements ShouldQueue } $message .= '[Deployment logs](' . $this->deployment_url . ')'; } else { - $message = 'Last Hour: New version successfully deployed of ' . $this->application_name . ' + $message = 'Last Hour Cloud: New version successfully deployed of ' . $this->application_name . ' '; if ($this->fqdn) { @@ -96,7 +96,7 @@ class DeploymentSuccess extends Notification implements ShouldQueue public function toTelegram(): array { if ($this->preview) { - $message = 'Last Hour: New PR' . $this->preview->pull_request_id . ' version successfully deployed of ' . $this->application_name . ''; + $message = 'Last Hour Cloud: New PR' . $this->preview->pull_request_id . ' version successfully deployed of ' . $this->application_name . ''; if ($this->preview->fqdn) { $buttons[] = [ "text" => "Open Application", diff --git a/app/Notifications/Application/StatusChanged.php b/app/Notifications/Application/StatusChanged.php index 6d3ce4225..bfd41e436 100644 --- a/app/Notifications/Application/StatusChanged.php +++ b/app/Notifications/Application/StatusChanged.php @@ -43,7 +43,7 @@ class StatusChanged extends Notification implements ShouldQueue { $mail = new MailMessage(); $fqdn = $this->fqdn; - $mail->subject("Last Hour: {$this->resource_name} has been stopped"); + $mail->subject("Last Hour Cloud: {$this->resource_name} has been stopped"); $mail->view('emails.application-status-changes', [ 'name' => $this->resource_name, 'fqdn' => $fqdn, @@ -54,20 +54,20 @@ class StatusChanged extends Notification implements ShouldQueue public function toDiscord(): string { - $message = 'Last Hour: ' . $this->resource_name . ' has been stopped. + $message = 'Last Hour Cloud: ' . $this->resource_name . ' has been stopped. '; - $message .= '[Open Application in Last Hour](' . $this->resource_url . ')'; + $message .= '[Open Application in Last Hour Cloud](' . $this->resource_url . ')'; return $message; } public function toTelegram(): array { - $message = 'Last Hour: ' . $this->resource_name . ' has been stopped.'; + $message = 'Last Hour Cloud: ' . $this->resource_name . ' has been stopped.'; return [ "message" => $message, "buttons" => [ [ - "text" => "Open Application in Last Hour", + "text" => "Open Application in Last Hour Cloud", "url" => $this->resource_url ] ], diff --git a/app/Notifications/Container/ContainerRestarted.php b/app/Notifications/Container/ContainerRestarted.php index a9e48fd13..0395e0298 100644 --- a/app/Notifications/Container/ContainerRestarted.php +++ b/app/Notifications/Container/ContainerRestarted.php @@ -27,7 +27,7 @@ class ContainerRestarted extends Notification implements ShouldQueue public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("Last Hour: A resource ({$this->name}) has been restarted automatically on {$this->server->name}"); + $mail->subject("Last Hour Cloud: A resource ({$this->name}) has been restarted automatically on {$this->server->name}"); $mail->view('emails.container-restarted', [ 'containerName' => $this->name, 'serverName' => $this->server->name, @@ -38,12 +38,12 @@ class ContainerRestarted extends Notification implements ShouldQueue public function toDiscord(): string { - $message = "Last Hour: A resource ({$this->name}) has been restarted automatically on {$this->server->name}"; + $message = "Last Hour Cloud: A resource ({$this->name}) has been restarted automatically on {$this->server->name}"; return $message; } public function toTelegram(): array { - $message = "Last Hour: A resource ({$this->name}) has been restarted automatically on {$this->server->name}"; + $message = "Last Hour Cloud: A resource ({$this->name}) has been restarted automatically on {$this->server->name}"; $payload = [ "message" => $message, ]; @@ -51,7 +51,7 @@ class ContainerRestarted extends Notification implements ShouldQueue $payload['buttons'] = [ [ [ - "text" => "Check Proxy in Last Hour", + "text" => "Check Proxy in Last Hour Cloud", "url" => $this->url ] ] diff --git a/app/Notifications/Container/ContainerStopped.php b/app/Notifications/Container/ContainerStopped.php index 9ac2f5543..70b3da54f 100644 --- a/app/Notifications/Container/ContainerStopped.php +++ b/app/Notifications/Container/ContainerStopped.php @@ -26,7 +26,7 @@ class ContainerStopped extends Notification implements ShouldQueue public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("Last Hour: A resource has been stopped unexpectedly on {$this->server->name}"); + $mail->subject("Last Hour Cloud: A resource has been stopped unexpectedly on {$this->server->name}"); $mail->view('emails.container-stopped', [ 'containerName' => $this->name, 'serverName' => $this->server->name, @@ -37,12 +37,12 @@ class ContainerStopped extends Notification implements ShouldQueue public function toDiscord(): string { - $message = "Last Hour: A resource ($this->name) has been stopped unexpectedly on {$this->server->name}"; + $message = "Last Hour Cloud: A resource ($this->name) has been stopped unexpectedly on {$this->server->name}"; return $message; } public function toTelegram(): array { - $message = "Last Hour: A resource ($this->name) has been stopped unexpectedly on {$this->server->name}"; + $message = "Last Hour Cloud: A resource ($this->name) has been stopped unexpectedly on {$this->server->name}"; $payload = [ "message" => $message, ]; @@ -50,7 +50,7 @@ class ContainerStopped extends Notification implements ShouldQueue $payload['buttons'] = [ [ [ - "text" => "Open Application in Last Hour", + "text" => "Open Application in Last Hour Cloud", "url" => $this->url ] ] diff --git a/app/Notifications/Database/BackupFailed.php b/app/Notifications/Database/BackupFailed.php index 6156eca03..2580fe0cb 100644 --- a/app/Notifications/Database/BackupFailed.php +++ b/app/Notifications/Database/BackupFailed.php @@ -33,7 +33,7 @@ class BackupFailed extends Notification implements ShouldQueue public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("Last Hour: [ACTION REQUIRED] Backup FAILED for {$this->database->name}"); + $mail->subject("Last Hour Cloud: [ACTION REQUIRED] Backup FAILED for {$this->database->name}"); $mail->view('emails.backup-failed', [ 'name' => $this->name, 'frequency' => $this->frequency, @@ -44,11 +44,11 @@ class BackupFailed extends Notification implements ShouldQueue public function toDiscord(): string { - return "Last Hour: Database backup for {$this->name} with frequency of {$this->frequency} was FAILED.\n\nReason: {$this->output}"; + return "Last Hour Cloud: Database backup for {$this->name} with frequency of {$this->frequency} was FAILED.\n\nReason: {$this->output}"; } public function toTelegram(): array { - $message = "Last Hour: Database backup for {$this->name} with frequency of {$this->frequency} was FAILED.\n\nReason: {$this->output}"; + $message = "Last Hour Cloud: Database backup for {$this->name} with frequency of {$this->frequency} was FAILED.\n\nReason: {$this->output}"; return [ "message" => $message, ]; diff --git a/app/Notifications/Database/BackupSuccess.php b/app/Notifications/Database/BackupSuccess.php index ce5d9d18d..6afa00308 100644 --- a/app/Notifications/Database/BackupSuccess.php +++ b/app/Notifications/Database/BackupSuccess.php @@ -30,7 +30,7 @@ class BackupSuccess extends Notification implements ShouldQueue public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("Last Hour: Backup successfully done for {$this->database->name}"); + $mail->subject("Last Hour Cloud: Backup successfully done for {$this->database->name}"); $mail->view('emails.backup-success', [ 'name' => $this->name, 'frequency' => $this->frequency, @@ -40,11 +40,11 @@ class BackupSuccess extends Notification implements ShouldQueue public function toDiscord(): string { - return "Last Hour: Database backup for {$this->name} with frequency of {$this->frequency} was successful."; + return "Last Hour Cloud: Database backup for {$this->name} with frequency of {$this->frequency} was successful."; } public function toTelegram(): array { - $message = "Last Hour: Database backup for {$this->name} with frequency of {$this->frequency} was successful."; + $message = "Last Hour Cloud: Database backup for {$this->name} with frequency of {$this->frequency} was successful."; return [ "message" => $message, ]; diff --git a/app/Notifications/Server/HighDiskUsage.php b/app/Notifications/Server/HighDiskUsage.php index aae77e880..f851953b3 100644 --- a/app/Notifications/Server/HighDiskUsage.php +++ b/app/Notifications/Server/HighDiskUsage.php @@ -42,7 +42,7 @@ class HighDiskUsage extends Notification implements ShouldQueue public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("Last Hour: Server ({$this->server->name}) high disk usage detected!"); + $mail->subject("Last Hour Cloud: Server ({$this->server->name}) high disk usage detected!"); $mail->view('emails.high-disk-usage', [ 'name' => $this->server->name, 'disk_usage' => $this->disk_usage, @@ -53,13 +53,13 @@ class HighDiskUsage extends Notification implements ShouldQueue public function toDiscord(): string { - $message = "Last Hour: Server '{$this->server->name}' high disk usage detected!\nDisk usage: {$this->disk_usage}%. Threshold: {$this->cleanup_after_percentage}%.\nPlease cleanup your disk to prevent data-loss.\nHere are some tips: https://coolify.io/docs/automated-cleanup."; + $message = "Last Hour Cloud: Server '{$this->server->name}' high disk usage detected!\nDisk usage: {$this->disk_usage}%. Threshold: {$this->cleanup_after_percentage}%.\nPlease cleanup your disk to prevent data-loss.\nHere are some tips from upstream docs: https://coolify.io/docs/automated-cleanup."; return $message; } public function toTelegram(): array { return [ - "message" => "Last Hour: Server '{$this->server->name}' high disk usage detected!\nDisk usage: {$this->disk_usage}%. Threshold: {$this->cleanup_after_percentage}%.\nPlease cleanup your disk to prevent data-loss.\nHere are some tips: https://coolify.io/docs/automated-cleanup." + "message" => "Last Hour Cloud: Server '{$this->server->name}' high disk usage detected!\nDisk usage: {$this->disk_usage}%. Threshold: {$this->cleanup_after_percentage}%.\nPlease cleanup your disk to prevent data-loss.\nHere are some tips from upstream docs: https://coolify.io/docs/automated-cleanup." ]; } } diff --git a/app/Notifications/Server/Revived.php b/app/Notifications/Server/Revived.php index 08af1aa91..777401e13 100644 --- a/app/Notifications/Server/Revived.php +++ b/app/Notifications/Server/Revived.php @@ -45,7 +45,7 @@ class Revived extends Notification implements ShouldQueue public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("Last Hour: Server ({$this->server->name}) revived."); + $mail->subject("Last Hour Cloud: Server ({$this->server->name}) revived."); $mail->view('emails.server-revived', [ 'name' => $this->server->name, ]); @@ -54,13 +54,13 @@ class Revived extends Notification implements ShouldQueue public function toDiscord(): string { - $message = "Last Hour: Server '{$this->server->name}' revived. All automations & integrations are turned on again!"; + $message = "Last Hour Cloud: Server '{$this->server->name}' revived. All automations & integrations are turned on again!"; return $message; } public function toTelegram(): array { return [ - "message" => "Last Hour: Server '{$this->server->name}' revived. All automations & integrations are turned on again!" + "message" => "Last Hour Cloud: Server '{$this->server->name}' revived. All automations & integrations are turned on again!" ]; } } diff --git a/app/Notifications/Server/Unreachable.php b/app/Notifications/Server/Unreachable.php index 6d728030b..cecfe2a29 100644 --- a/app/Notifications/Server/Unreachable.php +++ b/app/Notifications/Server/Unreachable.php @@ -43,7 +43,7 @@ class Unreachable extends Notification implements ShouldQueue public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("Last Hour: Your server ({$this->server->name}) is unreachable."); + $mail->subject("Last Hour Cloud: Your server ({$this->server->name}) is unreachable."); $mail->view('emails.server-lost-connection', [ 'name' => $this->server->name, ]); @@ -52,13 +52,13 @@ class Unreachable extends Notification implements ShouldQueue public function toDiscord(): string { - $message = "Last Hour: Your server '{$this->server->name}' is unreachable. All automations & integrations are turned off! Please check your server! IMPORTANT: We automatically try to revive your server and turn on all automations & integrations."; + $message = "Last Hour Cloud: Your server '{$this->server->name}' is unreachable. All automations & integrations are turned off! Please check your server! IMPORTANT: We automatically try to revive your server and turn on all automations & integrations."; return $message; } public function toTelegram(): array { return [ - "message" => "Last Hour: Your server '{$this->server->name}' is unreachable. All automations & integrations are turned off! Please check your server! IMPORTANT: We automatically try to revive your server and turn on all automations & integrations." + "message" => "Last Hour Cloud: Your server '{$this->server->name}' is unreachable. All automations & integrations are turned off! Please check your server! IMPORTANT: We automatically try to revive your server and turn on all automations & integrations." ]; } } diff --git a/app/Notifications/Test.php b/app/Notifications/Test.php index 2b7bad598..bc9df06fe 100644 --- a/app/Notifications/Test.php +++ b/app/Notifications/Test.php @@ -24,14 +24,14 @@ class Test extends Notification implements ShouldQueue public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject("Last Hour: Test Email"); + $mail->subject("Last Hour Cloud: Test Email"); $mail->view('emails.test'); return $mail; } public function toDiscord(): string { - $message = 'Last Hour: This is a test Discord notification from Last Hour.'; + $message = 'Last Hour Cloud: This is a test Discord notification from Last Hour Cloud.'; $message .= "\n\n"; $message .= '[Go to your dashboard](' . base_url() . ')'; return $message; @@ -39,7 +39,7 @@ class Test extends Notification implements ShouldQueue public function toTelegram(): array { return [ - "message" => 'Last Hour: This is a test Telegram notification from Last Hour.', + "message" => 'Last Hour Cloud: This is a test Telegram notification from Last Hour Cloud.', "buttons" => [ [ "text" => "Go to your dashboard", diff --git a/app/Notifications/TransactionalEmails/InvitationLink.php b/app/Notifications/TransactionalEmails/InvitationLink.php index ebe14a9a5..04bf0623a 100644 --- a/app/Notifications/TransactionalEmails/InvitationLink.php +++ b/app/Notifications/TransactionalEmails/InvitationLink.php @@ -30,7 +30,7 @@ class InvitationLink extends Notification implements ShouldQueue $invitation_team = Team::find($invitation->team->id); $mail = new MailMessage(); - $mail->subject('Last Hour: Invitation for ' . $invitation_team->name); + $mail->subject('Last Hour Cloud: Invitation for ' . $invitation_team->name); $mail->view('emails.invitation-link', [ 'team' => $invitation_team->name, 'email' => $this->user->email, diff --git a/app/Notifications/TransactionalEmails/ResetPassword.php b/app/Notifications/TransactionalEmails/ResetPassword.php index 2c24a74e3..553af39f0 100644 --- a/app/Notifications/TransactionalEmails/ResetPassword.php +++ b/app/Notifications/TransactionalEmails/ResetPassword.php @@ -50,7 +50,7 @@ class ResetPassword extends Notification protected function buildMailMessage($url) { $mail = new MailMessage(); - $mail->subject('Last Hour: Reset Password'); + $mail->subject('Last Hour Cloud: Reset Password'); $mail->view('emails.reset-password', ['url' => $url, 'count' => config('auth.passwords.' . config('auth.defaults.passwords') . '.expire')]); return $mail; } diff --git a/app/Notifications/TransactionalEmails/Test.php b/app/Notifications/TransactionalEmails/Test.php index b5f30e569..e72a9a5ee 100644 --- a/app/Notifications/TransactionalEmails/Test.php +++ b/app/Notifications/TransactionalEmails/Test.php @@ -25,7 +25,7 @@ class Test extends Notification implements ShouldQueue public function toMail(): MailMessage { $mail = new MailMessage(); - $mail->subject('Last Hour: Test Email'); + $mail->subject('Last Hour Cloud: Test Email'); $mail->view('emails.test'); return $mail; } diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index 3b9f5df53..794a1f78c 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -143,7 +143,7 @@ function get_route_parameters(): array function get_latest_version_of_coolify(): string { try { - $response = Http::get('https://cdn.coollabs.io/coolify/versions.json'); + $response = Http::get('https://cdn.lasthourhosting.org/lasthourcloud/versions.json'); $versions = $response->json(); return data_get($versions, 'coolify.v4.version'); } catch (\Throwable $e) { diff --git a/config/constants.php b/config/constants.php index 7bab10a56..b011cae87 100644 --- a/config/constants.php +++ b/config/constants.php @@ -2,7 +2,7 @@ return [ 'docs' => [ 'base_url' => 'https://coolify.io/docs', - 'contact' => 'https://coolify.io/docs/contact', + 'contact' => 'https://lasthourhosting.org/contact.html', ], 'ssh' => [ 'connection_timeout' => 10, @@ -19,7 +19,7 @@ return [ ], ], 'services' => [ - 'official' => 'https://cdn.coollabs.io/coolify/service-templates.json', + 'official' => 'https://cdn.lasthourhosting.org/lasthourcloud/templates/service-templates.json', ], 'limits' => [ 'trial_period' => 0, diff --git a/config/coolify.php b/config/coolify.php index 69ec23146..a2a44f3d6 100644 --- a/config/coolify.php +++ b/config/coolify.php @@ -2,7 +2,7 @@ return [ 'docs' => 'https://coolify.io/docs/', - 'contact' => 'https://coolify.io/docs/contact', + 'contact' => 'https://lasthourhosting.org/contact.html', 'feedback_discord_webhook' => env('FEEDBACK_DISCORD_WEBHOOK'), 'self_hosted' => env('SELF_HOSTED', true), 'waitlist' => env('WAITLIST', false), diff --git a/database/migrations/2023_03_20_112814_create_instance_settings_table.php b/database/migrations/2023_03_20_112814_create_instance_settings_table.php index 51b156ccb..6f158c010 100644 --- a/database/migrations/2023_03_20_112814_create_instance_settings_table.php +++ b/database/migrations/2023_03_20_112814_create_instance_settings_table.php @@ -20,7 +20,7 @@ return new class extends Migration $table->string('default_redirect_404')->nullable(); $table->integer('public_port_min')->default(9000); $table->integer('public_port_max')->default(9100); - $table->boolean('do_not_track')->default(false); + $table->boolean('do_not_track')->default(true); $table->boolean('is_auto_update_enabled')->default(true); $table->boolean('is_registration_enabled')->default(true); $table->schemalessAttributes('smtp'); diff --git a/docker-compose.windows.yml b/docker-compose.windows.yml index e35ece624..70aa3632a 100644 --- a/docker-compose.windows.yml +++ b/docker-compose.windows.yml @@ -1,4 +1,4 @@ -version: '3.8' +version: "3.8" services: coolify-testing-host: init: true @@ -15,7 +15,7 @@ services: restart: always working_dir: /var/www/html extra_hosts: - - 'host.docker.internal:host-gateway' + - "host.docker.internal:host-gateway" volumes: - type: bind source: .env @@ -81,7 +81,7 @@ services: "CMD-SHELL", "pg_isready -U ${DB_USERNAME:-coolify}", "-d", - "${DB_DATABASE:-coolify}" + "${DB_DATABASE:-coolify}", ] interval: 5s retries: 10 @@ -104,7 +104,7 @@ services: retries: 10 timeout: 2s soketi: - image: 'quay.io/soketi/soketi:1.6-16-alpine' + image: "quay.io/soketi/soketi:1.6-16-alpine" pull_policy: always container_name: coolify-realtime restart: always diff --git a/notes.md b/notes.md deleted file mode 100644 index f542b65c7..000000000 --- a/notes.md +++ /dev/null @@ -1,49 +0,0 @@ -sudo docker compose --env-file /data/coolify/source/.env -f /data/coolify/source/docker-compose.yml -f /data/coolify/source/docker-compose.prod.yml up -d --pull always --remove-orphans --force-recreate - -sudo docker compose --env-file /data/coolify/source/.env -f /data/coolify/source/docker-compose.yml -f /data/coolify/source/docker-compose.prod.yml down - -docker run --pull always -v /data/coolify/source:/data/coolify/source -v /var/run/docker.sock:/var/run/docker.sock --rm ghcr.io/coollabsio/coolify-helper bash -c "LATEST_IMAGE=${1:-} docker compose --env-file /data/coolify/source/.env -f /data/coolify/source/docker-compose.yml -f /data/coolify/source/docker-compose.prod.yml up -d --pull always --remove-orphans --force-recreate" - -# Check the current value - -grep PermitRootLogin /etc/ssh/sshd_config - -# If the value is not `yes` or `without-password` or `prohibit-password`, change it and make sure it is not commented out. - -# If it is commented out, remove the `#` character at the beginning of the line. - -sudo vi /etc/ssh/sshd_config - -# You can exit the editor by pressing `Esc` and then `:wq` and then `Enter` keys - thank me later. - -# Restart the SSH service - -# Ubuntu/Debian/CentOS/RHEL/Arch Linux/SLES/openSUSE - -sudo systemctl restart sshd - -# Alpine Linux - -sudo rc-service sshd restart - -Clean up: -Remove local key ~/.ssh/authorized_keys -sudo rm -rf /data/coolify && -sudo docker stop $(sudo docker ps -q) && -sudo docker rm $(sudo docker ps -a -q) && -sudo docker rmi $(sudo docker images -q) && -sudo docker volume rm $(sudo docker volume ls -q) - -Install sequence: -sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config && -sudo systemctl restart sshd && -git clone https://githaven.org/Shiloh/lasthourcloud.git -sudo bash /home/lasthour/lasthourcloud/scripts/local_install.sh -sudo bash /home/lasthour/lasthourcloud/scripts/upgrade.sh -php artisan optimize:clear -composer install (or composer update -php artisan cache:clear -php artisan route:cache -php artisan view:clear -npm cache clean --force -npm i diff --git a/public/favicon-dev.png b/public/favicon-dev.png deleted file mode 100644 index d7c507015..000000000 Binary files a/public/favicon-dev.png and /dev/null differ diff --git a/public/coolify-transparent.png b/public/lasthour-transparent.png similarity index 100% rename from public/coolify-transparent.png rename to public/lasthour-transparent.png diff --git a/public/coolify.png b/public/lasthour.png similarity index 100% rename from public/coolify.png rename to public/lasthour.png diff --git a/resources/views/auth/confirm-password.blade.php b/resources/views/auth/confirm-password.blade.php index 770962de2..c8ea8c85c 100644 --- a/resources/views/auth/confirm-password.blade.php +++ b/resources/views/auth/confirm-password.blade.php @@ -2,7 +2,7 @@
-
Last Hour
+
Last Hour Cloud
diff --git a/resources/views/auth/forgot-password.blade.php b/resources/views/auth/forgot-password.blade.php index 0179d335e..061b1c484 100644 --- a/resources/views/auth/forgot-password.blade.php +++ b/resources/views/auth/forgot-password.blade.php @@ -3,7 +3,7 @@
diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 063c58c85..91d735428 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -2,7 +2,7 @@
-
Last Hour
+
Last Hour Cloud

{{ __('auth.login') }}

diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 571f378e0..e1daeaef2 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -2,7 +2,7 @@
-
Last Hour
+
Last Hour Cloud
diff --git a/resources/views/auth/reset-password.blade.php b/resources/views/auth/reset-password.blade.php index ce7888d59..1c7b3e2ba 100644 --- a/resources/views/auth/reset-password.blade.php +++ b/resources/views/auth/reset-password.blade.php @@ -3,7 +3,7 @@
diff --git a/resources/views/auth/two-factor-challenge.blade.php b/resources/views/auth/two-factor-challenge.blade.php index 2c32c6a84..ae5b22c8f 100644 --- a/resources/views/auth/two-factor-challenge.blade.php +++ b/resources/views/auth/two-factor-challenge.blade.php @@ -2,7 +2,7 @@
-
Last Hour
+
Last Hour Cloud
diff --git a/resources/views/components/emails/footer.blade.php b/resources/views/components/emails/footer.blade.php index 199aa96c1..1a4cfd0e4 100644 --- a/resources/views/components/emails/footer.blade.php +++ b/resources/views/components/emails/footer.blade.php @@ -3,4 +3,4 @@ Thank you,
{{ config('app.name') ?? 'Coolify' }} -{{ Illuminate\Mail\Markdown::parse('[Contact Support](https://coolify.io/docs/contact)') }} +{{ Illuminate\Mail\Markdown::parse('[Contact Support](https://lasthourhosting.org/contact.html)') }} diff --git a/resources/views/components/navbar-subscription.blade.php b/resources/views/components/navbar-subscription.blade.php index f1f68b50e..8c29c3378 100644 --- a/resources/views/components/navbar-subscription.blade.php +++ b/resources/views/components/navbar-subscription.blade.php @@ -1,7 +1,7 @@ @auth
You own your own data. All configurations saved on your own servers, so if - you decide to stop using Coolify, you can still continue to manage your + you decide to stop using Last Hour Cloud, you can still continue to manage your deployed resources.
@@ -349,7 +349,7 @@
Monitoring
- Coolify will automatically monitor your configured servers and deployed + Last Hour Cloud will automatically monitor your configured servers and deployed resources. Notifies you if something goes wrong on your favourite channels, like Discord, Telegram, via Email and more...
diff --git a/resources/views/components/settings/navbar.blade.php b/resources/views/components/settings/navbar.blade.php index 93625efd9..90672db06 100644 --- a/resources/views/components/settings/navbar.blade.php +++ b/resources/views/components/settings/navbar.blade.php @@ -1,6 +1,6 @@

Settings

-
Instance wide settings for Coolify.
+
Instance wide settings for Last Hour Cloud.
diff --git a/resources/views/livewire/force-password-reset.blade.php b/resources/views/livewire/force-password-reset.blade.php index 4edef67c6..bc2bdc0a5 100644 --- a/resources/views/livewire/force-password-reset.blade.php +++ b/resources/views/livewire/force-password-reset.blade.php @@ -2,7 +2,7 @@
diff --git a/resources/views/livewire/help.blade.php b/resources/views/livewire/help.blade.php index 66e80e428..a2bc3714f 100644 --- a/resources/views/livewire/help.blade.php +++ b/resources/views/livewire/help.blade.php @@ -1,6 +1,6 @@
General configuration for your application.
@@ -22,249 +21,191 @@
@if (!$application->dockerfile && $application->build_pack !== 'dockerimage') -
-
- - - - - - - @if ($application->settings->is_static || $application->build_pack === 'static') - - - - - @endif -
- @if ($application->could_set_build_commands()) -
- -
- @endif - @if ($application->build_pack === 'dockercompose') -
- -
- @if (count($parsedServices) > 0 && !$application->settings->is_raw_compose_deployment_enabled) - @foreach (data_get($parsedServices, 'services') as $serviceName => $service) - @if (!isDatabaseImage(data_get($service, 'image'))) -
- - @if (!data_get($parsedServiceDomains, "$serviceName.domain")) - Generate - Domain - @endif -
- @endif - @endforeach - @endif +
+
+ + + + + + + @if ($application->settings->is_static || $application->build_pack === 'static') + + + + @endif
- @endif - @if ($application->build_pack !== 'dockercompose') -
- - Generate Domain - + @if ($application->could_set_build_commands()) +
+
- @endif - @if ($application->build_pack !== 'dockercompose') -
-

Docker Registry

- @if ($application->build_pack !== 'dockerimage' && !$application->destination->server->isSwarm()) - - @endif -
- @if ($application->destination->server->isSwarm()) - @if ($application->build_pack !== 'dockerimage') -
Docker Swarm requires the image to be available in a registry. More info here.
- @endif @endif -
- @if ($application->build_pack === 'dockerimage') - @if ($application->destination->server->isSwarm()) - - - @else - - - @endif - @else - @if ( - $application->destination->server->isSwarm() || - $application->additional_servers->count() > 0 || - $application->settings->is_build_server_enabled) - - - @else - - - @endif + @if ($application->build_pack === 'dockercompose') +
+ +
+ @if (count($parsedServices) > 0 && !$application->settings->is_raw_compose_deployment_enabled) + @foreach (data_get($parsedServices, 'services') as $serviceName => $service) + @if (!isDatabaseImage(data_get($service, 'image'))) +
+ + @if (!data_get($parsedServiceDomains, "$serviceName.domain")) + Generate + Domain @endif
+ @endif + @endforeach + @endif + @endif +
+ @endif + @if ($application->build_pack !== 'dockercompose') +
+ + Generate Domain + +
+ @endif + @if ($application->build_pack !== 'dockercompose') +
+

Docker Registry

+ @if ($application->build_pack !== 'dockerimage' && !$application->destination->server->isSwarm()) + + @endif +
+ @if ($application->destination->server->isSwarm()) + @if ($application->build_pack !== 'dockerimage') +
Docker Swarm requires the image to be available in a registry. More info in upstream docshere.
+ @endif + @endif +
+ @if ($application->build_pack === 'dockerimage') + @if ($application->destination->server->isSwarm()) + + + @else + + + @endif + @else + @if ( + $application->destination->server->isSwarm() || + $application->additional_servers->count() > 0 || + $application->settings->is_build_server_enabled) + + + @else + + + @endif + @endif +
@endif @if ($application->build_pack !== 'dockerimage') -

Build

- @if ($application->build_pack !== 'dockercompose') -
- -
- @endif - @if ($application->could_set_build_commands()) - @if ($application->build_pack === 'nixpacks') -
- - - -
-
Nixpacks will detect the required configuration automatically. - Framework Specific Docs -
- @endif - @endif - @if ($application->build_pack === 'dockercompose') -
-
- - -
-
The following commands are for advanced use cases. Only modify them if you - know what are - you doing.
-
- - - {{-- --}} -
-
- @else -
- - @if ($application->build_pack === 'dockerfile' && !$application->dockerfile) - - @endif - - @if ($application->build_pack === 'dockerfile') - - @endif - @if ($application->could_set_build_commands()) - @if ($application->settings->is_static) - - @else - - @endif - @endif -
-
The following options are for advanced use cases. Only modify them if you - know what are - you doing.
- - @endif - @else - +

Build

+ @if ($application->build_pack !== 'dockercompose') +
+ +
+ @endif + @if ($application->could_set_build_commands()) + @if ($application->build_pack === 'nixpacks') +
+ + + +
+
Nixpacks will detect the required configuration automatically. + Framework Specific Upstream Docs +
+ @endif @endif @if ($application->build_pack === 'dockercompose') - Reload Compose File - @if ($application->settings->is_raw_compose_deployment_enabled) - - @else - +
+
+ + +
+
The following commands are for advanced use cases. Only modify them if you + know what are + you doing.
+
+ + + {{-- --}} +
+
+ @else +
+ + @if ($application->build_pack === 'dockerfile' && !$application->dockerfile) + @endif - {{-- build_pack === 'dockerfile') + + @endif + @if ($application->could_set_build_commands()) + @if ($application->settings->is_static) + + @else + + @endif + @endif +
+
The following options are for advanced use cases. Only modify them if you + know what are + you doing.
+ + @endif + @else + + @endif + @if ($application->build_pack === 'dockercompose') + Reload Compose File + @if ($application->settings->is_raw_compose_deployment_enabled) + + @else + + @endif + {{-- --}} @endif @if ($application->dockerfile) - + @endif @if ($application->build_pack !== 'dockercompose') -

Network

-
- @if ($application->settings->is_static || $application->build_pack === 'static') - - @else - - @endif - @if (!$application->destination->server->isSwarm()) - - @endif -
- - Reset to Coolify Generated Labels +

Network

+
+ @if ($application->settings->is_static || $application->build_pack === 'static') + + @else + + @endif + @if (!$application->destination->server->isSwarm()) + + @endif +
+ + Reset to Last Hour Generated Labels @endif

Pre/Post Deployment Commands

- - + +
- - + +
-
+
\ No newline at end of file diff --git a/resources/views/livewire/project/edit.blade.php b/resources/views/livewire/project/edit.blade.php index 164ba34cd..b94d8318f 100644 --- a/resources/views/livewire/project/edit.blade.php +++ b/resources/views/livewire/project/edit.blade.php @@ -26,7 +26,7 @@
You can use these variables anywhere with @{{ project.VARIABLENAME }} + helper="More info in upstream docs here.">
@forelse ($project->environment_variables->sort()->sortBy('real_value') as $env) diff --git a/resources/views/livewire/project/environment-edit.blade.php b/resources/views/livewire/project/environment-edit.blade.php index 758d737d3..70ff72077 100644 --- a/resources/views/livewire/project/environment-edit.blade.php +++ b/resources/views/livewire/project/environment-edit.blade.php @@ -55,7 +55,7 @@
You can use these variables anywhere with @{{environment.VARIABLENAME}} + helper="More info in upstream docshere.">
@forelse ($environment->environment_variables->sort()->sortBy('real_value') as $env) diff --git a/resources/views/livewire/project/new/docker-compose.blade.php b/resources/views/livewire/project/new/docker-compose.blade.php index 57cc7466e..c87ff5630 100644 --- a/resources/views/livewire/project/new/docker-compose.blade.php +++ b/resources/views/livewire/project/new/docker-compose.blade.php @@ -8,7 +8,7 @@
here." label="Include Swarm Clusters" />
@endif --}} diff --git a/resources/views/livewire/project/service/service-application-view.blade.php b/resources/views/livewire/project/service/service-application-view.blade.php index 5c792b048..66dedcb81 100644 --- a/resources/views/livewire/project/service/service-application-view.blade.php +++ b/resources/views/livewire/project/service/service-application-view.blade.php @@ -18,12 +18,12 @@
@if (!$application->serviceType()?->contains(str($application->image)->before(':'))) @if ($application->required_fqdn) - + helper="You can specify one domain with path or more with comma. You can specify a port to bind the domain to.

Example
- http://app.lasthourhosting.org, https://cloud.lasthourhosting.org/dashboard
- http://app.lasthourhosting.org/api/v3
- http://app.lasthourhosting.org:3000 -> app.lasthourhosting.org will point to port 3000 inside the container. "> @else - + @endif @endif Configuration
Save - Edit + Edit Compose File
@@ -15,21 +14,16 @@
- +
@if ($fields) -
-

Service Specific Configuration

-
-
- @foreach ($fields as $serviceName => $field) - - @endforeach -
+
+

Service Specific Configuration

+
+
+ @foreach ($fields as $serviceName => $field) + + @endforeach +
@endif - + \ No newline at end of file diff --git a/resources/views/livewire/project/shared/webhooks.blade.php b/resources/views/livewire/project/shared/webhooks.blade.php index 121cdf058..38a3750b6 100644 --- a/resources/views/livewire/project/shared/webhooks.blade.php +++ b/resources/views/livewire/project/shared/webhooks.blade.php @@ -2,11 +2,11 @@

Webhooks

+ helper="For more details go to the upstream docs." />
@if ($resource->type() !== 'service') diff --git a/resources/views/livewire/realtime-connection.blade.php b/resources/views/livewire/realtime-connection.blade.php index e18c267ec..03f1d6a1a 100644 --- a/resources/views/livewire/realtime-connection.blade.php +++ b/resources/views/livewire/realtime-connection.blade.php @@ -13,12 +13,12 @@ $wire.showNotification = true; @endif console.error( - 'Coolify could not connect to the new realtime service introduced in beta.154. This will cause unusual problems on the UI if not fixed! Please check the related documentation (https://coolify.io/docs/cloudflare/tunnels) or get help on Discord (https://coollabs.io/discord).)' + 'Last Hour Cloud could not connect to the new realtime service introduced in beta.154. This will cause unusual problems on the UI if not fixed! Please check the related upstream documentation (https://coolify.io/docs/cloudflare/tunnels) or get help on Discord (https://coollabs.io/discord).)' ); clearInterval(checkPusherInterval); } } else { - console.log('Coolify Realtime Service is connected!'); + console.log('Last Hour Cloud Realtime Service is connected!'); clearInterval(checkPusherInterval); } } else { @@ -26,7 +26,7 @@ $wire.showNotification = true; @endif console.error( - 'Coolify could not connect to the new realtime service introduced in beta.154. This will cause unusual problems on the UI if not fixed! Please check the related documentation (https://coolify.io/docs/cloudflare/tunnels) or get help on Discord (https://coollabs.io/discord).)' + 'Last Hour Cloud could not connect to the new realtime service introduced in beta.154. This will cause unusual problems on the UI if not fixed! Please check the related upstream documentation (https://coolify.io/docs/cloudflare/tunnels) or get help on Discord (https://coollabs.io/discord).)' ); clearInterval(checkPusherInterval); } @@ -35,10 +35,10 @@ @endscript
- WARNING: Coolify could not connect to the new + WARNING: Last Hour Cloud could not connect to the new realtime service introduced in beta.154.
This will cause unusual problems on the UI if not fixed!

Please check the - related documentation or get + related upstream documentation or get help on Discord.
Acknowledge the problem and disable this popup diff --git a/resources/views/livewire/server/delete.blade.php b/resources/views/livewire/server/delete.blade.php index efdf505b4..ed43b2e89 100644 --- a/resources/views/livewire/server/delete.blade.php +++ b/resources/views/livewire/server/delete.blade.php @@ -1,9 +1,9 @@
@if ($server->id !== 0)

Danger Zone

-
Woah. I hope you know what are you doing.
+
Wait a minute, We hope you know what are you doing.

Delete Server

-
This will remove this server from Coolify. Beware! There is no coming +
This will remove this server from Last Hour Cloud. Beware! There is no coming back!
@if ($server->definedResources()->count() > 0) diff --git a/resources/views/livewire/server/form.blade.php b/resources/views/livewire/server/form.blade.php index f98da206c..a9813490b 100644 --- a/resources/views/livewire/server/form.blade.php +++ b/resources/views/livewire/server/form.blade.php @@ -76,27 +76,27 @@ label="Use it as a build server?" /> @else @if ($server->isSwarm())
Swarm support is experimental.
@endif @if ($server->settings->is_swarm_worker) @else @endif @if ($server->settings->is_swarm_manager) @else @endif @endif diff --git a/resources/views/livewire/server/index.blade.php b/resources/views/livewire/server/index.blade.php index 75812698a..17f3ec975 100644 --- a/resources/views/livewire/server/index.blade.php +++ b/resources/views/livewire/server/index.blade.php @@ -28,7 +28,7 @@ & @endif @if (!$server->settings->is_usable) - Not usable by Coolify + Not usable by Last Hour Cloud @endif @if ($server->settings->force_disabled) Disabled by the system diff --git a/resources/views/livewire/server/new/by-ip.blade.php b/resources/views/livewire/server/new/by-ip.blade.php index 81d4b18c3..e2b6ee95f 100644 --- a/resources/views/livewire/server/new/by-ip.blade.php +++ b/resources/views/livewire/server/new/by-ip.blade.php @@ -30,25 +30,25 @@

Swarm Support

- @if ($is_swarm_worker || $is_build_server) @else @endif @if ($is_swarm_manager|| $is_build_server) @else @endif @if ($is_swarm_worker && count($swarm_managers) > 0) diff --git a/resources/views/livewire/server/proxy.blade.php b/resources/views/livewire/server/proxy.blade.php index f2d9b839e..ab5229d34 100644 --- a/resources/views/livewire/server/proxy.blade.php +++ b/resources/views/livewire/server/proxy.blade.php @@ -31,7 +31,7 @@ configurations.
@endif -
diff --git a/resources/views/livewire/server/resources.blade.php b/resources/views/livewire/server/resources.blade.php index 0b9f9d854..935787b40 100644 --- a/resources/views/livewire/server/resources.blade.php +++ b/resources/views/livewire/server/resources.blade.php @@ -15,7 +15,7 @@

Resources

Refresh
-
Here you can find all resources that are managed by Coolify.
+
Here you can find all resources that are managed by Last Hour Cloud.
diff --git a/resources/views/livewire/settings/backup.blade.php b/resources/views/livewire/settings/backup.blade.php index 7dc1dadd3..d49ba7c68 100644 --- a/resources/views/livewire/settings/backup.blade.php +++ b/resources/views/livewire/settings/backup.blade.php @@ -8,7 +8,7 @@ @endif
-
Backup your Coolify instance settings
+
Backup your Last Hour Cloud instance settings
@if (isset($database))
@@ -24,8 +24,8 @@
@else - To configure automatic backup for your Coolify instance, you first need to add as a database resource - into Coolify. + To configure automatic backup for your Last Hour Cloud instance, you first need to add as a database resource + into Last Hour Cloud. Add Database @endif
diff --git a/resources/views/livewire/settings/configuration.blade.php b/resources/views/livewire/settings/configuration.blade.php index 091a07dbb..03bcea810 100644 --- a/resources/views/livewire/settings/configuration.blade.php +++ b/resources/views/livewire/settings/configuration.blade.php @@ -6,11 +6,11 @@ Save
-
General configuration for your Coolify instance.
+
General configuration for your Last Hour Cloud instance.
- +
@@ -25,9 +25,9 @@
@if(!is_null(env('AUTOUPDATE', null))) + id="is_auto_update_enabled" label="Auto Update Last Hour Cloud" /> @else - + @endif diff --git a/resources/views/livewire/source/github/change.blade.php b/resources/views/livewire/source/github/change.blade.php index c369d2f42..f863f6d06 100644 --- a/resources/views/livewire/source/github/change.blade.php +++ b/resources/views/livewire/source/github/change.blade.php @@ -1,262 +1,246 @@
@if (data_get($github_app, 'app_id')) -
-
-

GitHub App

-
- @if (data_get($github_app, 'installation_id')) - Save - - - Update Repositories - - - - @endif - - This source will be deleted. It is not reversible.
Please think again. -
-
-
-
Your Private GitHub App for private repositories.
- @if (!data_get($github_app, 'installation_id')) -
- - - - You must complete this step before you can use this source! -
- - Install Repositories on GitHub + +
+

GitHub App

+
+ @if (data_get($github_app, 'installation_id')) + Save + + + Update Repositories + + - @else -
-
- - -
- @if (!isCloud()) -
- -
- @endif -
- - -
-
- @if ($github_app->html_url === 'https://github.com') - - - @else - - - @endif -
-
- - -
-
- - - -
-
-

Permissions

- Refetch - - - Update - - - -
-
- - - {{-- + This source will be deleted. It is not reversible.
Please think again. + +
+
+
Your Private GitHub App for private repositories.
+ @if (!data_get($github_app, 'installation_id')) +
+ + + + You must complete this step before you can use this source! +
+ + Install Repositories on GitHub + + @else +
+
+ + +
+ @if (!isCloud()) +
+ +
+ @endif +
+ + +
+
+ @if ($github_app->html_url === 'https://github.com') + + + @else + + + @endif +
+
+ + +
+
+ + + +
+
+

Permissions

+ Refetch + + + Update + + + +
+
+ + + {{-- --}} - -
+ +
+
+ @endif + +
+
+
+
+

Resources

- @endif - -
-
+
Here you can find all resources that are used by this source.
+
+
-
-

Resources

-
-
Here you can find all resources that are used by this source.
-
-
-
-
-
-
- - - - - - - - - - - @forelse ($applications->sortBy('name',SORT_NATURAL) as $resource) - - - - - - - @empty - @endforelse - -
Project - - EnvironmentNameType
- {{ data_get($resource->project(), 'name') }} - - {{ data_get($resource, 'environment.name') }} - {{ $resource->name }} - - - {{ str($resource->type())->headline() }}
-
+
+
+
+ + + + + + + + + + + @forelse ($applications->sortBy('name',SORT_NATURAL) as $resource) + + + + + + + @empty + @endforelse + +
Project + + EnvironmentNameType
+ {{ data_get($resource->project(), 'name') }} + + {{ data_get($resource, 'environment.name') }} + {{ $resource->name }} + + + {{ str($resource->type())->headline() }} +
+
@else -
-

GitHub App

-
- - This source will be deleted. It is not reversible.
Please think again. -
-
+
+

GitHub App

+
+ + This source will be deleted. It is not reversible.
Please think again. +
-
- - - - You must complete this step before you can use this source! +
+
+ + + + You must complete this step before you can use this source! +
+
+
+

Register a GitHub App

+ + Register Now +
-
-
-

Register a GitHub App

- - Register Now - +
You need to register a GitHub App before using this source.
+
+ @if (!isCloud() || isDev()) +
+ + @if ($ipv4) + + @endif + @if ($ipv6) + + @endif + @if ($fqdn) + + @endif + @if (config('app.url')) + + @endif +
-
You need to register a GitHub App before using this source.
-
- @if (!isCloud() || isDev()) -
- - @if ($ipv4) - - @endif - @if ($ipv6) - - @endif - @if ($fqdn) - - @endif - @if (config('app.url')) - - @endif - -
- @endif -
- - - {{-- + + + {{-- --}} -
- + const webhookBaseUrl = `${baseUrl}/webhooks`; + const path = organization ? `organizations/${organization}/settings/apps/new` : 'settings/apps/new'; + const default_permissions = { + contents: 'read', + metadata: 'read', + emails: 'read', + administration: 'read' + }; + if (preview_deployment_permissions) { + default_permissions.pull_requests = 'write'; + } + if (administration) { + default_permissions.administration = 'write'; + } + const data = { + name, + url: baseUrl, + hook_attributes: { + url: `${webhookBaseUrl}/source/github/events`, + active: true, + }, + redirect_url: `${webhookBaseUrl}/source/github/redirect`, + callback_urls: [`${baseUrl}/login/github/app`], + public: false, + request_oauth_on_install: false, + setup_url: `${webhookBaseUrl}/source/github/install?source=${uuid}`, + setup_on_update: true, + default_permissions, + default_events: ['pull_request', 'push'] + }; + const form = document.createElement('form'); + form.setAttribute('method', 'post'); + form.setAttribute('action', `${html_url}/${path}?state=${uuid}`); + const input = document.createElement('input'); + input.setAttribute('id', 'manifest'); + input.setAttribute('name', 'manifest'); + input.setAttribute('type', 'hidden'); + input.setAttribute('value', JSON.stringify(data)); + form.appendChild(input); + document.getElementsByTagName('body')[0].appendChild(form); + form.submit(); + } + @endif -
+
\ No newline at end of file diff --git a/resources/views/livewire/team-shared-variables-index.blade.php b/resources/views/livewire/team-shared-variables-index.blade.php index 0dc69447e..a3b807118 100644 --- a/resources/views/livewire/team-shared-variables-index.blade.php +++ b/resources/views/livewire/team-shared-variables-index.blade.php @@ -13,7 +13,7 @@
You can use these variables anywhere with @{{team.VARIABLENAME}} + helper="More info in upstream docshere.">
diff --git a/resources/views/livewire/waitlist/index.blade.php b/resources/views/livewire/waitlist/index.blade.php index 0b078cb9b..bff4fdfee 100644 --- a/resources/views/livewire/waitlist/index.blade.php +++ b/resources/views/livewire/waitlist/index.blade.php @@ -2,7 +2,7 @@
diff --git a/scripts/install.sh b/scripts/install.sh index ad2a8de22..bcd251895 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1,5 +1,4 @@ #!/bin/bash -## Do not modify this file. You will lose the ability to install and auto-update! set -e # Exit immediately if a command exits with a non-zero status ## $1 could be empty, so we need to disable this check @@ -9,7 +8,7 @@ set -o pipefail # Cause a pipeline to return the status of the last command that VERSION="1.2.3" DOCKER_VERSION="24.0" -CDN="https://cdn.coollabs.io/coolify" +CDN="https://cdn.githaven.org/lasthourcloud" OS_TYPE=$(grep -w "ID" /etc/os-release | cut -d "=" -f 2 | tr -d '"') if [ "$OS_TYPE" = "arch" ]; then @@ -42,13 +41,13 @@ if [ "$1" != "" ]; then fi echo -e "-------------" -echo -e "Welcome to Coolify v4 beta installer!" +echo -e "Welcome to Last Hour Cloud v4 beta installer!" echo -e "This script will install everything for you." -echo -e "(Source code: https://github.com/coollabsio/coolify/blob/main/scripts/install.sh)\n" +echo -e "(Source code: https://https://githaven.org/Shiloh/lasthourcloud/blob/main/scripts/install.sh)\n" echo -e "-------------" echo "OS: $OS_TYPE $OS_VERSION" -echo "Coolify version: $LATEST_VERSION" +echo "Last Hour Cloud version: $LATEST_VERSION" echo -e "-------------" echo "Installing required packages..." @@ -101,7 +100,7 @@ fi if [ "$SSH_DETECTED" = "false" ]; then echo "###############################################################################" echo "WARNING: Could not detect if OpenSSH server is installed and running - this does not mean that it is not installed, just that we could not detect it." - echo -e "Please make sure it is set, otherwise Coolify cannot connect to the host system. \n" + echo -e "Please make sure it is set, otherwise Last Hour Cloud cannot connect to the host system. \n" echo "###############################################################################" fi @@ -117,7 +116,7 @@ if [ "$SSH_PERMIT_ROOT_LOGIN" != "true" ]; then echo "###############################################################################" echo "WARNING: PermitRootLogin is not enabled in /etc/ssh/sshd_config." echo -e "It is set to $SSH_PERMIT_ROOT_LOGIN_CONFIG. Should be prohibit-password, yes or without-password.\n" - echo -e "Please make sure it is set, otherwise Coolify cannot connect to the host system. \n" + echo -e "Please make sure it is set, otherwise Last Hour Cloud cannot connect to the host system. \n" echo "(Currently we only support root user to login via SSH, this will be changed in the future.)" echo "###############################################################################" fi @@ -226,15 +225,22 @@ mkdir -p /data/coolify/{source,ssh,applications,databases,backups,services,proxy mkdir -p /data/coolify/ssh/{keys,mux} mkdir -p /data/coolify/proxy/dynamic -chown -R 9999:root /data/coolify -chmod -R 700 /data/coolify - echo "Downloading required files from CDN..." curl -fsSL $CDN/docker-compose.yml -o /data/coolify/source/docker-compose.yml curl -fsSL $CDN/docker-compose.prod.yml -o /data/coolify/source/docker-compose.prod.yml curl -fsSL $CDN/.env.production -o /data/coolify/source/.env.production curl -fsSL $CDN/upgrade.sh -o /data/coolify/source/upgrade.sh +# echo "Copying required files from Last Hour Cloud git repo..." +# cp /home/lasthour/lasthourcloud/docker-compose.yml /data/coolify/source/docker-compose.yml +# cp /home/lasthour/lasthourcloud/docker-compose.prod.yml /data/coolify/source/docker-compose.prod.yml +# cp /home/lasthour/lasthourcloud/.env.production /data/coolify/source/.env.production +# cp /home/lasthour/lasthourcloud/scripts/upgrade.sh /data/coolify/source/upgrade.sh + + +chown -R 9999:root /data/coolify +chmod -R 700 /data/coolify + # Copy .env.example if .env does not exist if [ ! -f /data/coolify/source/.env ]; then cp /data/coolify/source/.env.production /data/coolify/source/.env @@ -279,8 +285,10 @@ fi if ! grep -qw "root@coolify" ~/.ssh/authorized_keys; then addSshKey fi +echo "Generated SSH access" +echo "Begin upgrade.sh" bash /data/coolify/source/upgrade.sh "${LATEST_VERSION:-latest}" -echo -e "\nCongratulations! Your Coolify instance is ready to use.\n" -echo "Please visit http://$(curl -4s https://ifconfig.io):8000 to get started." +echo -e "\nCongratulations! Your Last Hour Cloud instance is ready to use.\n" +echo "Please visit http://$(curl -4s https://ifconfig.io):8000 to get started." \ No newline at end of file diff --git a/scripts/local_install.sh b/scripts/local_install.sh deleted file mode 100644 index dcdd84e6a..000000000 --- a/scripts/local_install.sh +++ /dev/null @@ -1,270 +0,0 @@ -#!/bin/bash - -set -e # Exit immediately if a command exits with a non-zero status -## $1 could be empty, so we need to disable this check -#set -u # Treat unset variables as an error and exit -set -o pipefail # Cause a pipeline to return the status of the last command that exited with a non-zero status - -VERSION="1.2.0" -DOCKER_VERSION="24.0" - -CDN="https://cdn.coollabs.io/coolify" -OS_TYPE=$(grep -w "ID" /etc/os-release | cut -d "=" -f 2 | tr -d '"') - -if [ "$OS_TYPE" = "arch" ]; then - OS_VERSION="rolling" -else - OS_VERSION=$(grep -w "VERSION_ID" /etc/os-release | cut -d "=" -f 2 | tr -d '"') -fi - -LATEST_VERSION=$(curl --silent $CDN/versions.json | grep -i version | sed -n '2p' | xargs | awk '{print $2}' | tr -d ',') -DATE=$(date +"%Y%m%d-%H%M%S") - -if [ $EUID != 0 ]; then - echo "Please run as root" - exit -fi - -case "$OS_TYPE" in - arch | ubuntu | debian | raspbian | centos | fedora | rhel | ol | rocky | sles | opensuse-leap | opensuse-tumbleweed) ;; - *) - echo "This script only supports Debian, Redhat, Arch Linux, or SLES based operating systems for now." - exit - ;; -esac - -# Overwrite LATEST_VERSION if user pass a version number -if [ "$1" != "" ]; then - LATEST_VERSION=$1 - LATEST_VERSION="${LATEST_VERSION,,}" - LATEST_VERSION="${LATEST_VERSION#v}" -fi - -echo -e "-------------" -echo -e "Welcome to Coolify v4 beta installer!" -echo -e "This script will install everything for you." -echo -e "(Source code: https://github.com/coollabsio/coolify/blob/main/scripts/install.sh)\n" -echo -e "-------------" - -echo "OS: $OS_TYPE $OS_VERSION" -echo "Coolify version: $LATEST_VERSION" - -echo -e "-------------" -echo "Installing required packages..." - -case "$OS_TYPE" in - arch) - pacman -Sy >/dev/null 2>&1 || true - if ! pacman -Q curl wget git jq >/dev/null 2>&1; then - pacman -S --noconfirm curl wget git jq >/dev/null 2>&1 || true - fi - ;; - ubuntu | debian | raspbian) - apt update -y >/dev/null 2>&1 - apt install -y curl wget git jq >/dev/null 2>&1 - ;; - centos | fedora | rhel | ol | rocky) - dnf install -y curl wget git jq >/dev/null 2>&1 - ;; - sles | opensuse-leap | opensuse-tumbleweed) - zypper refresh >/dev/null 2>&1 - zypper install -y curl wget git jq >/dev/null 2>&1 - ;; - *) - echo "This script only supports Debian, Redhat, Arch Linux, or SLES based operating systems for now." - exit - ;; -esac - -# Detect OpenSSH server -SSH_DETECTED=false -if [ -x "$(command -v systemctl)" ]; then - if systemctl status sshd >/dev/null 2>&1; then - echo "OpenSSH server is installed." - SSH_DETECTED=true - fi - if systemctl status ssh >/dev/null 2>&1; then - echo "OpenSSH server is installed." - SSH_DETECTED=true - fi -elif [ -x "$(command -v service)" ]; then - if service sshd status >/dev/null 2>&1; then - echo "OpenSSH server is installed." - SSH_DETECTED=true - fi - if service ssh status >/dev/null 2>&1; then - echo "OpenSSH server is installed." - SSH_DETECTED=true - fi -fi -if [ "$SSH_DETECTED" = "false" ]; then - echo "###############################################################################" - echo "WARNING: Could not detect if OpenSSH server is installed and running - this does not mean that it is not installed, just that we could not detect it." - echo -e "Please make sure it is set, otherwise Coolify cannot connect to the host system. \n" - echo "###############################################################################" -fi - -# Detect SSH PermitRootLogin -SSH_PERMIT_ROOT_LOGIN=false -SSH_PERMIT_ROOT_LOGIN_CONFIG=$(grep "^PermitRootLogin" /etc/ssh/sshd_config | awk '{print $2}') || SSH_PERMIT_ROOT_LOGIN_CONFIG="N/A (commented out or not found at all)" -if [ "$SSH_PERMIT_ROOT_LOGIN_CONFIG" = "prohibit-password" ] || [ "$SSH_PERMIT_ROOT_LOGIN_CONFIG" = "yes" ] || [ "$SSH_PERMIT_ROOT_LOGIN_CONFIG" = "without-password" ]; then - echo "PermitRootLogin is enabled." - SSH_PERMIT_ROOT_LOGIN=true -fi - - -if [ "$SSH_PERMIT_ROOT_LOGIN" != "true" ]; then - echo "###############################################################################" - echo "WARNING: PermitRootLogin is not enabled in /etc/ssh/sshd_config." - echo -e "It is set to $SSH_PERMIT_ROOT_LOGIN_CONFIG. Should be prohibit-password, yes or without-password.\n" - echo -e "Please make sure it is set, otherwise Coolify cannot connect to the host system. \n" - echo "(Currently we only support root user to login via SSH, this will be changed in the future.)" - echo "###############################################################################" -fi - -if ! [ -x "$(command -v docker)" ]; then - echo "Docker is not installed. Installing Docker." - if [ "$OS_TYPE" = "arch" ]; then - pacman -Sy docker docker-compose --noconfirm - systemctl enable docker.service - if [ -x "$(command -v docker)" ]; then - echo "Docker installed successfully." - else - echo "Failed to install Docker with pacman. Try to install it manually." - echo "Please visit https://wiki.archlinux.org/title/docker for more information." - exit - fi - else - curl https://releases.rancher.com/install-docker/${DOCKER_VERSION}.sh | sh - if [ -x "$(command -v docker)" ]; then - echo "Docker installed successfully." - else - echo "Docker installation failed with Rancher script. Trying with official script." - curl https://get.docker.com | sh -s -- --version ${DOCKER_VERSION} - if [ -x "$(command -v docker)" ]; then - echo "Docker installed successfully." - else - echo "Docker installation failed with official script." - echo "Maybe your OS is not supported?" - echo "Please visit https://docs.docker.com/engine/install/ and install Docker manually to continue." - exit 1 - fi - fi - fi -fi - -echo -e "-------------" -echo -e "Check Docker Configuration..." -mkdir -p /etc/docker -# shellcheck disable=SC2015 -test -s /etc/docker/daemon.json && cp /etc/docker/daemon.json /etc/docker/daemon.json.original-"$DATE" || cat >/etc/docker/daemon.json </etc/docker/daemon.json.coolify <"$TEMP_FILE"; then - echo "Error merging JSON files" - exit 1 -fi -mv "$TEMP_FILE" /etc/docker/daemon.json - -if [ -s /etc/docker/daemon.json.original-"$DATE" ]; then - DIFF=$(diff <(jq --sort-keys . /etc/docker/daemon.json) <(jq --sort-keys . /etc/docker/daemon.json.original-"$DATE")) - if [ "$DIFF" != "" ]; then - echo "Docker configuration updated, restart docker daemon..." - systemctl restart docker - else - echo "Docker configuration is up to date." - fi -else - echo "Docker configuration updated, restart docker daemon..." - systemctl restart docker -fi - -echo -e "-------------" -#add directories here that you want to modify -mkdir -p /data/coolify/{source,ssh,applications,databases,backups,services,proxy,tailwind} -mkdir -p /data/coolify/ssh/{keys,mux} -mkdir -p /data/coolify/proxy/dynamic - -# echo "Downloading required files from CDN..." -# curl -fsSL $CDN/docker-compose.yml -o /data/coolify/source/docker-compose.yml -# curl -fsSL $CDN/docker-compose.prod.yml -o /data/coolify/source/docker-compose.prod.yml -# curl -fsSL $CDN/.env.production -o /data/coolify/source/.env.production -# curl -fsSL $CDN/upgrade.sh -o /data/coolify/source/upgrade.sh - -echo "Copying required files from Last Hour git repo..." -cp /home/lasthour/lasthourcloud/docker-compose.yml /data/coolify/source/docker-compose.yml -cp /home/lasthour/lasthourcloud/docker-compose.prod.yml /data/coolify/source/docker-compose.prod.yml -cp /home/lasthour/lasthourcloud/.env.production /data/coolify/source/.env.production -cp /home/lasthour/lasthourcloud/scripts/upgrade.sh /data/coolify/source/upgrade.sh - - -chown -R 9999:root /data/coolify -chmod -R 700 /data/coolify - -# Copy .env.example if .env does not exist -if [ ! -f /data/coolify/source/.env ]; then - cp /data/coolify/source/.env.production /data/coolify/source/.env - sed -i "s|APP_ID=.*|APP_ID=$(openssl rand -hex 16)|g" /data/coolify/source/.env - sed -i "s|APP_KEY=.*|APP_KEY=base64:$(openssl rand -base64 32)|g" /data/coolify/source/.env - sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=$(openssl rand -base64 32)|g" /data/coolify/source/.env - sed -i "s|REDIS_PASSWORD=.*|REDIS_PASSWORD=$(openssl rand -base64 32)|g" /data/coolify/source/.env - sed -i "s|PUSHER_APP_ID=.*|PUSHER_APP_ID=$(openssl rand -hex 32)|g" /data/coolify/source/.env - sed -i "s|PUSHER_APP_KEY=.*|PUSHER_APP_KEY=$(openssl rand -hex 32)|g" /data/coolify/source/.env - sed -i "s|PUSHER_APP_SECRET=.*|PUSHER_APP_SECRET=$(openssl rand -hex 32)|g" /data/coolify/source/.env -fi - -# Merge .env and .env.production. New values will be added to .env -sort -u -t '=' -k 1,1 /data/coolify/source/.env /data/coolify/source/.env.production | sed '/^$/d' >/data/coolify/source/.env.temp && mv /data/coolify/source/.env.temp /data/coolify/source/.env - -if [ "$AUTOUPDATE" = "false" ]; then - if ! grep -q "AUTOUPDATE=" /data/coolify/source/.env; then - echo "AUTOUPDATE=false" >>/data/coolify/source/.env - else - sed -i "s|AUTOUPDATE=.*|AUTOUPDATE=false|g" /data/coolify/source/.env - fi -fi - -# Generate an ssh key (ed25519) at /data/coolify/ssh/keys/id.root@host.docker.internal -if [ ! -f /data/coolify/ssh/keys/id.root@host.docker.internal ]; then - ssh-keygen -t ed25519 -a 100 -f /data/coolify/ssh/keys/id.root@host.docker.internal -q -N "" -C root@coolify - chown 9999 /data/coolify/ssh/keys/id.root@host.docker.internal -fi - -addSshKey() { - cat /data/coolify/ssh/keys/id.root@host.docker.internal.pub >>~/.ssh/authorized_keys - chmod 600 ~/.ssh/authorized_keys -} - -if [ ! -f ~/.ssh/authorized_keys ]; then - mkdir -p ~/.ssh - chmod 700 ~/.ssh - touch ~/.ssh/authorized_keys - addSshKey -fi - -if ! grep -qw "root@coolify" ~/.ssh/authorized_keys; then - addSshKey -fi -echo "Generated SSH access" - -echo "Begin upgrade.sh" -bash /data/coolify/source/upgrade.sh "${LATEST_VERSION:-latest}" - -echo -e "\nCongratulations! Your Coolify instance is ready to use.\n" -echo "Please visit http://$(curl -4s https://ifconfig.io):8000 to get started." \ No newline at end of file diff --git a/scripts/upgrade.sh b/scripts/upgrade.sh index 6f138ff5a..6fe8232a0 100644 --- a/scripts/upgrade.sh +++ b/scripts/upgrade.sh @@ -2,17 +2,17 @@ ## Do not modify this file. You will lose the ability to autoupdate! VERSION="1.0.4" -CDN="https://cdn.coollabs.io/coolify" +CDN="https://cdn.githaven.org/lasthourcloud" -# curl -fsSL $CDN/docker-compose.yml -o /data/coolify/source/docker-compose.yml -# curl -fsSL $CDN/docker-compose.prod.yml -o /data/coolify/source/docker-compose.prod.yml -# curl -fsSL $CDN/.env.production -o /data/coolify/source/.env.production +curl -fsSL $CDN/docker-compose.yml -o /data/coolify/source/docker-compose.yml +curl -fsSL $CDN/docker-compose.prod.yml -o /data/coolify/source/docker-compose.prod.yml +curl -fsSL $CDN/.env.production -o /data/coolify/source/.env.production -echo "Copying required files from Last Hour git repo..." -cp /home/lasthour/lasthourcloud/docker-compose.yml /data/coolify/source/docker-compose.yml -cp /home/lasthour/lasthourcloud/docker-compose.prod.yml /data/coolify/source/docker-compose.prod.yml -cp /home/lasthour/lasthourcloud/.env.production /data/coolify/source/.env.production -cp /home/lasthour/lasthourcloud/scripts/upgrade.sh /data/coolify/source/upgrade.sh +# echo "Copying required files from Last Hour Cloud git repo..." +# cp /home/lasthour/lasthourcloud/docker-compose.yml /data/coolify/source/docker-compose.yml +# cp /home/lasthour/lasthourcloud/docker-compose.prod.yml /data/coolify/source/docker-compose.prod.yml +# cp /home/lasthour/lasthourcloud/.env.production /data/coolify/source/.env.production +# cp /home/lasthour/lasthourcloud/scripts/upgrade.sh /data/coolify/source/upgrade.sh # Merge .env and .env.production. New values will be added to .env @@ -39,5 +39,5 @@ if [ -f /data/coolify/source/docker-compose.custom.yml ]; then echo "docker-compose.custom.yml detected." docker run --pull always -v /data/coolify/source:/data/coolify/source -v /var/run/docker.sock:/var/run/docker.sock --rm ghcr.io/coollabsio/coolify-helper bash -c "LATEST_IMAGE=${1:-} docker compose --env-file /data/coolify/source/.env -f /data/coolify/source/docker-compose.yml -f /data/coolify/source/docker-compose.prod.yml -f /data/coolify/source/docker-compose.custom.yml up -d --pull always --remove-orphans --force-recreate" else - docker run --pull always -v /data/coolify/source:/data/coolify/source -v /var/run/docker.sock:/var/run/docker.sock -v /data/coolify/public -v /data/coolify/Livewire -v /data/coolify/auth -v /data/coolify/Notifications -v /data/coolify/Models --rm ghcr.io/coollabsio/coolify-helper bash -c "LATEST_IMAGE=${1:-} docker compose --env-file /data/coolify/source/.env -f /data/coolify/source/docker-compose.yml -f /data/coolify/source/docker-compose.prod.yml up -d --pull always --remove-orphans --force-recreate" + docker run --pull always -v /data/coolify/source:/data/coolify/source -v /var/run/docker.sock:/var/run/docker.sock --rm ghcr.io/coollabsio/coolify-helper bash -c "LATEST_IMAGE=${1:-} docker compose --env-file /data/coolify/source/.env -f /data/coolify/source/docker-compose.yml -f /data/coolify/source/docker-compose.prod.yml up -d --pull always --remove-orphans --force-recreate" fi diff --git a/tailwind.config.js b/tailwind.config.js index 2988c073d..a1d888efa 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -14,8 +14,8 @@ module.exports = { sans: ["Inter", "sans-serif"], }, colors: { - coollabs: "#6B16ED", - "coollabs-100": "#7317FF", + coollabs: "#00bff7", + "coollabs-100": "#00bff7", "coolgray-100": "#181818", "coolgray-200": "#202020", "coolgray-300": "#242424", @@ -35,7 +35,7 @@ module.exports = { primary: "#202020", "primary-focus": "#242424", secondary: "#00bcf3", - accent: "#4338ca", + accent: "#00bff7", neutral: "#1B1D1D", "base-100": "#101010", info: "#2563EB",