Skip to content

Instantly share code, notes, and snippets.

@dkarter
Created May 1, 2020 19:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dkarter/70c35a4fa417150239e99c07d52d5d56 to your computer and use it in GitHub Desktop.
Save dkarter/70c35a4fa417150239e99c07d52d5d56 to your computer and use it in GitHub Desktop.
import * as Pulumi from '@pulumi/pulumi';
import * as DigitalOcean from '@pulumi/digitalocean';
import * as fs from 'fs';
const projectName = Pulumi.getProject();
const config = new Pulumi.Config();
const sshPubKeyFilename = config.require('sshPubKeyFilename');
const publicKey = fs.readFileSync(sshPubKeyFilename).toString();
const sshKeyName = config.require('sshKeyName');
const sshKey = new DigitalOcean.SshKey(sshKeyName, {
name: sshKeyName,
publicKey,
});
const droplet = new DigitalOcean.Droplet(`${projectName}-web`, {
size: DigitalOcean.DropletSlugs.DropletS1VCPU1GB,
region: DigitalOcean.Regions.SFO2,
image: 'ubuntu-18-04-x64',
monitoring: true,
ipv6: true,
sshKeys: [sshKey.fingerprint],
});
const domainName = config.require('domainName');
const domain = new DigitalOcean.Domain(domainName, {
name: domainName,
ipAddress: droplet.ipv4Address,
});
new DigitalOcean.DnsRecord('www', {
domain: domain.name,
name: 'www',
value: droplet.ipv4Address,
type: 'A',
});
new DigitalOcean.Project(projectName, {
name: domainName,
resources: [
droplet.id.apply(id => `do:droplet:${id}`),
domain.id.apply(id => `do:domain:${id}`),
],
});
const defaultFirewallAddresses = ['0.0.0.0/0', '::/0'];
new DigitalOcean.Firewall(`${projectName}-firewall`, {
inboundRules: [
{
protocol: 'tcp',
portRange: '22',
sourceAddresses: defaultFirewallAddresses,
},
{
protocol: 'tcp',
portRange: '80',
sourceAddresses: defaultFirewallAddresses,
},
{
protocol: 'tcp',
portRange: '443',
sourceAddresses: defaultFirewallAddresses,
},
],
outboundRules: [
{
protocol: 'icmp',
portRange: '1-65535',
destinationAddresses: defaultFirewallAddresses,
},
{
protocol: 'tcp',
portRange: '1-65535',
destinationAddresses: defaultFirewallAddresses,
},
{
protocol: 'udp',
portRange: '1-65535',
destinationAddresses: defaultFirewallAddresses,
},
],
dropletIds: [droplet.id.apply(i => +i)],
});
export const ip = droplet.ipv4Address;
export const ipv6 = droplet.ipv6Address;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment