Deploying Server Side Swift to Digital Ocean

Jonathan Guthrie
Server Side Swift and More
5 min readMar 27, 2017

The third in my “Deploying Server Side Swift” series, now I’m going to demonstrate deploying a Server Side Swift app to Digital Ocean Droplet.

There are three prerequisites if you want to follow along: the Perfect Assistant application, a working Docker application on your Mac, and a Digital Ocean account.

Server Setup

The first step is going to be setting up a new Digital Ocean Droplet.

In your Digital Ocean console, Click the “Create Droplet” button. Select the Ubuntu 16.0.2.x64 distribution, the size you need, the datacenter location, and any other specific options you will need.

You’re returned to the list of your Droplets, with the new one listed. Once it’s created, you’ll see the IP address. Copy this, and in Terminal enter

ssh root@<ip address>

Your root password would have arrived in your email, use this to log in. You’ll be immediately asked to change your password — this is a security feature and means that only you now know the password.

Now we want to get Swift and all the right dependencies installed.

Go to https://github.com/PerfectlySoft/Perfect-Ubuntu and copy the contents of ‘install.sh’

Next, create the install file and edit it:

touch install.sh
nano -w install.sh

Paste the contents fo the clipboard, then press ctrl-x and enter to save.

Then we want to make it executable and run it:

chmod +x install.sh
./install.sh --sure

When this is finished, your system will be ready to go for Swift and Perfect!

Compiling the code

If you’ve followed the previous installment in my Server Side Swift Deployment series, you may notice the next sections are virtually identical. That’s because they are…

Switching now to the Perfect Assistant, lets grab the “Perfect App Template” from GitHub. On the Welcome screen, click on “Create New Project”, the “Custom Repository URL”. Find a home for your project by clicking “Browse” next to the location, and then paste in the URL for the template: “https://github.com/PerfectlySoft/PerfectAppTemplate.git"

Leave the “Integrate Linux builds with Xcode project” checked, as we are targeting Linux deployment in this phase.

Once you click “Save” the system will start it’s initial clone of the project for the macOS side.

Doing a Linux build is as simple as clicking the “BUILD: Linux” button. What this is doing behind the scenes is getting a Docker container ready, cloning the project’s dependencies into a sandboxed location, and doing a Linux build that is sandboxed as well.

Once it’s finished, you should see the last 3 lines as something like:

Compile Swift Module ‘Perfect_App_Template’ (10 sources)
Linking ./.build_lin/release/Perfect-App-Template
Success.

This shows you the location of the executable we just built. Using the Assistant to open our project directory, open the .build_linux/releasedirectory. This is made much easier if you have enabled the view of hidden files in the Finder.

There are a lot of files in here, most of which we can ignore.

Deploying

Open your favourite SFTP app… I personally like and use Transmit.

Open a new SFTP configuration, and enter the IP address of your new Droplet, as well as the username (root) and password, then connect.

Once Transmit has connected, go to the root of the disk, and create a new directory called “perfect-deployed”. Inside that make a directory for our app, “Perfect-App-Deployed”.

Copy into this new directory the following files:

libCHTTPParser.so
libCOpenSSL.so
libCZlib.so
libLinuxBridge.so
Perfect-App-Template

Go up a couple of levels in the Finder, and copy into the app dir in SFTP the config and webfoot directories.

Create a new file called “perfect-app-template.service”, and copy the code from https://github.com/PerfectlySoft/Perfect-Ubuntu/perfect-app-template.service

[Unit]
Description=Perfect deployed perfect-app-template
[Service]
Type=simple
WorkingDirectory=/perfect-deployed/Perfect-App-Template
ExecStart=/perfect-deployed/Perfect-App-Template/Perfect-App-Template
Restart=always
PIDFile=/var/run/perfect-app-template.pid
[Install]
WantedBy=multi-user.target

Now you have all the pieces in place, lets start it up!

Back in the console session in Terminal, execute the following two commands to enable the service, and reload the services controller:

systemctl enable /perfect-deployed/Perfect-App-Template/perfect-app-template.service 
systemctl daemon-reload

Now, start the app!

service perfect-app-template start

Now, back in the browser, hit http://(youripaddress):8104/ and you should see “Hello, World!”

Next Steps

For examples visit GitHub.com/perfectexamples — there is an ever growing library of examples and demos there.

And of course if you’re looking for live help from our awesome community, join our Slack channel via www.perfect.ly

Thanks for being with us today, don’t forget to say Hi on Slack!

--

--

Jonathan Guthrie
Server Side Swift and More

Developer Evangelist, Musician, and Active Activist... Newmarket ON, Canada