Compare commits

..

No commits in common. "main" and "0.1.0" have entirely different histories.
main ... 0.1.0

201 changed files with 2975 additions and 13330 deletions

View file

@ -8,7 +8,7 @@ jobs:
phyre-panel-unit-test:
strategy:
matrix:
os: [ubuntu-24.04, ubuntu-22.04]
os: [ubuntu-22.04, ubuntu-20.04]
runs-on: ${{ matrix.os }}
@ -41,7 +41,7 @@ jobs:
sudo wget https://getcomposer.org/download/latest-stable/composer.phar
sudo COMPOSER_ALLOW_SUPERUSER=1 phyre-php composer.phar install
sudo /phyre-panel/install_web.sh --dont-ask
sudo /phyre-panel/install_web.sh
sudo phyre-php artisan test --filter HostingSubscriptionsTest
compile-phyre-web-panel:

3
.gitignore vendored
View file

@ -19,6 +19,3 @@ web/phyre-config.ini
.idea/modules.xml
.idea/deployment.xml
/web/Modules/Microweber/vendor/
.aider*
/.vscode
.env

View file

@ -19,12 +19,6 @@
<a href="https://codecov.io/gh/PhyreApps/PhyrePanel"><img src="https://codecov.io/gh/PhyreApps/PhyrePanel/graph/badge.svg?token=BO0RTPLS4W"/></a>
</p>
<p align="center">
<a href="https://www.buymeacoffee.com/phyre" style="display: inline-block;margin: 15px 0px;">
<img src="https://img.buymeacoffee.com/button-api/?text=Support Phyre Panel&emoji=&slug=phyre&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff" alt="Support Phyre Panel" style="height: 40px !important; ">
</a>
</p>
![Phyre Panel - Dashboard](screenshots/dashboard.png)
## About PHYRE PANEL

View file

@ -1,99 +1,13 @@
# --------------------------------------------------
# 1) Base Image
# --------------------------------------------------
FROM ubuntu:24.04
# syntax=docker/dockerfile:1
# So apt doesn't prompt us
ENV DEBIAN_FRONTEND=noninteractive
FROM ubuntu:22.04 AS production
# --------------------------------------------------
# 2) Install base dependencies
# --------------------------------------------------
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
wget \
curl \
netcat \
mysql-client \
unzip \
gnupg2 \
lsb-release \
apt-transport-https \
software-properties-common \
libpng-dev \
libwebp-dev \
libjpeg-turbo8 \
libfreetype6 \
supervisor && \
rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -yq wget
RUN ls -la
RUN wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/main/installers/install.sh -O phyre-install.sh
RUN chmod +x phyre-install.sh
RUN ./phyre-install.sh
# --------------------------------------------------
# 3) Install Phyre .deb packages
# --------------------------------------------------
# 3.1 - Add any system libs needed by Phyre (from your script):
RUN apt-get update && \
apt-get install -y --no-install-recommends \
openssl \
libonig-dev \
libzip-dev \
libcurl4-openssl-dev \
libsodium23 \
libpq5 \
libssl-dev \
zlib1g-dev && \
rm -rf /var/lib/apt/lists/*
COPY entrypoint.sh /usr/local/phyre/entrypoint.sh
WORKDIR /phyre/install
# 3.2 - Install Phyre PHP
RUN wget -q https://github.com/PhyreApps/PhyrePanelPHP/raw/main/compilators/debian/php/dist/phyre-php-8.2.0-ubuntu-22.04.deb && \
dpkg -i phyre-php-8.2.0-ubuntu-22.04.deb || (apt-get install -f -y && dpkg -i phyre-php-8.2.0-ubuntu-22.04.deb) && \
rm -f phyre-php-8.2.0-ubuntu-22.04.deb
# 3.3 - Install Phyre NGINX
RUN wget -q https://github.com/PhyreApps/PhyrePanelNGINX/raw/main/compilators/debian/nginx/dist/phyre-nginx-1.24.0-ubuntu-22.04.deb && \
dpkg -i phyre-nginx-1.24.0-ubuntu-22.04.deb || (apt-get install -f -y && dpkg -i phyre-nginx-1.24.0-ubuntu-22.04.deb) && \
rm -f phyre-nginx-1.24.0-ubuntu-22.04.deb && \
ln -s /usr/local/phyre/nginx/sbin/phyre-nginx /usr/local/phyre/nginx/sbin/nginx
# --------------------------------------------------
# 4) Symlink & SSL setup
# --------------------------------------------------
RUN ln -s /usr/local/phyre/php/bin/php /usr/bin/phyre-php
RUN mkdir -p /usr/local/phyre/ssl && \
wget -q https://raw.githubusercontent.com/PhyreApps/PhyrePanel/refs/heads/main/web/server/ssl/phyre.crt -O /usr/local/phyre/ssl/phyre.crt && \
wget -q https://raw.githubusercontent.com/PhyreApps/PhyrePanel/refs/heads/main/web/server/ssl/phyre.key -O /usr/local/phyre/ssl/phyre.key && \
chmod 644 /usr/local/phyre/ssl/phyre.crt && \
chmod 600 /usr/local/phyre/ssl/phyre.key
# --------------------------------------------------
# 5) Download Phyre Web Panel
# --------------------------------------------------
RUN wget -q https://github.com/PhyreApps/PhyrePanelWebCompiledVersions/raw/main/phyre-web-panel.zip && \
unzip -qq -o phyre-web-panel.zip -d /usr/local/phyre/web && \
rm -rf phyre-web-panel.zip
# --------------------------------------------------
# 6) Add a custom entrypoint script
# that will configure Phyre and run Nginx in foreground
# --------------------------------------------------
WORKDIR /usr/local/phyre/web
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# Supervisord config (optional if you want to manage multiple processes)
# (But here we can simply run Phyre Nginx in the foreground)
#COPY supervisord.conf /etc/supervisor/conf.d/phyre-supervisor.conf
# Expose HTTP (80) and HTTPS (8443)
EXPOSE 80 8443
# --------------------------------------------------
# 7) Set up final Docker config
# --------------------------------------------------
# We'll run our entrypoint which configures the panel, then runs Nginx
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["phyre-php", "--version"]
ENTRYPOINT ["sh","/usr/local/phyre/entrypoint.sh"]

View file

@ -1,46 +0,0 @@
version: '3.8'
services:
db:
image: mysql:8.0
container_name: phyre-db
environment:
MYSQL_ROOT_PASSWORD: exampleRootPass
MYSQL_DATABASE: phyrepanel
MYSQL_USER: phyre
MYSQL_PASSWORD: examplePhyrePass
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- phyre_net
phyre-app:
build: .
container_name: phyre-app
depends_on:
- db
ports:
- "8443:8443"
- "8080:80"
environment:
# These environment variables are used by our entrypoint
DB_HOST: db
DB_PORT: 3306
DB_DATABASE: phyrepanel
DB_USERNAME: phyre
DB_PASSWORD: examplePhyrePass
# Additional app settings
APP_ENV: local
APP_URL: "https://localhost:8443"
APP_NAME: PhyrePanel
networks:
- phyre_net
volumes:
db_data:
networks:
phyre_net:
driver: bridge

View file

@ -1,33 +1,4 @@
#!/usr/bin/env bash
set -e
service mysql start
service phyre start
# Wait for MySQL to be ready
echo "Waiting for database at $DB_HOST:$DB_PORT..."
while ! nc -z $DB_HOST $DB_PORT; do
sleep 2
done
echo "Database is up!"
# Configure environment variables
phyre-php artisan phyre:set-ini-settings DB_DATABASE "$DB_DATABASE"
phyre-php artisan phyre:set-ini-settings DB_USERNAME "$DB_USERNAME"
phyre-php artisan phyre:set-ini-settings DB_PASSWORD "$DB_PASSWORD"
phyre-php artisan phyre:set-ini-settings DB_HOST "$DB_HOST"
phyre-php artisan phyre:set-ini-settings DB_CONNECTION "mysql"
phyre-php artisan phyre:set-ini-settings APP_ENV "$APP_ENV"
phyre-php artisan phyre:set-ini-settings APP_URL "$APP_URL"
phyre-php artisan phyre:set-ini-settings APP_NAME "$APP_NAME"
# Generate keys, migrate, and seed
phyre-php artisan phyre:key-generate
phyre-php artisan migrate --force
phyre-php artisan db:seed --force
# Start Nginx in foreground
echo "Starting Nginx..."
exec /usr/sbin/service phyre start && /usr/local/phyre/nginx/sbin/nginx -g "daemon off;"
#exec /usr/sbin/service phyre start
# Start Supervisor to manage all processes
#echo "Starting Supervisor to manage processes..."
#exec /usr/bin/supervisord -c /etc/supervisor/conf.d/phyre-supervisor.conf
tail -f /dev/null

View file

@ -1,25 +0,0 @@
[supervisord]
nodaemon=true
logfile=/var/log/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php-fpm]
command=/bin/bash -c 'if ! ps aux | grep "[p]hp-fpm: master process" > /dev/null; then /usr/local/phyre/php/sbin/phyre-php-fpm --nodaemonize; fi'
autostart=true
autorestart=true
stdout_logfile=/var/log/php-fpm.log
stderr_logfile=/var/log/php-fpm.err.log
[program:phyre]
command=/bin/bash -c 'while ! mysqladmin ping -h "$DB_HOST" --silent; do sleep 2; done; if ! ps aux | grep "[s]ervice phyre" > /dev/null; then /usr/sbin/service phyre start; fi'
autostart=true
autorestart=true
stdout_logfile=/var/log/phyre.log
stderr_logfile=/var/log/phyre.err.log
[program:phyre-nginx]
command=/bin/bash -c 'if ! ps aux | grep "[p]hyre-nginx" > /dev/null; then /usr/local/phyre/nginx/sbin/phyre-nginx -g "daemon off;"; fi'
autostart=true
autorestart=true
stdout_logfile=/var/log/phyre-nginx.log
stderr_logfile=/var/log/phyre-nginx.err.log

View file

@ -49,8 +49,12 @@ export default defineConfig({
text: 'Contributing',
link: 'https://github.com/PhyreApps/PhyrePanel/blob/main/CONTRIBUTING.md',
},
]
}
{
text: 'Security policy',
link: 'https://github.com/PhyreApps/PhyrePanel/blob/main/SECURITY.md',
},
],
},
],
sidebar: [
@ -60,19 +64,7 @@ export default defineConfig({
{ text: 'Getting Started', link: '/introduction/getting-started' },
{ text: 'Installation', link: '/install' },
{ text: 'Requirements', link: '/introduction/requirements' },
{ text: 'Features', link: '/introduction/features' }
]
},
{
text: 'Commands',
items: [
{ text: 'System Commands', link: '/commands/system-commands' },
{ text: 'Installation Commands', link: '/commands/installation-commands' },
{ text: 'SSL & Domain Management', link: '/commands/ssl-domain-management' },
{ text: 'Backup Management', link: '/commands/backup-management' },
{ text: 'User Management', link: '/commands/user-management' },
{ text: 'System Configuration', link: '/commands/system-configuration' },
{ text: 'System Update', link: '/commands/system-update' },
{ text: 'Features', link: '/introduction/features' },
]
},
{

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
import{R as p}from"./chunks/theme.BviEWPeY.js";import{U as o,a6 as u,a7 as c,a8 as l,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,af as y,d as P,u as v,k as w,y as C,ag as R,ah as b,ai as E,a3 as S}from"./chunks/framework.B4OOrI6A.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(p),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return w(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=y(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp};
import{R as p}from"./chunks/theme.CL3rQOXI.js";import{U as o,a6 as u,a7 as c,a8 as l,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,af as y,d as P,u as v,k as w,y as C,ag as R,ah as b,ai as E,a3 as S}from"./chunks/framework.B4OOrI6A.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(p),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return w(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=y(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as s,a4 as t}from"./chunks/framework.B4OOrI6A.js";const k=JSON.parse('{"title":"Backup Management","description":"","frontmatter":{},"headers":[],"relativePath":"commands/backup-management.md","filePath":"commands/backup-management.md"}'),l={name:"commands/backup-management.md"},c=t('<h1 id="backup-management" tabindex="-1">Backup Management <a class="header-anchor" href="#backup-management" aria-label="Permalink to &quot;Backup Management&quot;"></a></h1><h2 id="available-commands" tabindex="-1">Available Commands <a class="header-anchor" href="#available-commands" aria-label="Permalink to &quot;Available Commands&quot;"></a></h2><h3 id="phyre-create-daily-full-backup" tabindex="-1"><code>phyre:create-daily-full-backup</code> <a class="header-anchor" href="#phyre-create-daily-full-backup" aria-label="Permalink to &quot;`phyre:create-daily-full-backup`&quot;"></a></h3><ul><li>Description: Creates a full system backup</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:create-daily-full-backup</span></span></code></pre></div><h3 id="phyre-create-daily-full-hosting-subscriptions-backup" tabindex="-1"><code>phyre:create-daily-full-hosting-subscriptions-backup</code> <a class="header-anchor" href="#phyre-create-daily-full-hosting-subscriptions-backup" aria-label="Permalink to &quot;`phyre:create-daily-full-hosting-subscriptions-backup`&quot;"></a></h3><ul><li>Description: Creates backups for all hosting subscriptions</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:create-daily-full-hosting-subscriptions-backup</span></span></code></pre></div><h3 id="phyre-run-backup-checks" tabindex="-1"><code>phyre:run-backup-checks</code> <a class="header-anchor" href="#phyre-run-backup-checks" aria-label="Permalink to &quot;`phyre:run-backup-checks`&quot;"></a></h3><ul><li>Description: Checks and manages backup status</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:run-backup-checks</span></span></code></pre></div><h3 id="phyre-run-upload-backups-to-remote-servers" tabindex="-1"><code>phyre:run-upload-backups-to-remote-servers</code> <a class="header-anchor" href="#phyre-run-upload-backups-to-remote-servers" aria-label="Permalink to &quot;`phyre:run-upload-backups-to-remote-servers`&quot;"></a></h3><ul><li>Description: Uploads backups to configured remote servers</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:run-upload-backups-to-remote-servers</span></span></code></pre></div>',14),r=[c];function p(i,n,o,u,h,d){return s(),e("div",null,r)}const m=a(l,[["render",p]]);export{k as __pageData,m as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as s,a4 as t}from"./chunks/framework.B4OOrI6A.js";const k=JSON.parse('{"title":"Backup Management","description":"","frontmatter":{},"headers":[],"relativePath":"commands/backup-management.md","filePath":"commands/backup-management.md"}'),l={name:"commands/backup-management.md"},c=t("",14),r=[c];function p(i,n,o,u,h,d){return s(),e("div",null,r)}const m=a(l,[["render",p]]);export{k as __pageData,m as default};

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as s,a4 as i}from"./chunks/framework.B4OOrI6A.js";const g=JSON.parse('{"title":"Phyre Panel Terminal Commands","description":"","frontmatter":{},"headers":[],"relativePath":"commands/documentation.md","filePath":"commands/documentation.md"}'),l={name:"commands/documentation.md"},n=i("",61),p=[n];function t(o,r,c,h,d,u){return s(),e("div",null,p)}const y=a(l,[["render",t]]);export{g as __pageData,y as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as n,a4 as t}from"./chunks/framework.B4OOrI6A.js";const f=JSON.parse('{"title":"Phyre Panel Terminal Commands Index","description":"","frontmatter":{},"headers":[],"relativePath":"commands/index.md","filePath":"commands/index.md"}'),m={name:"commands/index.md"},i=t('<h1 id="phyre-panel-terminal-commands-index" tabindex="-1">Phyre Panel Terminal Commands Index <a class="header-anchor" href="#phyre-panel-terminal-commands-index" aria-label="Permalink to &quot;Phyre Panel Terminal Commands Index&quot;"></a></h1><h2 id="available-categories" tabindex="-1">Available Categories <a class="header-anchor" href="#available-categories" aria-label="Permalink to &quot;Available Categories&quot;"></a></h2><ul><li><a href="./system-commands.html">System Commands</a></li><li><a href="./installation-commands.html">Installation Commands</a></li><li><a href="./ssl-domain-management.html">SSL &amp; Domain Management</a></li><li><a href="./backup-management.html">Backup Management</a></li><li><a href="./user-management.html">User Management</a></li><li><a href="./system-configuration.html">System Configuration</a></li><li><a href="./system-update.html">System Update</a></li></ul>',3),l=[i];function s(o,r,d,c,h,_){return n(),e("div",null,l)}const u=a(m,[["render",s]]);export{f as __pageData,u as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as n,a4 as t}from"./chunks/framework.B4OOrI6A.js";const f=JSON.parse('{"title":"Phyre Panel Terminal Commands Index","description":"","frontmatter":{},"headers":[],"relativePath":"commands/index.md","filePath":"commands/index.md"}'),m={name:"commands/index.md"},i=t("",3),l=[i];function s(o,r,d,c,h,_){return n(),e("div",null,l)}const u=a(m,[["render",s]]);export{f as __pageData,u as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as l,a4 as s}from"./chunks/framework.B4OOrI6A.js";const _=JSON.parse('{"title":"Installation Commands","description":"","frontmatter":{},"headers":[],"relativePath":"commands/installation-commands.md","filePath":"commands/installation-commands.md"}'),t={name:"commands/installation-commands.md"},n=s('<h1 id="installation-commands" tabindex="-1">Installation Commands <a class="header-anchor" href="#installation-commands" aria-label="Permalink to &quot;Installation Commands&quot;"></a></h1><h2 id="available-commands" tabindex="-1">Available Commands <a class="header-anchor" href="#available-commands" aria-label="Permalink to &quot;Available Commands&quot;"></a></h2><h3 id="phyre-install-apache" tabindex="-1"><code>phyre:install-apache</code> <a class="header-anchor" href="#phyre-install-apache" aria-label="Permalink to &quot;`phyre:install-apache`&quot;"></a></h3><ul><li>Description: Installs Apache web server with latest PHP version</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:install-apache</span></span></code></pre></div><h3 id="phyre-install-module-module" tabindex="-1"><code>phyre:install-module {module}</code> <a class="header-anchor" href="#phyre-install-module-module" aria-label="Permalink to &quot;`phyre:install-module {module}`&quot;"></a></h3><ul><li>Description: Installs a specific Phyre module</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:install-module module_name</span></span></code></pre></div>',8),i=[n];function o(d,c,r,h,p,m){return l(),e("div",null,i)}const b=a(t,[["render",o]]);export{_ as __pageData,b as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as l,a4 as s}from"./chunks/framework.B4OOrI6A.js";const _=JSON.parse('{"title":"Installation Commands","description":"","frontmatter":{},"headers":[],"relativePath":"commands/installation-commands.md","filePath":"commands/installation-commands.md"}'),t={name:"commands/installation-commands.md"},n=s("",8),i=[n];function o(d,c,r,h,p,m){return l(),e("div",null,i)}const b=a(t,[["render",o]]);export{_ as __pageData,b as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as s,a4 as t}from"./chunks/framework.B4OOrI6A.js";const g=JSON.parse('{"title":"SSL & Domain Management","description":"","frontmatter":{},"headers":[],"relativePath":"commands/ssl-domain-management.md","filePath":"commands/ssl-domain-management.md"}'),i={name:"commands/ssl-domain-management.md"},n=t('<h1 id="ssl-domain-management" tabindex="-1">SSL &amp; Domain Management <a class="header-anchor" href="#ssl-domain-management" aria-label="Permalink to &quot;SSL &amp; Domain Management&quot;"></a></h1><h2 id="available-commands" tabindex="-1">Available Commands <a class="header-anchor" href="#available-commands" aria-label="Permalink to &quot;Available Commands&quot;"></a></h2><h3 id="phyre-setup-master-domain-ssl" tabindex="-1"><code>phyre:setup-master-domain-ssl</code> <a class="header-anchor" href="#phyre-setup-master-domain-ssl" aria-label="Permalink to &quot;`phyre:setup-master-domain-ssl`&quot;"></a></h3><ul><li>Description: Sets up SSL certificate for the master domain</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:setup-master-domain-ssl</span></span></code></pre></div><h3 id="phyre-apache-ping-websites-with-curl" tabindex="-1"><code>phyre:apache-ping-websites-with-curl</code> <a class="header-anchor" href="#phyre-apache-ping-websites-with-curl" aria-label="Permalink to &quot;`phyre:apache-ping-websites-with-curl`&quot;"></a></h3><ul><li>Description: Tests HTTP response for all websites</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:apache-ping-websites-with-curl</span></span></code></pre></div>',8),l=[n];function o(r,p,c,m,h,d){return s(),e("div",null,l)}const b=a(i,[["render",o]]);export{g as __pageData,b as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as s,a4 as t}from"./chunks/framework.B4OOrI6A.js";const g=JSON.parse('{"title":"SSL & Domain Management","description":"","frontmatter":{},"headers":[],"relativePath":"commands/ssl-domain-management.md","filePath":"commands/ssl-domain-management.md"}'),i={name:"commands/ssl-domain-management.md"},n=t("",8),l=[n];function o(r,p,c,m,h,d){return s(),e("div",null,l)}const b=a(i,[["render",o]]);export{g as __pageData,b as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as s,a4 as r}from"./chunks/framework.B4OOrI6A.js";const y=JSON.parse('{"title":"System Commands","description":"","frontmatter":{},"headers":[],"relativePath":"commands/system-commands.md","filePath":"commands/system-commands.md"}'),i={name:"commands/system-commands.md"},t=r('<h1 id="system-commands" tabindex="-1">System Commands <a class="header-anchor" href="#system-commands" aria-label="Permalink to &quot;System Commands&quot;"></a></h1><h2 id="available-commands" tabindex="-1">Available Commands <a class="header-anchor" href="#available-commands" aria-label="Permalink to &quot;Available Commands&quot;"></a></h2><h3 id="phyre-health-check" tabindex="-1"><code>phyre:health-check</code> <a class="header-anchor" href="#phyre-health-check" aria-label="Permalink to &quot;`phyre:health-check`&quot;"></a></h3><ul><li>Description: Checks system health including supervisor and Apache2 status</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:health-check</span></span></code></pre></div><h3 id="phyre-run-repair" tabindex="-1"><code>phyre:run-repair</code> <a class="header-anchor" href="#phyre-run-repair" aria-label="Permalink to &quot;`phyre:run-repair`&quot;"></a></h3><ul><li>Description: Performs system repairs including database users, phpMyAdmin, and Apache configurations</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:run-repair</span></span></code></pre></div><h3 id="phyre-run-domain-repair" tabindex="-1"><code>phyre:run-domain-repair</code> <a class="header-anchor" href="#phyre-run-domain-repair" aria-label="Permalink to &quot;`phyre:run-domain-repair`&quot;"></a></h3><ul><li>Description: Repairs domain configurations</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:run-domain-repair</span></span></code></pre></div>',11),n=[t];function o(l,h,p,c,d,m){return s(),e("div",null,n)}const b=a(i,[["render",o]]);export{y as __pageData,b as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as s,a4 as r}from"./chunks/framework.B4OOrI6A.js";const y=JSON.parse('{"title":"System Commands","description":"","frontmatter":{},"headers":[],"relativePath":"commands/system-commands.md","filePath":"commands/system-commands.md"}'),i={name:"commands/system-commands.md"},t=r("",11),n=[t];function o(l,h,p,c,d,m){return s(),e("div",null,n)}const b=a(i,[["render",o]]);export{y as __pageData,b as default};

View file

@ -1 +0,0 @@
import{_ as e,c as a,o as t,a4 as i}from"./chunks/framework.B4OOrI6A.js";const y=JSON.parse('{"title":"System Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"commands/system-configuration.md","filePath":"commands/system-configuration.md"}'),s={name:"commands/system-configuration.md"},n=i('<h1 id="system-configuration" tabindex="-1">System Configuration <a class="header-anchor" href="#system-configuration" aria-label="Permalink to &quot;System Configuration&quot;"></a></h1><h2 id="available-commands" tabindex="-1">Available Commands <a class="header-anchor" href="#available-commands" aria-label="Permalink to &quot;Available Commands&quot;"></a></h2><h3 id="phyre-key-generate" tabindex="-1"><code>phyre:key-generate</code> <a class="header-anchor" href="#phyre-key-generate" aria-label="Permalink to &quot;`phyre:key-generate`&quot;"></a></h3><ul><li>Description: Generates application key in phyre-config.ini</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:key-generate</span></span></code></pre></div><h3 id="phyre-set-ini-settings-key-value" tabindex="-1"><code>phyre:set-ini-settings {key} {value}</code> <a class="header-anchor" href="#phyre-set-ini-settings-key-value" aria-label="Permalink to &quot;`phyre:set-ini-settings {key} {value}`&quot;"></a></h3><ul><li>Description: Sets configuration values in phyre-config.ini</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:set-ini-settings key value</span></span></code></pre></div>',8),o=[n];function r(l,c,p,h,d,u){return t(),a("div",null,o)}const g=e(s,[["render",r]]);export{y as __pageData,g as default};

View file

@ -1 +0,0 @@
import{_ as e,c as a,o as t,a4 as i}from"./chunks/framework.B4OOrI6A.js";const y=JSON.parse('{"title":"System Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"commands/system-configuration.md","filePath":"commands/system-configuration.md"}'),s={name:"commands/system-configuration.md"},n=i("",8),o=[n];function r(l,c,p,h,d,u){return t(),a("div",null,o)}const g=e(s,[["render",r]]);export{y as __pageData,g as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as t,a4 as s}from"./chunks/framework.B4OOrI6A.js";const _=JSON.parse('{"title":"System Update","description":"","frontmatter":{},"headers":[],"relativePath":"commands/system-update.md","filePath":"commands/system-update.md"}'),o={name:"commands/system-update.md"},d=s('<h1 id="system-update" tabindex="-1">System Update <a class="header-anchor" href="#system-update" aria-label="Permalink to &quot;System Update&quot;"></a></h1><h2 id="available-commands" tabindex="-1">Available Commands <a class="header-anchor" href="#available-commands" aria-label="Permalink to &quot;Available Commands&quot;"></a></h2><h3 id="phyre-update" tabindex="-1"><code>phyre:update</code> <a class="header-anchor" href="#phyre-update" aria-label="Permalink to &quot;`phyre:update`&quot;"></a></h3><ul><li>Description: Updates Phyre to the latest version</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:update</span></span></code></pre></div>',5),i=[d];function p(r,l,n,c,h,m){return t(),e("div",null,i)}const y=a(o,[["render",p]]);export{_ as __pageData,y as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as t,a4 as s}from"./chunks/framework.B4OOrI6A.js";const _=JSON.parse('{"title":"System Update","description":"","frontmatter":{},"headers":[],"relativePath":"commands/system-update.md","filePath":"commands/system-update.md"}'),o={name:"commands/system-update.md"},d=s("",5),i=[d];function p(r,l,n,c,h,m){return t(),e("div",null,i)}const y=a(o,[["render",p]]);export{_ as __pageData,y as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as s,a4 as t}from"./chunks/framework.B4OOrI6A.js";const _=JSON.parse('{"title":"User Management","description":"","frontmatter":{},"headers":[],"relativePath":"commands/user-management.md","filePath":"commands/user-management.md"}'),n={name:"commands/user-management.md"},r=t('<h1 id="user-management" tabindex="-1">User Management <a class="header-anchor" href="#user-management" aria-label="Permalink to &quot;User Management&quot;"></a></h1><h2 id="available-commands" tabindex="-1">Available Commands <a class="header-anchor" href="#available-commands" aria-label="Permalink to &quot;Available Commands&quot;"></a></h2><h3 id="phyre-create-admin-account" tabindex="-1"><code>phyre:create-admin-account</code> <a class="header-anchor" href="#phyre-create-admin-account" aria-label="Permalink to &quot;`phyre:create-admin-account`&quot;"></a></h3><ul><li>Description: Creates a new admin account</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:create-admin-account</span></span></code></pre></div><h3 id="phyre-reset-admin-account-password" tabindex="-1"><code>phyre:reset-admin-account-password</code> <a class="header-anchor" href="#phyre-reset-admin-account-password" aria-label="Permalink to &quot;`phyre:reset-admin-account-password`&quot;"></a></h3><ul><li>Description: Resets password for an existing admin account</li><li>Usage:</li></ul><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>phyre-php /usr/local/phyre/web/artisan phyre:reset-admin-account-password</span></span></code></pre></div>',8),o=[r];function c(i,d,l,p,m,h){return s(),e("div",null,o)}const g=a(n,[["render",c]]);export{_ as __pageData,g as default};

View file

@ -1 +0,0 @@
import{_ as a,c as e,o as s,a4 as t}from"./chunks/framework.B4OOrI6A.js";const _=JSON.parse('{"title":"User Management","description":"","frontmatter":{},"headers":[],"relativePath":"commands/user-management.md","filePath":"commands/user-management.md"}'),n={name:"commands/user-management.md"},r=t("",8),o=[r];function c(i,d,l,p,m,h){return s(),e("div",null,o)}const g=a(n,[["render",c]]);export{_ as __pageData,g as default};

View file

@ -0,0 +1 @@
import{_ as a,c as t,o as e,a4 as s}from"./chunks/framework.B4OOrI6A.js";const u=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"install.md","filePath":"install.md"}'),n={name:"install.md"},l=s('<h1 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to &quot;Installation&quot;"></a></h1><p>To install PhyrePanel, you need to run this commands:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/main/installers/install.sh &amp;&amp; chmod +x install.sh &amp;&amp; ./install.sh</span></span></code></pre></div><p>The admin panel can be opened on port: yourserver.com:8443</p>',4),o=[l];function i(p,r,c,d,h,_){return e(),t("div",null,o)}const P=a(n,[["render",i]]);export{u as __pageData,P as default};

View file

@ -0,0 +1 @@
import{_ as a,c as t,o as e,a4 as s}from"./chunks/framework.B4OOrI6A.js";const u=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"install.md","filePath":"install.md"}'),n={name:"install.md"},l=s("",4),o=[l];function i(p,r,c,d,h,_){return e(),t("div",null,o)}const P=a(n,[["render",i]]);export{u as __pageData,P as default};

View file

@ -1 +0,0 @@
import{_ as a,c as t,o as e,a4 as s}from"./chunks/framework.B4OOrI6A.js";const _=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"install.md","filePath":"install.md"}'),n={name:"install.md"},i=s('<h1 id="installation" tabindex="-1">Installation <a class="header-anchor" href="#installation" aria-label="Permalink to &quot;Installation&quot;"></a></h1><p>To install PhyrePanel, you need to run this commands:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/main/installers/install.sh &amp;&amp; chmod +x install.sh &amp;&amp; ./install.sh</span></span></code></pre></div><p>The admin panel can be opened on port: yourserver.com:8443</p><h1 id="updating" tabindex="-1">Updating <a class="header-anchor" href="#updating" aria-label="Permalink to &quot;Updating&quot;"></a></h1><p>To update PhyrePanel to the latest version, run this command:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span>rm -rf update.sh &amp;&amp; wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/main/web/update.sh &amp;&amp; chmod +x update.sh &amp;&amp; ./update.sh</span></span></code></pre></div>',7),l=[i];function p(o,r,h,c,d,m){return e(),t("div",null,l)}const g=a(n,[["render",p]]);export{_ as __pageData,g as default};

View file

@ -1 +0,0 @@
import{_ as a,c as t,o as e,a4 as s}from"./chunks/framework.B4OOrI6A.js";const _=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"install.md","filePath":"install.md"}'),n={name:"install.md"},i=s("",7),l=[i];function p(o,r,h,c,d,m){return e(),t("div",null,l)}const g=a(n,[["render",p]]);export{_ as __pageData,g as default};

View file

@ -0,0 +1 @@
import{_ as e,c as t,o as a,a4 as r}from"./chunks/framework.B4OOrI6A.js";const f=JSON.parse('{"title":"Features","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/features.md","filePath":"introduction/features.md"}'),o={name:"introduction/features.md"},s=r('<h1 id="features" tabindex="-1">Features <a class="header-anchor" href="#features" aria-label="Permalink to &quot;Features&quot;"></a></h1><p>PHYRE PANEL supports a variety of server application types, including:</p><ul><li><strong>Apache + PHP:</strong> Versions 7.4, 8.0, 8.1, 8.3, and 8.4</li><li><strong>Apache + NodeJS</strong></li><li><strong>Apache + Python</strong></li><li><strong>Apache + Ruby</strong></li><li><strong>Apache + Docker (Via Proxy Reverse)</strong></li></ul>',3),n=[s];function i(c,l,_,u,p,d){return a(),t("div",null,n)}const g=e(o,[["render",i]]);export{f as __pageData,g as default};

View file

@ -0,0 +1 @@
import{_ as e,c as t,o as a,a4 as r}from"./chunks/framework.B4OOrI6A.js";const f=JSON.parse('{"title":"Features","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/features.md","filePath":"introduction/features.md"}'),o={name:"introduction/features.md"},s=r("",3),n=[s];function i(c,l,_,u,p,d){return a(),t("div",null,n)}const g=e(o,[["render",i]]);export{f as __pageData,g as default};

View file

@ -1 +0,0 @@
import{_ as e,c as a,o as i,a4 as t}from"./chunks/framework.B4OOrI6A.js";const g=JSON.parse('{"title":"Features","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/features.md","filePath":"introduction/features.md"}'),r={name:"introduction/features.md"},l=t('<h1 id="features" tabindex="-1">Features <a class="header-anchor" href="#features" aria-label="Permalink to &quot;Features&quot;"></a></h1><p>PHYRE PANEL supports a variety of server application types, including:</p><ul><li><strong>Apache + PHP:</strong> Versions 7.4, 8.0, 8.1, 8.3, and 8.4</li><li><strong>Apache + NodeJS:</strong> Version 14.x, 16.x, 20.x</li><li><strong>Apache + Python:</strong> Version 3.10</li><li><strong>Apache + Ruby:</strong> Version 3.4</li><li><strong>Apache + Docker:</strong> (Via Proxy Reverse)</li></ul><h2 id="hosting-management" tabindex="-1">Hosting Management <a class="header-anchor" href="#hosting-management" aria-label="Permalink to &quot;Hosting Management&quot;"></a></h2><ul><li>Multi-server clustering support</li><li>Customer account management</li><li>Flexible hosting plans configuration</li><li>Domain management with multiple server types</li><li>Automated SSL certificate management</li><li>Custom PHP, Node.js, Python and Ruby versions per domain</li><li>Git repository integration</li><li>Docker container support</li></ul><h2 id="database-features" tabindex="-1">Database Features <a class="header-anchor" href="#database-features" aria-label="Permalink to &quot;Database Features&quot;"></a></h2><ul><li>MySQL/MariaDB support</li><li>PostgreSQL support</li><li>MongoDB support</li><li>SQLite support</li><li>Remote database server management</li><li>Database user management</li></ul><h2 id="backup-security" tabindex="-1">Backup &amp; Security <a class="header-anchor" href="#backup-security" aria-label="Permalink to &quot;Backup &amp; Security&quot;"></a></h2><ul><li>Automated backup system</li><li>Multiple backup types (full, selective)</li><li>Custom backup schedules (daily, weekly, monthly)</li><li>Configurable backup retention</li><li>Remote backup server support</li><li>IP whitelisting</li><li>API key management</li></ul><h2 id="system-administration" tabindex="-1">System Administration <a class="header-anchor" href="#system-administration" aria-label="Permalink to &quot;System Administration&quot;"></a></h2><ul><li>Cron job management</li><li>Server resource monitoring</li><li>Multi-user administration</li><li>Server clustering capabilities</li><li>Remote server management</li><li>System updates management</li></ul><h2 id="additional-features" tabindex="-1">Additional Features <a class="header-anchor" href="#additional-features" aria-label="Permalink to &quot;Additional Features&quot;"></a></h2><ul><li>Custom environment variables support</li><li>Multiple PHP versions per domain</li><li>Node.js package manager support (npm, yarn)</li><li>Development/Production environment switching</li><li>Custom domain configurations</li><li>Server health monitoring</li></ul>',13),n=[l];function o(s,u,m,c,p,d){return i(),a("div",null,n)}const b=e(r,[["render",o]]);export{g as __pageData,b as default};

View file

@ -1 +0,0 @@
import{_ as e,c as a,o as i,a4 as t}from"./chunks/framework.B4OOrI6A.js";const g=JSON.parse('{"title":"Features","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/features.md","filePath":"introduction/features.md"}'),r={name:"introduction/features.md"},l=t("",13),n=[l];function o(s,u,m,c,p,d){return i(),a("div",null,n)}const b=e(r,[["render",o]]);export{g as __pageData,b as default};

View file

@ -1 +1 @@
import{_ as t,c as e,o,a4 as r}from"./chunks/framework.B4OOrI6A.js";const _=JSON.parse('{"title":"Requirements","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/requirements.md","filePath":"introduction/requirements.md"}'),s={name:"introduction/requirements.md"},n=r('<h1 id="requirements" tabindex="-1">Requirements <a class="header-anchor" href="#requirements" aria-label="Permalink to &quot;Requirements&quot;"></a></h1><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Phyre must be installed on top of a fresh operating system installation to ensure proper functionality. If on a VPS/KVM, and there is already an admin account, either delete that default admin ID, or use <code>--force</code> to continue with the installation. See custom installation below for further details.</p></div><table><thead><tr><th></th><th>Minimum</th><th>Recommended</th></tr></thead><tbody><tr><td><strong>CPU</strong></td><td>1 core, 64-bit</td><td>4 cores</td></tr><tr><td><strong>Memory</strong></td><td>1 GB (without Docker)</td><td>4 GB</td></tr><tr><td><strong>Disk</strong></td><td>10 GB HDD</td><td>40 GB SSD</td></tr><tr><td><strong>Operating System</strong></td><td>Ubuntu 20.04, 22.04 LTS</td><td>Latest Ubuntu LTS</td></tr></tbody></table><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Phyre only runs on AMD64 / x86_64 and ARM64 / aarch64 processors. It also requires a 64bit operating system! We currently do not support i386 or ARM7-based processors.</p></div><h3 id="supported-operating-systems" tabindex="-1">Supported operating systems <a class="header-anchor" href="#supported-operating-systems" aria-label="Permalink to &quot;Supported operating systems&quot;"></a></h3><ul><li>Ubuntu 20.04, 22.04 or 24.04 LTS</li></ul><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Phyre does not support non-LTS Operating systems. If you install it on, for example, Ubuntu 21.10, you will not receive support from us.</p></div>',7),a=[n];function i(d,c,u,l,p,m){return o(),e("div",null,a)}const b=t(s,[["render",i]]);export{_ as __pageData,b as default};
import{_ as t,c as e,o,a4 as r}from"./chunks/framework.B4OOrI6A.js";const _=JSON.parse('{"title":"Requirements","description":"","frontmatter":{},"headers":[],"relativePath":"introduction/requirements.md","filePath":"introduction/requirements.md"}'),s={name:"introduction/requirements.md"},n=r('<h1 id="requirements" tabindex="-1">Requirements <a class="header-anchor" href="#requirements" aria-label="Permalink to &quot;Requirements&quot;"></a></h1><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Phyre must be installed on top of a fresh operating system installation to ensure proper functionality. If on a VPS/KVM, and there is already an admin account, either delete that default admin ID, or use <code>--force</code> to continue with the installation. See custom installation below for further details.</p></div><table><thead><tr><th></th><th>Minimum</th><th>Recommended</th></tr></thead><tbody><tr><td><strong>CPU</strong></td><td>1 core, 64-bit</td><td>4 cores</td></tr><tr><td><strong>Memory</strong></td><td>1 GB (without Docker)</td><td>4 GB</td></tr><tr><td><strong>Disk</strong></td><td>10 GB HDD</td><td>40 GB SSD</td></tr><tr><td><strong>Operating System</strong></td><td>Ubuntu 20.04, 22.04 LTS</td><td>Latest Ubuntu LTS</td></tr></tbody></table><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Phyre only runs on AMD64 / x86_64 and ARM64 / aarch64 processors. It also requires a 64bit operating system! We currently do not support i386 or ARM7-based processors.</p></div><h3 id="supported-operating-systems" tabindex="-1">Supported operating systems <a class="header-anchor" href="#supported-operating-systems" aria-label="Permalink to &quot;Supported operating systems&quot;"></a></h3><ul><li>Ubuntu 20.04 or 22.04</li></ul><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Phyre does not support non-LTS Operating systems. If you install it on, for example, Ubuntu 21.10, you will not receive support from us.</p></div>',7),a=[n];function i(d,c,u,l,p,m){return o(),e("div",null,a)}const b=t(s,[["render",i]]);export{_ as __pageData,b as default};

View file

@ -1 +1 @@
import{V as s,a as r,b as i}from"./chunks/theme.BviEWPeY.js";import{_ as n,c as m,l,I as a,w as e,m as t,o as c,a as o}from"./chunks/framework.B4OOrI6A.js";const h=[{avatar:"https://avatars.githubusercontent.com/u/50577633?v=4",name:"Bozhidar Slaveykov 🇧🇬",title:"Developer",org:"CloudVision",orgLink:"https://phyrepanel.com",links:[{icon:"github",link:"https://github.com/bobicloudvision"},{icon:"linkedin",link:"https://www.linkedin.com/in/bozhidar.slaveykov"}]},{avatar:"https://avatars.githubusercontent.com/u/5698247?v=4",name:"Peter Ivanov 🇧🇬",title:"Developer",org:"Microweber",orgLink:"https://microweber.com.com",links:[{icon:"github",link:"https://github.com/peter-mw"}]}],p={class:"VPTeamPage"},T=JSON.parse('{"title":"The Team","description":"","frontmatter":{"layout":"page","sidebar":false,"title":"The Team"},"headers":[],"relativePath":"team.md","filePath":"team.md"}'),d={name:"team.md"},u=Object.assign(d,{setup(b){return(v,_)=>(c(),m("div",null,[l("div",p,[a(t(s),null,{title:e(()=>[o("The Team")]),lead:e(()=>[o(" The team behind PhyrePanel is a small group of passionate developers who are dedicated to making the best open source web control panel for Linux servers. ")]),_:1}),a(t(i),null,{title:e(()=>[o("Team Members")]),members:e(()=>[a(t(r),{members:t(h)},null,8,["members"])]),_:1})])]))}}),f=n(u,[["__scopeId","data-v-50bea38a"]]);export{T as __pageData,f as default};
import{V as s,a as r,b as i}from"./chunks/theme.CL3rQOXI.js";import{_ as n,c as m,l,I as a,w as e,m as t,o as c,a as o}from"./chunks/framework.B4OOrI6A.js";const h=[{avatar:"https://avatars.githubusercontent.com/u/50577633?v=4",name:"Bozhidar Slaveykov 🇧🇬",title:"Developer",org:"CloudVision",orgLink:"https://phyrepanel.com",links:[{icon:"github",link:"https://github.com/bobicloudvision"},{icon:"linkedin",link:"https://www.linkedin.com/in/bozhidar.slaveykov"}]},{avatar:"https://avatars.githubusercontent.com/u/5698247?v=4",name:"Peter Ivanov 🇧🇬",title:"Developer",org:"Microweber",orgLink:"https://microweber.com.com",links:[{icon:"github",link:"https://github.com/peter-mw"}]}],p={class:"VPTeamPage"},T=JSON.parse('{"title":"The Team","description":"","frontmatter":{"layout":"page","sidebar":false,"title":"The Team"},"headers":[],"relativePath":"team.md","filePath":"team.md"}'),d={name:"team.md"},u=Object.assign(d,{setup(b){return(v,_)=>(c(),m("div",null,[l("div",p,[a(t(s),null,{title:e(()=>[o("The Team")]),lead:e(()=>[o(" The team behind PhyrePanel is a small group of passionate developers who are dedicated to making the best open source web control panel for Linux servers. ")]),_:1}),a(t(i),null,{title:e(()=>[o("Team Members")]),members:e(()=>[a(t(r),{members:t(h)},null,8,["members"])]),_:1})])]))}}),f=n(u,[["__scopeId","data-v-50bea38a"]]);export{T as __pageData,f as default};

View file

@ -1 +1 @@
import{V as s,a as r,b as i}from"./chunks/theme.BviEWPeY.js";import{_ as n,c as m,l,I as a,w as e,m as t,o as c,a as o}from"./chunks/framework.B4OOrI6A.js";const h=[{avatar:"https://avatars.githubusercontent.com/u/50577633?v=4",name:"Bozhidar Slaveykov 🇧🇬",title:"Developer",org:"CloudVision",orgLink:"https://phyrepanel.com",links:[{icon:"github",link:"https://github.com/bobicloudvision"},{icon:"linkedin",link:"https://www.linkedin.com/in/bozhidar.slaveykov"}]},{avatar:"https://avatars.githubusercontent.com/u/5698247?v=4",name:"Peter Ivanov 🇧🇬",title:"Developer",org:"Microweber",orgLink:"https://microweber.com.com",links:[{icon:"github",link:"https://github.com/peter-mw"}]}],p={class:"VPTeamPage"},T=JSON.parse('{"title":"The Team","description":"","frontmatter":{"layout":"page","sidebar":false,"title":"The Team"},"headers":[],"relativePath":"team.md","filePath":"team.md"}'),d={name:"team.md"},u=Object.assign(d,{setup(b){return(v,_)=>(c(),m("div",null,[l("div",p,[a(t(s),null,{title:e(()=>[o("The Team")]),lead:e(()=>[o(" The team behind PhyrePanel is a small group of passionate developers who are dedicated to making the best open source web control panel for Linux servers. ")]),_:1}),a(t(i),null,{title:e(()=>[o("Team Members")]),members:e(()=>[a(t(r),{members:t(h)},null,8,["members"])]),_:1})])]))}}),f=n(u,[["__scopeId","data-v-50bea38a"]]);export{T as __pageData,f as default};
import{V as s,a as r,b as i}from"./chunks/theme.CL3rQOXI.js";import{_ as n,c as m,l,I as a,w as e,m as t,o as c,a as o}from"./chunks/framework.B4OOrI6A.js";const h=[{avatar:"https://avatars.githubusercontent.com/u/50577633?v=4",name:"Bozhidar Slaveykov 🇧🇬",title:"Developer",org:"CloudVision",orgLink:"https://phyrepanel.com",links:[{icon:"github",link:"https://github.com/bobicloudvision"},{icon:"linkedin",link:"https://www.linkedin.com/in/bozhidar.slaveykov"}]},{avatar:"https://avatars.githubusercontent.com/u/5698247?v=4",name:"Peter Ivanov 🇧🇬",title:"Developer",org:"Microweber",orgLink:"https://microweber.com.com",links:[{icon:"github",link:"https://github.com/peter-mw"}]}],p={class:"VPTeamPage"},T=JSON.parse('{"title":"The Team","description":"","frontmatter":{"layout":"page","sidebar":false,"title":"The Team"},"headers":[],"relativePath":"team.md","filePath":"team.md"}'),d={name:"team.md"},u=Object.assign(d,{setup(b){return(v,_)=>(c(),m("div",null,[l("div",p,[a(t(s),null,{title:e(()=>[o("The Team")]),lead:e(()=>[o(" The team behind PhyrePanel is a small group of passionate developers who are dedicated to making the best open source web control panel for Linux servers. ")]),_:1}),a(t(i),null,{title:e(()=>[o("Team Members")]),members:e(()=>[a(t(r),{members:t(h)},null,8,["members"])]),_:1})])]))}}),f=n(u,[["__scopeId","data-v-50bea38a"]]);export{T as __pageData,f as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
{"integrations_whmcs.md":"hGsS8mql","contributing_documentation.md":"BmOFsXeC","commands_ssl-domain-management.md":"CEajfw44","commands_documentation.md":"Dw0gpi_-","commands_index.md":"Diz8HzZM","commands_system-configuration.md":"BIA3ukg0","index.md":"DziDWOxR","install.md":"DhDEAvmM","team.md":"BvKyvWCV","commands_system-update.md":"gmmoVXy_","introduction_requirements.md":"_Qrr0-32","commands_backup-management.md":"y8-vq9Uc","introduction_getting-started.md":"Bm490ErG","commands_installation-commands.md":"DHw08i9U","introduction_features.md":"CwA180ca","commands_user-management.md":"CEhUoMl7","commands_system-commands.md":"Dg-cm8pw"}
{"team.md":"DvWPIsOM","introduction_features.md":"Be9PokAF","integrations_whmcs.md":"hGsS8mql","introduction_getting-started.md":"Bm490ErG","index.md":"DziDWOxR","introduction_requirements.md":"_1S73296","install.md":"CCpuQeK4","contributing_documentation.md":"BmOFsXeC"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,31 +0,0 @@
# Backup Management
## Available Commands
### `phyre:create-daily-full-backup`
- Description: Creates a full system backup
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:create-daily-full-backup
```
### `phyre:create-daily-full-hosting-subscriptions-backup`
- Description: Creates backups for all hosting subscriptions
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:create-daily-full-hosting-subscriptions-backup
```
### `phyre:run-backup-checks`
- Description: Checks and manages backup status
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:run-backup-checks
```
### `phyre:run-upload-backups-to-remote-servers`
- Description: Uploads backups to configured remote servers
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:run-upload-backups-to-remote-servers
```

View file

@ -1,153 +0,0 @@
# Phyre Panel Terminal Commands
## Available Commands
### System Commands
`phyre:health-check`
- Description: Checks system health including supervisor and Apache2 status
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:health-check
```
`phyre:run-repair`
- Description: Performs system repairs including database users, phpMyAdmin, and Apache configurations
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:run-repair
```
`phyre:run-domain-repair`
- Description: Repairs domain configurations
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:run-domain-repair
```
### Installation Commands
`phyre:install-apache`
- Description: Installs Apache web server with latest PHP version
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:install-apache
```
`phyre:install-module {module}`
- Description: Installs a specific Phyre module
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:install-module module_name
```
### SSL & Domain Management
`phyre:setup-master-domain-ssl`
- Description: Sets up SSL certificate for the master domain
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:setup-master-domain-ssl
```
`phyre:apache-ping-websites-with-curl`
- Description: Tests HTTP response for all websites
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:apache-ping-websites-with-curl
```
### Backup Management
`phyre:create-daily-full-backup`
- Description: Creates a full system backup
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:create-daily-full-backup
```
`phyre:create-daily-full-hosting-subscriptions-backup`
- Description: Creates backups for all hosting subscriptions
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:create-daily-full-hosting-subscriptions-backup
```
`phyre:run-backup-checks`
- Description: Checks and manages backup status
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:run-backup-checks
```
`phyre:run-upload-backups-to-remote-servers`
- Description: Uploads backups to configured remote servers
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:run-upload-backups-to-remote-servers
```
### User Management
`phyre:create-admin-account`
- Description: Creates a new admin account
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:create-admin-account
```
`phyre:reset-admin-account-password`
- Description: Resets password for an existing admin account
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:reset-admin-account-password
```
### System Configuration
`phyre:key-generate`
- Description: Generates application key in phyre-config.ini
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:key-generate
```
`phyre:set-ini-settings {key} {value}`
- Description: Sets configuration values in phyre-config.ini
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:set-ini-settings key value
```
### System Update
`phyre:update`
- Description: Updates Phyre to the latest version
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:update
```
## Usage Examples
```bash
# Create a new admin account
phyre-php /usr/local/phyre/web/artisan phyre:create-admin-account
# Check system health
phyre-php /usr/local/phyre/web/artisan phyre:health-check
# Create daily backup
phyre-php /usr/local/phyre/web/artisan phyre:create-daily-full-backup
# Install a module
phyre-php /usr/local/phyre/web/artisan phyre:install-module blog
```
## Notes
- All commands should be run from the project root directory
- Some commands may require sudo/root privileges
- Backup commands run automatically via cron but can be executed manually
- Always ensure proper permissions before running system-level commands

View file

@ -1,11 +0,0 @@
# Phyre Panel Terminal Commands Index
## Available Categories
- [System Commands](system-commands.md)
- [Installation Commands](installation-commands.md)
- [SSL & Domain Management](ssl-domain-management.md)
- [Backup Management](backup-management.md)
- [User Management](user-management.md)
- [System Configuration](system-configuration.md)
- [System Update](system-update.md)

View file

@ -1,17 +0,0 @@
# Installation Commands
## Available Commands
### `phyre:install-apache`
- Description: Installs Apache web server with latest PHP version
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:install-apache
```
### `phyre:install-module {module}`
- Description: Installs a specific Phyre module
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:install-module module_name
```

View file

@ -1,17 +0,0 @@
# SSL & Domain Management
## Available Commands
### `phyre:setup-master-domain-ssl`
- Description: Sets up SSL certificate for the master domain
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:setup-master-domain-ssl
```
### `phyre:apache-ping-websites-with-curl`
- Description: Tests HTTP response for all websites
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:apache-ping-websites-with-curl
```

View file

@ -1,24 +0,0 @@
# System Commands
## Available Commands
### `phyre:health-check`
- Description: Checks system health including supervisor and Apache2 status
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:health-check
```
### `phyre:run-repair`
- Description: Performs system repairs including database users, phpMyAdmin, and Apache configurations
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:run-repair
```
### `phyre:run-domain-repair`
- Description: Repairs domain configurations
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:run-domain-repair
```

View file

@ -1,17 +0,0 @@
# System Configuration
## Available Commands
### `phyre:key-generate`
- Description: Generates application key in phyre-config.ini
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:key-generate
```
### `phyre:set-ini-settings {key} {value}`
- Description: Sets configuration values in phyre-config.ini
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:set-ini-settings key value
```

View file

@ -1,10 +0,0 @@
# System Update
## Available Commands
### `phyre:update`
- Description: Updates Phyre to the latest version
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:update
```

View file

@ -1,17 +0,0 @@
# User Management
## Available Commands
### `phyre:create-admin-account`
- Description: Creates a new admin account
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:create-admin-account
```
### `phyre:reset-admin-account-password`
- Description: Resets password for an existing admin account
- Usage:
```
phyre-php /usr/local/phyre/web/artisan phyre:reset-admin-account-password
```

View file

@ -4,9 +4,3 @@ To install PhyrePanel, you need to run this commands:
wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/main/installers/install.sh && chmod +x install.sh && ./install.sh
```
The admin panel can be opened on port: yourserver.com:8443
# Updating
To update PhyrePanel to the latest version, run this command:
```
rm -rf update.sh && wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/main/web/update.sh && chmod +x update.sh && ./update.sh
```

View file

@ -2,50 +2,7 @@
PHYRE PANEL supports a variety of server application types, including:
- **Apache + PHP:** Versions 7.4, 8.0, 8.1, 8.3, and 8.4
- **Apache + NodeJS:** Version 14.x, 16.x, 20.x
- **Apache + Python:** Version 3.10
- **Apache + Ruby:** Version 3.4
- **Apache + Docker:** (Via Proxy Reverse)
## Hosting Management
- Multi-server clustering support
- Customer account management
- Flexible hosting plans configuration
- Domain management with multiple server types
- Automated SSL certificate management
- Custom PHP, Node.js, Python and Ruby versions per domain
- Git repository integration
- Docker container support
## Database Features
- MySQL/MariaDB support
- PostgreSQL support
- MongoDB support
- SQLite support
- Remote database server management
- Database user management
## Backup & Security
- Automated backup system
- Multiple backup types (full, selective)
- Custom backup schedules (daily, weekly, monthly)
- Configurable backup retention
- Remote backup server support
- IP whitelisting
- API key management
## System Administration
- Cron job management
- Server resource monitoring
- Multi-user administration
- Server clustering capabilities
- Remote server management
- System updates management
## Additional Features
- Custom environment variables support
- Multiple PHP versions per domain
- Node.js package manager support (npm, yarn)
- Development/Production environment switching
- Custom domain configurations
- Server health monitoring
- **Apache + NodeJS**
- **Apache + Python**
- **Apache + Ruby**
- **Apache + Docker (Via Proxy Reverse)**

View file

@ -20,7 +20,7 @@ We currently do not support i386 or ARM7-based processors.
### Supported operating systems
- Ubuntu 20.04, 22.04 or 24.04 LTS
- Ubuntu 20.04 or 22.04
::: warning
Phyre does not support non-LTS Operating systems. If you install it on, for example, Ubuntu 21.10, you will not receive support from us.

View file

@ -1,5 +1,5 @@
{
"version": "0.1.1",
"version": "0.0.9",
"scripts": {
"docs:dev": "vitepress dev",
"docs:build": "vitepress build",

View file

@ -28,20 +28,3 @@ echo "$INSTALL_BASE" >> ubuntu-22.04/install.sh
echo "$INSTALL_LOG" >> ubuntu-22.04/install.sh
echo "$DOWNLOAD_WEB" >> ubuntu-22.04/install.sh
echo "$INSTALL_WEB" >> ubuntu-22.04/install.sh
# Compile ubuntu-22.04 installers
# get content from file
INSTALL_BASE=$(cat ubuntu-24.04/install-partial/install_base.sh)
INSTALL_LOG=$(cat ubuntu-20.04/install-partial/install_log.sh)
DOWNLOAD_WEB=$(cat ubuntu-20.04/install-partial/download_web.sh)
INSTALL_WEB=$(cat ubuntu-20.04/install-partial/install_web.sh)
# create installer
rm -rf ubuntu-24.04/install.sh
echo "$INSTALL_BASE" >> ubuntu-24.04/install.sh
echo "$INSTALL_LOG" >> ubuntu-24.04/install.sh
echo "$DOWNLOAD_WEB" >> ubuntu-24.04/install.sh
echo "$INSTALL_WEB" >> ubuntu-24.04/install.sh

View file

@ -11,12 +11,12 @@ cd /usr/local/phyre/web
mysql -uroot -proot <<MYSQL_SCRIPT
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.special_char_count = 0;
FLUSH PRIVILEGES;
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.special_char_count = 0;
FLUSH PRIVILEGES;
MYSQL_SCRIPT
# Create MySQL user
@ -80,12 +80,4 @@ service phyre start
CURRENT_IP=$(hostname -I | awk '{print $1}')
echo "PhyrePanel downloaded successfully."
# Parse argument --dont-ask
if [ "$1" == "--dont-ask" ]; then
echo "PhyrePanel is now available at https://$CURRENT_IP:8443"
exit 0
else
phyre-php artisan phyre:install-apache
phyre-php artisan phyre:setup-master-domain-ssl
fi
echo "Please visit https://$CURRENT_IP:8443 to continue installation of the panel."

View file

@ -0,0 +1,172 @@
#!/bin/bash
INSTALL_DIR="/phyre/install"
apt-get update && apt-get install ca-certificates
mkdir -p $INSTALL_DIR
cd $INSTALL_DIR
DEPENDENCIES_LIST=(
"openssl"
"jq"
"curl"
"wget"
"unzip"
"zip"
"tar"
"mysql-common"
"mysql-server"
"mysql-client"
"lsb-release"
"gnupg2"
"ca-certificates"
"apt-transport-https"
"software-properties-common"
"supervisor"
"libonig-dev"
"libzip-dev"
"libcurl4-openssl-dev"
"libsodium23"
"libpq5"
"apache2"
"libapache2-mod-ruid2"
"libapache2-mod-php"
"libssl-dev"
"zlib1g-dev"
)
# Check if the dependencies are installed
for DEPENDENCY in "${DEPENDENCIES_LIST[@]}"; do
apt install -yq $DEPENDENCY
done
# Start MySQL
service mysql start
mkdir -p /usr/local/phyre/ssl
wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/refs/heads/main/web/server/ssl/phyre.crt -O /usr/local/phyre/ssl/phyre.crt
wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/refs/heads/main/web/server/ssl/phyre.key -O /usr/local/phyre/ssl/phyre.key
sudo chmod 644 /usr/local/phyre/ssl/phyre.crt
sudo chmod 600 /usr/local/phyre/ssl/phyre.key
wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/main/installers/ubuntu-20.04/greeting.sh -O /etc/profile.d/phyre-greeting.sh
# Install PHYRE PHP
wget https://github.com/PhyreApps/PhyrePanelPHP/raw/main/compilators/debian/php/dist/phyre-php-8.2.0-ubuntu-20.04.deb
dpkg -i phyre-php-8.2.0-ubuntu-20.04.deb
# Install PHYRE NGINX
wget https://github.com/PhyreApps/PhyrePanelNGINX/raw/main/compilators/debian/nginx/dist/phyre-nginx-1.24.0-ubuntu-20.04.deb
dpkg -i phyre-nginx-1.24.0-ubuntu-20.04.deb
PHYRE_PHP=/usr/local/phyre/php/bin/php
ln -s $PHYRE_PHP /usr/bin/phyre-php
#!/bin/bash
HOSTNAME=$(hostname)
IP_ADDRESS=$(hostname -I | cut -d " " -f 1)
DISTRO_VERSION=$(cat /etc/os-release | grep -w "VERSION_ID" | cut -d "=" -f 2)
DISTRO_VERSION=${DISTRO_VERSION//\"/} # Remove quotes from version string
DISTRO_NAME=$(cat /etc/os-release | grep -w "NAME" | cut -d "=" -f 2)
DISTRO_NAME=${DISTRO_NAME//\"/} # Remove quotes from name string
LOG_JSON='{"os": "'$DISTRO_NAME-$DISTRO_VERSION'", "host_name": "'$HOSTNAME'", "ip": "'$IP_ADDRESS'"}'
curl -s https://phyrepanel.com/api/phyre-installation-log -X POST -H "Content-Type: application/json" -d "$LOG_JSON"
#!/bin/bash
wget https://github.com/PhyreApps/PhyrePanelWebCompiledVersions/raw/main/phyre-web-panel.zip
unzip -qq -o phyre-web-panel.zip -d /usr/local/phyre/web
rm -rf phyre-web-panel.zip
chmod 711 /home
chmod -R 750 /usr/local/phyre
#!/bin/bash
# Check dir exists
if [ ! -d "/usr/local/phyre/web" ]; then
echo "PhyrePanel directory not found."
return 1
fi
# Go to web directory
cd /usr/local/phyre/web
mysql -uroot -proot <<MYSQL_SCRIPT
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.special_char_count = 0;
FLUSH PRIVILEGES;
MYSQL_SCRIPT
# Create MySQL user
MYSQL_PHYRE_ROOT_USERNAME="phyre"
MYSQL_PHYRE_ROOT_PASSWORD="$(tr -dc a-za-z0-9 </dev/urandom | head -c 32; echo)"
mysql -uroot -proot <<MYSQL_SCRIPT
CREATE USER '$MYSQL_PHYRE_ROOT_USERNAME'@'%' IDENTIFIED BY '$MYSQL_PHYRE_ROOT_PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_PHYRE_ROOT_USERNAME'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
MYSQL_SCRIPT
# Create database
PHYRE_PANEL_DB_PASSWORD="$(tr -dc a-za-z0-9 </dev/urandom | head -c 32; echo)"
PHYRE_PANEL_DB_NAME="phyre$(tr -dc a-za-z0-9 </dev/urandom | head -c 13; echo)"
PHYRE_PANEL_DB_USER="phyre$(tr -dc a-za-z0-9 </dev/urandom | head -c 13; echo)"
mysql -uroot -proot <<MYSQL_SCRIPT
CREATE DATABASE $PHYRE_PANEL_DB_NAME;
CREATE USER '$PHYRE_PANEL_DB_USER'@'localhost' IDENTIFIED BY '$PHYRE_PANEL_DB_PASSWORD';
GRANT ALL PRIVILEGES ON $PHYRE_PANEL_DB_NAME.* TO '$PHYRE_PANEL_DB_USER'@'localhost';
FLUSH PRIVILEGES;
MYSQL_SCRIPT
mysql_secure_installation --use-default
# Change mysql root password
MYSQL_ROOT_PASSWORD="$(tr -dc a-za-z0-9 </dev/urandom | head -c 32; echo)"
mysql -uroot -proot <<MYSQL_SCRIPT
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '$MYSQL_ROOT_PASSWORD';
FLUSH PRIVILEGES;
MYSQL_SCRIPT
# Save mysql root password
echo "$MYSQL_ROOT_PASSWORD" > /root/.mysql_root_password
# Configure the application
phyre-php artisan phyre:set-ini-settings APP_ENV "local"
phyre-php artisan phyre:set-ini-settings APP_URL "127.0.0.1:8443"
phyre-php artisan phyre:set-ini-settings APP_NAME "PHYRE_PANEL"
phyre-php artisan phyre:set-ini-settings DB_DATABASE "$PHYRE_PANEL_DB_NAME"
phyre-php artisan phyre:set-ini-settings DB_USERNAME "$PHYRE_PANEL_DB_USER"
phyre-php artisan phyre:set-ini-settings DB_PASSWORD "$PHYRE_PANEL_DB_PASSWORD"
phyre-php artisan phyre:set-ini-settings DB_CONNECTION "mysql"
phyre-php artisan phyre:set-ini-settings MYSQL_ROOT_USERNAME "$MYSQL_PHYRE_ROOT_USERNAME"
phyre-php artisan phyre:set-ini-settings MYSQL_ROOT_PASSWORD "$MYSQL_PHYRE_ROOT_PASSWORD"
phyre-php artisan phyre:key-generate
phyre-php artisan migrate
phyre-php artisan db:seed
phyre-php artisan phyre:set-ini-settings APP_ENV "production"
chmod -R o+w /usr/local/phyre/web/storage/
chmod -R o+w /usr/local/phyre/web/bootstrap/cache/
service phyre start
CURRENT_IP=$(hostname -I | awk '{print $1}')
echo "PhyrePanel downloaded successfully."
echo "Please visit https://$CURRENT_IP:8443 to continue installation of the panel."

View file

@ -52,21 +52,21 @@ wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/refs/heads/main/web/
sudo chmod 644 /usr/local/phyre/ssl/phyre.crt
sudo chmod 600 /usr/local/phyre/ssl/phyre.key
wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/main/installers/ubuntu-24.04/greeting.sh -O /etc/profile.d/phyre-greeting.sh
wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/main/installers/ubuntu-22.04/greeting.sh -O /etc/profile.d/phyre-greeting.sh
# Install PHYRE PHP
wget https://github.com/PhyreApps/PhyrePanelPHP/raw/main/compilators/debian/php/dist/phyre-php-8.2.0-ubuntu-24.04.deb
dpkg -i phyre-php-8.2.0-ubuntu-24.04.deb
wget https://github.com/PhyreApps/PhyrePanelPHP/raw/main/compilators/debian/php/dist/phyre-php-8.2.0-ubuntu-22.04.deb
dpkg -i phyre-php-8.2.0-ubuntu-22.04.deb
# Install PHYRE NGINX
wget https://github.com/PhyreApps/PhyrePanelNGINX/raw/main/compilators/debian/nginx/dist/phyre-nginx-1.24.0-ubuntu-24.04.deb
dpkg -i phyre-nginx-1.24.0-ubuntu-24.04.deb
wget https://github.com/PhyreApps/PhyrePanelNGINX/raw/main/compilators/debian/nginx/dist/phyre-nginx-1.24.0-ubuntu-22.04.deb
dpkg -i phyre-nginx-1.24.0-ubuntu-22.04.deb
PHYRE_PHP=/usr/local/phyre/php/bin/php
ln -s $PHYRE_PHP /usr/bin/phyre-php
curl -s https://phyrepanel.com/api/phyre-installation-log -X POST -H "Content-Type: application/json" -d '{"os": "ubuntu-24.04"}'
curl -s https://phyrepanel.com/api/phyre-installation-log -X POST -H "Content-Type: application/json" -d '{"os": "ubuntu-22.04"}'
#!/bin/bash
HOSTNAME=$(hostname)
@ -102,12 +102,12 @@ cd /usr/local/phyre/web
mysql -uroot -proot <<MYSQL_SCRIPT
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.special_char_count = 0;
FLUSH PRIVILEGES;
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.special_char_count = 0;
FLUSH PRIVILEGES;
MYSQL_SCRIPT
# Create MySQL user
@ -171,12 +171,4 @@ service phyre start
CURRENT_IP=$(hostname -I | awk '{print $1}')
echo "PhyrePanel downloaded successfully."
# Parse argument --dont-ask
if [ "$1" == "--dont-ask" ]; then
echo "PhyrePanel is now available at https://$CURRENT_IP:8443"
exit 0
else
phyre-php artisan phyre:install-apache
phyre-php artisan phyre:setup-master-domain-ssl
fi
echo "Please visit https://$CURRENT_IP:8443 to continue installation of the panel."

View file

@ -1,16 +0,0 @@
#!/bin/bash
CURRENT_IP=$(hostname -I | awk '{print $1}')
echo " \
____ _ ___ ______ _____ ____ _ _ _ _____ _
| _ \| | | \ \ / / _ \| ____| | _ \ / \ | \ | | ____| |
| |_) | |_| |\ V /| |_) | _| | |_) / _ \ | \| | _| | |
| __/| _ | | | | _ <| |___ | __/ ___ \| |\ | |___| |___
|_| |_| |_| |_| |_| \_\_____| |_| /_/ \_\_| \_|_____|_____
WELCOME TO PHYRE PANEL!
OS: Ubuntu 24.04
You can login at: https://$CURRENT_IP:8443
"
# File can be saved at: /etc/profile.d/greeting.sh

View file

@ -1,69 +0,0 @@
#!/bin/bash
INSTALL_DIR="/phyre/install"
apt-get update && apt-get install ca-certificates
mkdir -p $INSTALL_DIR
cd $INSTALL_DIR
DEPENDENCIES_LIST=(
"openssl"
"jq"
"curl"
"wget"
"unzip"
"zip"
"tar"
"mysql-common"
"mysql-server"
"mysql-client"
"lsb-release"
"gnupg2"
"ca-certificates"
"apt-transport-https"
"software-properties-common"
"supervisor"
"libonig-dev"
"libzip-dev"
"libcurl4-openssl-dev"
"libsodium23"
"libpq5"
"apache2"
"libapache2-mod-ruid2"
"libapache2-mod-php"
"libssl-dev"
"zlib1g-dev"
)
# Check if the dependencies are installed
for DEPENDENCY in "${DEPENDENCIES_LIST[@]}"; do
apt install -yq $DEPENDENCY
done
# Start MySQL
service mysql start
mkdir -p /usr/local/phyre/ssl
wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/refs/heads/main/web/server/ssl/phyre.crt -O /usr/local/phyre/ssl/phyre.crt
wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/refs/heads/main/web/server/ssl/phyre.key -O /usr/local/phyre/ssl/phyre.key
sudo chmod 644 /usr/local/phyre/ssl/phyre.crt
sudo chmod 600 /usr/local/phyre/ssl/phyre.key
wget https://raw.githubusercontent.com/PhyreApps/PhyrePanel/main/installers/ubuntu-24.04/greeting.sh -O /etc/profile.d/phyre-greeting.sh
# Install PHYRE PHP
wget https://github.com/PhyreApps/PhyrePanelPHP/raw/main/compilators/debian/php/dist/phyre-php-8.2.0-ubuntu-24.04.deb
dpkg -i phyre-php-8.2.0-ubuntu-24.04.deb
# Install PHYRE NGINX
wget https://github.com/PhyreApps/PhyrePanelNGINX/raw/main/compilators/debian/nginx/dist/phyre-nginx-1.24.0-ubuntu-24.04.deb
dpkg -i phyre-nginx-1.24.0-ubuntu-24.04.deb
PHYRE_PHP=/usr/local/phyre/php/bin/php
ln -s $PHYRE_PHP /usr/bin/phyre-php
curl -s https://phyrepanel.com/api/phyre-installation-log -X POST -H "Content-Type: application/json" -d '{"os": "ubuntu-24.04"}'

View file

@ -1 +1 @@
0.1.7
0.0.3

View file

@ -32,7 +32,7 @@ class CustomerPanelProvider extends PanelProvider
$brandLogo = asset('images/phyre-logo.svg');
$isAppInstalled = file_exists(storage_path('installed'));
if ($isAppInstalled && !(php_sapi_name() === 'cli' || php_sapi_name() === 'phpdbg')) {
if ($isAppInstalled) {
if (setting('general.brand_logo_url')) {
$brandLogo = setting('general.brand_logo_url');
}

View file

@ -4,7 +4,7 @@
"description": "",
"keywords": [],
"priority": 0,
"logoIcon": "Modules/Email/resources/assets/email-svg/logo.svg",
"logoIcon": "email-logo",
"category": "DevOps",
"adminUrl": "/admin/email",
"providers": [

View file

@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="50px" height="50px" viewBox="0 0 20 20">
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 20 20">
<path fill="currentColor" d="M18 2a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2zm-4.37 9.1L20 16v-2l-5.12-3.9L20 6V4l-10 8L0 4v2l5.12 4.1L0 14v2l6.37-4.9L10 14z" />
</svg>

Before

Width:  |  Height:  |  Size: 284 B

After

Width:  |  Height:  |  Size: 280 B

View file

@ -13,14 +13,13 @@ use Filament\Forms\Components\Section;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Wizard;
use Filament\Forms\Form;
use Filament\Notifications\Notification;
use Filament\Support\Exceptions\Halt;
use Illuminate\Support\Str;
use Modules\LetsEncrypt\Filament\Clusters\LetsEncryptCluster;
use Outerweb\FilamentSettings\Filament\Pages\Settings as BaseSettings;
class IssueWildcardCertificate extends BaseSettings
class WildcardDomain extends BaseSettings
{
protected static ?string $navigationGroup = 'Let\'s Encrypt';
@ -37,9 +36,8 @@ class IssueWildcardCertificate extends BaseSettings
public static function getNavigationLabel() : string
{
return 'Issue Wildcard Certificate';
return 'Wildcard Domain';
}
public function getFormActions() : array
{
return [
@ -185,7 +183,7 @@ class IssueWildcardCertificate extends BaseSettings
}
public function form(Form $form): Form
public function schema(): array
{
if (request()->get('step', null) === 'verification') {
$this->getInstallLog();
@ -195,11 +193,12 @@ class IssueWildcardCertificate extends BaseSettings
Wizard::make([
Wizard\Step::make('Install')
->description('Issue new wildcard SSL certificate for domain')
//->description('Install a wildcard SSL certificate for the master domain')
->schema([
TextInput::make('wildcard_domain')
->helperText('Issue new wildcard SSL certificate for domain. Example: *.mysite.com')
->placeholder('*.mysite.com'),
->helperText('Install a wildcard SSL certificate for the master domain')
->placeholder(setting('general.wildcard_domain'))
->disabled(),
])->afterValidation(function () {
if (file_exists($this->installLogFilePath)) {
unlink($this->installLogFilePath);

View file

@ -15,11 +15,4 @@ class MicroweberInstallation extends Model
return $this->hasOne(Domain::class, 'id', 'domain_id');
}
public function getTemplateAttribute()
{
if (empty($this->template)) {
return 'Default';
}
}
}

View file

@ -20,7 +20,7 @@ class Version extends Page
protected static ?string $cluster = MicroweberCluster::class;
protected static ?string $navigationIcon = 'mw-mw_logo_small_white';
protected static ?string $navigationIcon = 'heroicon-o-document-text';
protected static string $view = 'microweber::filament.admin.pages.version';

View file

@ -14,7 +14,7 @@ class InstallationResource extends Resource
{
protected static ?string $model = MicroweberInstallation::class;
protected static ?string $navigationIcon = 'heroicon-o-globe-americas';
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $navigationGroup = 'Microweber';
@ -49,13 +49,12 @@ class InstallationResource extends Resource
//
])
->actions([
// Tables\Actions\EditAction::make(),
Tables\Actions\EditAction::make(),
])
->bulkActions([
// Tables\Actions\BulkActionGroup::make([
// Tables\Actions\DeleteBulkAction::make(),
// ]),
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}

View file

@ -17,7 +17,7 @@ class ListInstallations extends ListRecords
protected function getHeaderActions(): array
{
return [
// Actions\CreateAction::make(),
Actions\CreateAction::make(),
Actions\Action::make('Scan for installations')->action('scanForInstallations'),
];
}

View file

@ -9,7 +9,6 @@ use App\Models\Domain;
use App\Models\HostingPlan;
use App\Models\HostingSubscription;
use App\Services\HostingSubscriptionService;
use App\SupportedApplicationTypes;
use Illuminate\Support\Str;
use MicroweberPackages\SharedServerScripts\MicroweberWhitelabelSettingsUpdater;
use MicroweberPackages\SharedServerScripts\MicroweberWhitelabelWebsiteApply;
@ -43,15 +42,7 @@ class DomainIsCreatedListener
return;
}
$skip = true;
if (in_array('microweber', $findHostingPlan->additional_services)) {
$skip = false;
}
if (in_array('microweber_custom', $findHostingPlan->additional_services)) {
$skip = false;
}
if ($skip) {
if (!in_array('microweber', $findHostingPlan->additional_services)) {
return;
}
@ -59,16 +50,6 @@ class DomainIsCreatedListener
return;
}
if (isset($findHostingPlan->default_server_application_settings['php_version'])) {
$phpVersion = $findHostingPlan->default_server_application_settings['php_version'];
$phpSbin = 'php' .$phpVersion;
} else {
$supportedPhpVersions = SupportedApplicationTypes::getPHPVersions();
$phpVersion = end($supportedPhpVersions);
$phpVersion = str_replace('PHP ', '', $phpVersion);
$phpSbin = 'php' . $phpVersion;
}
$databasesAreCreated = false;
$createdDatabaseUsername = null;
$createdDatabaseUserPassword = null;
@ -162,19 +143,9 @@ class DomainIsCreatedListener
}
$username = Str::random(8);
$install->setPhpSbin($phpSbin);
if (in_array('microweber_custom', $findHostingPlan->additional_services)) {
$install->setAdminEmail(null);
$install->setAdminUsername(null);
$install->setAdminPassword(null);
} else {
$install->setAdminEmail($username . '@'.$emailDomain);
$install->setAdminUsername($username);
$install->setAdminPassword(Str::random(8));
}
$install->setAdminEmail($username . '@'.$emailDomain);
$install->setAdminUsername($username);
$install->setAdminPassword(Str::random(8));
$status = $install->run();

View file

@ -1,44 +0,0 @@
<?php
namespace Modules\Microweber\Listeners;
use App\Events\DomainIsCreated;
use App\Events\DomainIsDeleted;
use App\Models\Database;
use App\Models\DatabaseUser;
use App\Models\Domain;
use App\Models\HostingPlan;
use App\Models\HostingSubscription;
use App\Services\HostingSubscriptionService;
use App\SupportedApplicationTypes;
use Illuminate\Support\Str;
use MicroweberPackages\SharedServerScripts\MicroweberWhitelabelSettingsUpdater;
use MicroweberPackages\SharedServerScripts\MicroweberWhitelabelWebsiteApply;
use Modules\Microweber\App\Actions\MicroweberScanner;
use Modules\Microweber\App\Models\MicroweberInstallation;
class DomainIsDeletedListener
{
/**
* Create the event listener.
*/
public function __construct()
{
//
}
/**
* Handle the event.
*/
public function handle(DomainIsDeleted $event): void
{
try {
$newMwScan = new MicroweberScanner();
$newMwScan->handle();
} catch (\Exception $e) {
\Log::error($e->getMessage());
}
}
}

View file

@ -9,7 +9,7 @@
],
"require": {
"microweber-packages/composer-client": "^2.1",
"microweber-packages/shared-server-scripts": "^1.1"
"microweber-packages/shared-server-scripts": "^0.9"
},
"extra": {
"laravel": {

View file

@ -4,26 +4,29 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "33409785a55bd5b1d18a3b7db9f4a7d0",
"content-hash": "9dc38d0bad59547186ae06a5b08a1139",
"packages": [
{
"name": "microweber-packages/composer-client",
"version": "2.2",
"version": "2.1",
"source": {
"type": "git",
"url": "https://github.com/microweber-packages/composer-client.git",
"reference": "5decacf13f65f7deb4f5214e90dbfcac3b638312"
"reference": "a7d3c512bc7a14c2261fbd1de610afb97db230d9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/microweber-packages/composer-client/zipball/5decacf13f65f7deb4f5214e90dbfcac3b638312",
"reference": "5decacf13f65f7deb4f5214e90dbfcac3b638312",
"url": "https://api.github.com/repos/microweber-packages/composer-client/zipball/a7d3c512bc7a14c2261fbd1de610afb97db230d9",
"reference": "a7d3c512bc7a14c2261fbd1de610afb97db230d9",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": ">=7.2"
},
"require-dev": {
"phpunit/phpunit": "^8.0 || ^9.0"
},
"type": "library",
"autoload": {
"psr-4": {
@ -49,22 +52,22 @@
"support": {
"email": "support@microweber.com",
"issues": "https://github.com/microweber-packages/composer-client/issues",
"source": "https://github.com/microweber-packages/composer-client/tree/2.2"
"source": "https://github.com/microweber-packages/composer-client/tree/2.1"
},
"time": "2025-01-23T07:21:40+00:00"
"time": "2024-09-02T11:22:20+00:00"
},
{
"name": "microweber-packages/shared-server-scripts",
"version": "1.1",
"version": "0.9",
"source": {
"type": "git",
"url": "https://github.com/microweber-packages/shared-server-scripts.git",
"reference": "9d6bb63178153ea8917c72a7975866975d1c62a5"
"reference": "5d5e9f77de598c24b6a81b7cad641c828e45963c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/microweber-packages/shared-server-scripts/zipball/9d6bb63178153ea8917c72a7975866975d1c62a5",
"reference": "9d6bb63178153ea8917c72a7975866975d1c62a5",
"url": "https://api.github.com/repos/microweber-packages/shared-server-scripts/zipball/5d5e9f77de598c24b6a81b7cad641c828e45963c",
"reference": "5d5e9f77de598c24b6a81b7cad641c828e45963c",
"shasum": ""
},
"require": {
@ -103,9 +106,9 @@
"support": {
"email": "support@microweber.com",
"issues": "https://github.com/microweber-packages/shared-server-scripts/issues",
"source": "https://github.com/microweber-packages/shared-server-scripts/tree/1.1"
"source": "https://github.com/microweber-packages/shared-server-scripts/tree/0.9"
},
"time": "2025-02-07T13:17:21+00:00"
"time": "2024-10-10T07:08:41+00:00"
},
{
"name": "symfony/filesystem",

View file

@ -4,7 +4,7 @@
"description": "",
"keywords": [],
"priority": 0,
"logoIcon": "Modules/Microweber/resources/assets/mw-svg/mw_logo_small_white.svg",
"logoIcon": "mw-mw_logo_small_white",
"category": "Content Management",
"adminUrl": "/admin/microweber/installations",
"providers": [

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" width="50px" height="50px" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50;" xml:space="preserve">
<path fill="currentColor" d="M47.5,37.9C47.5,37.9,47.5,37.9,47.5,37.9c-0.4,0.8-0.9,1.5-1.5,2.2c0,0,0,0,0,0c-1.1,1.3-2.5,2.2-4.2,2.7 L25.2,48c-0.7,0.2-1.5,0.1-2.2-0.3c-0.6-0.4-1.1-1.1-1.1-1.9l-3-32.8l0.7,0.1l1.5,0.1l3,0.2c0.9,0.1,1.7,0.8,1.8,1.6l3.1,24.1 l6.3-1.4L31.6,14l0.7,0.1l1.1,0.1l2.1,0.2c0.7,0.1,1.3,0.7,1.5,1.3l3.7,20.8l4.8-1.1l-4.2-20.7c-0.5-2.6-2.9-4.9-5.4-5.2L13.6,6.5 c-0.8-0.1-1.5,0.1-2.1,0.7c-0.6,0.5-0.9,1.3-0.8,2l2,37.2l0.1,2.1l0,0.8C6.4,47.9,1.6,42.7,1.6,35.9L1.4,11.7c0-2.9,1.1-5.4,3-7.1 C6.1,3,8.4,1.9,11,1.4c2.1-0.4,4.4-0.4,6.7,0.1l17.3,3.4c4.9,0.9,9.3,5.4,10.3,10.2l3.1,14.3C49.2,32.3,48.8,35.4,47.5,37.9z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1,013 B

After

Width:  |  Height:  |  Size: 985 B

View file

@ -1,114 +0,0 @@
<?php
namespace Modules\SSLManager\App\Console;
use App\Jobs\ApacheBuild;
use App\Models\CronJob;
use App\Models\Domain;
use Illuminate\Console\Command;
use Modules\SSLManager\App\Jobs\SecureDomain;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class RenewSSL extends Command
{
/**
* The name and signature of the console command.
*/
protected $signature = 'ssl-manager:renew-ssl';
/**
* The console command description.
*/
protected $description = 'Renew SSL certificates';
/**
* Create a new command instance.
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*/
public function handle()
{
$this->_checkForAutoRenewalCron();
$getDomains = Domain::where('status', Domain::STATUS_ACTIVE)
->get();
if ($getDomains->count() > 0) {
foreach ($getDomains as $domain) {
$checkDomainStatus = $this->_checkForSSL($domain->domain);
if ($checkDomainStatus) {
$this->info('SSL certificate for ' . $domain->domain . ' is valid');
} else {
$this->info('SSL certificate for ' . $domain->domain . ' is expired');
try {
$this->_renewSSL($domain);
} catch (\Exception $e) {
$this->error($e->getMessage());
}
}
}
// Rebuild Apache configuration
$this->info('Rebuilding Apache configuration');
$apacheBuild = new ApacheBuild(true);
$apacheBuild->handle();
}
}
private function _renewSSL($domain)
{
// Renew SSL
$this->info('Renewing SSL certificate for ' . $domain->domain);
$run = new SecureDomain($domain->id);
$run->handle();
}
private function _checkForSSL($domain)
{
// Check with CURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://" . $domain);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
$data = curl_exec($ch);
$sslInfo = curl_getinfo($ch);
if ($sslInfo['http_code'] == 200) {
return true;
} else {
return false;
}
}
public function _checkForAutoRenewalCron()
{
$cronJobCommand = 'phyre-php /usr/local/phyre/web/artisan ssl-manager:renew-ssl';
$findCronJob = CronJob::where('command', $cronJobCommand)->first();
if (! $findCronJob) {
$cronJob = new CronJob();
$cronJob->schedule = '0 0 * * *';
$cronJob->command = $cronJobCommand;
$cronJob->user = 'root';
$cronJob->save();
}
}
}

Some files were not shown because too many files have changed in this diff Show more