Coloque o PNLCS para rodar
O PNLCS é uma aplicação Laravel. Ele roda em qualquer ambiente com PHP 8.4, MySQL ou MariaDB e um servidor web. Se quiser conhecer antes, a demonstração ao vivo é uma instalação real.
docker pull panelica/pnlcs-runtime
Três formas de instalar
| Forma | Indicada para | Tempo | Guia |
|---|---|---|---|
| Docker | Experimentar o PNLCS ou rodá-lo como um único contêiner | Cerca de 5 minutos | Comandos |
| Seu próprio servidor | Um VPS ou servidor dedicado sem Docker: Ubuntu, Debian, AlmaLinux ou Rocky Linux | Cerca de 30 minutos | Comandos |
| Dentro de um painel de hospedagem | Um servidor que já roda Panelica, cPanel ou similar | Cerca de 20 minutos | Guia |
Início rápido com Docker
A imagem oficial inclui PHP-FPM 8.4, nginx, Node.js 20 e supervisor, e baixa o código mais recente na primeira inicialização.
- Inicie os contêineresAntes, substitua
changemepelas suas próprias senhas. - Aguarde de 3 a 5 minutosA primeira inicialização instala as dependências e compila o frontend.
- Abra /installO assistente verifica os requisitos, cria sua conta de administrador e depois se bloqueia.
$ 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
Instalar no seu próprio servidor, sem Docker
O PNLCS roda como uma aplicação Laravel comum sobre PHP-FPM 8.4, MySQL ou MariaDB e Nginx. Os comandos abaixo cobrem Ubuntu 24.04, Debian 13 e AlmaLinux 9; o Rocky Linux 9 usa os comandos do AlmaLinux. Substitua example.com pelo seu próprio endereço.
-
Preparar o servidor
PHP 8.4 com suas extensões, um banco de dados, Nginx, Node.js 20 para compilar o frontend e Composer. Pule esta etapa se eles já estiverem instalados.
O Ubuntu 24.04 traz PHP 8.3, então o PHP 8.4 vem do PPA ondrej. O Debian 13 já inclui PHP 8.4, traz MariaDB em vez de MySQL, e o pacote
php8.4-imapnão existe. No AlmaLinux e no Rocky, o PHP 8.4 vem do repositório Remi.Terminal$ 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
Terminal$ 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
Terminal$ 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
-
Instalar a aplicação
O diretório do PNLCS pertence ao usuário do servidor web, e todo comando
composer,artisanenpmroda como esse usuário. A funçãopnfaz isso por você. Se o diretório pertencer ao root, o assistente de instalação e as atualizações futuras falham.Escolha uma única senha para o banco de dados e use-a tanto no
CREATE USERquanto no.envpara que coincidam. A funçãopnvale só para a sessão atual do shell; defina-a de novo depois de entrar outra vez.Não execute o
db:seed. O assistente de instalação popula o banco de dados e cria o administrador que você escolher.Terminal$ 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
Terminal$ 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
-
Apontar o Nginx para public/
A raiz de documentos é
public/e nunca a raiz do projeto: a raiz do projeto contém o.env. Remova o site padrão para que o endereço do servidor não continue mostrando a página de boas-vindas do Nginx.Apache e Caddy também funcionam, com as mesmas regras: raiz de documentos
public/, PHP via PHP-FPM 8.4 e toda requisição que não for um arquivo reescrita paraindex.php.Terminal$ 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
Terminal$ 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
-
Conclua no navegador, depois agende e proteja
Abra
http://example.com/install. O assistente verifica os requisitos, cria seu administrador e depois se fecha.Uma linha de cron para o usuário do servidor web cuida de faturas, lembretes, suspensões, verificações de SSL e backups. Jobs em fila não precisam de um worker separado; a mesma linha de cron os processa.
Terminal$ 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
Requisitos
Uma instalação pequena roda com folga em 2 GB de memória, com o banco de dados na mesma máquina.
| PHP | 8.4 ou mais recente |
|---|---|
| Banco de dados | MySQL 8.0 ou MariaDB 10.6+ |
| Servidor web | Nginx ou Apache com PHP-FPM |
| Node.js | 18+ (20 LTS recomendado), apenas para compilar o frontend |
| Composer | 2.x |
| Memória | 1 GB funciona para uma instalação pequena; 2 GB dá folga |
| Disco | Cerca de 130 MB para a aplicação; reserve pelo menos 2 GB livres, já que os dados crescem |
Depois de instalar
- Checklist de configuraçãoDados da empresa, e-mail, um gateway, um servidor e seu primeiro produto.
- Sua primeira vendaDe um catálogo vazio a um pedido pago e provisionado.
- Checklist de segurançaHTTPS, debug desativado, dois fatores para a equipe, backups guardados fora do servidor.
- AtualizaçãoBaixe a versão mais recente sem perder dados.
- BackupsO que incluir no backup, inclusive a chave da aplicação.
- Perguntas frequentesDúvidas comuns.