ADD Part-DB installation description
This commit is contained in:
457
partdb-install.md
Normal file
457
partdb-install.md
Normal file
@@ -0,0 +1,457 @@
|
|||||||
|
# Installation of part-db on my nginx server at kuschel.at
|
||||||
|
|
||||||
|
Date: 2025-10-29 KW4NZ Thomas Kuschel
|
||||||
|
Debian Version: (/etc/debian_version)
|
||||||
|
```
|
||||||
|
ssh kuschel cat /etc/debian_version
|
||||||
|
```
|
||||||
|
A: `13.1` , i.e. trixie
|
||||||
|
```
|
||||||
|
ssh kuschel cat /etc/os-release
|
||||||
|
```
|
||||||
|
... to receive more information
|
||||||
|
|
||||||
|
## Checks
|
||||||
|
|
||||||
|
Only available on a PC with credentials to kuschel.at via SSH
|
||||||
|
|
||||||
|
These settings should be established via the meeting server jitsi
|
||||||
|
|
||||||
|
### Check if yarn is installed at mycarbon.at or kuschel.at
|
||||||
|
|
||||||
|
```
|
||||||
|
ssh kuschel yarn --version
|
||||||
|
```
|
||||||
|
A: `1.22.22`
|
||||||
|
|
||||||
|
### Check if nodejs is installed
|
||||||
|
```
|
||||||
|
ssh kuschel nodejs --version
|
||||||
|
```
|
||||||
|
|
||||||
|
A: `24.11.0`
|
||||||
|
|
||||||
|
### Check the database MariaDB
|
||||||
|
```
|
||||||
|
ssh kuschel mariadb --version
|
||||||
|
```
|
||||||
|
|
||||||
|
A: `mariadb from 11.8.3-MariaDB, client 15.2 for debian-linux-gnu (x86_64) using EditLine wrapper`
|
||||||
|
|
||||||
|
### Check the php version
|
||||||
|
```
|
||||||
|
ssh kuschel php --version
|
||||||
|
```
|
||||||
|
A: `PHP 8.4.14 (cli) (built: Oct 27 2025 21:20:52) (NTS)
|
||||||
|
Copyright (c) The PHP Group
|
||||||
|
Built by Debian
|
||||||
|
Zend Engine v4.4.14, Copyright (c) Zend Technologies
|
||||||
|
with Zend OPcache v8.4.14, Copyright (c), by Zend Technologies`
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Create a folder for Part-DB (partdb)
|
||||||
|
|
||||||
|
Please create a folder for Part-DB and proceed with downloading it.
|
||||||
|
We have completed the installation of all prerequisites and are now prepared to proceed with the Part-DB installation.
|
||||||
|
The next step is to create a folder for Part-DB in the webroot of Apache2/nginx and download it to this folder.
|
||||||
|
The software is downloaded via Git, facilitating straightforward updates at a later date.
|
||||||
|
|
||||||
|
```
|
||||||
|
ssh kuschel
|
||||||
|
```
|
||||||
|
```
|
||||||
|
sudo git clone https://github.com/Part-DB/Part-DB-symfony.git /var/www/partdb
|
||||||
|
```
|
||||||
|
Make it available for nginx user, first check the name of the user with:
|
||||||
|
```
|
||||||
|
user=$(grep "user" /etc/nginx/nginx.conf | tr -d ';' | cut -d " " -f 2) | echo $user
|
||||||
|
```
|
||||||
|
|
||||||
|
Change the owner of the directory recursively
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo chown -R $user':' /var/www/partdb
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create configuration for Part-DB from a template
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo cp /var/www/partdb/.env /var/www/partdb/.env.local
|
||||||
|
```
|
||||||
|
Now you have to edit the created file `.env.local`, e.g. with
|
||||||
|
```
|
||||||
|
sudo nano -cl /var/www/partdb/.env.local
|
||||||
|
```
|
||||||
|
We will show this file to you right here:
|
||||||
|
|
||||||
|
```
|
||||||
|
...
|
||||||
|
##########################
|
||||||
|
# Database settings
|
||||||
|
##########################
|
||||||
|
|
||||||
|
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
|
||||||
|
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
|
||||||
|
|
||||||
|
# Use a file (SQLite) as database. For bigger instances you should use a real database server (like MySQL)
|
||||||
|
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/app.db"
|
||||||
|
|
||||||
|
# Uncomment this line (and comment the line above to use a MySQL database
|
||||||
|
# DATABASE_URL=mysql://root:@127.0.0.1:3306/part-db?serverVersion=5.7
|
||||||
|
DATABASE_URL=mysql://partdb:wRHEFShdB9gG@127.0.0.1:3306/partdb
|
||||||
|
|
||||||
|
# Set this value to 1, if you want to use SSL to connect to the MySQL server. It will be tried to use the CA certificate
|
||||||
|
# otherwise a CA bundle shipped with PHP will be used.
|
||||||
|
# Leave it at 0, if you do not want to use SSL or if your server does not support it
|
||||||
|
DATABASE_MYSQL_USE_SSL_CA=0
|
||||||
|
|
||||||
|
# Set this value to 0, if you don't want to verify the CA certificate of the MySQL server
|
||||||
|
# Only do this, if you know what you are doing!
|
||||||
|
DATABASE_MYSQL_SSL_VERIFY_CERT=1
|
||||||
|
|
||||||
|
# Emulate natural sorting of strings even on databases that do not support it (like SQLite, MySQL or MariaDB < 10.7)
|
||||||
|
# This can be slow on big databases and might have some problems and quirks, so use it with caution
|
||||||
|
DATABASE_EMULATE_NATURAL_SORT=0
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration of the MySql database
|
||||||
|
|
||||||
|
#### Create a new database "partdb"
|
||||||
|
|
||||||
|
```sudo mariadb -p```
|
||||||
|
|
||||||
|
You have to enter the root password of the MariaDB database to git into it.
|
||||||
|
|
||||||
|
An SQL shell opens, the following commands creates a new database and a new user for the program Part-DB.
|
||||||
|
|
||||||
|
```
|
||||||
|
CREATE DATABASE partdb;
|
||||||
|
GRANT ALL PRIVILEGES ON partdb.* TO 'partdb'@'localhost' IDENTIFIED BY 'wRHEFShdB9gG';
|
||||||
|
```
|
||||||
|
Finaly, save the changes with:
|
||||||
|
```
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
```
|
||||||
|
and exit the SQL shell with `exit`.
|
||||||
|
|
||||||
|
#### Install composer and dependencies for Part-DP
|
||||||
|
|
||||||
|
Download composer installer script:
|
||||||
|
```
|
||||||
|
wget -O /tmp/composer-setup.php https://getcomposer.org/installer
|
||||||
|
```
|
||||||
|
Install composer globally
|
||||||
|
```
|
||||||
|
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
|
||||||
|
```
|
||||||
|
##### Check the composer's version
|
||||||
|
```
|
||||||
|
composer --version
|
||||||
|
```
|
||||||
|
A: `Composer version 2.8.12 2025-09-19 13:41:59
|
||||||
|
PHP version 8.4.14 (/usr/bin/php8.4)
|
||||||
|
Run the "diagnose" command to get more detailed diagnostics output.`
|
||||||
|
|
||||||
|
#### Install composer dependencies (please note the sudo command, to run it under the web server user)
|
||||||
|
|
||||||
|
First change to the folder partdb with:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd /var/www/partdb
|
||||||
|
```
|
||||||
|
Create a cache directory for composer at /var/www/.cache
|
||||||
|
```
|
||||||
|
sudo mkdir /var/www/.cache
|
||||||
|
sudo chown www-data: /var/www/.cache
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo -u www-data composer install --no-dev -o
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Note:
|
||||||
|
Additionally, I had to install the missing ext-bcmath because the tc-lib-barcode requires ext-bcmath, so I installed the package:
|
||||||
|
```
|
||||||
|
sudo apt install php-bcmath
|
||||||
|
```
|
||||||
|
And again call the `sudo -u www-data composer install --no-dev -o` under the user www-data.
|
||||||
|
|
||||||
|
#### Install and Run yarn in that directory
|
||||||
|
```
|
||||||
|
sudo yarn install
|
||||||
|
```
|
||||||
|
A: `yarn install v1.22.22`
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
A: `yarn run v1.22.22 ... encore production --progress ...`
|
||||||
|
|
||||||
|
#### Clear Console cache
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo -u www-data php bin/console cache:clear
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Checking the PHP configuration
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo -u www-data php bin/console partdb:check-requirements
|
||||||
|
|
||||||
|
```
|
||||||
|
There should be all green OK's in the console, except pdo_sqlite.
|
||||||
|
|
||||||
|
For a better performance we installed php-curl:
|
||||||
|
```
|
||||||
|
sudo apt install php-curl
|
||||||
|
```
|
||||||
|
|
||||||
|
Also, we got a warning `[WARNING] Opcache configuration can be improved. See https://symfony.com/doc/current/performance.html for more info.`
|
||||||
|
|
||||||
|
So we changed the following lines at: `/etc/php/8.4/cli/conf.d/10-opcache.ini`
|
||||||
|
```
|
||||||
|
; configuration for php opcache module
|
||||||
|
; priority=10
|
||||||
|
zend_extension=opcache.so
|
||||||
|
opcache.jit=off
|
||||||
|
; ADDED by KW4NZ to configure OPcache for Maximum Performance, Symphony related (Part-DB)
|
||||||
|
;opcache.memory_consumption=128
|
||||||
|
opcache.memory_consumption=256
|
||||||
|
|
||||||
|
; The amount of memory for interned strings in Mbytes.
|
||||||
|
;opcache.interned_strings_buffer=8
|
||||||
|
|
||||||
|
; The maximum number of keys (scripts) in the OPcache hash table.
|
||||||
|
; Only numbers between 200 and 1000000 are allowed.
|
||||||
|
;opcache.max_accelerated_files=10000
|
||||||
|
opcache.max_accelerated_files=20000
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Database Schema
|
||||||
|
|
||||||
|
Now you create a database schema with the following command:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo -u www-data php /var/www/partdb/bin/console doctrine:migrations:migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
As a result we got the following warning line:
|
||||||
|
```
|
||||||
|
[notice] Migrating up to DoctrineMigrations\Version20250813214628
|
||||||
|
[warning]
|
||||||
|
[warning] The initial password for the "admin" user is: 9dd3255565
|
||||||
|
```
|
||||||
|
|
||||||
|
#### NGINX setup:
|
||||||
|
|
||||||
|
My nginx/sites-available/kuschel.at
|
||||||
|
|
||||||
|
```
|
||||||
|
##
|
||||||
|
# You should look at the following URL's in order to grasp a solid understanding
|
||||||
|
# of Nginx configuration files in order to fully unleash the power of Nginx.
|
||||||
|
# https://www.nginx.com/resources/wiki/start/
|
||||||
|
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
|
||||||
|
# https://wiki.debian.org/Nginx/DirectoryStructure
|
||||||
|
#
|
||||||
|
# In most cases, administrators will remove this file from sites-enabled/ and
|
||||||
|
# leave it as reference inside of sites-available where it will continue to be
|
||||||
|
# updated by the nginx packaging team.
|
||||||
|
#
|
||||||
|
# This file will automatically load configuration files provided by other
|
||||||
|
# applications, such as Drupal or Wordpress. These applications will be made
|
||||||
|
# available underneath a path with that package name, such as /drupal8.
|
||||||
|
#
|
||||||
|
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
|
||||||
|
##
|
||||||
|
|
||||||
|
# Default server configuration
|
||||||
|
#
|
||||||
|
#upstream nodered {
|
||||||
|
# server 127.0.0.1:1880;
|
||||||
|
#}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name www.kuschel.at kuschel.at;
|
||||||
|
## sending users to https with no www
|
||||||
|
# return 301 https://www.mycarbon.at$request_uri;
|
||||||
|
root /var/www/kuschel.at;
|
||||||
|
# Add index.php to the list if you are using PHP
|
||||||
|
index index.php index.html index.htm index.nginx-debian.html;
|
||||||
|
location / {
|
||||||
|
# First attempt to serve request as file, then
|
||||||
|
# as directory, then fall back to displaying a 404.
|
||||||
|
try_files $uri $uri/ =404;
|
||||||
|
}
|
||||||
|
# pass PHP scripts to FastCGI server
|
||||||
|
#
|
||||||
|
location ~ \.php$ {
|
||||||
|
include snippets/fastcgi-php.conf;
|
||||||
|
#
|
||||||
|
# # With php-fpm (or other unix sockets):
|
||||||
|
fastcgi_pass unix:/var/run/php/php-fpm.sock;
|
||||||
|
# # With php-cgi (or other tcp sockets):
|
||||||
|
# fastcgi_pass 127.0.0.1:9000;
|
||||||
|
}
|
||||||
|
location /us-license/ {
|
||||||
|
auth_basic "Restricted";
|
||||||
|
auth_basic_user_file /etc/nginx/.htpasswd;
|
||||||
|
}
|
||||||
|
location = /1945/ {
|
||||||
|
autoindex on;
|
||||||
|
#autoindex_exact_size off;
|
||||||
|
#autoindex_format jsonp;
|
||||||
|
#autoindex_format xml;
|
||||||
|
autoindex_localtime on;
|
||||||
|
}
|
||||||
|
location = /spanisch/ {
|
||||||
|
autoindex on;
|
||||||
|
autoindex_localtime on;
|
||||||
|
}
|
||||||
|
# this is for LETSENCRYPT
|
||||||
|
location ^~ /.well-known/acme-challenge/ {
|
||||||
|
default_type "text/plain";
|
||||||
|
root /var/www/letsencrypt;
|
||||||
|
}
|
||||||
|
location = /.well-known/acme-challenge/ {
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
server {
|
||||||
|
listen 443 ssl default_server;
|
||||||
|
listen [::]:443 ssl default_server;
|
||||||
|
http2 on;
|
||||||
|
# if ($http_host = git.kuschel.at) {
|
||||||
|
# proxy_pass http://localhost:3000/;
|
||||||
|
# }
|
||||||
|
# since nginx V 1.25+ (we are still at 1.22.x)
|
||||||
|
# listen 443 ssl http2 default_server;
|
||||||
|
# listen [::]:443 ssl default_server;
|
||||||
|
# http2 on;
|
||||||
|
|
||||||
|
server_name www.kuschel.at kuschel.at;
|
||||||
|
root /var/www/kuschel.at;
|
||||||
|
ssl_certificate /etc/letsencrypt/kuschel.at/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/kuschel.at/key.pem;
|
||||||
|
# This should be ca.pem (certificate with the additional intermediate certificate)
|
||||||
|
# See here: https://certbot.err.org/docs/using.html
|
||||||
|
ssl_trusted_certificate /etc/letsencrypt/kuschel.at/ca.pem;
|
||||||
|
|
||||||
|
#ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_session_timeout 24h;
|
||||||
|
ssl_session_cache shared:SSL:50m;
|
||||||
|
#ssl_session_tickets off;
|
||||||
|
# Prefer the SSL ciphers for ECDSA: (the both TLS-* are for TLS 1.3)
|
||||||
|
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
|
||||||
|
# ssl_ciphers TLS-CHACHA20-POLY1305-SHA256:TLS-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384;
|
||||||
|
|
||||||
|
# Use multiple curves
|
||||||
|
#ssl_ecdh_curve secp521r1:secp384r1;
|
||||||
|
|
||||||
|
#ssl_prefer_server_ciphers off;
|
||||||
|
ssl_prefer_server_ciphers on;
|
||||||
|
|
||||||
|
# HSTS (ngx_http_headers_module is required) max-age in seconds
|
||||||
|
add_header Strict-Transport-Security "max-age=63072000" always;
|
||||||
|
|
||||||
|
# OCSP stapling
|
||||||
|
ssl_stapling on;
|
||||||
|
ssl_stapling_verify on;
|
||||||
|
|
||||||
|
# This is the IP of the DNS server (in most cases: your router's IP)
|
||||||
|
resolver 213.133.98.98 213.133.99.99 213.133.100.100;
|
||||||
|
index index.html index.htm index.php;
|
||||||
|
|
||||||
|
# location / {
|
||||||
|
# fastcgi_pass unix:/var/run/php/php-fpm.sock;
|
||||||
|
# }
|
||||||
|
location /1945/ {
|
||||||
|
autoindex on;
|
||||||
|
#autoindex_exact_size off;
|
||||||
|
#autoindex_format jsonp;
|
||||||
|
#autoindex_format xml;
|
||||||
|
autoindex_localtime on;
|
||||||
|
}
|
||||||
|
location /spanisch/ {
|
||||||
|
autoindex on;
|
||||||
|
autoindex_localtime on;
|
||||||
|
}
|
||||||
|
location ~ ^/gimplfest/(.*) {
|
||||||
|
return 301 /gimpelfest/$1;
|
||||||
|
}
|
||||||
|
location /gimplfest/ {
|
||||||
|
autoindex on;
|
||||||
|
autoindex_localtime on;
|
||||||
|
}
|
||||||
|
location /gimpelfest/ {
|
||||||
|
# rewrite ^/gimpelfest/Mitternachtseinlage_4D.mp4 /gimpelfest/Mitternachtseinlage_8D.mp4 last;
|
||||||
|
rewrite ^/gimpelfest/Mitternachtseinlage_4D.mp4 /gimpelfest/Mitternachtseinlage_8D.mp4 redirect;
|
||||||
|
autoindex on;
|
||||||
|
autoindex_localtime on;
|
||||||
|
}
|
||||||
|
location ~ ^/index\.php(/|$) {
|
||||||
|
fastcgi_pass unix:/var/run/php/php-fpm.sock;
|
||||||
|
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||||
|
fastcgi_param DOCUMENT_ROOT $realpath_root;
|
||||||
|
|
||||||
|
internal;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
include snippets/fastcgi-php.conf;
|
||||||
|
#
|
||||||
|
# # With php-fpm (or other unix sockets):
|
||||||
|
fastcgi_pass unix:/var/run/php/php-fpm.sock;
|
||||||
|
# old version: fastcgi_pass unix:/run/php/php8.3-fpm.sock;
|
||||||
|
# # With php-cgi (or other tcp sockets):
|
||||||
|
# fastcgi_pass 127.0.0.1:9000;
|
||||||
|
}
|
||||||
|
location /nodered/ {
|
||||||
|
proxy_set_header Host $http_host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
#proxy_http_version 1.1;
|
||||||
|
#proxy_set_header Upgrade $http_upgrade;
|
||||||
|
#proxy_set_header Connection "upgrade";
|
||||||
|
proxy_pass http://127.0.0.1:1880/;
|
||||||
|
#include proxy_params;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
}
|
||||||
|
location /ui/ {
|
||||||
|
auth_basic "Secure UI area";
|
||||||
|
auth_basic_user_file /etc/nginx/.htpasswd;
|
||||||
|
proxy_pass http://127.0.0.1:1880/ui/;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
}
|
||||||
|
location /partdb/ {
|
||||||
|
# error_log /var/log/nginx/parts.error.log;
|
||||||
|
# access_log /var/log/nginx/parts.access.log;
|
||||||
|
try_files $uri /partdb/index.php$is_args$args;
|
||||||
|
}
|
||||||
|
location /bilder/ {
|
||||||
|
auth_basic "Secure Picture area";
|
||||||
|
auth_basic_user_file /etc/nginx/.htpasswd_bilder;
|
||||||
|
autoindex on;
|
||||||
|
autoindex_localtime on;
|
||||||
|
}
|
||||||
|
location ~* ^/admin/(.+\.(css|js)) {
|
||||||
|
rewrite ^/static/contents/$1 break;
|
||||||
|
proxy_pass http://127.0.0.1:1880;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
-- eof --
|
||||||
Reference in New Issue
Block a user