

Minąło trochę ponad 1,5 roku od ostatniej rekonfiguracji mojej strony internetowej i dodatkowych systemów na zmienionych parametrach VPS z Ubuntu 22.04 LTS. W między czasie zmienił się właściciel serwisu hosting.linux.pl i z tą zmianą przyszły dość spore podwyżki cen (w moim przypadku cena VPS`a wzrosła o 400%). Hosting poczty i domen na najbliższy rok zostanie tam gdzie był (w tym przypadku cena również wzrosła), natomiast w przypadku VPS postanowiłem przejść do innego usługodawcy i po długim badaniu rynku wybrałem webh.pl.
Podobnie jak poprzednio, najnowsza wersja v3 VPS jest bazą dla moich kilku systemów:
Sama migracja z Ubuntu 22.04 LTS do 24.04 LTS przeszła bez większych problemów.
Parametry sprzętowe w "v3" poraz kolejny uległy polepszeniu we wszystkich trzech aspektach czyli CPU, RAM i SSD. Obecne parametry to:
Wynik testy dd (maksymalna przepustowość sekwencyjna dysku oraz wydajność przy małych blokach (IOPS) + wpływ generowania losowych danych):
dd if=/dev/zero of=test bs=1M count=1024 conv=fdatasync oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.680626 s, 1.6 GB/s
dd if=/dev/urandom of=test bs=4k count=250000 conv=fdatasync oflag=direct
250000+0 records in
250000+0 records out
1024000000 bytes (1.0 GB, 977 MiB) copied, 28.6482 s, 35.7 MB/s
Wynik testu YABS`a:
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
# Yet-Another-Bench-Script #
# v2026-04-29 #
# https://github.com/masonr/yet-another-bench-script #
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
Mon May 4 07:25:25 PM CEST 2026
Basic System Information:
---------------------------------
Uptime : 2 days, 10 hours, 0 minutes
Processor : AMD EPYC-Milan Processor
CPU cores : 2 @ 3193.998 MHz
AES-NI : ✔ Enabled
VM-x/AMD-V : ❌ Disabled
RAM : 7.8 GiB
Swap : 512.0 MiB
Disk : 98.3 GiB
Distro : Ubuntu 24.04.4 LTS
Kernel : 6.8.0-111-generic
VM Type : KVM
IPv4/IPv6 : ✔ Online / ❌ Offline
IPv4 Network Information:
---------------------------------
ISP : IWACOM Sp. z o.o
ASN : AS41508 ZINET.NET.PL Sp. z.o.o.
Host : ULTIMAHOST.PL SZELIGA sp. j
Location : Lodz, Łódź Voivodeship (10)
Country : Poland
fio Disk Speed Tests (Mixed R/W 50/50) (Partition /dev/vda2):
---------------------------------
Block Size | 4k (IOPS) | 64k (IOPS)
------ | --- ---- | ---- ----
Read | 126.62 MB/s (31.6k) | 575.26 MB/s (8.9k)
Write | 126.95 MB/s (31.7k) | 578.28 MB/s (9.0k)
Total | 253.58 MB/s (63.3k) | 1.15 GB/s (18.0k)
| |
Block Size | 512k (IOPS) | 1m (IOPS)
------ | --- ---- | ---- ----
Read | 1.33 GB/s (2.6k) | 477.54 MB/s (466)
Write | 1.41 GB/s (2.7k) | 509.34 MB/s (497)
Total | 2.75 GB/s (5.3k) | 986.89 MB/s (963)
iperf3 Network Speed Tests (IPv4):
---------------------------------
Provider | Location (Link) | Send Speed | Recv Speed | Ping
----- | ----- | ---- | ---- | ----
Clouvider | London, UK (10G) | 192 Mbits/sec | busy | 32.9 ms
Eranium | Amsterdam, NL (100G) | 193 Mbits/sec | 170 Mbits/sec | 23.2 ms
Uztelecom | Tashkent, UZ (10G) | 183 Mbits/sec | 116 Mbits/sec | 121 ms
Leaseweb | Singapore, SG (10G) | 164 Mbits/sec | 111 Mbits/sec | 253 ms
Clouvider | Los Angeles, CA, US (10G) | 176 Mbits/sec | busy | 151 ms
Leaseweb | NYC, NY, US (10G) | 184 Mbits/sec | 139 Mbits/sec | 101 ms
Edgoo | Sao Paulo, BR (1G) | 171 Mbits/sec | 55.4 Mbits/sec | 196 ms
Geekbench 6 Benchmark Test:
---------------------------------
Test | Value
|
Single Core | 1299
Multi Core | 2321
Full Test | https://browser.geekbench.com/v6/cpu/17874778
YABS completed in 12 min 49 sec
Wynik testu PHP Benchmark Script:
-------------------------------------------------------
| PHP BENCHMARK SCRIPT v.2.0 by @SergiX44 |
-------------------------------------------------------
PHP............................................. 8.3.30
Platform......................................... Linux
Arch............................................ x86_64
Server................................. u259085.webh.me
Max memory usage.................................... -1
OPCache status................................ disabled
OPCache JIT....................... disabled/unavailable
PCRE JIT....................................... enabled
XDebug extension.............................. disabled
Difficulty multiplier............................... 1x
Started at..................... 04/05/2026 17:41:55.814
-------------------------------------------------------
math.......................................... 0.2162 s
loops......................................... 0.1251 s
ifelse........................................ 0.2508 s
switch........................................ 0.1697 s
string........................................ 0.3898 s
array......................................... 0.5664 s
regex......................................... 0.3284 s
is_{type}..................................... 0.3084 s
hash.......................................... 0.1430 s
json.......................................... 0.2369 s
-------------------------------------------------------
Total time.................................... 2.7346 s
Peak memory usage................................ 2 MiB
Wynik testu cyberfolks-dbSpeedTest (z moją małą poprawką):
+---------------------------------------------------------------+----------+--------+
| Typ operacji | Szybkość | Ocena |
+---------------------------------------------------------------+----------+--------+
| Wstawianie rekordów | 291/s | Dobra |
| Przykład: dodanie nowego artykułu, złożenie zamówienia, | | |
| rejestracja nowego klienta | | |
+---------------------------------------------------------------+----------+--------+
| Wyszukiwanie rekordu po kluczu głównym | 2424/s | Dobra |
| Przykład: znalezienie produktu po ID w e-commerce, | | |
| artykułu po ID w CMS | | |
+---------------------------------------------------------------+----------+--------+
| Wyszukiwanie nieindeksowanych rekordów całkowitych (dokładne) | 545/s | Dobra |
| Przykład: znalezienie wszystkich koszul w rozmiarze 40 | | |
+---------------------------------------------------------------+----------+--------+
| Wyszukiwanie tekstowe (ciąg 3 znaków w rekordach) | 91/s | Dobra |
| Przykład: znalezienie klientów, których imię zawiera 'art' | | |
+---------------------------------------------------------------+----------+--------+
| Wyszukiwanie nieindeksowanych rekordów tekstowych (dokładne) | 454/s | Dobra |
| Przykład: wyszukiwanie wszystkich przedmiotów | | |
| w danym kolorze | | |
+---------------------------------------------------------------+----------+--------+
| Selekcja rekordów z warunkiem: wartość_pola * 1.23 > losowa | 235/s | Słaba |
| Przykład: wyszukiwanie produktów większych niż... | | |
+---------------------------------------------------------------+----------+--------+
| Aktualizacja rekordów | 91/s | Dobra |
| Przykład: zmiana koloru wszystkich przedmiotów z zielonego | | |
| na niebieski | | |
+---------------------------------------------------------------+----------+--------+
Loguję się na VPS na konto root za pomocą wygenerowanego hasła, które od razu zmieniam na swoje własne. Następnie tworzę konto dla siebie i dodaję je do grupy sudo.
adduser nazwa_użytkownika
usermod -aG sudo nazwa_użytkownika
Przelogowuję się na swoje konto, a następnie:
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y
sudo dpkg-reconfigure tzdata
sudo apt-get install apt-transport-https unzip -y
sudo wget https://7-zip.org/a/7z2501-linux-x64.tar.xz && sudo tar -xf 7z2501-linux-x64.tar.xz -C /usr/bin/ 7zz && sudo rm 7z2501-linux-x64.tar.xz
ssh-keygen -t ed25519 -o -a 100
touch .ssh/authorized_keys
cat .ssh/id_ed25519.pub >> .ssh/authorized_keys
rm .ssh/id_ed25519*
chmod 600 .ssh/authorized_keys
sudo nano /etc/ssh/sshd_config
[...]
#Include /etc/ssh/sshd_config.d/*.conf
[...]
Port numer_portu
[...]
PermitRootLogin no
[...]
PubkeyAuthentication yes
[...]
AuthorizedKeysFile .ssh/authorized_keys
[...]
PasswordAuthentication no
PermitEmptyPasswords no
[...]
ClientAliveInterval 300
ClientAliveCountMax 3
[...]
sudo nano /etc/systemd/system/sockets.target.wants/ssh.socket
[...]
[Socket]
ListenStream=0.0.0.0:22122
[...]
sudo ufw enable
sudo ufw allow from any to any port numer_portu proto tcp
sudo systemctl daemon-reload
sudo systemctl restart ssh
LC_ALL=C.UTF-8 sudo add-apt-repository ppa:ondrej/php
sudo apt-get install php8.3 -y
sudo apt-get install php8.3-{mysql,fpm,curl,mbstring,ldap,xml,zip,gd,gmp,tidy,imagick,bcmath,bz2,intl,soap,xmlrpc} -y
sudo mkdir /var/www/grzegorzwitait
sudo tar -xvf grzegorzwitait_2025-10-07.tar
sudo mv -f /home/nazwa_użytkownika/PLIKI/var/www/grzegorzwitait/{.,}* /var/www/grzegorzwitait/
sudo chown -R www-data:www-data /var/www/grzegorzwitait/
sudo find /var/www/grzegorzwitait/ -type d -exec chmod 755 {} \;
sudo find /var/www/grzegorzwitait/ -type f -exec chmod 644 {} \;
sudo find /var/www/grzegorzwitait/files/page_files/* -type d -exec chmod 775 {} \;
sudo find /var/www/grzegorzwitait/files/page_files/* -type f -exec chmod 664 {} \;
sudo find /var/www/grzegorzwitait/images/page_images/foto_* -type d -exec chmod 775 {} \;
sudo find /var/www/grzegorzwitait/images/page_images/foto_* -type f -exec chmod 664 {} \;
sudo nano /var/www/grzegorzwitait/database.php
sudo chmod 740 /var/www/grzegorzwitait/database.php
sudo chown root:www-data /var/www/grzegorzwitait/
sudo mv -f /home/$USER/PLIKI/grzegorzwitait.conf /etc/apache2/sites-available/ && sudo chown root:root /etc/apache2/sites-available/grzegorzwitait.conf
sudo nano /etc/apache2/sites-available/grzegorzwitait.conf
<VirtualHost *:80>
ServerName grzegorzwita.it
ServerAdmin admin@grzegorzwita.it
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,QSA,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
SSLStaplingCache "shmcb:/var/log/ssl_stapling(150000)"
<VirtualHost *:443>
Protocols h2 http/1.1
ServerName grzegorzwita.it
ServerAdmin admin@grzegorzwita.it
DocumentRoot /var/www/grzegorzwitait/
DirectoryIndex index.php
Redirect permanent /statystyka https://grzegorzwita.it/statystyka.html
<Directory /var/www/grzegorzwitait/>
Options -Indexes -Includes +FollowSymLinks +MultiViews
AllowOverride all
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Content-Security-Policy "form-action 'self'; base-uri 'self'; frame-ancestors 'self'; object-src 'none'; worker-src 'self'; child-src 'self'; frame-src 'self'; upgrade-insecure-requests"
SSLEngine on
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
SSLOpenSSLConfCmd Options -SessionTicket,ServerPreference
SSLHonorCipherOrder off
SSLSessionTickets off
SSLCompression off
SSLUseStapling on
SSLCertificateFile /etc/letsencrypt/live/grzegorzwita.it/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/grzegorzwita.it/privkey.pem
</VirtualHost>
</IfModule>
sudo chown root:root /etc/apache2/sites-available/grzegorzwitait.conf
sudo a2ensite grzegorzwitait.conf
sudo a2dissite 000-default.conf
sudo a2dismod php8.3 mpm_prefork
sudo a2enmod rewrite headers http2 mpm_event proxy_fcgi proxy_http ssl
sudo a2enconf php8.3-fpm
sudo sed -i "s/;date.timezone =/date.timezone = Europe\/Warsaw/" /etc/php/8.3/fpm/php.ini
sudo sed -i "s/memory_limit = 128M/memory_limit = 1024M/" /etc/php/8.3/fpm/php.ini
sudo sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 6M/" /etc/php/8.3/fpm/php.ini
sudo sed -i "s/max_execution_time = 30/max_execution_time = 60/" /etc/php/8.3/fpm/php.ini
sudo sed -i "s/post_max_size = 8M/post_max_size = 16M/" /etc/php/8.3/fpm/php.ini
sudo sed -i "s/max_file_uploads = 20/max_file_uploads = 40/" /etc/php/8.3/fpm/php.ini
sudo systemctl restart php8.3-fpm.service
sudo ufw allow from any to any port 80,443 proto tcp
sudo apt-get install mysql-server -y
sudo mysql_secure_installation
sudo mysql -u root -p
CREATE DATABASE grzegorzwitait_dba;
CREATE USER 'grzegorzwitait_dba'@'localhost' IDENTIFIED WITH caching_sha2_password BY '8arDzo_Sk0mp1ikow4N3_Ha$LO!';
GRANT ALL ON grzegorzwitait_dba.* TO 'grzegorzwitait_dba'@'localhost';
FLUSH PRIVILEGES;
EXIT
sudo mysql -u root -p grzegorzwitait_dba < /home/nazwa_użytkownika/PLIKI/grzegorzwitait_*.sql
sudo apt-get install certbot python3-certbot-apache -y
sudo certbot certonly --manual --preferred-challenges=dns --email admin@grzegorzwita.it --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d "*.grzegorzwita.it, grzegorzwita.it"
sudo certbot certificates
sudo nano /root/letsencrypt_renew.sh
#!/bin/bash
sudo certbot certonly --manual --preferred-challenges=dns --email admin@grzegorzwita.it --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d "*.grzegorzwita.it, grzegorzwita.it"
sudo systemctl reload apache2
sudo chmod 740 /root/letsencrypt_renew.sh
sudo apache2ctl configtest
sudo systemctl restart apache2
sudo mysql -u root -p
CREATE DATABASE grzegorzwitait_pma;
CREATE USER 'grzegorzwitait_pma'@'localhost' IDENTIFIED WITH caching_sha2_password BY '8arDzo_Sk0mp1ikow4N3_Ha$LO!';
GRANT ALL ON grzegorzwitait_pma.* TO 'grzegorzwitait_pma'@'localhost';
GRANT ALL ON grzegorzwitait_dba.* TO 'grzegorzwitait_pma'@'localhost';
FLUSH PRIVILEGES;
UNINSTALL COMPONENT "file://component_validate_password";
EXIT
sudo apt-get install phpmyadmin -y
sudo mysql -u root -p
INSTALL COMPONENT "file://component_validate_password";
EXIT
sudo nano /etc/phpmyadmin/config.inc.php
[...]
/* User for advanced features */
$cfg['Servers'][$i]['controluser'] = 'grzegorzwitait_pma';
$cfg['Servers'][$i]['controlpass'] = '8arDzo_Sk0mp1ikow4N3_Ha$LO!';
[...]
sudo nano /etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
[. . .]
AllowOverride All
[. . .]
</Directory>
sudo update-alternatives --config php
sudo phpenmod mbstring
sudo systemctl restart apache2
grzegorzwita.it/phpmyadmin i loguję się danymi wprowadzonymi podczas konfiguracji. Po poprawnym zalogowaniu się zaznaczam odpowiednią bazę danych, a następnie w menu u samej góry klikam w Operacje / odnośnik tutaj / odnośnik Create i dosłownie po niespełna sekundzie baza danych zostanie przygotowana.sudo apt-get install vsftpd -y
sudo ufw delete allow from any to any port 20:21,40000:50000 proto tcp comment 'FTP'
sudo nano /etc/vsftpd.conf
[...]
listen=YES
[...]
listen_ipv6=NO
[...]
write_enable=YES
[...]
local_umask=022
[...]
chroot_local_user=YES
[...]
allow_writeable_chroot=YES
force_dot_files=YES
pasv_min_port=40000
pasv_max_port=50000
sudo systemctl restart vsftpd.service
sudo systemctl status vsftpd.service
sudo adduser --home /var/www/grzegorzwitait/ --ingroup www-data nazwa_uzytkownika
sudo find /var/www/grzegorzwitait/ -type d -exec chmod 775 {} \;
sudo find /var/www/grzegorzwitait/ -type f -exec chmod 664 {} \;
sudo apt-get install composer -y
sudo mkdir /var/www/BookStack
sudo tar -xvf BookStack_2025-10-07.tar
sudo mv -f /home/$USER/PLIKI/BookStack/{.,}* /var/www/BookStack/
sudo chown -R www-data:www-data /var/www/BookStack/
sudo find /var/www/BookStack/ -type d -exec chmod 755 {} \;
sudo find /var/www/BookStack/ -type f -exec chmod 644 {} \;
sudo nano /var/www/BookStack/.env
sudo chmod 740 /var/www/BookStack/.env
sudo chmod 775 /var/www/BookStack/bootstrap/cache/ /var/www/BookStack/public/uploads/ /var/www/BookStack/storage/
sudo chown root:root /var/www/BookStack/
sudo chown -R root:root /var/www/BookStack/.git
sudo chown -R root:root /var/www/BookStack/.github
sudo mysql -u root -p
CREATE DATABASE bookstack;
CREATE USER 'bookstack_dba'@'localhost' IDENTIFIED WITH caching_sha2_password BY '8arDzo_Sk0mp1ikow4N3_Ha$LO!';
GRANT ALL ON bookstack.* TO 'bookstack_dba'@'localhost';
FLUSH PRIVILEGES;
EXIT
sudo mysql -u root -p bookstack < /home/$USER/PLIKI/grzegorzwitait_*.sql
cd /var/www/BookStack/
sudo git reset --hard HEAD
sudo git pull origin release
sudo composer install --no-dev --no-plugins
sudo php artisan migrate && sudo php artisan cache:clear && sudo php artisan config:clear && sudo php artisan view:clear
sudo mv -f /home/$USER/PLIKI/bookstack.conf /etc/apache2/sites-available/ && sudo chown root:root /etc/apache2/sites-available/bookstack.conf
sudo nano /etc/apache2/sites-available/bookstack.conf
<VirtualHost *:80>
ServerName zycie.grzegorzwita.it
ServerAdmin admin@grzegorzwita.it
Redirect / https://zycie.grzegorzwita.it
</VirtualHost>
<VirtualHost *:443>
ServerName zycie.grzegorzwita.it
ServerAdmin admin@grzegorzwita.it
DocumentRoot /var/www/BookStack/public/
<Directory /var/www/BookStack/public/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error_bookstack.log
CustomLog ${APACHE_LOG_DIR}/access_bookstack.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/grzegorzwita.it/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/grzegorzwita.it/privkey.pem
</VirtualHost>
sudo a2ensite bookstack.conf
cd /var/www/BookStack/ && sudo git pull origin release && sudo composer install --no-dev && sudo php artisan migrate && sudo php artisan cache:clear && sudo php artisan config:clear && sudo php artisan view:clear
sudo curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install nodejs -y
sudo mkdir /var/www/Wikijs
sudo tar -xvf Wikijs_2025-10-07
sudo mv -f /home/nazwa_użytkownika/PLIKI/var/www/Wikijs/{.,}* /var/www/Wikijs/
sudo mysql -u root -p
CREATE DATABASE wikijs;
CREATE USER 'wikijs_dba'@'localhost' IDENTIFIED WITH caching_sha2_password BY '8arDzo_Sk0mp1ikow4N3_Ha$LO!';
GRANT ALL ON wikijs.* TO 'wikijs_dba'@'localhost';
FLUSH PRIVILEGES;
EXIT
sudo nano config.yml
[...]
db:
type: mysql
#PostreSQL / MySQL / MariaDB / MS SQL Server only:
host: localhost
port: 3306
user: wikijs_dba
pass: 8arDzo_Sk0mp1ikow4N3_Ha$LO!
db: wikijs
ssl: false
[...]
sudo chown -R www-data:www-data /var/www/Wikijs/
sudo find /var/www/Wikijs/ -type d -exec chmod 755 {} \;
sudo find /var/www/Wikijs/ -type f -exec chmod 644 {} \;
sudo chmod 740 /var/www/Wikijs/config.yml
sudo chown root:root /var/www/Wikijs/
sudo nano /etc/systemd/system/wikijs.service
[Unit]
Description=Wiki.js
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always
User=root
Environment=NODE_ENV=production
WorkingDirectory=/var/www/Wikijs
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable wikijs
sudo systemctl start wikijs
sudo systemctl status wikijs
sudo nano /etc/apache2/sites-available/wikijs.conf
<VirtualHost *:80>
ServerName wiki.grzegorzwita.it
ServerAdmin admin@grzegorzwita.it
Redirect / https://wiki.grzegorzwita.it
</VirtualHost>
<VirtualHost *:443>
ServerName wiki.grzegorzwita.it
ServerAdmin admin@grzegorzwita.it
DocumentRoot /var/www/Wikijs/
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
ErrorLog ${APACHE_LOG_DIR}/error_wikijs.log
CustomLog ${APACHE_LOG_DIR}/access_wikijs.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/grzegorzwita.it/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/grzegorzwita.it/privkey.pem
</VirtualHost>
sudo a2ensite wikijs.conf
sudo systemctl restart apache2
cd /var/www/Wikijs/ && sudo systemctl stop wikijs && sudo mv config.yml ~/config.yml && sudo rm -rf * && sudo wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz && sudo tar xzf wiki-js.tar.gz && sudo rm wiki-js.tar.gz && sudo mv ~/config.yml ./config.yml && sudo chown -R www-data:www-data /var/www/Wikijs/ && sudo find /var/www/Wikijs/ -type d -exec chmod 755 {} \; && sudo find /var/www/Wikijs/ -type f -exec chmod 644 {} \; && sudo chown root:root /var/www/Wikijs/ && sudo chmod 740 /var/www/Wikijs/config.yml && sudo systemctl start wikijs
Przechodzę do przeglądarki na skonfigurowany adres i dokańczam konfigurację.
sudo mkdir /var/www/InvoiceNinja
sudo wget https://github.com/invoiceninja/invoiceninja/releases/download/v5.10.8/invoiceninja.tar
sudo tar xzf invoiceninja.tar -C /var/www/InvoiceNinja/
sudo rm invoiceninja.tar
sudo mysql -u root -p
CREATE DATABASE invoiceninja;
CREATE USER 'invoiceninja_dba'@'localhost' IDENTIFIED WITH caching_sha2_password BY '8arDzo_Sk0mp1ikow4N3_Ha$LO!';
GRANT ALL ON invoiceninja.* TO 'invoiceninja_dba'@'localhost';
FLUSH PRIVILEGES;
EXIT
sudo cp /var/www/InvoiceNinja/.env.example /var/www/InvoiceNinja/.env
sudo nano /var/www/InvoiceNinja/.env
[...]
DB_HOST=localhost
DB_DATABASE=invoiceninja
DB_USERNAME=invoiceninja_dba
DB_PASSWORD=8arDzo_Sk0mp1ikow4N3_Ha$LO!
DB_PORT=3306
[...]
PDF_GENERATOR=snappdf
[...]
PHANTOMJS_SECRET="8arDzo_Sk0mp1ikow4N3_Ha$LO!"
UPDATE_SECRET="8arDzo_Sk0mp1ikow4N3_Ha$LO!"
WEBCRON_SECRET="8arDzo_Sk0mp1ikow4N3_Ha$LO!"
[...]
EXPANDED_LOGGING=true
sudo chown -R www-data:www-data /var/www/InvoiceNinja/
sudo find /var/www/InvoiceNinja/ -type d -exec chmod 755 {} \;
sudo find /var/www/InvoiceNinja/ -type f -exec chmod 644 {} \;
sudo chmod 740 /var/www/InvoiceNinja/.env
sudo chown root:root /var/www/InvoiceNinja/
sudo nano /etc/apache2/sites-available/invoiceninja.conf
sudo chmod 744 /var/www/InvoiceNinja/vendor/beganovich/snappdf/snappdf && sudo -u www-data /var/www/InvoiceNinja/vendor/beganovich/snappdf/snappdf --force download && sudo chmod 644 /var/www/InvoiceNinja/vendor/beganovich/snappdf/snappdf
sudo apt-get install fonts-liberation libasound2 libatk1.0-0 libatk-bridge2.0-0 libgbm1 libpango1.0-0 libxcomposite1 libxdamage1 libxfixes3 libxkbcommon0 libxrandr2 -y
sudo sed -i "s/127.0.0.1 localhost/127.0.0.1 localhost system.grzegorzwita.it/" /etc/hosts
sudo -u www-data crontab -e
[...]
#InvoiceNinja
#0 8 * * * php /var/www/InvoiceNinja/artisan ninja:send-recurring >> /dev/null
#0 8 * * * php /var/www/InvoiceNinja/artisan ninja:send-reminders >> /dev/null
* * * * * php /var/www/InvoiceNinja/artisan schedule:run >> /dev/null 2>&1
* * * * * php /var/www/InvoiceNinja/artisan optimize >> /dev/null 2>&1
cd /var/www/InvoiceNinja/
sudo -u www-data php artisan key:generate
sudo -u www-data php artisan migrate
sudo -u www-data php artisan optimize
sudo mv -f /home/$USER/PLIKI/invoiceninja.conf /etc/apache2/sites-available/ && sudo chown root:root /etc/apache2/sites-available/invoiceninja.conf
sudo nano /etc/apache2/sites-available/invoiceninja.conf
<VirtualHost *:80>
ServerName system.grzegorzwita.it
ServerAdmin admin@grzegorzwita.it
Redirect / https://system.grzegorzwita.it
</VirtualHost>
<VirtualHost *:443>
ServerName system.grzegorzwita.it
ServerAdmin admin@grzegorzwita.it
DocumentRoot /var/www/InvoiceNinja/public/
<Directory /var/www/InvoiceNinja/public/>
DirectoryIndex index.php
Options +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error_invoiceninja.log
CustomLog ${APACHE_LOG_DIR}/access_invoiceninja.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/grzegorzwita.it/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/grzegorzwita.it/privkey.pem
</VirtualHost>
sudo a2ensite invoiceninja.conf
sudo systemctl restart apache2
sudo apt-get install goaccess -y
sudo nano /root/goaccess.sh
#!/bin/bash
goaccess /var/log/apache2/access.log -o /var/www/grzegorzwitait/statystyka.html --log-format=COMBINED --real-time-html --persist --restore --db-path /var/www/grzegorzwitait/tmp/ --real-os --all-static-files --ssl-cert=/etc/letsencrypt/live/grzegorzwita.it/fullchain.pem --ssl-key=/etc/letsencrypt/live/grzegorzwita.it/privkey.pem
sudo chmod 740 /root/goaccess.sh
sudo crontab -e
[...]
@reboot /root/goaccess.sh >> dev
sudo ufw allow from any to any port 7890 proto tcp
Zaktualizowałem swój pierwotny skrypt kopia_zapasowa.sh, aby wykonywał kopię głównej strony internetowej wraz z wszystkimi subdomenami oraz ich bazami danych.
Napiszę tylko, że na obecnym VPS czas wykonania kopii zapasowej ponad 172 000 plików rozproszonych w ponad 19 400 folderów oraz 4 baz danych o łącznej wadze przekraczającej 2,82 GB (spakowany plik *.7z ma ok. 586 MB) trwa 25 minut.
mkdir /home/$USER/backup
sudo nano /root/kopia_zapasowa.sh
#!/bin/bash
DATE=$(date +"%Y-%m-%d")
tar -caf - /var/www/grzegorzwitait -P | 7zz a -si /var/www/grzegorzwitait.tar.7z
tar -caf - /var/www/BookStack -P | 7zz a -si /var/www/BookStack.tar.7z
tar -caf - /var/www/Wikijs -P | 7zz a -si /var/www/Wikijs.tar.7z
tar -caf - /var/www/InvoiceNinja -P | 7zz a -si /var/www/InvoiceNinja.tar.7z
7zz e /var/www/grzegorzwitait.tar.7z -o/var/www/
7zz e /var/www/BookStack.tar.7z -o/var/www/
7zz e /var/www/Wikijs.tar.7z -o/var/www/
7zz e /var/www/InvoiceNinja.tar.7z -o/var/www/
rm -f -R /var/www/*.tar.7z
mv /var/www/grzegorzwitait.tar /var/www/grzegorzwitait_$DATE.tar
mv /var/www/BookStack.tar /var/www/BookStack_$DATE.tar
mv /var/www/Wikijs.tar /var/www/Wikijs_$DATE.tar
mv /var/www/InvoiceNinja.tar /var/www/InvoiceNinja_$DATE.tar
mysqldump --host=localhost --user=root --password='8arDzo_Sk0mp1ikow4N3_Ha$LO!' grzegorzwitait_dba > /var/www/mysql_grzegorzwitait_$DATE.sql
mysqldump --host=localhost --user=root --password='8arDzo_Sk0mp1ikow4N3_Ha$LO!' bookstack > /var/www/mysql_bookstack_$DATE.sql
mysqldump --host=localhost --user=root --password='8arDzo_Sk0mp1ikow4N3_Ha$LO!' wikijs > /var/www/mysql_wikijs_$DATE.sql
mysqldump --host=localhost --user=root --password='8arDzo_Sk0mp1ikow4N3_Ha$LO!' invoiceninja > /var/www/mysql_invoiceninja_$DATE.sql
7zz a -t7z -mhe=on -pmN1gdy_nie-zgadni3szhaha -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on /var/www/$USER_$DATE.7z /var/www/*.tar /var/www/*.sql
mv /var/www/$USER_$DATE.7z /home/$USER/backup/
find /home/$USER/backup/ -type f -mtime +7 -delete
find /var/www/ -maxdepth 1 -type f -delete
sudo crontab -e
0 20 * * * /root/kopia_zapasowa.sh >> /home/$USER/backup/kopia_zapasowa_`date +\%Y-\%m-\%d`.log 2>&1
sudo chmod 740 /root/kopia_zapasowa.sh