Compare commits

..

131 commits
0.1.0 ... main

Author SHA1 Message Date
Bozhidar
feaf2e2e53
Create supervisord.conf 2025-02-26 11:13:39 +02:00
Bozhidar
ca2320d814
Create docker-compose.yml 2025-02-26 11:12:09 +02:00
Bozhidar
e4bbe14d22
Update entrypoint.sh 2025-02-26 11:08:37 +02:00
Bozhidar
017cc606e4
Update Dockerfile 2025-02-26 11:07:50 +02:00
Bozhidar Slaveykov
253bbc5d29 Update DomainIsDeletedListener.php 2025-02-19 16:08:33 +02:00
Bozhidar Slaveykov
4dac3e94b6 Create DomainIsDeletedListener.php 2025-02-19 16:08:16 +02:00
Bozhidar Slaveykov
da16176eb8 update 2025-02-19 16:06:35 +02:00
Bozhidar Slaveykov
0d04d49b22 Update index.blade.php 2025-02-19 16:02:58 +02:00
Bozhidar Slaveykov
81644287b5 Update logo.svg 2025-02-19 15:33:52 +02:00
Bozhidar Slaveykov
de9c2d774b update 2025-02-19 15:30:35 +02:00
Bozhidar Slaveykov
0ca205963d update 2025-02-19 15:21:45 +02:00
Bozhidar Slaveykov
ae5147bdb1 update 2025-02-19 15:18:35 +02:00
Bozhidar Slaveykov
f3e462e1c2 update 2025-02-19 15:09:52 +02:00
Bozhidar Slaveykov
7cfd6129ed update 2025-02-19 15:07:04 +02:00
Bozhidar Slaveykov
b50571fc22 Update CreateHostingSubscription.php 2025-02-19 14:52:04 +02:00
Bozhidar Slaveykov
419e941397 update 2025-02-19 14:11:03 +02:00
Bozhidar Slaveykov
7fcca4f35a update 2025-02-19 13:31:26 +02:00
Bozhidar Slaveykov
cd6af66256 update 2025-02-19 13:18:25 +02:00
Bozhidar Slaveykov
c05545c631 Update index.blade.php 2025-02-19 12:16:22 +02:00
Bozhidar Slaveykov
855b4e31c8 update 2025-02-19 11:50:18 +02:00
Bozhidar Slaveykov
fb866221fd Update Domain.php 2025-02-18 17:53:35 +02:00
Bozhidar Slaveykov
d1575a43a3 Update RenewSSL.php 2025-02-18 17:40:39 +02:00
Bozhidar Slaveykov
e4718323be Update InstallApache.php 2025-02-18 17:33:39 +02:00
Bozhidar Slaveykov
2fe31c7c30 Update RunRepair.php 2025-02-18 17:33:05 +02:00
Bozhidar Slaveykov
3068292054 update 2025-02-18 17:32:32 +02:00
Bozhidar Slaveykov
ccb60d378e update 2025-02-18 17:30:26 +02:00
Bozhidar Slaveykov
4a4f18f2f8 Update CertificateResource.php 2025-02-18 17:29:58 +02:00
Bozhidar Slaveykov
e1a423e975
Update Domain.php 2025-02-18 10:21:48 +02:00
Bozhidar Slaveykov
9a3e18468b
Update Domain.php 2025-02-18 10:17:42 +02:00
Bozhidar Slaveykov
6891b398c5
Update update.sh 2025-02-17 17:45:16 +02:00
Bozhidar Slaveykov
eb3f2d2803
Update Domain.php 2025-02-17 17:19:09 +02:00
Bozhidar Slaveykov
e891eed89d
Update install.sh 2025-02-17 15:07:00 +02:00
Bozhidar Slaveykov
ee669c1c65
Update install_web.sh 2025-02-17 15:06:20 +02:00
Bozhidar Slaveykov
36a43cf767
Delete installers/ubuntu-22.04/install.sh 2025-02-17 14:56:25 +02:00
Bozhidar Slaveykov
96353958aa
Delete installers/ubuntu-20.04/install.sh 2025-02-17 14:56:11 +02:00
Bozhidar
ef9fb0ce4a
Update version.txt 2025-02-12 12:54:37 +02:00
Bozhidar Slaveykov
126a0977d2 Update CertificateResource.php 2025-02-12 12:54:10 +02:00
Bozhidar Slaveykov
d7ad9b8016 update 2025-02-12 12:49:31 +02:00
Bozhidar Slaveykov
12ff24788f update 2025-02-12 12:30:57 +02:00
Bozhidar Slaveykov
1027cd07b6 Create RenewSSL.php 2025-02-12 12:18:10 +02:00
Bozhidar Slaveykov
0c2e03cdb6 update 2025-02-12 12:15:56 +02:00
Bozhidar Slaveykov
90265e9339 update 2025-02-12 12:08:20 +02:00
Bozhidar Slaveykov
df1e5505b4 Update module.json 2025-02-12 10:49:02 +02:00
Bozhidar Slaveykov
74cafabdb9 Update ListInstallations.php 2025-02-11 16:03:01 +02:00
Bozhidar Slaveykov
1f58351010 Update RunRepair.php 2025-02-11 15:43:40 +02:00
Bozhidar Slaveykov
29d8172110 Update DomainIsCreatedListener.php 2025-02-11 15:36:51 +02:00
Bozhidar Slaveykov
726202d057 Update DomainIsCreatedListener.php 2025-02-11 15:28:58 +02:00
Bozhidar Slaveykov
2a6e395514 Update DomainIsCreatedListener.php 2025-02-11 15:28:29 +02:00
Bozhidar Slaveykov
1cb955b6d6 update 2025-02-11 15:18:42 +02:00
Bozhidar Slaveykov
64b0c73fdc Update InstallationResource.php 2025-02-11 15:05:02 +02:00
Bozhidar Slaveykov
f825d63b91 Update ListInstallations.php 2025-02-11 15:04:16 +02:00
Bozhidar Slaveykov
55c98cf6de update 2025-02-11 15:04:00 +02:00
Bozhidar Slaveykov
71222928b9 update 2025-02-11 15:02:49 +02:00
Bozhidar Slaveykov
ad9f885235 update 2025-02-11 15:00:59 +02:00
Bozhidar Slaveykov
ad81ba4e12 Update version.txt 2025-02-10 13:25:12 +02:00
Bozhidar Slaveykov
5a96af2d27 Update PHPInstaller.php 2025-02-10 13:24:15 +02:00
Bozhidar Slaveykov
85e8c3781a update 2025-02-07 15:22:34 +02:00
Bozhidar Slaveykov
0fc0055ac3 update 2025-02-07 14:54:59 +02:00
Bozhidar Slaveykov
276e626df1 update 2025-02-07 14:40:58 +02:00
Bozhidar Slaveykov
f4076677d1 Update README.md 2025-02-07 14:26:25 +02:00
Bozhidar
4d8ffe00d1
Update README.md 2025-02-07 14:25:16 +02:00
Bozhidar Slaveykov
771ba59ea9 update 2025-02-07 13:43:28 +02:00
Bozhidar Slaveykov
3381394009 Update HostingPlanResource.php 2025-02-07 13:36:16 +02:00
Bozhidar Slaveykov
e5725a94a8 update 2025-02-07 13:21:16 +02:00
Bozhidar Slaveykov
17c37eef1b update 2025-02-07 13:16:45 +02:00
Bozhidar Slaveykov
d3745f24ae update 2025-02-07 13:12:16 +02:00
Bozhidar Slaveykov
04b1c880df Update PHPInstaller.php 2025-02-05 14:40:46 +02:00
Bozhidar Slaveykov
e5591576fe Update ApacheVirtualHostSettings.php 2025-02-05 14:32:44 +02:00
Bozhidar Slaveykov
2ba5ecbc7c update 2025-02-05 14:01:20 +02:00
Bozhidar Slaveykov
5d9e96bcf3 Update PHPInstaller.php 2025-02-05 13:56:14 +02:00
Bozhidar Slaveykov
13ac4e603d Update InstallApache.php 2025-02-05 13:53:37 +02:00
Bozhidar Slaveykov
cc229b6ce5 Update PHPInstaller.php 2025-02-05 13:46:32 +02:00
Bozhidar Slaveykov
2b918a5116 Update ApacheBuild.php 2025-02-05 13:37:22 +02:00
Bozhidar Slaveykov
cfab2284fb update 2025-02-05 13:35:21 +02:00
Bozhidar Slaveykov
14d63de60c Update SupportedApplicationTypes.php 2025-02-05 13:26:39 +02:00
Bozhidar Slaveykov
386ff1242c Update InstallApache.php 2025-02-05 13:22:13 +02:00
Bozhidar Slaveykov
235161f014 update 2025-02-05 13:16:04 +02:00
Bozhidar Slaveykov
bb24afcd62 Update InstallApache.php 2025-02-05 13:13:12 +02:00
Bozhidar Slaveykov
2e16714685 update 2025-02-05 13:07:02 +02:00
Bozhidar Slaveykov
792602a572 Update PHPInstaller.php 2025-02-05 13:01:33 +02:00
Bozhidar Slaveykov
164e9590ff Update SupportedApplicationTypes.php 2025-02-05 12:50:41 +02:00
Bozhidar Slaveykov
006afa3aa5 Update SupportedApplicationTypes.php 2025-02-05 12:43:40 +02:00
Bozhidar Slaveykov
ce3bb2b609 Update CertificateResource.php 2025-02-05 12:28:48 +02:00
Bozhidar Slaveykov
a7ddd77f10 Update CertificateResource.php 2025-01-30 18:43:56 +02:00
Bozhidar Slaveykov
15bfb0e788 Update WildcardIssuer.php 2025-01-30 17:52:58 +02:00
Bozhidar Slaveykov
c76c018f67 Update WildcardIssuer.php 2025-01-30 17:47:44 +02:00
Bozhidar Slaveykov
a178a72e7a Update WildcardIssuer.php 2025-01-30 17:32:32 +02:00
Bozhidar Slaveykov
022bc67fe8 Update WildcardIssuer.php 2025-01-30 17:31:04 +02:00
Bozhidar Slaveykov
9f294b0bf3 update 2025-01-30 17:28:21 +02:00
Bozhidar Slaveykov
49e2418469 update 2025-01-30 17:14:38 +02:00
Bozhidar Slaveykov
0db80728e1 update 2025-01-30 17:06:00 +02:00
Bozhidar Slaveykov
c42b143867 update 2025-01-30 17:00:52 +02:00
Bozhidar Slaveykov
06e792b5dc update 2025-01-30 16:59:24 +02:00
Bozhidar Slaveykov
09240080a0 Update .gitignore 2025-01-30 16:42:07 +02:00
Bozhidar Slaveykov
8d92fed232 Update .gitignore 2025-01-30 16:42:00 +02:00
Bozhidar Slaveykov
ef1b4d325a update 2025-01-30 16:41:53 +02:00
Bozhidar Slaveykov
3cf9d1cc4b update 2025-01-30 16:40:40 +02:00
Bozhidar Slaveykov
8e9abe546c Update RemoteBackupServerResource.php 2025-01-30 16:33:36 +02:00
Bozhidar Slaveykov
851a155894 Update RemoteBackupServerResource.php 2025-01-30 16:32:20 +02:00
Bozhidar Slaveykov
bb2fa1a0a4 Update RemoteBackupServerResource.php 2025-01-30 16:24:54 +02:00
Bozhidar Slaveykov
04eb1c7e3d Update RemoteBackupServerResource.php 2025-01-30 16:15:56 +02:00
Bozhidar Slaveykov
afc87ede66 Update RemoteBackupServer.php 2025-01-30 15:58:09 +02:00
Bozhidar Slaveykov
d6c85dc426 update installation screen 2025-01-30 15:55:20 +02:00
Bozhidar Slaveykov
295f29af85 update 2025-01-30 15:39:56 +02:00
Bozhidar Slaveykov
bca5682070 update 2025-01-30 15:39:50 +02:00
Bozhidar Slaveykov
c93f8c5671 update 2025-01-30 15:38:58 +02:00
Bozhidar Slaveykov
9d4c005269 update 2025-01-30 15:31:36 +02:00
Bozhidar Slaveykov
93716d3379 update 2025-01-30 15:31:32 +02:00
Bozhidar Slaveykov
d993926142 update 2025-01-30 15:27:43 +02:00
Bozhidar Slaveykov
0ee005948d update 2025-01-30 15:17:57 +02:00
Bozhidar Slaveykov
453de79e75 update 2025-01-30 15:03:49 +02:00
Bozhidar Slaveykov
8cf10cb488 update 2025-01-30 15:01:15 +02:00
Bozhidar Slaveykov
e3653b4883 Update config.mjs 2025-01-30 14:58:37 +02:00
Bozhidar Slaveykov
1266a854ea update 2025-01-30 14:49:23 +02:00
Bozhidar Slaveykov
f20f21bf11 update 2025-01-30 14:37:48 +02:00
Bozhidar Slaveykov
c3cc2be24a Update app-unit-test.yml 2025-01-30 14:27:30 +02:00
Bozhidar Slaveykov
bff4a7e6f4 update 2025-01-30 14:26:48 +02:00
Bozhidar Slaveykov
78bbe763ef Update SetupMasterDomainSSL.php 2025-01-30 14:24:06 +02:00
Bozhidar Slaveykov
6c24c44d5e Update SetupMasterDomainSSL.php 2025-01-30 14:00:16 +02:00
Bozhidar Slaveykov
ba6f4a635c Update SetupMasterDomainSSL.php 2025-01-30 13:44:42 +02:00
Bozhidar Slaveykov
f77503b786 Update SetupMasterDomainSSL.php 2025-01-30 13:41:38 +02:00
Bozhidar Slaveykov
d75d7f0787 Update SetupMasterDomainSSL.php 2025-01-30 13:21:11 +02:00
Bozhidar Slaveykov
55fc6a7af4 Update SetupMasterDomainSSL.php 2025-01-30 13:20:56 +02:00
Bozhidar Slaveykov
a3278130b8 Update SetupMasterDomainSSL.php 2025-01-30 13:16:31 +02:00
Bozhidar Slaveykov
296247008e update 2025-01-30 13:13:56 +02:00
Bozhidar Slaveykov
1d38f7c008 Update InstallApache.php 2025-01-30 13:10:43 +02:00
Bozhidar Slaveykov
5a02f9ac46 update 2025-01-30 13:08:50 +02:00
Bozhidar Slaveykov
3b93dcf070 Update SetupMasterDomainSSL.php 2025-01-30 12:24:32 +02:00
Bozhidar Slaveykov
f0c4d090ab update 2025-01-30 12:23:34 +02:00
Bozhidar Slaveykov
68fb3724db update 2025-01-30 12:06:16 +02:00
Bozhidar Slaveykov
7695c5f7ea Ubuntu 24.04 support 2025-01-30 12:00:04 +02:00
201 changed files with 13327 additions and 2972 deletions

View file

@ -8,7 +8,7 @@ jobs:
phyre-panel-unit-test:
strategy:
matrix:
os: [ubuntu-22.04, ubuntu-20.04]
os: [ubuntu-24.04, ubuntu-22.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
sudo /phyre-panel/install_web.sh --dont-ask
sudo phyre-php artisan test --filter HostingSubscriptionsTest
compile-phyre-web-panel:

3
.gitignore vendored
View file

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

View file

@ -19,6 +19,12 @@
<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,13 +1,99 @@
# syntax=docker/dockerfile:1
# --------------------------------------------------
# 1) Base Image
# --------------------------------------------------
FROM ubuntu:24.04
FROM ubuntu:22.04 AS production
# So apt doesn't prompt us
ENV DEBIAN_FRONTEND=noninteractive
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
# --------------------------------------------------
# 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/*
COPY entrypoint.sh /usr/local/phyre/entrypoint.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/*
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"]

46
docker/docker-compose.yml Normal file
View file

@ -0,0 +1,46 @@
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,4 +1,33 @@
service mysql start
service phyre start
#!/usr/bin/env bash
set -e
tail -f /dev/null
# 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

25
docker/supervisord.conf Normal file
View file

@ -0,0 +1,25 @@
[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,12 +49,8 @@ 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: [
@ -64,7 +60,19 @@ 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: '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' },
]
},
{

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
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};
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};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -1 +0,0 @@
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

@ -1 +0,0 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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

@ -1 +0,0 @@
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

@ -1 +0,0 @@
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

@ -0,0 +1 @@
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

@ -0,0 +1 @@
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 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};
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};

View file

@ -1 +1 @@
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};
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};

View file

@ -1 +1 @@
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};
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};

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 @@
{"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"}
{"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"}

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

@ -0,0 +1,31 @@
# 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

@ -0,0 +1,153 @@
# 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

11
docs/commands/index.md Normal file
View file

@ -0,0 +1,11 @@
# 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

@ -0,0 +1,17 @@
# 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

@ -0,0 +1,17 @@
# 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

@ -0,0 +1,24 @@
# 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

@ -0,0 +1,17 @@
# 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

@ -0,0 +1,10 @@
# 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

@ -0,0 +1,17 @@
# 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,3 +4,9 @@ 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,7 +2,50 @@
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**
- **Apache + Python**
- **Apache + Ruby**
- **Apache + Docker (Via Proxy Reverse)**
- **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

View file

@ -20,7 +20,7 @@ We currently do not support i386 or ARM7-based processors.
### Supported operating systems
- Ubuntu 20.04 or 22.04
- Ubuntu 20.04, 22.04 or 24.04 LTS
::: 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.0.9",
"version": "0.1.1",
"scripts": {
"docs:dev": "vitepress dev",
"docs:build": "vitepress build",

View file

@ -28,3 +28,20 @@ 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,4 +80,12 @@ 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."
# 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

View file

@ -1,172 +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-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

@ -0,0 +1,16 @@
#!/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

@ -0,0 +1,69 @@
#!/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

@ -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-22.04/greeting.sh -O /etc/profile.d/phyre-greeting.sh
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-22.04.deb
dpkg -i phyre-php-8.2.0-ubuntu-22.04.deb
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-22.04.deb
dpkg -i phyre-nginx-1.24.0-ubuntu-22.04.deb
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-22.04"}'
curl -s https://phyrepanel.com/api/phyre-installation-log -X POST -H "Content-Type: application/json" -d '{"os": "ubuntu-24.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,4 +171,12 @@ 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."
# 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

View file

@ -1 +1 @@
0.0.3
0.1.7

View file

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

View file

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

View file

@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 20 20">
<svg xmlns="http://www.w3.org/2000/svg" width="50px" height="50px" 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: 280 B

After

Width:  |  Height:  |  Size: 284 B

View file

@ -13,13 +13,14 @@ 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 WildcardDomain extends BaseSettings
class IssueWildcardCertificate extends BaseSettings
{
protected static ?string $navigationGroup = 'Let\'s Encrypt';
@ -36,8 +37,9 @@ class WildcardDomain extends BaseSettings
public static function getNavigationLabel() : string
{
return 'Wildcard Domain';
return 'Issue Wildcard Certificate';
}
public function getFormActions() : array
{
return [
@ -183,7 +185,7 @@ class WildcardDomain extends BaseSettings
}
public function schema(): array
public function form(Form $form): Form
{
if (request()->get('step', null) === 'verification') {
$this->getInstallLog();
@ -193,12 +195,11 @@ class WildcardDomain extends BaseSettings
Wizard::make([
Wizard\Step::make('Install')
//->description('Install a wildcard SSL certificate for the master domain')
->description('Issue new wildcard SSL certificate for domain')
->schema([
TextInput::make('wildcard_domain')
->helperText('Install a wildcard SSL certificate for the master domain')
->placeholder(setting('general.wildcard_domain'))
->disabled(),
->helperText('Issue new wildcard SSL certificate for domain. Example: *.mysite.com')
->placeholder('*.mysite.com'),
])->afterValidation(function () {
if (file_exists($this->installLogFilePath)) {
unlink($this->installLogFilePath);

View file

@ -15,4 +15,11 @@ 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 = 'heroicon-o-document-text';
protected static ?string $navigationIcon = 'mw-mw_logo_small_white';
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-rectangle-stack';
protected static ?string $navigationIcon = 'heroicon-o-globe-americas';
protected static ?string $navigationGroup = 'Microweber';
@ -49,12 +49,13 @@ 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,6 +9,7 @@ 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;
@ -42,7 +43,15 @@ class DomainIsCreatedListener
return;
}
if (!in_array('microweber', $findHostingPlan->additional_services)) {
$skip = true;
if (in_array('microweber', $findHostingPlan->additional_services)) {
$skip = false;
}
if (in_array('microweber_custom', $findHostingPlan->additional_services)) {
$skip = false;
}
if ($skip) {
return;
}
@ -50,6 +59,16 @@ 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;
@ -143,9 +162,19 @@ class DomainIsCreatedListener
}
$username = Str::random(8);
$install->setAdminEmail($username . '@'.$emailDomain);
$install->setAdminUsername($username);
$install->setAdminPassword(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));
}
$status = $install->run();

View file

@ -0,0 +1,44 @@
<?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": "^0.9"
"microweber-packages/shared-server-scripts": "^1.1"
},
"extra": {
"laravel": {

View file

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

View file

@ -4,7 +4,7 @@
"description": "",
"keywords": [],
"priority": 0,
"logoIcon": "mw-mw_logo_small_white",
"logoIcon": "Modules/Microweber/resources/assets/mw-svg/mw_logo_small_white.svg",
"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" 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" 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">
<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: 985 B

After

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

View file

@ -0,0 +1,114 @@
<?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