If like me you like to share some data between all your devices (presentations, keypassX file, pictures, …), you probably use a cloud platform to store all that.
I do like to keep control of such solution, I used ownCloud and now I’m using Nextcloud.
In this article I will show you how to easily deploy Nextcloud on Oracle Cloud (OCI) using MySQL Database Service (MDS) and Object Storage.
The easiest way to deploy solutions on OCI is to use Terraform and Resource Manager’s Stack.
If you already have an account on Oracle Cloud, just click on the button:
If not, you can try MySQL Database Service for Free with extra $300 by using this link: https://www.oracle.com/mysql/heatwave/
The Terraform modules can also by used without Resource Manager and are available on GitHub: https://github.com/lefred/oci-nextcloud-mds
Let’s see it in action as soon as you click on the “Deploy to Oracle Cloud“ button :
Once accepted the Oracle Terms of Use, the wizard is accessible:
We just click next. Then we need at least to provide the password for the MySQL admin user. You can see that there is also the user_ocid
prefilled, you should not touch it. If you want, you can enable High Availability for you MySQL Database Service
Then you have the details related to Nextcloud like credentials and Object Storage Bucket’s name:
If you have not enabled HA, you can enable HeatWave Cluster if the selected Shape is compatible:
You can then process by clicking on Next.
The next screen is an overview, you can enable “Run Apply” and click on Create.
The job will start… and when finished, it will be green like this if everything went smoothly and you can click on Outputs to get the required information to use Nextcloud:
We just need to use the public IP in a browser with the credentials (values of nextcloud_admin
& nextcloud_admin_pass
):
And as you can see there is already an external storage configured to point to Object Storage:
Let’s add a file in it:
And we can see that it’s also available in OCI Object Storage’s Bucket:
And this is it, no need to configure mount point, customer private key and secret, bucket’s hostname etc… all this is automatic and directly enabled when using these modules.
cerbot
is also already installed on the Nextcloud compute instance. If you configure your DNS to point on the public IP, you can easily enable https.
This is the architecture of what we just deployed:
Hi great guide. This is exactly what I am looking to do, but I seem to be stuck.
2022/04/10 09:20:32[TERRAFORM_CONSOLE] [INFO] module.nextcloud.oci_core_instance.NextCloud[0]: Still creating… [23h44m46s elapsed]
Is there something that I might have missed?
That’s very strange, what do you see in OCI’s web console?
Under Resource Manager>Stacks>Stack Details>Job Details
Failure Details: The job failed due to an error in the Terraform configuration. To troubleshoot this issue, view the job log.
[TERRAFORM_CONSOLE] [INFO] Error: remote-exec provisioner error
[TERRAFORM_CONSOLE] [INFO] with module.nextcloud.oci_core_instance.NextCloud[0],
[TERRAFORM_CONSOLE] [INFO] on modules/nextcloud/main.tf line 172, in resource “oci_core_instance” “NextCloud”:
[TERRAFORM_CONSOLE] [INFO] 172: provisioner “remote-exec” {
[TERRAFORM_CONSOLE] [INFO] error executing “/tmp/terraform_1268948113.sh”: wait: remote command exited
[TERRAFORM_CONSOLE] [INFO] without exit status or exit signal
That’s the logs. Is this what you mean by web console?
Are you able to connect to the Compute Instance ?
If so, please run the scripts in ~opc in this order:
Would you happen to have a guide for connecting to the compute instance?
Is it via the Oracle Cloud Shell? I can ssh, but there didnt seem to be a step to downloading the ssh key.
The compute instance has a public IP and in the output section you should have a key to use to connect it, then if you save that key as “mykey” you should use:
I just tested the stack and it worked as expected.
Might be missing something here. I didn’t see an option to download the SSH key.
I clicked on the link “https://cloud.oracle.com/resourcemanager/stacks/create?zipUrl=https://github.com/lefred/oci-nextcloud-mds/releases/download/v1.0.0/stack_nextcloud_mds.zip”
Then at the Create Stack process, there was no option to download SSH key. Step 1/2/3 was as per your screenshots.
The NEXTCLOUD compute instance has the public 140.238.91.8. Is there a way to download the SSH key via the compute instance?
Only in the stack’s job output section
Many thanks for the patience.
Ran the scripts, errored on the 3rd script.
sudo ./install_php.sh
Certbot has been installed !
sudo ./install_shell.sh
MySQL Shell successfully installed !
sudo ./create_nextcloud_db.sh
./create_nextcloud_db.sh: line 5: b*sUe#9GNB43Q2Hq: command not found
./create_nextcloud_db.sh: line 6: b*sUe#9GNB43Q2Hq: command not found
./create_nextcloud_db.sh: line 7: b*sUe#9GNB43Q2Hq: command not found
NextCloud User created !
NEXTCLOUD USER = nextcloud
[opc@nextcloudserver1 ~]$ WARNING: Using a password on the command line interface can be insecure.
MySQL Error 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
WARNING: Using a password on the command line interface can be insecure.
MySQL Error 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
WARNING: Using a password on the command line interface can be insecure.
MySQL Error 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
it complains that MySQL Shell is not installed… did the script
install_shell.sh
run successfully ?is your MySQL Database Service instance also deployed successfully ?
This is the output for the script.
[opc@nextcloudserver1 ~]$ sudo ./install_shell.sh
Last metadata expiration check: 1:45:41 ago on Mon 11 Apr 2022 10:09:39 AM GMT.
Package mysql-shell-8.0.28-1.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
mkdir: cannot create directory ‘/home/opc/.mysqlsh’: File exists
MySQL Shell successfully installed !
ok MySQL Shell exists then… could you send me by email (or on slack) the content of
create_nextcloud_db_sh
on your compute instance ?Error: 409-BucketAlreadyExists, Either the bucket ‘nextcloud’ in namespace ‘nraf2rwdoatq’ already exists or you are not authorized to create it
So I noticed after deployment and getting everything stood up, it is using a 512GB RAM and 16CPU DB. Is there anyway to migrate this to a smaller instance? I definitely don’t need all that horsepower for my instance of Nextcloud.
You can specify another Shape for the database. For example, you can use “MySQL.VM.Standard.E4.1.8GB”
So I actually did that exact thing and got it all stood up. Now I am receiving an internal server error. 🙁 I followed the exact same steps, and the Nextcloud forums all point to a DB connectivity error. I mysqlsh’d into it from my compute instance and I do see the DBs are there, which tells me connectivity is there too.
This issue is appear to me in the first step (Create Stack – Stack information)
At least one variable in the schema file can’t be parsed. Only successfully parsed variables are rendered. To troubleshoot schema parsing issues, validate against the meta schema (provided in the Resource Manager documentation):
Variable $mysql_shape declared in .tf file but not found in .yaml file (schema).
This is normal, resource manager changed. I still need to upgrade the code but this is only a warning.
Thank you, also I want to mentioned you that the installed Nextcloud version is 23. it’s better to be the latest by using your method.