enuk

22.04 Data Storage

Setup information for Network Attached Storage on a machine running the following hardware:

SSH - Server


    $ sudo apt install openssh-server
    

Hosts


    $ sudo nano /etc/hosts
    

    127.0.0.1       localhost
    
    192.168.0.1     hitron.home
    192.168.0.2     access.home
    
    192.168.0.5     network.home
    
    192.168.0.29    data.wifi
    192.168.0.30    onyx.wifi
    192.168.0.31    atom.wifi
    
    192.168.0.130   work.home
    192.168.0.131   game.home
    192.168.0.132   media.home
    
    192.168.0.200   webserver.home
    192.168.0.201   phpmyadmin.home
    
    192.168.0.202   nextcloud.home
    
    192.168.0.203   network0.home
    192.168.0.204   network1.home
    192.168.0.205   network2.home
    192.168.0.206   network3.home
    192.168.0.207   network4.home
    192.168.0.208   network5.home
    192.168.0.209   network6.home
    
    192.168.1.210   berladyn.home
    192.168.1.211   assets.berladyn.home
    192.168.1.212   api.berladyn.home
    192.168.1.213   stats.berladyn.home
    192.168.1.214   dev.berladyn.home
    192.168.1.215   his.berladyn.home
    192.168.1.216   dan.berladyn.home
    
    # The following lines are desirable for IPv6 capable hosts
    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    

Netplan - Network Configuration


    $ sudo nano /etc/netplan/01-network-manager-all.yaml
    

      network:
      version: 2
      renderer: NetworkManager
    
      wifis:
        wlp15s0:
          dhcp4: true
          dhcp6: true
          access-points:
            "****-******":
              password: "**********"
    
      ethernets:
        eth0:
          match:
            macaddress: **:**:**:**:**:**
          dhcp4: true
          dhcp6: true
          set-name: eth0
        enp6s0f0:
          dhcp4: false
          dhcp6: false
        enp6s0f1:
          dhcp4: false
          dhcp6: false
        enp7s0f0:
          dhcp4: false
          dhcp6: false
        enp7s0f1:
          dhcp4: false
          dhcp6: false
    
      bridges:
        br0:
          interfaces: [enp6s0f0, enp6s0f1, enp7s0f0, enp7s0f1]
          dhcp4: false
          dhcp6: false
          addresses:
           - 192.168.0.5/24
           - 192.168.0.129/24
           - 192.168.0.200/24
           - 192.168.0.201/24
           - 192.168.0.202/24
           - 192.168.0.203/24
           - 192.168.0.204/24
           - 192.168.0.205/24
           - 192.168.0.206/24
           - 192.168.0.207/24
           - 192.168.0.208/24
           - 192.168.0.209/24
           - 192.168.0.210/24
           - 192.168.0.211/24
           - 192.168.0.212/24
           - 192.168.0.213/24
           - 192.168.0.214/24
           - 192.168.0.215/24
           - 192.168.0.216/24
           - 192.168.0.217/24
           - 192.168.0.218/24
           - 192.168.0.219/24
           - 192.168.0.220/24
          routes:
            - to: default
              via: 192.168.0.1
          mtu: 1500
          nameservers:
            addresses:
            - 192.168.0.1
            - 192.168.0.5
          parameters:
            stp: true
            forward-delay: 4
    

    $ sudo netplan apply
    

Disks

Identify and Format Disks.


    sudo fdisk -l
    
    $ sudo wipefs -a /dev/sdb
    $ sudo wipefs -a /dev/sdc
    

ZFS - File System


    $ sudo apt update
    $ sudo apt install zfsutils-linux
    $ zfs --version
    

Remove 'srv' folder from ssd, replace with mirrored tank.


    $ sudo rm -R /srv
    $ sudo zpool create srv mirror /dev/sdb /dev/sdc
    

Check the pool creation.


    $ zpool status
    $ zpool list
    

Samba - Server


    $ sudo apt install samba
    $ sudo nano /etc/samba/smb.conf
    

    [smb]
        comment = Samba File Server Share
        path = /srv/smb
        browsable = yes
        guest ok = yes
        read only = no
        create mask = 0755
    
    [www]
        comment = HTML File Server Share
        path = /srv/www
        browsable = yes
        guest ok = yes
        read only = no
        create mask = 0755
    

    $ sudo systemctl restart smbd.service nmbd.service
    

Apache - Webserver


    $ sudo apt update
    $ sudo apt install apache2
    

Set the directives.


    $ sudo nano /etc/apache2/apache2.conf
    

    <Directory /srv/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    

    $ sudo systemctl restart apache2
    

Create 'webmaster' usergroup and add user for file access.


    $ sudo addgroup webmaster
    $ sudo usermod -a -G webmaster dan
    # Log out and back in for the Group change to take effect.
    

Create 'webserver' generic webhost.


    $ sudo mkdir /srv/www/webserver
    $ sudo chgrp -R webmaster /srv/www/webserver.home
    $ sudo chown -R dan:webmaster /srv/www/webserver.home
    

Configure 'webserver' virtualhost.


    $ sudo nano /etc/apache2/sites-available/webserver.conf
    

    <VirtualHost 192.168.1.200:80>
        ServerName www.webserver.home
        ServerName webserver.home
        ServerAdmin webmaster@webserver.home
        DocumentRoot /srv/www/webserver.home/
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    

    $ sudo a2ensite webserver.conf
    $ sudo systemctl restart apache2
    

MariaDB


    $ sudo apt update
    $ sudo apt install mariadb-server
    
Configure 'root' account.

    $ sudo mysql_secure_installation
    

PHP - Scripting Language


    $ sudo apt install php8.1
    $ php -v
    $ sudo apt install php8.1-bcmath php8.1-cli php7.4-common php8.1-curl php8.1-dev php8.1-gd php8.1-gmp php8.1-imagick php8.1-imap php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-redis php8.1-soap php8.1-xml php8.1-xmlrpc php8.1-zip
    $ php -m
    
    $ sudo nano /etc/php/8.1/apache2/php.ini
    

    output_buffering = disabled
    realpath_cache_size = 8192k
    memory_limit = 2048M
    upload_max_filesize = 8M
    extension = mysqli
    date.timezone = UTC
    

    $ sudo systemctl restart apache2
    

myPhpAdmin - Database Managment


    $ sudo mysql -uroot
    

    mysql> CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'New-Password-Here';
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
    mysql> FLUSH PRIVILEGES;
    mysql> exit;
    

    $ sudo mkdir /srv/www/phpMyAdmin/tmp
    $ sudo chgrp -R www-data /srv/www/phpmyadmin/tmp/
    $ sudo chmod -R g+w /srv/www/phpmyadmin/tmp
    
    $ sudo cp -r /home/dan/Desktop/phpMyAdmin /srv/www/phpmyadmin
    
    $ sudo nano /srv/www/phpMyAdmin/config.sample.inc.php
    # Add a secret passphrase (blowfish_secret), save as config.inc.php
    
    $ sudo nano /etc/apache2/sites-available/phpmyadmin.conf
    

    <VirtualHost 192.168.1.201:80>
        ServerName www.phpmyadmin.home
        ServerName phpmyadmin.home
        ServerAdmin webmaster@phpmyadmin.home
        DocumentRoot /srv/www/phpmyadmin.home/
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    

    $ sudo a2ensite phpmyadmin.conf
    $ sudo systemctl restart apache2