Запуск PNLCS
PNLCS представляет собой Laravel-приложение. Оно работает везде, где есть PHP 8.4, MySQL или MariaDB и веб-сервер. Чтобы сначала осмотреться, откройте демо : это настоящая установка.
docker pull panelica/pnlcs-runtime
Три способа установки
| Способ | Подходит для | Время | Руководство |
|---|---|---|---|
| Docker | Знакомства с PNLCS или работы в одном контейнере | Около 5 минут | Команды |
| Свой сервер | VPS или выделенного сервера без Docker: Ubuntu, Debian, AlmaLinux или Rocky Linux | Около 30 минут | Команды |
| Хостинг-панель | Сервера, на котором уже работает Panelica, cPanel или аналог | Около 20 минут | Руководство |
Быстрый старт с Docker
Официальный образ содержит PHP-FPM 8.4, nginx, Node.js 20 и supervisor, а при первом запуске загружает актуальный код.
- Запустите контейнерыСначала замените
changemeна собственные пароли. - Подождите от 3 до 5 минутПри первом запуске устанавливаются зависимости и собирается фронтенд.
- Откройте /installМастер проверит требования, создаст аккаунт администратора и затем заблокирует себя.
$ docker network create pnlcs-net $ docker run -d --name pnlcs-db --network pnlcs-net \ -e MYSQL_ROOT_PASSWORD=changeme \ -e MYSQL_DATABASE=pnlcs -e MYSQL_USER=pnlcs \ -e MYSQL_PASSWORD=changeme \ mariadb:11 $ docker run -d --name pnlcs --network pnlcs-net \ -p 8090:80 \ -e DB_HOST=pnlcs-db -e DB_DATABASE=pnlcs \ -e DB_USERNAME=pnlcs -e DB_PASSWORD=changeme \ -e APP_URL=http://localhost:8090 \ panelica/pnlcs-runtime:1.4
Установка на свой сервер без Docker
PNLCS работает как обычное Laravel-приложение на PHP-FPM 8.4, MySQL или MariaDB и Nginx. Команды ниже рассчитаны на Ubuntu 24.04, Debian 13 и AlmaLinux 9; для Rocky Linux 9 подходят команды AlmaLinux. Замените example.com на свой адрес.
-
Подготовьте сервер
PHP 8.4 с расширениями, база данных, Nginx, Node.js 20 для сборки фронтенда и Composer. Пропустите этот шаг, если всё это уже установлено.
В Ubuntu 24.04 есть только PHP 8.3, поэтому PHP 8.4 ставится из PPA ondrej. В Debian 13 PHP 8.4 есть в штатных репозиториях, вместо MySQL поставляется MariaDB, а пакета
php8.4-imapнет. В AlmaLinux и Rocky PHP 8.4 берётся из репозитория Remi.Терминал$ sudo apt update $ sudo apt install -y software-properties-common git unzip curl cron $ sudo add-apt-repository -y ppa:ondrej/php $ sudo apt update $ sudo apt install -y php8.4-fpm php8.4-cli php8.4-mysql php8.4-mbstring \ php8.4-xml php8.4-curl php8.4-zip php8.4-gd php8.4-bcmath php8.4-intl php8.4-imap $ sudo apt install -y mysql-server nginx $ curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - $ sudo apt install -y nodejs $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer
Терминал$ sudo apt update $ sudo apt install -y git unzip curl cron $ sudo apt install -y php8.4-fpm php8.4-cli php8.4-mysql php8.4-mbstring \ php8.4-xml php8.4-curl php8.4-zip php8.4-gd php8.4-bcmath php8.4-intl $ sudo apt install -y mariadb-server nginx $ curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - $ sudo apt install -y nodejs $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer
Терминал$ sudo dnf install -y epel-release https://rpms.remirepo.net/enterprise/remi-release-9.rpm $ sudo dnf module reset php -y $ sudo dnf module enable php:remi-8.4 -y $ sudo dnf install -y php php-fpm php-mysqlnd php-mbstring php-xml php-gd \ php-bcmath php-intl php-imap php-pecl-zip \ mysql-server nginx git unzip cronie policycoreutils-python-utils $ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash - $ sudo dnf install -y nodejs $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer $ sudo systemctl enable --now php-fpm mysqld nginx
-
Установите приложение
Каталог PNLCS принадлежит пользователю веб-сервера, и каждая команда
composer,artisanиnpmвыполняется от имени этого пользователя. Помощникpnделает это за вас. Если каталог принадлежит root, мастер установки и последующие обновления завершатся ошибкой.Выберите один пароль базы данных и укажите его и в
CREATE USER, и в строке.env. Помощникpnдействует только в текущей сессии оболочки; после повторного входа определите его снова.Не запускайте
db:seed. Мастер установки сам заполнит базу данных и создаст выбранного вами администратора.Терминал$ sudo git clone https://github.com/Panelica/pnlcs.git /var/www/pnlcs $ sudo chown -R www-data:www-data /var/www/pnlcs $ cd /var/www/pnlcs $ pn() { sudo -u www-data HOME=/tmp/pnlcs-home COMPOSER_HOME=/tmp/pnlcs-home/composer "$@"; } $ pn composer install --no-dev --optimize-autoloader --no-interaction $ sudo mysql -e "CREATE DATABASE pnlcs CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'pnlcs'@'localhost' IDENTIFIED BY 'choose-a-strong-password'; GRANT ALL PRIVILEGES ON pnlcs.* TO 'pnlcs'@'localhost'; FLUSH PRIVILEGES;" $ pn cp .env.example .env $ pn sed -i 's|^APP_URL=.*|APP_URL=http://example.com|; s|^DB_PASSWORD=.*|DB_PASSWORD=choose-a-strong-password|' .env $ sudo chmod 640 .env $ pn php artisan key:generate $ pn php artisan migrate --force $ pn npm ci $ pn npm run build $ pn php artisan storage:link $ pn php artisan optimize
Терминал$ sudo git clone https://github.com/Panelica/pnlcs.git /var/www/pnlcs $ sudo chown -R apache:apache /var/www/pnlcs $ cd /var/www/pnlcs $ pn() { sudo -u apache HOME=/tmp/pnlcs-home COMPOSER_HOME=/tmp/pnlcs-home/composer "$@"; } $ pn /usr/local/bin/composer install --no-dev --optimize-autoloader --no-interaction $ sudo mysql -e "CREATE DATABASE pnlcs CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'pnlcs'@'localhost' IDENTIFIED BY 'choose-a-strong-password'; GRANT ALL PRIVILEGES ON pnlcs.* TO 'pnlcs'@'localhost'; FLUSH PRIVILEGES;" $ pn cp .env.example .env $ pn sed -i 's|^APP_URL=.*|APP_URL=http://example.com|; s|^DB_PASSWORD=.*|DB_PASSWORD=choose-a-strong-password|' .env $ sudo chmod 640 .env $ pn php artisan key:generate $ pn php artisan migrate --force $ pn npm ci $ pn npm run build $ pn php artisan storage:link $ pn php artisan optimize $ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/pnlcs/storage(/.*)?" $ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/pnlcs/bootstrap/cache(/.*)?" $ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/pnlcs/\.env" $ sudo restorecon -R /var/www/pnlcs $ sudo setsebool -P httpd_can_network_connect_db 1 $ sudo setsebool -P httpd_can_network_connect 1
-
Направьте Nginx на public/
Корнем документов должен быть каталог
public/, а не корень проекта: в корне проекта лежит.env. Удалите сайт по умолчанию, иначе по адресу сервера так и будет открываться приветственная страница Nginx.Apache и Caddy тоже подходят, правила те же: корень документов
public/, PHP через PHP-FPM 8.4, а все запросы не к файлам перенаправляются наindex.php.Терминал$ sudo tee /etc/nginx/sites-available/pnlcs > /dev/null <<'EOF' server { listen 80; server_name example.com; root /var/www/pnlcs/public; index index.php; charset utf-8; client_max_body_size 64M; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/run/php/php8.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } } EOF $ sudo ln -s /etc/nginx/sites-available/pnlcs /etc/nginx/sites-enabled/ $ sudo rm -f /etc/nginx/sites-enabled/default $ sudo nginx -t && sudo systemctl reload nginx
Терминал$ sudo tee /etc/nginx/conf.d/pnlcs.conf > /dev/null <<'EOF' server { listen 80; server_name example.com; root /var/www/pnlcs/public; index index.php; charset utf-8; client_max_body_size 64M; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } } EOF $ sudo nginx -t && sudo systemctl reload nginx
-
Завершите установку в браузере, затем настройте расписание и защиту
Откройте
http://example.com/install. Мастер проверит требования, создаст администратора и затем закроется.Одна строка cron для пользователя веб-сервера отвечает за счета, напоминания, приостановки, проверки SSL и резервные копии. Для заданий в очереди отдельный воркер не нужен: их обрабатывает та же строка cron.
Терминал$ cd /var/www/pnlcs $ WEB_USER=www-data # AlmaLinux, Rocky: apache $ (sudo crontab -u $WEB_USER -l 2>/dev/null; echo '* * * * * cd /var/www/pnlcs && php artisan schedule:run >> /dev/null 2>&1') | sudo crontab -u $WEB_USER - $ sudo apt install -y certbot python3-certbot-nginx # Ubuntu, Debian $ sudo certbot --nginx -d example.com $ pn sed -i 's|^APP_URL=http://|APP_URL=https://|' .env $ pn php artisan optimize
Системные требования
Небольшой установке комфортно на 2 GB памяти, когда база данных находится на той же машине.
| PHP | 8.4 или новее |
|---|---|
| База данных | MySQL 8.0 или MariaDB 10.6+ |
| Веб-сервер | Nginx или Apache с PHP-FPM |
| Node.js | 18+ (рекомендуется 20 LTS), только для сборки фронтенда |
| Composer | 2.x |
| Память | Для небольшой установки хватит 1 GB; с 2 GB комфортно |
| Диск | Около 130 MB для приложения; оставьте не менее 2 GB свободного места под растущие данные |
После установки
- Чек-лист настройкиРеквизиты компании, почта, платёжный шлюз, сервер и первый продукт.
- Ваша первая продажаОт пустого каталога до оплаченного и выполненного заказа.
- Чек-лист безопасностиHTTPS, отключённый режим отладки, двухфакторная аутентификация для сотрудников, резервные копии за пределами сервера.
- ОбновлениеУстановка последнего выпуска без потери данных.
- Резервное копированиеЧто нужно сохранять, включая ключ приложения.
- FAQЧастые вопросы.