.. _example: Quickstart Example ================== .. versionadded:: 0.1.0 The following example demonstrates using **sdep** to create a static website. In addition to **sdep**, and Amazon S3, we utilize `travis-ci `_, `Cloudflare `_, and an external DNS provider of your choice (I'm a fan of `hover `_). Creating Accounts ----------------- Before we begin, sign up for the following accounts if you do not have them already: Github, travis-ci, Amazon Web Services, Cloudflare, and a DNS provider of your choice. Initial Upload and Configuration -------------------------------- To start, we assume that you've purchased a domain name from some DNS provider. AWS ~~~ - From AWS' IAM service page, create a new :command:`AWS_ACCESS_KEY_ID` and :command:`AWS_SECRET_ACCESS_KEY` for your user, through using your user's **Security Credentials** tab. This user must have access to S3. - Store these credentials, as we will need them later. Sdep ~~~~ - Assuming you have python3 and pip installed, download **sdep** with :command:`pip install sdep`. - Run the following command:: export AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID; export AWS_SECRET_ACCESS_KEY=YOUR_AWS_ACCESS_KEY; export SITE_DIR=PATH_TO_SITE_YOU_WISH_TO_DEPLOY; export DOMAIN=YOUR_DOMAIN; sdep create :command:`AWS_ACCESS_KEY_ID` and :command:`AWS_SECRET_ACCESS_KEY` are the credentials from the **AWS** step. :command:`SITE_DIR` is the directory containing your static website (ex. the :command:`./public` directory in a static website built by `hugo `_), and :command:`DOMAIN` is the domain name you purchased. Your website is now deployed on S3, and can be accessed by accessing its endpoint (ex. :command:`http://mattjmcnaughton.com.s3-website-us-east-1.amazonaws.com`). Throughout the rest of the tutorial, we'll refer to this as :command:`S3_ENDPOINT`, and it can be found through going to **Properties** tab of the S3 bucket representing your website, and then going to the **Static Website Hosting** section. Cloudflare ~~~~~~~~~~ - From the account overview page, click **Add Site**. - Enter the domain name you have purchased (ex. "mattjmcnaughton.com") and click **Continue Setup**. - Delete the :command:`A Record` with :command:`YOUR_DOMAIN_NAME`. Add a new :command:`CNAME` with :command:`Name` equal to :command:`YOUR_DOMAIN_NAME` (i.e. mattjmcnaughton.com) and :command:`DOMAIN_NAME` equal to :command:`S3_ENDPOINT`. - After creating, click the Cloud with the Arrow throughout so that it becomes Orange. - Click continue, and then select the Free Website plan. - Record the Nameservers shown by Cloudflare. We will need them later to update our DNS provider. If you want SSL: - Go to the **Crypto** Tab and ensure **SSL** is set to :command:`Flexible`. - Go to the **Page Rules** Tab and change turn on the **Always Use HTTPS** page rule. DNS Provider ~~~~~~~~~~~~ - Delete any previous A or CNAME records on your DNS provider. - Configure the Nameservers on your DNS provider to be the Cloudflare's Nameservers. Continuous Deployment --------------------- If you are happy with manually deploying your static website, then congrats, you're done! Simply replace :command:`sdep create` with :command:`sdep update` whenever you make a change. However, using a continuous integration build tool like `travis-ci `_, it is possible to deploy your static site to S3 anytime a pull request is merged. Assuming your Github account is linked with travis-ci, and your static website is hosted on Github, take the following steps: - Turn on travis-ci for this repo. - Go to settings and turn off **Build Pull Requests**, but ensure that **Build Pushes** is turned on. Then in the root directory of the repository containing your application, create a :command:`.travis.yml` file with the following contents:: language: go install: go get -v github.com/spf13/hugo sudo: required script: - hugo -v - sudo pip install sdep>=0.1.0 - sdep update branches: only: - master env: global: - SITE_DIR=YOUR_SITE_DIR - DOMAIN=YOUR_DOMAIN Then, from the command line run :command:`travis encrypt AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY --add env.global` and :command:`travis encrypt AWS_SECRET_ACCESS_KEY --add env.global`. You will need to run :command:`gem install travis` if you do not have the `travis-ci gem `_ installed. Then, just push to Github. Anytime you merge a pull request, **sdep** will deploy your website once again. You're Done! ------------ Success, you did it! Looking for next steps, we'd love any `contributions `_. If you encountered any issues going through this tutorial, please let us know `here `_. We'd love to try and help you out!