Synology/Docker Setup
As covered in the previous pages (which you must read prior to beginning this guide), to continue on this path to becoming a provider you:
  • Have hardware meeting the minimum spec
  • Have a local network you can forward ports with (ideally also meeting the specification described in the previous page)
  • Have read the Storage Provider Introduction & Collateral pages and understood the commitment you’re making by becoming a provider
NAS units often have upgradable RAM (be sure to match frequency, voltage, timings if expanding) and can add drives as required. Most NAS devices come diskless, meaning you must source your own. Guidance for choosing appropriate drives exists under the Requirements, Configs page.
This guide will be deploying the ScPrime software through Docker, so ensure your NAS of choice can run this application as well. Other NAS brands such as QNAP will have different menus and prompts from this guide, and may find the NAS config options to be quite different. Everything past "Creating the Wallet" should be quite similar.
This guide used the two-bay Synology DS718+ running DSM 7.0.1 with an aftermarket RAM upgrade to bring capacity up to 6 GB. The drives were two 12 TB WD disks (“WD120EDBZ”) shucked from Easystore external drives.

Preliminary

Before beginning, this guide assumes your device is functional and has the desired hard drives connected properly. Once the NAS is powered on with Ethernet connected, one must find the device’s local IP address (i.e. likely begins with 192.168 or 10.0). This can be found through your primary router, or a local network scanner such as “Angry IP Scanner” or “Fing.” Note the device may take a few minutes to appear. Once you have the IP for the unit, paste it into a web browser from a device on the same network, and you should begin initial config.
Assuming your NAS has not been configured at all, you will go through some screens guiding initial setup. The navigation of the system config is out of the scope of this guide. We will pick up on the storage pool menu.

Creating Pools, Volumes

This particular example is a 2-bay unit with a fresh disk in the second bay. If you don’t see this screen (or one like it) automatically, open the “Storage Manager” app and it should prompt you to create a storage pool.
Select RAID type “Basic” since we aim to have only one storage pool per disk.
You should then select which drive to assign this storage pool to. We will go one disk at a time.
The drive check screen should follow, which is an optional process. Considering these disks were new and untested, it was decided to perform this drive check before important data was put on them. This process can take be lengthy depending on the size of the drive. The 12 TB drives here took about a day to complete.
For the first storage pool created, it will immediately prompt you to create a storage volume as well. Select the disk you wish to create the volume on (likely “Drive 1” if this is your first time through this menu). You should select the full size of the disk (“Max”).
On filesystems, this guide chose to use “ext4” for its widespread compatibility with other Linux systems should the drives ever need to be connected to another computer (think: transferring provider data). BTRFS is a very good filesystem, and one arguably better suited to long term data integrity, so this would also be a fine choice.
Finally, a screen should confirm your choices, and you can review & click “Apply.”
Within the Web-UI, the “Storage Manager” tab should reveal information about the disks, and their status during volume creation/drive check. We can continue with some other steps while this is being done.
If you have additional disks, click the “Create” button and add more storage pools for these drives one at a time (this process should be familiar by now).
Every disk will need a volume as well, which is also assigned via the “Create” button.
When through all the screens, each drive should be one storage pool and one volume.
Note: If your NAS accepts SSDs and you’re choosing to use them, it would be optimal to mount them as a usable disk if possible. Otherwise (as is common with NAS devices) you may only have the option of using it as cache for a hard drive volume. Please research this in advance if exploring this option. Details of these configurations is not covered here.

Preparing for ScPrime

Next we would like to set a IP Address Reservation for the unit. Navigate from the main list of programs to the “Control Panel,” select “Network,” followed by the “Network Interface” tab and click the main LAN connection -> “Edit”.
Manual configuration for this should already be populated with the currently used settings. This ensures the device will stay on the local IP it is currently using, which in this case was “10.0.0.196”. Click OK, and LAN 1 should now read “Static IP.”
To be able to access the NAS later via ssh this must be enabled under the “Terminal & SNMP” tab just under “Network” on the left. Tick the box and click “Enable,” the default port for ssh is 22 which was left intact.
Using ssh software (such as PUTTY for Windows) we can now log in to a terminal session. Log in to verify this works using the credentials you created during initial setup. Note that it is typical in terminal sessions for the password field to remain blank as you type. This is a security feature.
Next we can prepare the unit to use the ScPrime Docker image. Install Docker by searching for it in the “Package Center.” Note: if asked to choose the destination, it is fine to place it on volume 1, but if your system has an SSD it would be advantageous to use it for this.
Opening Docker now, under the “Image” tab we will Add->From URL “https://hub.docker.com/r/scprime/scprime/” and select the “latest” tag.
It is here that you should wait until the disk check and volume optimization have finished before continuing.
Finished Health Check & Volume Optimization

Creating Folders

With an optimized (and possibly checked) volume to use, folders must be created in them. It is generally recommended to create one folder for every 2 TB or so of space in the volume. Six folders were created per volume here (for a total of 12).
Create shared folders from the “Control Panel” using the “Create” -> “Create Shared Folder” drop down. Consider using a functional name, such as “vol1_1”. Volume 2 would have folders “vol2_1” through “vol2_6” accordingly for this example. The default settings in the menus that follow should be okay, the full options are glossed over here.
Take care to ensure the volume you’re intending the folder to exist on actually matches the one assigned.
Additionally, you may have noticed a Docker folder already created here. Head back to the Main Menu and open the File Station app. Create a new basic folder under the existing Docker folder called “scp-data” which will later be used for storing metadata.

Creating the Container

Each provider requires the use of two ports, which are by default: 4282 and 4283 on TCP. Additional providers on the same local network will need to use offset port ranges (commonly 4292 and 4293 and so on). This forward is done in two parts, first on your network router and then on the docker container. For forwarding in your router, follow the dedicated Port Forward page.
Note: port 4281 is optionally opened, it is the consensus/blockchain sharing port. Not required to open, but can help network health. This setup chose to enable.
Within Docker -> Image, launch scprime, open advanced settings. Tick “Enable auto-restart” and change tabs to Volume. Within this tab, hit “Add Folder” and click the first folder from earlier to begin mounting them to the docker image.
The Mount path should also be a functional name, try following the naming convention from earlier. Be sure to add the “docker/scp-data” folder created earlier using the mount path “/scp-data”. This will store the metadata outside of the container, so future containers can use it as well.
Now over to Port Settings, and change “auto” to the ports we forwarded in the router. It should look like the following. If you forwarded the non-default ports for this provider (perhaps because you have multiple providers on the same network) you should change the local/container ports to be those instead.
Lastly over to Environment tab where we will add -M gctwh to the Command field under Execution Command. This will load only the ScPrime modules necessary for providing, and should help long term stability and leanness. If you’re using non-standard ports, this should also be added here using the additional flags --host-addr :4292 --host-api-addr :4293 or whichever ports you chose to use.
Apply these settings, name the container (in this case “scprovider”), click next to review your settings, and continue.
The image should now be running. Confirm on the Container page.

Creating the Wallet

We can now use ssh to interact with our scprime container. sudo docker ps should return the container name, which is used in the next command, sudo docker exec container_name spc to see the status of the blockchain sync. This first-time sync can take several hours, as it is catching up with 3+ years of blocks. Compare the height of your sync to the current latest height on the explorer. You can continue with setup while your new node is syncing.
We intentionally did not load the renter module, so we will ignore the warning about this.
For the remaining commands that follow this format, the container name chosen by the guide (“scprovider”) will be used, but know you should substitute it with your own container name. Also note that running with the command “sudo” elevates the permissions for the command to run, and you may be asked for a password when using this. This would be the same password you created for your NAS.
We can now run normal spc (ScPrime console) commands, just with sudo docker exec scprovider in front of them. Generate the provider wallet with sudo docker exec scprovider spc wallet init which will output a private key/seed. You must protect this seed at all times, as it is the only way for you (or anyone else) access your wallet. Once this has been recorded somewhere safe, count the number of words recorded. It should be 28 or 29 words long. If this is correct, return to the Docker Containers menu and stop the running container by clicking the slider. Then click the now-stopped container, go to Edit->Environment, and paste your seed words in to the SCPRIME_WALLET_PASSWORD value. This will allow the image to unlock the wallet upon finishing starting up, but take caution as you must now protect access to the NAS control panel as well. Apply and start the container again.
Now back in the ssh terminal, sudo docker exec scprovider spc wallet unlock should be able to unlock the wallet (if not done by default). Confirm that sudo docker exec scprovider spc returns the wallet status is unlocked.
Depending on your config (namely if you have done some of these steps more than once) you may get an error regarding an inappropriate ioctl for device. Running the desired command with a -it flag (i.e. sudo docker exec -it scprovider spc wallet unlock) should return a more detailed explanation as to what the issue is. Using the help flag (-h) can also help you navigate what wallet commands are available (i.e. sudo docker exec scprovider spc wallet -h).

Provider Config

With the wallet now initialized, unlocked, and folders mounted to the docker container, now is a good time to begin configuring the provider settings. To begin assigning storage folders to your provider, use the command sudo docker exec scprovider spc host folder add /scp1_1 2000gb. One must take great care not to over-allocate space. Disks (for reasons googleable) typically have lower usable space than advertised. Because of this overhead, and because the docker image and metadata folders are all on volume 1, do not allocate all the available space (and certainly not all the advertised space) for scprime to use. In this example, though disk 1 is advertised as 12 TB, you may have noticed under Storage Manager that only 10.8 TB is usable.
Of this 10.8, some will be taken up system programs put on it like docker. The last folder assigned to volume 1 then was only made “600gb” in size, to give a roughly 200 GB buffer (5x2000GB + 600GB). Aim to leave a spacious buffer (no less than 50-100 GB), as this can always be resized up later should you desire.
If a mistake is made, sudo docker exec scprovider spc host folder -h will show what the available commands are. Again, you can add -h or -v (for verbose) to the end of most commands to see how they are used or get additional information returned.
To view the folders allocated, sudo docker exec scprovider spc host should return something like the following image. This command (often with -v) in particular is one you will use often as a provider, as it returns a summary of your provider’s config and status.
Each volume’s allocation is comfortably under its maximum size. Double check this is the case for your provider. If there is a mistake here, it may not show until the disk runs out of space and can corrupt all of the data on the volume, which would be a severe headache down the road.
Moving toward provider settings, sample commands will be provided, but the values used by your provider should be up to date with the current guidance on the Settings page.
Also, do not be concerned if there are any error warnings regarding the (lack of a) renter module; recall this intentionally was not used.
  • sudo docker exec scprovider spc host config maxduration 9w
  • sudo docker exec scprovider spc host config collateral 5SCP
  • sudo docker exec scprovider spc host config minstorageprice 5SCP
  • sudo docker exec scprovider spc host config mindownloadbandwidthprice 1SCP
  • sudo docker exec scprovider spc host config minuploadbandwidthprice 1SCP
  • sudo docker exec scprovider spc host config collateralbudget 500SCP
  • sudo docker exec scprovider spc host config maxcollateral 200SCP
Now the provider must be funded with some starting balance to cover the transaction fee for announcing, and to cover collateral for some initial contracts. Generate an address with sudo docker exec scprovider spc wallet address and know that this command will generate a new, equally valid address every time it is used. Your wallet ultimately consists of many addresses all belonging to your private key/seed. Copy the produced address and send some balance to it.
Verify the state of the balance with sudo docker exec scprovider spc wallet balance which should return the state of the wallet. If the blockchain is still syncing, the balance will not appear yet. If it was just sent but not yet included in a mined block, it will appear as an Unconfirmed Delta.
Prior to announcing, it is a good idea to verify the ports are accessible as intended. A port forward checking tool is useful for this purpose, and the ports forwarded earlier (defaults to 4282 & 4283) should return open. If they don’t, do not proceed, and troubleshoot this first.

Announcing

With a confirmed balance and open ports it is finally possible to announce the provider. Using the default ports this would look like sudo docker exec scprovider spc host announce which will announce using the external IP automatically resolved by the gateway module, and with the default host entry port (4282). If a dynamic DNS is used, the non-default ports are being used, or the gateway module is unable to properly resolve an external IP, this is expanded to sudo docker exec scprovider spc host announce external_IPv4:4282 or whichever host-addr port was decided earlier. If you don't know your external IPv4, you can easily get it from a site such as WhatIsMyIP.
Ideally the return message looks good, and the message about how to make the provider stop accepting new contracts can be ignored (this is just informational). Check the provider status with sudo docker exec scprovider spc host or the more verbose sudo docker exec scprovider spc host -v but external validation is the best way to know with certainty that everything looks good.
Continue to the Post-Announce Guide for what to do now.
updated 5/15/22 v1.02