The Perfect Server – Ubuntu 20.04 (Nginx, MySQL, PHP8.0, Brotli, Postfix, BIND, Dovecot, Pure-FTPD and ISPConfig 3.2)

The Perfect Server – Ubuntu 20.04 (Nginx, MySQL, PHP8.0, Brotli, Postfix, BIND, Dovecot, Pure-FTPD and ISPConfig 3.2)

14 sierpnia 2021 6 przez gielo
  1. Instalacja Jailkit

wydaj w konsoli polecenie

$ apt -y install build-essential autoconf automake1.11 libtool flex bison debhelper binutils python
$ cd /tmp 
$ wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz
$ tar xvfz jailkit-2.19.tar.gz
$ cd jailkit-2.19
$ echo 5 > debian/compat

następnie

$ ./debian/rules binary

oraz

$ cd ..
$ dpkg -i jailkit_2.19-1_*.deb
$ rm -rf jailkit-2.19*
  1. Instalacja Firewalla UFW oraz Fail2Ban
$ apt install ufw

Instalację i konfigurację Fail2Ban przedstawiłem w tym artykule Fail2Ban i WordPress. Oczywiście filtrów Fail2Ban dla wordpressa nie musisz uruchamiać jeśli z niego nie korzystasz.

  1. Instalacja IspConfig 3.2

W konsoli wpisz

$ cd /tmp 
$ wget -O ispconfig.tar.gz https://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
$ tar xfz ispconfig.tar.gz
$ cd ispconfig3*/install/

następnie

$ php -q install.php

i postępuj zgodnie z poniższym schematem


--------------------------------------------------------------------------------
_____ ___________ _____ __ _ ____
|_ _/ ___| ___ \ / __ \ / _(_) /__ \
| | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ /
| | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ |
_| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \
\___/\____/\_| \____/\___/|_| |_|_| |_|\__, | \____/
__/ |
|___/
--------------------------------------------------------------------------------

>> Initial configuration
Operating System: Ubuntu 20.04 LTS (Focal Fossa)
Following will be a few questions for primary configuration so be careful.
Default values are in [brackets] and can be accepted with <ENTER>.
Tap in "quit" (without the quotes) to stop the installer.

Select language (en,de) [en]: <-- ENTER
Installation mode (standard,expert) [standard]: <-- ENTER
Full qualified hostname (FQDN) of the server, eg server1.domain.tld [server1.example.com]: <-- ENTER
MySQL server hostname [localhost]: <-- ENTER
MySQL server port [3306]: <-- ENTER
MySQL root username [root]: <-- ENTER
MySQL root password []: <--enter the MySQL root password here
MySQL database to create [dbispconfig]: <-- ENTER
MySQL charset [utf8]: <-- ENTER
Configuring Postgrey
Configuring Postfix
Generating a 4096 bit RSA private key
.................................................................................................................................................................................................................................................................................................................................................................................................................++
...++
writing new private key to 'smtpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: <-- enter your 2 letter country code, e.g. DE in my case
State or Province Name (full name) [Some-State]: <-- Enter your home state
Locality Name (eg, city) []:  <-- Enter your city, in my case Lueneburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter your company name, in my case ISPConfig UG
Organizational Unit Name (eg, section) []: <-- Enter your Organisational unit name, I use IT here
Common Name (e.g. server FQDN or YOUR name) []: <-- Enter the server hostname, in my case server1.example.com
Email Address []: <-- Enter an email address, e.g. hostmaster@server1.example.com
Configuring Mailman
Configuring Dovecot
Configuring Spamassassin
Configuring Amavisd
Configuring Getmail
Configuring Jailkit
Configuring Pureftpd
Configuring BIND
Configuring nginx
[INFO] service OpenVZ not detected
Configuring Ubuntu Firewall
Configuring Metronome XMPP Server
writing new private key to 'localhost.key'
-----
Country Name (2 letter code) [AU]: <-- Enter your 2 letter country code, e.g. DE in my case
Locality Name (eg, city) [City Name]: <-- Enter your city, in my case Lueneburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter your company name, in my case ISPConfig UG
Organizational Unit Name (eg, section) [Infrastructure]: <-- Enter your Organisational unit name, I use IT here
Common Name (e.g. server FQDN or YOUR name) [server1.example.com]: <-- Enter the server hostname, in my case server1.example.com
Email Address [hostmaster@server1.example.com]: <-- Enter an email address, e.g. hostmaster@server1.example.com
IMPORTANT:
Localhost Key, Csr and a self-signed Cert have been saved to /etc/metronome/certs
In order to work with all clients, the server must have a trusted certificate, so use the Csr
to get a trusted certificate from your CA or replace Key and Cert with already signed files for
your domain. Clients like Pidgin dont allow to use untrusted self-signed certificates.
Configuring Fail2ban
Configuring Apps vhost
Installing ISPConfig
ISPConfig Port [8080]: <-- ENTER
Admin password [admin]: <-- Enter your desired admin password
Do you want a secure (SSL) connection to the ISPConfig web interface (y,n) [y]: <-- ENTER
Generating RSA private key, 4096 bit long modulus
....................................................++
........................++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: <-- enter your 2 letter country code, e.g. DE in my case
State or Province Name (full name) [Some-State]: <-- Enter your home state
Locality Name (eg, city) []:  <-- Enter your city, in my case Lueneburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter your company name, in my case ISPConfig UG
Organizational Unit Name (eg, section) []: <-- Enter your Organisational unit name, I use IT here
Common Name (e.g. server FQDN or YOUR name) []: <-- Enter the server hostname, in my case server1.example.com
Email Address []: <-- Enter an email address, e.g. hostmaster@server1.example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <-- ENTER
An optional company name []: <-- ENTER
writing RSA key

Configuring DBServer
Installing ISPConfig crontab
Installing ISPConfig crontab
no crontab for root
no crontab for getmail
Detect IP addresses
Restarting services ...
Installation completed.
$ systemctl enable nginx
$ systemctl start nginx

Po instalacji panel IspConfig uruchomisz, wpisując w przeglądarce.

https://nazwa-twojego-vps.pl:8080/ 

Jeśli panel się nie otworzy sprawdź, czy na pewno uruchomił się serwer nginx

$ systemctl status nginx

Powinien świecić na zielono active (running) jak poniżej

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-08-14 19:56:33 UTC; 3min 58s ago
       Docs: man:nginx(8)
    Process: 2327 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 2337 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 2338 (nginx)
      Tasks: 3 (limit: 2279)
     Memory: 7.7M
     CGroup: /system.slice/nginx.service
             ├─2338 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─2339 nginx: worker process
             └─2340 nginx: worker process

Aug 14 19:56:33 nginx-server systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 14 19:56:33 nginx-server systemd[1]: Started A high performance web server and a reverse proxy server.

Jeśli jest na szaro, to sprawdź swoją konfigurację nginx

$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Jeśli wyrzuci błędy, popraw je i uruchom ponownie serwer ngix

  1. Instalacja Brotli
$ apt install brotli

następnie do pliku konfiguracyjnego /etc/nginx/nginx.conf w sekcji http { i przed wpisami dla Gzip dopisz

brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types text/xml image/svg+xml application/x-font-ttf image/vnd.microsoft.icon application/x-font-opentype application/json font/eot application/vnd.ms-fontobject application/javascript font/otf application/xml application/xhtml+xml text/javascript  application/x-javascript text/plain application/x-font-truetype application/xml+rss image/x-icon font/opentype text/css image/x-win-bitmap;

zapisz plik i przeładuj nginx

$ systemctl reload nginx

Brotli jest dość nową usługą kompresji stron i stare przeglądarki mogą go nie obsługiwać. Jest jednak bardziej wydajny i szybszy niż Gzip, więc warto mieć go uruchomionego na swoim VPS. O samym brotli pisałem tez trochę w innym artykule Gzip, a może Brotli, warto się z nim zapoznać.

Konfigurację jaką prezentuję sam stosuję na swoich serwerach VPS i działa tam ona bardzo dobrze od dłuższego czasu. Jednak żeby bardziej dostosować serwer do większego ruchu musisz go trochę stuningować. Jak to zrobić opisałem natomiast w tym artykule Nginx Tuning pod serwer vps.

  1. Uruchamiamy nasza stronę w PHP8

Na naszym serwerze zainstalowaliśmy PHP8 i wiele skryptów już go obsługuje. Jak więc skonfigurować nasza stronę, aby mogła z niego korzystać?

Jet to bardzo proste. Przejdź w panelu IspConfig do zakładki System, a następnie z menu po lewej stronie wybierz Additional PHP version. Następnie kliknij w zielony przycisk Add new PHP version.

Wypełnij pola tak jak na przedstawionych poniżej zdjęciach

Nazwa PHP: PHP8.0
Ścieżka do binarki PHP FastCGI: php-cgi8.0
Ścieżka do katalogu php.ini: /etc/php/8.0/cgi/php.ini
Ścieżka do skryptu inicjującego PHP-FPM: php8.0-fpm
Ścieżka do katalogu php.ini: /etc/php/8.0/fpm/php.ini
Ścieżka do katalogu pool PHP-FPM: /etc/php/8.0/fpm/pool.d
PHP-FPM socket directory: /var/run

Wersję php wybierasz potem w zakładce konfiguracji twojej strony panelu IspConfig3, czyli zakładka Sites, w edycji strony opcja PHP Version.

  1. Instalacja phpMyAdmin

Instalację phpMyAdmin przeprowadzamy standardowo, wydając w konsoli polecenie

$ apt install phpmyadmin

Następnie musimy stworzyć dowiązanie symboliczne poprzez wydanie polecenia

$ ln -s /usr/share/phpmyadmin /usr/local/ispconfig/interface/web

Do phpMyAdmin możesz przejść klikając w panelu ispConfig3 zakładkę Strony, następnie z menu po lewej stronie kliknij w Baza danych. W menu przy bazie danych kliknij w ikonę

  1. Kilka słów na zakończenie

Zastanawiasz się pewnie po co korzystać z panelu IspConfig jeśli stronę można skonfigurować ręcznie ? Powodów może być kilka. Konfigurujesz vps w swojej firmie i chciałbyś, aby szef i bardziej ogarnięci pracownicy mogli sami w prosty sposób konfigurować potrzebne usługi, tak jak na zwykłym hostingu (Cpanel, directAdmin), masz kilku znajomych, którym chcesz udostępnić miejsce na serwerze, prowadzisz prezentacje i chciałbyś szybko skonfigurować potrzebne ci usługi, najzwyczajniej jesteś zbyt leniwy i lubisz graficzne konfiguratory 🙂

Miałem także zamieścić w tym poradniku krótką instrukcję korzystania z z IspConfig3 ale artykuł ten zrobił się dość obszerny, więc opiszę tow kolejnym artykule.

Miłego korzystania

Strony: 1 2 3