Pydio Cells is a self-hosted Document Sharing and Collaboration platform. It also gives you full control of your document-sharing environment. The Pydio Cells is a fast performance, can handle huge file transfer sizes, and provides advanced workflow automation.

In the following guide, I will walk you through the installation of Pydio Cells as a file-sharing and collaboration tool on a Debian 12 server. You will install Pydio Cells with the MariaDB database server and Apache2 reverse proxy. You’ll also secure the installation with SSL/TLS certificates that you will generate via Certbot and Letsencrypt.

Prerequisites

Before moving on, gathers the following:

  • A Debian 12 server.
  • A non-root user with administrator privileges.
  • A domain name pointed to the server IP address.

Installing Dependencies

The Pydio Cells is an open-source file sharing, management, and collaboration. Before installing it, you must install dependencies such as MariaDB for the database server and Apache2 for the reverse proxy. You will also install Certbot for generating SSL/TLS certificates to secure your installation.

First, refresh your Debian package index using the following apt update command.

sudo apt update

Now install dependencies via the apt install command below. You will install the MariaDB server that will be used as the database for Pydio Cells, the Apache2 web server as a reverse proxy, and Certbot for generating SSL/TLS certificates from Letsencrypt.

sudo apt install mariadb-server apache2 certbot wget

Type y to confirm the installation and press ENTER.

<img alt="install dependnecies" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/1-install-deps.png650c586fa9105.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="455" loading="lazy" src="data:image/svg xml,” width=”750″>

Once dependencies are installed, verify the apache2 service using the following systemctl command. Ensure that the apache2 service is enabled and running.

sudo systemctl is-enabled apache2

sudo systemctl status apache2

The following output indicates that apache2 is enabled and running.

<img alt="checking apache2" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/2-checking-apache2.png650c586fdb14d.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="326" loading="lazy" src="data:image/svg xml,” width=”750″>

Lastly, verify the mariadb service via the following systemctl command.

sudo systemctl is-enabled mariadb

sudo systemctl status mariadb

The output should be similar, which indicates the mariadb service is running and enabled.

<img alt="checking mariadb" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/3-check-mariadb.png650c5870346ff.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="329" loading="lazy" src="data:image/svg xml,” width=”750″>

Configuring MariaDB Server

In the following step, you will be securing your MariaDB server installation via the mariadb-secure-installation utility. Then, you will create a new database and user for Pydio Cells.

Execute the mariadb-secure-installation command below to start configuring the MariaDB server.

sudo mariadb-secure-installation

The setup process will require you to input Y to confirm the new settings or n for no. Below are some of the MariaDB server configurations you will be asked for:

  • Switch local authentication to unix_socket? Input n.
  • Set up the new MariaDB root password? Input y to confirm, then type the new password for your MariaDB server deployment.
  • Remove anonymous user? Input y to confirm.
  • Remove the default database test from the deployment?. Input y to confirm.
  • Disallow MariaDB root login from remote connections? Input y to confirm.
  • Reload table privileges and apply the changes? Input y and press ENTER.

After the MariaDB is secured, you will create a new database and user for the Pydio Cells installation. To do that, you must log in to the MariaDB server.

Execute the following mariadb command to log in to the MariaDB server. Input your MariaDB root password when prompted.

sudo mariadb -u root -p

Once logged in, run the following queries to create a new database cells, a user pydio with the password p4ssw0rd. Then, allow user pydio to access the database cells.

CREATE DATABASE cells;

CREATE USER 'pydio'@'localhost' IDENTIFIED BY 'p4ssw0rd';

GRANT ALL PRIVILEGES ON cells.* to 'pydio'@'localhost';

FLUSH PRIVILEGES;

<img alt="create database and user" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/4-create-database.png650c587075dbb.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="242" loading="lazy" src="data:image/svg xml,” width=”720″>

Next, run the following query to ensure the user pydio can access the database cells.

SHOW GRANTS FOR 'pydio'@'localhost';

The following output shows you the user pydio has privileges to access and manage the database cells.

<img alt="check grants" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/5-check-grants.png650c5870b01d2.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="193" loading="lazy" src="data:image/svg xml,” width=”750″>

Type quit to exit from the MariaDB server.

Installing Pydio Cells

After configuring the MariaDB server, you will install the Pydio Cells via static binary file. And before that, you must prepare your system by creating a new dedicated user, setting up a data directory, and creating some system environment variables that are needed by Pydio Cells.

Setting Up User and Environment Variables

First, create a new user pydio using the following command.

sudo useradd -m -s /bin/bash pydio

Now create a new data directory /var/cells for your Pydio Cells installation and change the ownership to the user pydio.

sudo mkdir -p /opt/pydio/bin /var/cells

sudo chown -R pydio: /opt/pydio /var/cells

Next, run the following command to create new environment variables configuration /etc/profile.d/cells-env.sh and change the permission to 0755 to make it executable. The environment variable CELLS_WORKING_DIR for the data directory, CELLS_BIND to determine which IP address and port Pydio Cells will be running, and the CELLS_EXTERNAL is the domain name of your Pydio Cells installation.

sudo tee -a /etc/profile.d/cells-env.sh << EOF

export CELLS_WORKING_DIR=/var/cells

export CELLS_BIND=https://127.0.0.1:8080

export CELLS_EXTERNAL=https://cells.hwdomain.io

EOF

sudo chmod 0755 /etc/profile.d/cells-env.sh

<img alt="setup system" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/6-setup-users-directories-environment-variables.png650c5870f2afc.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="342" loading="lazy" src="data:image/svg xml,” width=”587″>

Now log in as the user pydio and verify environment variables CELLS_WORKING_DIR, CELLS_BIND, and CELLS_EXTERNAL.

su - pydio
echo $CELLS_WORKING_DIR

echo $CELLS_BIND

echo $CELLS_EXTERNAL

If successful, you should see each environment variable will be matched with the file /etc/profile.d/cells-env.sh.

<img alt="checking env" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/7-check-env.png650c58713cdfd.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="256" loading="lazy" src="data:image/svg xml,” width=”446″>

Downloading and Installing Pydio Cells

Execute the following command to download the binary static file of Pydio Cells to /opt/pydio/bin/cells.

export distribId=cells

wget -O /opt/pydio/bin/cells https://download.pydio.com/latest/${distribId}/release/{latest}/linux-amd64/${distribId}

Once the Pydio Cells are downloaded, make it executable using the following command. Then, type exit to log out from user pydio.

chmod a x /opt/pydio/bin/cells

exit

Now run the following command to allow cells to bind in the privileged ports. Then, create a symlink for the /opt/pydio/bin/cells command to /usr/local/bin/cells.

sudo setcap 'cap_net_bind_service= ep' /opt/pydio/bin/cells

sudo ln -s /opt/pydio/bin/cells /usr/local/bin/cells

Now log in again as a pydio user and check the binary file of cells. Then, verify your current cells version.

su - pydio
which cells

cells version

You should see the cells binary file is located at /usr/local/bin/cells and the cells version that was installed is 4.2.5.

<img alt="checking pydio version" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/8-checking-cells-pydio.png650c587177b4c.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="253" loading="lazy" src="data:image/svg xml,” width=”545″>

Configuring Pydio Cells

With the Pydio Cells binary file installed, you will start configuring it, which can be done via CLI (command-line interface) or web browser. As for this case, you will configure Pydio Cells from the command-line terminal, you will set up the database, create the admin user, then will create a new systemd service file to run Pydia Cells in the background.

Run the cells command below to start configuring the Pydio Cells installation. The parameter –cli allow you to configure Pydio Cells from your terminal with an interactive environment.

cells configure --cli

Below some configurations that you will be asked for:

  • For the database configuration, select via TCP and input the database host as localhost, port with default 3306, database name cells, the user pydio, and the password.
  • Input n when prompted about the MongoDB configuration for high-availability Cells installation.
  • Input the new admin user and password for your Pydio Cells installation.
  • For the storage configuration, select the option /var/cells/data.

When the configuration process is finished, you should get an output Installation Finished like the following:

<img alt="configuring cells" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/9-cells-configuration-cli.png650c5871eea05.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="681" loading="lazy" src="data:image/svg xml,” width=”750″>

Now that you’ve configured Pydio Cells, the next step you will set up cells to run in the background as a systemd service. This makes you easier to manage cells via the systemctl command utility.

Use the following nano editor command to create a new systemd service file /etc/systemd/system/cells.service.

sudo nano /etc/systemd/system/cells.service

Insert the following configuration and be sure to change some environment variables CELLS_WORKING_DIR, CELLS_BIND, and CELLS_EXTERNAL within the below configuration.

[Unit]

Description=Pydio Cells

Documentation=https://pydio.com

Wants=network-online.target

After=network-online.target

AssertFileIsExecutable=/opt/pydio/bin/cells[Service]

User=pydio

Group=pydio

PermissionsStartOnly=true

AmbientCapabilities=CAP_NET_BIND_SERVICE

ExecStart=/opt/pydio/bin/cells start

Restart=on-failure

StandardOutput=journal

StandardError=inherit

LimitNOFILE=65536

TimeoutStopSec=5

KillSignal=INT

SendSIGKILL=yes

SuccessExitStatus=0

WorkingDirectory=/home/pydio

# Add environment variables

Environment=CELLS_WORKING_DIR=/var/cells

Environment=CELLS_BIND=https://127.0.0.1:8080

Environment=CELLS_EXTERNAL=https://cells.hwdomain.io

[Install]

WantedBy=multi-user.target

When finished, save the file and exit the editor.

Now run the following systemctl command to reload the systemd manager and apply the new systemd service.

sudo systemctl daemon-reload

Start and enable the cells service using the systemctl command below. This command will add the cells service to start automatically at system boot.

sudo systemctl start cells

sudo systemctl enable cells

<img alt="cells systemd" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/10-cells-systemd.png650c587232db2.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="184" loading="lazy" src="data:image/svg xml,” width=”750″>

Verify the cells service status using the command below. The Pydio Cells should be running on 127.0.0.1 with port 8080, as defined within the CELLS_BIND environment variable.

sudo systemctl status cells

If running, you should get an output such as active (running).

<img alt="cells is running" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/11-cells-running.png650c5872abd21.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="253" loading="lazy" src="data:image/svg xml,” width=”750″>

Configuring Apache2 as a Reverse Proxy

At this point, the Pydio Cells are up and running in the background on localhost with default port xxx. And this step, you will be configuring Apache2 as a reverse proxy for your Pydio Cells application. Also, you will generate new SSL/TLS certificates for your domain name, so be sure that you’ve prepared the domain name and pointed to the server IP address.

First, execute the a2enmod command below to enable some Apache2 extensions that will be used as a reverse proxy.

sudo a2enmod rewrite proxy proxy_http proxy_wstunnel http2 proxy_http2

Then run the following command to create a new directory /var/www/html/cells/public_html and change the ownership to www-data user. This directory will be used for the verification when generating Letsencrypt certificates.

sudo mkdir -p /var/www/html/cells/public_html

sudo chown -R www-data:www-data /var/www/html/cells/public_html

After that, run the certbot command below to generate new SSL/TLS certificates for your Pydio Cells domain name. Be sure to change the email address and the domain name with your information.

sudo certbot certonly --agree-tos --email [email protected] --no-eff-email --webroot -w /var/www/html/cells/public_html -d cells.hwdomain.io

When the process is complete, your SSL/TLS certificates will be available at the /etc/letsencrypt/live/domain.com directory.

Next, create a new Apache2 virtual host configuration /etc/apache2/sites-available/cells.conf using the following nano editor command.

sudo nano /etc/apache2/sites-available/cells.conf

Insert the following configuration and be sure to change the domain name and the path of SSL/TLS certificates with your information.



    ServerName cells.hwdomain.io

    RewriteEngine On

    RewriteCond %{HTTPS} off

    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

    RewriteCond %{SERVER_NAME} =cells.hwdomain.io

    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]



    ServerName cells.hwdomain.io

    AllowEncodedSlashes On

    RewriteEngine On

    # be aware of this

    # Allow reverse proxy via self-signed certificates

    SSLProxyEngine On

    SSLProxyVerify none

    SSLProxyCheckPeerCN off

    SSLProxyCheckPeerName off

    SSLProxyCheckPeerExpire off

    ## The order of the directives matters.

    # If Cells is not running with https, consider using ws instead of wss

    ProxyPassMatch "https://www.howtoforge.com/ws/(.*)" wss://localhost:8080/ws/$1 nocanon

    ## This rewrite condition is required if using Cells-Sync

    # RewriteCond %{HTTP:Content-Type} =application/grpc [NC]

    # RewriteRule /(.*) h2://localhost:8080/$1 [P,L]

    ProxyPass "https://www.howtoforge.com/" "https://127.0.0.1:8080/"

    ProxyPassReverse "https://www.howtoforge.com/" "https://127.0.0.1:8080/"

    ErrorLog ${APACHE_LOG_DIR}/error.log

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLCertificateFile /etc/letsencrypt/live/cells.hwdomain.io/fullchain.pem

    SSLCertificateKeyFile /etc/letsencrypt/live/cells.hwdomain.io/privkey.pem

    #Include /etc/letsencrypt/options-ssl-apache.conf

Save the file and exit the editor when finished.

Now run the command below to activate the virtual host file cells.conf and verify Apache syntax for error. If you have proper Apache2 syntax, you should get an output Syntax OK.

sudo a2ensite cells.conf

sudo apachectl configtest

Lastly, run the following systemctl command to restart the apache2 service and apply the changes. With this, your Pydio Cells should be accessible via a secure HTTPS connection of Apache2 reverse proxy.

sudo systemctl restart apache2

Accessing Pydio Cells Installation

Launch your web browser and visit the domain name of the Pydio Cells installation, such as https://cells.hwdomain.io/. If everything goes well, you should be redirected to the Pydio Cells login page.

Input the admin user and password that you’ve created during the configuration process, then click Enter.

<img alt="login to pydio" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/12-login-cells.png650c587327377.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="533" loading="lazy" src="data:image/svg xml,” width=”750″>

If successful, you should see the Pydio Cells user dashboard like this:

<img alt="pydio dashboard" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/13-pydio-cells-dashboard.png650c5873b430e.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="496" loading="lazy" src="data:image/svg xml,” width=”750″>

Click on the Personal Files workspace and you should get the Pydio Cells file manager. Click the New button and upload a new file to ensure that you can upload files to Pydio Cells.

<img alt="test upload" data-ezsrc="https://kirelos.com/wp-content/uploads/2023/09/echo/14-test-upload-files.png650c58741eb9e.jpg" ezimgfmt="rs rscb10 src ng ngcb9" height="259" loading="lazy" src="data:image/svg xml,” width=”750″>

Conclusion

Following this guide, you’ve installed Pydio Cells on the Debian 12 server. You’ve installed Pydio Cells with MariaDB database server and Apache2 reverse proxy, and on top of that, you’ve also secured your Pydio Cells installation with SSL/TLS certificates generated from Letsencrypt. From here, you can now use Pydio Cells for your document and file management, collaboration, and sharing.