Summary
NextCloud, a folk of OwnCloud, is one of the files sharing applications.
It's open source and suitable for self-hosted service.
I will show how to install it in OpenBSD, well known for the ongoing efforts to archive proactive security.
The table of contents is:
- Create database
- Prepare the application
- Configure PHP and PHP-FPM
- Build web server
- Install NextCloud
Environment
- OS: OpenBSD 6.6
- Database: MariaDB 10.3
- Application Engine: PHP 7.3 and PHP-FPM
- File Sharing Application: NextCloud 16/17
- Web server: OpenBSD httpd
Tutorial
1. Create database
In my case, the database is MariaDB.
What I did was to run mysql so as to connect the DB server and execute:
CREATE DATABASE <db-name> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; GRANT ALL PRIVILEGES ON <db-name>.* TO <db-user> IDENTIFIED BY '<db-pass>'; FLUSH PRIVILEGES; \q Alternatively, you can use SQLite.
2. Prepare the application
There are two ways:
- One is to build it from source code.
- The other is to use pkg_add and get the official package from OpenBSD Package Management System.
2-1. Case: Build from source code
My option was this way because it is possible to build multiple services in the single computer.
16.0.6 is the version its stable channel recommends.
$ ftp https://download.nextcloud.com/server/releases/nextcloud-16.0.6.tar.bz2 $ tar xvjf nextcloud-16.0.6.tar.bz2 $ mv nextcloud-16.0.6 <some-dir>/nextcloud Be careful not to copy nextcloud/config/config.sample.php
to nextcloud/config/config.php here. config.php will be made by the web installer afterwards.
2-2. Case: OpenBSD Package Management System
Just run:
# pkg_add nextcloud It will be installed in /var/www/nextcloud.
The version may be 17.0.0.
You will have the useful document about the package as /usr/local/share/doc/pkg-readmes/nextcloud.
The good point to use the package is its default configurations by the great mainteners.
The bad point is that it's installed in the OS specific path instead of users/sites specific ones, and so it's difficult to have multiple services.
3. (Optional) Configure PHP and PHP-FPM
Edit /etc/php-7.3.ini:
- opcache.memory_consumption=128 + opcache.memory_consumption=512 Also do /etc/php-fpm.conf:
- ;env[PATH] = /usr/local/bin:/usr/bin:/bin + env[PATH] = /usr/local/bin:/usr/bin:/bin 4. Build web server
Edit /etc/httpd.conf to add the definitions for your service:
server "<domain.tld>" { listen on $ext_addr port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" } server "<domain.tld>" { listen on egress tls port 443 root "<some-dir-after-chroot>/nextcloud" directory index index.php hsts max-age 15768000 tls { certificate "/etc/ssl/<domain.tld>_fullchain.pem" key "/etc/ssl/private/<domain.tld>_private.pem" } # deny access to confidential data/programs first location "/.ht*" { block } location "/.user*" { block } location "/3rdparty*" { block } location "/README" { block } location "/autotest*" { block } location "/build*" { block } location "/config*" { block } location "/console*" { block } location "/data*" { block } location "/db_*" { block } location "/indie*" { block } location "/issue*" { block } location "/lib*" { block } location "/occ*" { block } location "/templates*" { block } location "/tests*" { block } location "/*.php" { fastcgi socket "/run/php-fpm.sock" } location "/*.php[/?]*" { fastcgi socket "/run/php-fpm.sock" } location "/.well-known/host-meta" { block return 301 "/public.php?service=host-meta" } location "/.well-known/host-meta.json" { block return 301 "/public.php?service=host-meta-json" } location "/.well-known/webfinger" { block return 301 "/public.php?service=webfinger" } location "/.well-known/carddav" { block return 301 "/remote.php/dav/" } location "/.well-known/caldav" { block return 301 "/remote.php/dav/" } } Then run:
# rcctl restart httpd 5. Install NextCloud
Access to the service with your web browser.
The web installer will start.
Enter the forms and click "Finish setup":
If the installation is successful, you will meet the login page:
Well, again, nextcloud/config/config.php is made through the web installation.
Remember the "datadirectory" setting in it is affected by chroot.
This means that the value is /nextcloud/data when the real data directory is /var/www/nextcloud/data, because chroot strips "/var/www" from the path.
Conclusion
Thank you for your reading :)
I hope you enjoy your secure files sharing.


Top comments (0)