运行 PNLCS
PNLCS 是一个 Laravel 应用,只要有 PHP 8.4、MySQL 或 MariaDB 和 Web 服务器就能运行。想先看看的话, 在线演示 就是一套真实的安装。
docker pull panelica/pnlcs-runtime
使用 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 来自 ondrej PPA。Debian 13 自带 PHP 8.4,用 MariaDB 代替 MySQL,并且没有
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 目录归 Web 服务器用户所有,每一条
composer、artisan和npm命令都以该用户身份运行。pn辅助命令会替你完成这一点。如果目录归 root 所有,安装向导和之后的更新都会失败。只选定一个数据库密码,并在
CREATE USER语句和.env行中都使用它。pn辅助命令只在当前 shell 会话中有效;重新登录后需要再次定义。不要运行
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。向导会检查运行要求,创建管理员,然后自行关闭。为 Web 服务器用户添加一行 cron,即可驱动账单、提醒、暂停、SSL 检查和备份。队列任务不需要单独的 worker,同一行 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
| PHP | 8.4 或更高版本 |
|---|---|
| 数据库 | MySQL 8.0 或 MariaDB 10.6+ |
| Web 服务器 | Nginx 或 Apache,搭配 PHP-FPM |
| Node.js | 18+(推荐 20 LTS),仅用于构建前端 |
| Composer | 2.x |
| 内存 | 小规模安装 1 GB 即可运行;2 GB 更宽裕 |
| 磁盘 | 应用本身约 130 MB;考虑到数据增长,至少预留 2 GB 空闲空间 |