Git Product home page Git Product logo

myproxy's Introduction

MyProxy ยท CircleCI

All Contributors

MyProxy is an alternative to Nginx that allows automatic domain provider integration, ssl support for all domains, dynamic port proxy and automatic git deployment.

MyProxy helps you quickly and easily:

  • Connect to your Domain provider
  • Set up A and CNAME records for your selected domains
  • Create and serve SSL certificates for your selected domains
  • Run an unlimited number of applications on your subdomains

Watch the following videos to understand how MyProxy works:

Using MyProxy to deploy apps

Setting up MyProxy on your server

Try it out?

Try it out on one of our open source partners providing a heroku alternative: https://freedomains.dev/

Why?

Setting up a server is hard - especially setting up DNS records, managing certificates, and deployment. So we setup to build a simple and easy-to-use app that helps us build applications quickly.

We are new to software engineering so if you find areas where this app could be improved, please let us know by creating an issue. We are excited to learn!

Also, we are currently seeking jobs. If your team needs software engineers, please reach out:

Prerequisites

To use MyProxy, you need 3 things:

  1. A domain name. MyProxy uses acme.sh, so you would have to buy the domains from any of the DNS APIs listed there (includes all of the major providers like namecheap, goDaddy, etc.)
  2. A server's IP address that you have root access to. You can use your home server or get one from AWS EC2, DigitalOcean, GoogleCloud, etc.
  3. Docker needs to be installed on the server. MyProxy uses Docker to run deployed apps inside containers.

Installation and Usage

Server setup

We tested MyProxy on the AWS and Google Cloud platforms. If you use them, please follow the configurations and setup below to make sure MyProxy works well for you.

AWS Setup

You will need to configure the VM's firewall per table below during security group setup on AWS EC2 instance.

Type Protocol Port Range Source
HTTP TCP 80 0.0.0.0/0
HTTPS TCP 443 0.0.0.0/0
SSH TCP 22 0.0.0.0/0
Custom TCP Rule TCP 3000 0.0.0.0/0
Custom TCP Rule TCP 9418 0.0.0.0/0

Google Cloud Setup

  • Target: specify target tags
  • Target Tags: myproxy
  • Source Filter: IP ranges
  • Source IP: 0.0.0.0/0
  • Specify Protocol and Ports: tcp: 3000

Update Google VMs to specify myproxy http-server https-server in network tags

Installation

  1. Connect to your server: ssh root@your-server-ip-address
  • AWS Users Only Change to root user sudo su root and change to home folder cd ~
  1. Install Docker on your server, follow the instructions for your OS at the Docker docs.
  2. Clone the app: git clone https://github.com/garageScript/myProxy.git
  3. Go to the MyProxy folder: cd myProxy
  4. Run the setup script ./scripts/setup.sh
  • Installs nodeJS and npm if system does not have them.
  • Enables firewall port 3000 (for the admin page UI), 80 and 443.
  • Installs application dependencies
  • For a complete list of commands the script runs, look here
  1. Run the App: ADMIN=YOUR_ADMIN_PASSWORD npm run server
  • You can also run the app under your own defined port by setting a PORT environment variable
  1. Exit from server exit

Usage

  1. Go to your server url: http://your-server-ip-address:3000. You will be prompted to enter your admin password and your domain provider's API Key and Secret, find out how here
  2. All your domain names in that provider will show up. Click the setup button next to the domain you wish to setup (could take up to 5 minutes)
  3. After your domain is setup, you will be able to generate as many subdomain repositories as you want! To do that:
    1. Go to your server URL: http://your-server-ip-address:3000
    2. Create a subdomain. IP and port are optional. You should see a git link that was created for you.
    3. git clone the app, then build the app locally. Find out how in the Building Your Local App section below.
    4. When you are done, git push origin master and watch your app run in production!

Building-Your-Local-App

  1. In the terminal, run git clone <your fullDomain repo> to clone your app folder.
  2. Enter your repo cd <your fullDomain folder>
  3. Run npm init -y
  4. Run npm i express --save
  5. Run touch app.js
  6. Copy the following code into app.js.
const express = require('express');
const app = express();
app.use(express.static('public'));

app.get('/', (req, res) => {
  res.send('hello');
});

app.listen(process.env.PORT || 8123);
  1. Update the scripts section in package.json with your app entry point command, under start: "start": "node app.js"
  2. Run git add .
  3. Run git commit -m "Initial Commit"
  4. Run git push origin master

API Reference

Users can use Access Tokens to manage their domain mappings from a 3rd party server. See available endpoints

Development & Contribution

The following steps will guide you through how to setup your development environment to send pull requests or build your own custom features.

You need to install node and typescript

  1. Fork and clone the repository.
  2. Install dependencies: npm install or yarn
  3. Run the app: yarn start or npm run start
  • You can also run the app under your own defined port by setting a PORT environment variable

Adding a new provider

If your company sells domain names and you want your service to be supported on MyProxy, make sure you integrate with acme.sh first.

Sample integration for Name.com that you can follow along.

  1. All implemented providers are listed in src/providers/index.ts. Add your service to providerList, following the your acme.sh integration's naming convention.
  • path should be the location of the file you create in the next step.
  1. Create a file that exports the following functions: getDomains and setRecord.
  2. Depending on your API in the previous step, you may need to create types. Types should be added to src/types/general.ts

You are done! Get a beer ๐Ÿบ

Before sending a Pull Request:

  1. Run npm run autofix: make sure there are no errors / warnings

License

MyProxy is MIT licensed

Contributors โœจ

Thanks goes to these wonderful people (emoji key):


Song Zheng

๐Ÿ’ป ๐Ÿ“– ๐Ÿค” ๐Ÿš‡ ๐Ÿง‘โ€๐Ÿซ ๐Ÿ“† ๐Ÿ‘€

Herman Wong

๐Ÿ’ป ๐Ÿ‘€

rkalra247

๐Ÿ’ป

David De Wulf

๐Ÿ’ป

SahilKalra98

๐Ÿ’ป

albertoelopez

๐Ÿ’ป

Alberto Lopez

๐Ÿ’ป

Bryan Jennings

๐Ÿ’ป

Josh Greenwell

๐Ÿ’ป

Colton Ehrman

๐Ÿ’ป ๐Ÿ‘€

Guilherme Gwadera

๐Ÿ’ป ๐Ÿšง

Cijin Cherian

๐Ÿ“–

This project follows the all-contributors specification. Contributions of any kind welcome!

myproxy's People

Contributors

albertoelopez avatar allopez7 avatar anso3 avatar bryanjenningz avatar coltonehrman avatar dependabot[bot] avatar ggwadera avatar hwong0305 avatar joshgreenwell avatar rkalra247 avatar sahilkalra98 avatar slybouhafs avatar songz avatar wolfy64 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.