Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Build your own self-hosted cloud storage with Nextcloud, with enhanced privacy and security for file management

License

Notifications You must be signed in to change notification settings

stowyh/nextcloud-setup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

24 Commits

Repository files navigation

Create Your Own Self-Hosted Cloud Storage

Benefits

  • Enhanced privacy and security
  • Cost-effective
  • Scalable
  • Greater control and customization

Prerequisites

  • A computer running Ubuntu or any Debian-based distribution.
  • Verify if your ISP allows port forwarding [Optional]
  • Own a domain [Optional]

Initial Server Setup

Update Your Linux Distribution

sudo apt update
sudo apt full-upgrade
sudo apt autoremove

Install Necessary Packages

sudo apt install apache2 libapache2-mod-php neovim wget mariadb-server php php-apcu php-bcmath php-bz2 php-cli php-common php-curl php-gd php-gmp php-imagick php-intl php-mbstring php-mysql php-zip php-xml unzip nmap ffmpeg

Update Your Hostname (Optional)

  • Modify the file to assign an appropriate hostname or domain name to your server.
sudo nvim /etc/hostname

hostname.png

sudo nvim /etc/hosts

hosts.png

  • Restart your server to apply the changes.
sudo reboot

Downloading Nextcloud

  • Download the Nextcloud ZIP file.
wget https://download.nextcloud.com/server/releases/latest.zip

MariaDB Setup

  • Check the status of the mariadb service.
systemctl status mariadb
  • Run the secure installation script.
sudo mysql_secure_installation
  • Follow the prompts with the provided inputs:
Password prompt --> Press Enter
Switch to unix_socket_auth [Y/n] --> n
Change the root password [Y/n] --> Y
Enter your secure password:
Remove anonymous users [Y/n] --> Y
Disallow root login remotely [Y/n] --> Y
Remove test database and access to it [Y/n] --> Y
Reload privilege tables now [Y/n] --> Y

Setting Up the Nextcloud Database

  • Access MariaDB.
sudo mariadb
  • Create the database.
CREATE DATABASE nextcloud;
  • Set up permissions.
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'mypassword';
FLUSH PRIVILEGES;
  • Exit by pressing CTRL+D.

Deploy Nextcloud Files

  • Enable the necessary PHP extensions.
sudo phpenmod bcmath bz2 gmp imagick intl
  • Unzip the Nextcloud file.
unzip latest.zip
  • Move the files to the serving location and set the appropriate permissions.
mv nextcloud your.domain.name
sudo chown -R www-data:www-data your.domain.name
sudo mv your.domain.name /var/www
  • Disable the default Apache site.
sudo a2dissite 000-default.conf

Configure Nextcloud Host

  • Create an Apache config file for serving Nextcloud.
sudo nvim /etc/apache2/sites-available/your.domain.name.conf
  • Insert the following content into the file, modifying your.domain.name as needed:
<VirtualHost *:80>
 DocumentRoot "/var/www/your.domain.name"
 ServerName your.domain.name
 <Directory "/var/www/your.domain.name/">
 Options MultiViews FollowSymlinks
 AllowOverride All
 Order allow,deny
 Allow from all
 </Directory>
 TransferLog /var/log/apache2/your.domain.name_access.log
 ErrorLog /var/log/apache2/your.domain.name_error.log
</VirtualHost>
  • Enable the site.
sudo a2ensite your.domain.name.conf

PHP Configuration

  • Edit the PHP configuration file (replace 8.3 with your PHP version if different).
sudo nano /etc/php/8.3/apache2/php.ini
  • Locate and modify the following parameters:
memory_limit = 3G # Increase if you have more RAM
upload_max_filesize = 50G # Adjust based on your needs
max_execution_time = 3600
post_max_size = 50G # Adjust based on your needs
date.timezone = Europe/London # Adjust your timezone
opcache.enable=1
opcache.interned_strings_buffer=128
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Timezones

  • Enable PHP modules for Apache.
sudo a2enmod dir env headers mime rewrite ssl
  • Restart Apache.
sudo systemctl restart apache2

Network Configuration

To access Nextcloud securely, you should configure your network and domain before completing the installation.

Port Forwarding (For Home Servers)

  • Enable port forwarding on your router for ports 80 (HTTP) and 443 (HTTPS) to your server's IP address.
  • Example configuration for a Movistar router:
  1. Find your private IP using:
ifconfig -a

ifconfig.png

  1. Configure port forwarding in your router settings.
  2. Verify ports are open:
sudo nmap -n -PN -sT -sU -p80,443 {IP}

Configure Your Domain (Optional but Recommended)

  • Purchase or obtain a domain from providers like Namecheap, Cloudflare, etc.
  • In your DNS settings, create an A record pointing to your public IP.

namecheap_host.png

TLS Certificate (HTTPS)

  • Secure your installation with a free certificate from Let's Encrypt.
  • Install snapd and certbot:
sudo apt install snapd
sudo snap install core && sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
  • Obtain and install your certificates:
sudo certbot --apache

Set Up Nextcloud Web Server

  • Access your Nextcloud instance via your domain (e.g., https://your.domain.name).
  • Upon first access, you will see a setup page.

admin.png

  • Enter the following information:
Username --> Your desired username
Password --> Set a secure password
Data Folder --> Leave as default
Database user --> nextcloud
Database password --> Your database password
Database name --> nextcloud
  • Install the recommended apps.

Post-Installation Optimization

Background Jobs

  • Set up a cron job for the www-data user to execute background tasks.
sudo crontab -u www-data -e
  • Add the following line to the file:
*/5 * * * * php -f /var/www/your.domain.name/cron.php

Memory Caching

  • Enable APCu for local caching by editing the config file.
sudo nvim /var/www/your.domain.name/config/config.php
  • Add the following line to the configuration array:
'memcache.local' => '\OC\Memcache\APCu',

Trusted Domains (If Needed)

  • If you change your domain or IP later, edit config.php:
sudo nvim /var/www/your.domain.name/config/config.php
  • Add your new domain or IP to the trusted_domains array.

trusted.png

Troubleshooting

  • Search online forums for solutions.

Resources

Please submit a pull request for any errors or suggestions.

About

Build your own self-hosted cloud storage with Nextcloud, with enhanced privacy and security for file management

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /