CloudProxy is to hide your scrapers IP behind the cloud

Related tags

Networkingcloudproxy
Overview

CodeCov Coverage Codacy Quality Docker Cloud Build Status Contributors Forks Stargazers Issues MIT License

CloudProxy

cloudproxy

About The Project

The purpose of CloudProxy is to hide your scrapers IP behind the cloud. It allows you to spin up a pool of proxies using popular cloud providers with just an API token. No configuration needed.

CloudProxy exposes an API with the IPs and credentials of the provisioned proxies.

Providers supported:

Planned:

  • Google Cloud
  • Azure
  • Scaleway
  • Vultr

Inspired by

This project was inspired by Scrapoxy, though that project no longer seems actively maintained.

The primary advantage of CloudProxy over Scrapoxy is that CloudProxy only requires an API token from a cloud provider. CloudProxy automatically deploys and configures the proxy on the cloud instances without the user needing to preconfigure or copy an image.

Please always scrape nicely, respectfully and do not slam servers.

Getting Started

To get a local copy up and running follow these simple steps.

Prerequisites

All you need is:

  • Docker

Installation

Environment variables:

Required

USERNAME - set the username for the forward proxy.

PASSWORD - set the password for the forward proxy.

Optional

AGE_LIMIT - set the age limit for your forward proxies in seconds. Once the age limit is reached, the proxy is replaced. A value of 0 disables the feature. Default value: 0.

See individual provider pages for environment variables required in above providers supported section.

Docker (recommended)

For example:

docker run -e USERNAME='CHANGE_THIS_USERNAME' \
    -e PASSWORD='CHANGE_THIS_PASSWORD' \
    -e DIGITALOCEAN_ENABLED=True \
    -e DIGITALOCEAN_ACCESS_TOKEN='YOUR SECRET ACCESS KEY' \
    -it -p 8000:8000 laffin/cloudproxy:latest

It is recommended to use a Docker image tagged to a version e.g. laffin/cloudproxy:0.3.0-beta, see releases for latest version.

Usage

CloudProxy exposes an API on localhost:8000. Your application can use the below API to retrieve the IPs with auth for the proxy servers deployed. Then your application can use those IPs to proxy.

The logic to cycle through IPs for proxying will need to be in your application, for example:

import random
import requests as requests


# Returns a random proxy from CloudProxy
def random_proxy():
    ips = requests.get("http://localhost:8000").json()
    return random.choice(ips['ips'])


proxies = {"http": random_proxy(), "https": random_proxy()}
my_request = requests.get("https://api.ipify.org", proxies=proxies)

CloudProxy UI

cloudproxy-ui

You can manage CloudProxy via an API and UI. You can access the UI at http://localhost/ui.

You can scale up and down your proxies and remove them for each provider via the UI.

CloudProxy API

List available proxy servers

Request

GET /

curl -X 'GET' 'http://localhost:8000/' -H 'accept: application/json'

Response

{"ips":["http://username:password:192.168.0.1:8899", "http://username:password:192.168.0.2:8899"]}

List random proxy server

Request

GET /random

curl -X 'GET' 'http://localhost:8000/random' -H 'accept: application/json'

Response

["http://username:password:192.168.0.1:8899"]

Remove proxy server

Request

DELETE /destroy

curl -X 'DELETE' 'http://localhost:8000/destroy?ip_address=192.1.1.1' -H 'accept: application/json'

Response

["Proxy to be destroyed"]

Get provider

Request

GET /provider/digitalocean

curl -X 'GET' 'http://localhost:8000/providers/digitalocean' -H 'accept: application/json'

Response

  {
    "ips": [
      "192.1.1.2",
      "192.1.1.3"
    ],
    "scaling": {
      "min_scaling": 2,
      "max_scaling": 2
    }
  }

Update provider

Request

PATCH /provider/digitalocean

curl -X 'PATCH' 'http://localhost:8000/providers/digitalocean?min_scaling=5&max_scaling=5' -H 'accept: application/json'

Response

  {
    "ips": [
      "192.1.1.2",
      "192.1.1.3"
    ],
    "scaling": {
      "min_scaling": 5,
      "max_scaling": 5
    }
  }

CloudProxy runs on a schedule of every 30 seconds, it will check if the minimum scaling has been met, if not then it will deploy the required number of proxies. The new proxy info will appear in IPs once they are deployed and ready to be used.

Roadmap

The project is at early alpha with limited features. In the future more providers will be supported, autoscaling will be implemented and a rich API to allow for blacklisting and recycling of proxies.

See the open issues for a list of proposed features (and known issues).

Limitations

This method of scraping via cloud providers has limitations, many websites have anti-bot protections and blacklists in place which can limit the effectiveness of CloudProxy. Many websites block datacenter IPs and IPs may be tarnished already due to IP recycling. Rotating the CloudProxy proxies regularly may improve results. The best solution for scraping is via proxy services providing residential IPs, which are less likely to be blocked, however are much more expensive. CloudProxy is a much cheaper alternative for scraping sites that do not block datacenter IPs nor have advanced anti-bot protection. This a point frequently made when people share this project which is why I am including this in the README.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Your Name - @christianlaffin - [email protected]

Project Link: https://github.com/claffin/cloudproxy

Acknowledgements

Comments
  • Maybe add feature for multiple digital ocean accounts?

    Maybe add feature for multiple digital ocean accounts?

    I'm loving this, it's perfect for what I need. Maybe a feature to consider in the future is to be able to use multiple digital ocean accounts as there's a limit of 10 for new users?

    Thanks for releasing this!

    enhancement 
    opened by sblfc 11
  • Digitalocean Droplet created but not showing in the API

    Digitalocean Droplet created but not showing in the API

    Hello

    I launched the container as per the documentation, but I'm still not seeing anything in the UI nor the API, I can see it created the droplets and keep removing/adding new droplets every few minutes

    What I'm missing?

    export DIGITALOCEAN_ENABLED=True
    export DIGITALOCEAN_ACCESS_TOKEN="XXXXX"
    export DIGITALOCEAN_MIN_SCALING=2
    export DIGITALOCEAN_MAX_SCALING=2
    export DIGITALOCEAN_SIZE="s-1vcpu-512mb-10gb"
    export DIGITALOCEAN_REGION="fra1"
    export AGE_LIMIT="1200"
    export USERNAME="XXX"
    export PASSWORD='XXXX'
    
    docker run -e USERNAME=$USERNAME \
        -e PASSWORD=$PASSWORD \
        -e DIGITALOCEAN_ENABLED=$DIGITALOCEAN_ENABLED \
        -e DIGITALOCEAN_ACCESS_TOKEN=$DIGITALOCEAN_ACCESS_TOKEN \
        -e DIGITALOCEAN_MIN_SCALING=$DIGITALOCEAN_MIN_SCALING \
        -e DIGITALOCEAN_MAX_SCALING=$DIGITALOCEAN_MAX_SCALING \
        -e DIGITALOCEAN_SIZE=$DIGITALOCEAN_SIZE \
        -e DIGITALOCEAN_REGION=$DIGITALOCEAN_REGION \
        -e AGE_LIMIT=$AGE_LIMIT \
        -it -p 8000:8000 laffin/cloudproxy:latest
    
    bug 
    opened by mrahmadt 5
  • Allowed IP as alternative auth

    Allowed IP as alternative auth

    Actually i'm working with a project with same name called CloudProxy (https://github.com/NoahCardoza/CloudProxy). It's to pass throw cloudflare challenge. To do that is using a chrome with pupeeter. It's starting a chrome browser passing a proxy via parameter but it doesn't accept user and password on it (https://superuser.com/questions/902620/google-chrome-proxy-settings-with-username-and-password). This is the motivation to fork it and implement an alternative way to authenticate with proxy than using user and password. I used the parameter allowed_ip from tinyproxy.

    Implemented:

    • Alternatrive authentication using ALLOWED_IP
    • Variable environments that are using boolean now are using real boolean instead of String. Instead of using ENABLE_AWS=True now you should write ENABLE_AWS=true. And in code we are using now (if ENABLE_AWS:) instead of (if ENABLE_AWS='True')
    • Check if proxy is working we are trying to load google.com throw the proxy instead of check the proxy url directly. For some strange reason proxy server response 403 HTTP forbidden when you visit is directly. Ex: http://10.12.23.3:8899 if it's using allowed_id, but it's really working as proxy. Increased timeout to 6 to let the proxy do its job.
    • Added optional parameter AWS_KEY_NAME to pass throw a pairkey to login on the EC2 instance.
    • Added optional parameter PROXY_STEALTH=true, default false to set proxy in stealth mode and not sending proxy headers on its requests to the sites.
    • Update README.md and docs/aws.md

    Since is the first time i do something on python and docker. Probably is not really optimitzed and i guess there is space to enhance. I tested it on DigitalOcean, Hetzner and AWS and it works flawless without problems atm.

    I published a docker image: bubexel/cloudprroxy:latest

    Thank you for your work on it!

    Greetings

    opened by serk7 5
  • Unable to authenticate through DigitalOcean

    Unable to authenticate through DigitalOcean

    Expected Behavior

    Running the command:

    "docker run -e USERNAME='xxx' -e PASSWORD='xx' -e DIGITALOCEAN_ENABLED=True -e DIGITALOCEAN_ACCESS_TOKEN='xxx' -it -p 8000:8000 laffin/cloudproxy:latest

    Username & Password being alphanumeric. Token validated by using:

    "doctl auth init -t "xxx"

    I get the following error:

    File "/usr/local/lib/python3.8/site-packages/digitalocean/baseapi.py", line 233, in get_data raise DataReadError(msg) │ └ 'Unable to authenticate you' └ <class 'digitalocean.DataReadError'>

    I think my bug is identical to George Roscoe's. I've never had an issue running this before. I ran this a few weeks ago and it worked completely fine

    bug 
    opened by HazzaWaltham123 4
  • Requests to AWS starts throwing [Errno 113] No route to host

    Requests to AWS starts throwing [Errno 113] No route to host

    I've run into an issue that I can't seem to pinpoint so I'm not sure if it's due to CloudProxy (TinyProxy).

    I've set up CloudProxy to run in Docker with 15 AWS Spot instances. Then I've written a Python Flask script that fetches the IPs from CloudProxy once every minute, accepts an URL (GET request), and returns the html page fetched through one of these AWS proxies. The reason I'm doing it this way is because my original application that uses the html data doesn't allow me to set the user agent, so I need to go through a proxy that allows this.

    This is the fetch line in the Flask application (proxy):

    proxies = {"http": proxy, "https": proxy} resp = requests.get(url, headers=headers, proxies=proxies, timeout=5, allow_redirects=True, stream=True)

    It can run fine for hours until suddenly all my AWS instances started dying. I went through the CloudProxy code and identified that the restarts was due to the ALIVE checks failing. So I disabled that code and also added some exceptions in my own application. It solved the instances dying, but not the original issue.

    It turned out that the code line above (requests.get) suddenly starts throwing the following error:

    HTTPConnectionPool(host='X.X.X.X', port=8899): Max retries exceeded with url: http://www.url.com?page=1 (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f39cd7d7550>: Failed to establish a new connection: [Errno 113] No route to host')))

    I've masked the IP and url for privacy reasons.

    So basically, my scripts run for hours with 1-2 requests every second until all the requests suddenly starts spitting out the exception above until it bogged down my entire WiFi. The internet on all of my computers almost stops responding. The only solution is to stop the requests, give it a few minutes and then resume like nothing happened.

    After fixing the Spot instances dying, my second idea was that there's some kind of TCP limit in AWS. So I upgraded my instances from Nano to Micro with no apparent improvement. I considered it being a Docker issue but I only fetch ALIVE IPs once every minute so I can't see how that would be limited in any way. I don't see it being a TinyProxy limit since my 1-2 requests are spread out over 15 different AWS instances.

    Do you know if there is any AWS limit I'm hitting or have you experienced anything similar with CloudProxy?

    opened by secretobserve 3
  • Add Google Cloud provider

    Add Google Cloud provider

    This Pull Request adds Google Cloud provider support for cloudproxy and solves #35.

    Known issues:

    • Proxy removal from cloudproxy-ui does not work when "Remove" button is clicked. (At least didn't work for me)

    Future work:

    • Given that this code is based on the AWS code, it will be probably a good idea at some point in the future to refactor all the providers' code to reduce the amount of duplicated code and logic.
    opened by dusancz 3
  • trouble authenticating proxy / documentation of authentication for AWS

    trouble authenticating proxy / documentation of authentication for AWS

    Expected Behavior

    I followed the docs here https://github.com/claffin/cloudproxy and here https://github.com/claffin/cloudproxy/blob/main/docs/aws.md I created environment variables, all alphanumerica, for USERNAME and PASSWORD. I created an IAM role as instructed, and I can see the EC2 instances. WHen using the toy example these are correctly filled in (i.e., instead of being changeme:[email protected] it is user:[email protected]).

    Actual Behavior

    WHen connecting to the proxy I get the error message: The administrator of this proxy has not configured it to service requests from you.


    This is almost certainly from my misunderstanding the docs (as I haven't worked with AWS before). Are we meant to set the username and password somewhere in AWS too? I also tried creating a password for the IAM user and using that, but that isn't allowed to be alphanumeric. I'd also be happy to write some documentation for entry/beginners like myself once I get it up and running

    bug 
    opened by EthanTheMathmo 2
  • Can't change the default zone of GCP Proxies

    Can't change the default zone of GCP Proxies

    docker run -e USERNAME='xxx' -e PASSWORD='xxx' -e GCP_ENABLED=True -e GCP_PROJECT='xxx' -e GCP_SIZE='e2-micro' -e GCP_ZONE='asia-northeast3-a' -e GCP_SERVICE_ACCOUNT_KEY='xxx' -it -p 8000:8000 laffin/cloudproxy:latest

    I tried this command but it always creates instances in the us default zone, I can't switch it to the different zone. Can you fix this ?

    Thank you

    bug 
    opened by LuongPhuHoa 2
  • Cancel spot requests when associated instances are terminated

    Cancel spot requests when associated instances are terminated

    When deleting proxies filled by one-time spot requests, the instances are terminated, but the spot request itself is not cancelled, leaving the door open to being filled again in the future when not associated with cloudproxy. This PR deletes the spot request if it exists in the delete_proxy() function. Related to #42, but unclear if applicable to persistent spot requests.

    opened by henryzxu 2
  • Ghost proxies when destroying using spot in AWS

    Ghost proxies when destroying using spot in AWS

    Expected Behavior

    The proxies are destroyed and remain gone.

    Actual Behavior

    The proxies are destroyed, then some unknown time later are restarted but without the cloudproxy tag since they are started by something other than cloudproxy. They are fully functional proxies though, just missing the tag.

    Steps to Reproduce the Problem

    1. Start cloudproxy
    2. Increase servers to 30, wait.
    3. Decrease servers to 5, wait.

    Specifications

    • Version: 0.5.2

    Solution

    My guess is that when you destroy the instances you also have to remove the spot request somehow, but I don't quite understand why.

    bug 
    opened by xanrag 2
  • Add SSL config for HTTPS

    Add SSL config for HTTPS

    I think this will partly solve https://github.com/claffin/cloudproxy/issues/3.

    The cert.pem and key.pem can be generated with mkcert

    Tbh I have no idea what I'm doing, any suggestions would be much appreciated. I tested this locally and I have the docker image running on https now.

    Edit: I suppose mkcert is only good for https in local environments. My goal is to deploy Cloudproxy to an AWS ec2 instance and make it accessible via HTTPS, and ensure communication between the cloudproxy server and proxy servers are done via HTTPS as well.

    opened by jcohenho 1
  • Multiple regions & Historical reporting

    Multiple regions & Historical reporting

    Hello

    Thank you very much for this great script, simple and can be a replacement for scraproxy

    Is it possible to define multiple regions? for example, I want to have 3-5 regions with digitalocean and cloudproxy will randomly create VMs on them

    my second question is there any log file or report that I can use to check how many VMs has been created, the duration, and the period? so I can compare my hosting cost let's say on weekly bases and decide which cloud provider is better for me?

    enhancement 
    opened by mrahmadt 1
  • Support multiple client applications sharing single proxy cloud

    Support multiple client applications sharing single proxy cloud

    One thing I've always missed in Scrapoxy is ability to support multiple clients. Would be great to see it implemented here.

    In Scrapoxy you could set (min, required, max) scaling and it works well as long as there is just one client application trying to use the proxy cloud. But as soon as you want to share same cloud between multiple applications, you run into a problem that they conflict with each other. E.g. when one application has finished crawling, it can't just downscale the cloud as it's still being used by another application etc.

    Ideally that requires a centralized logic that manages requests from multiple client applications. It would need to track the most recently requested scaling for each client, and combine them. A very simple logic could be to just take max of all min/required/max parameters across clients and use that as the scaling. That way, the cloud would only downscale when the last client sends the downscale request. You can imagine logic becoming more complex though, e.g. when one client asks to destroy an instance that the other client still uses etc.

    As an extra feature, it should ideally handle stale clients - if a client has not communicated with it for a while, it should disregard its requirements, to avoid leaving dangling instances when client unexpectedly disappears.

    enhancement 
    opened by nirvana-msu 0
  • Not all environment vars passed to container being used

    Not all environment vars passed to container being used

    Report of -e DIGITALOCEAN_MIN_SCALING=0 -e DIGITALOCEAN_MAX_SCALING=0 commands do not work, it always starts at 2.

    Originally posted by @sblfc in https://github.com/claffin/cloudproxy/issues/21#issuecomment-836554779

    bug 
    opened by claffin 0
  • What providers should be added next?

    What providers should be added next?

    At the moment CloudProxy supports AWS and DigitalOcean, which is enough for my own personal use case. I'm keen to hear if there is interest in other providers being supported, please share here and I will prioritise. Otherwise, new features will be prioritised for now.

    enhancement 
    opened by claffin 6
Releases(v0.6.5-beta)
  • v0.6.5-beta(Sep 27, 2022)

  • v0.6.4-beta(Jul 5, 2022)

  • v0.6.3-beta(Feb 13, 2022)

  • v0.6.1-beta(Jul 19, 2021)

  • v0.6.0-beta(Jul 4, 2021)

  • v0.5.2-beta(Jul 1, 2021)

  • v0.5.1-beta(Jul 1, 2021)

  • v0.5.0-beta(Jun 28, 2021)

  • v0.4.0-beta(Jun 15, 2021)

    • #24 Bugfix AWS delete only checking the first instance
    • Change retries to 1 and set a timeout of 10s on fetch_ip
    • Rewrote the check_alive function to be much simpler, the fetch_ip check was not viable at 20+ proxies. It took too long.
    • Updated ip_list not to return IP:s slated for destruction
    • Added option to restart AWS proxies, much faster than destroy/create and fetches a new IP. Not supported for DO.
    • Opened up port 22 on proxies for debugging, future enhancement is to only allow web control. (Use the EC2_INSTANCE_CONNECT filter for the service parameter to get the IP address ranges in the EC2 Instance Connect subset. )
    • Enhanced status messages a bit in the check_alive for AWS
    • Moved check_delete/stop to before provision so it removes and then immediately provisions a new one instead of waiting 20s for the next tick
    • Changed the proxy software to tinyproxy directly on the image instead of using docker. Much faster deployment and less CPU intensive so should work better with t2.nano
    • Updated the settings checks to compare true/false as a string since it seems to be what it is getting, earlier a value of False in the config would read as true.
    • Updated environ get to match the doc (ie SCALING instead of SCALE)
    • Added botocore to requirements.txt, which seemed to be missing.

    @xanrag thank you for all these fixes.

    Source code(tar.gz)
    Source code(zip)
  • v0.3.3-beta(May 10, 2021)

  • v0.3.2-beta(May 7, 2021)

  • v0.3.1-beta(May 6, 2021)

  • v0.3.0-beta(Apr 28, 2021)

  • v0.2.2-beta(Apr 27, 2021)

    • Updated error handling
    • Added retry to check alive
    • Added CORS and delete_queue now set
    • Schedule with providers every 20 seconds now and removed auth from IP
    • Fixed failing tests
    Source code(tar.gz)
    Source code(zip)
  • v0.2.1-beta(Apr 26, 2021)

  • v0.2.0-beta(Apr 22, 2021)

  • v0.1.1-alpha(Apr 19, 2021)

  • v0.1.0-alpha(Apr 19, 2021)

Owner
Christian Laffin
Christian Laffin
Caching for HTTPX

Caching for HTTPX. Note: Early development / alpha, use at your own risk. This package adds caching functionality to HTTPX Adapted from Eric Larson's

Mehul Solanki 0 Oct 08, 2022
A Python package for handling free proxies from sslproxies.org

SSLProxies Get free working proxy from https://www.sslproxies.org/ and use it in your script This is a port/rewrite of free-proxy with additional feat

Nate Harris 2 Mar 17, 2022
syncio: asyncio, without await

syncio: asyncio, without await asyncio can look very intimidating to newcomers, because of the async/await syntax. Even experienced programmers can ge

David Brochart 10 Nov 21, 2022
9SPY: a Windows RAT built in Python using sockets

9SPY 👁‍🗨 9SPY is a Windows RAT built in Python using sockets Features Features will be listed here soon, there are currenly 14 Information This is a

doop 12 Dec 01, 2022
🥑 A Python ARP and DNS Spoofer CLI and INTERFACE 🥓

NEXTGEN SPOOFER 🥑 A Python ARP and DNS Spoofer CLI and INTERFACE 🥓 CLI - advanced pentesters INTERFACE - beginners SetUp Make sure you installed P

9 Dec 25, 2022
A Python Tor template on Gitpod

A Python Tor template on Gitpod This is template configured for ephemeral development environments on Gitpod. prebuild Get Started With Your Own Proje

Ivan Yastrebov 1 Dec 17, 2021
Truetool - A TrueCharts automatic and bulk update utility

truetool A easy tool for frequently used TrueNAS SCALE CLI utilities. Previously

TrueCharts 125 Jan 04, 2023
Easily share folders between VMs.

This package aims to solve the problem of inter-VM file sharing (rather than manual copying) by allowing a VM to mount folders from any other VM's file system (or mounted network shares).

Rudd-O 12 Oct 17, 2022
Start a simple TCP Listener on a specified IP Address and Port Number and receive incoming connections.

About Start a simple TCP Listener on a specified IP Address and Port Number and receive incoming connections. Download Clone using git in terminal(git

AgentGeneric 5 Feb 24, 2022
This is a simple python code to get the list of banned IP addresses from Fail2ban

Fail2ban Scripts Usage banned_list.py This script tries to get the banned list of IP addresses by Fail2ban for the service freeswitch. You can modify

Yehor Smoliakov 9 Dec 28, 2022
Fast and configurable script to get and check free HTTP, SOCKS4 and SOCKS5 proxy lists from different sources and save them to files

Fast and configurable script to get and check free HTTP, SOCKS4 and SOCKS5 proxy lists from different sources and save them to files. It can also get geolocation for each proxy and check if proxies a

Almaz 385 Dec 31, 2022
A web-based app that allows easy, simple - and if desired high-throughput - analysis of qPCR data

qpcr-Analyser A web-based GUI for the qpcr package that allows easy, simple and high-throughput analysis of qPCR data. As is described in more detail

1 Sep 13, 2022
The best way to send tokens into a specific server, which can be used for discord bots, and some tools..

XTRA420 The simplified version of sending tokens into a server, the basic and fastest way.. When using this, you have the option to use proxies (http)

07v 1 Nov 30, 2021
Simple Python Script to Parse Apache Log, Get all Unique IPs and Urls visited by that IP

Parse_Apache_Log Simple Python Script to Parse Apache Log, Get all Unique IPs and Urls visited by that IP. It will create 3 different files. allIP.txt

Kathan Patel 2 Mar 29, 2022
Some files casually made by @AneekBiswas

Python-Tools All Pyhthon Files are created and managed by @AneekBiswas Modules needed to be downloaded 1.CLI bagels.py random guess.py random text-tow

1 Feb 23, 2022
Simple P2P application for sending files over open and forwarded network ports.

FileShareV2 A major overhaul to the V1 (now deprecated) FileShare application. V2 brings major improvements in both UI and performance. V2 is now base

Michael Wang 1 Nov 23, 2021
InfraGenie is allows you to split out your infrastructure project into separate independent pieces, each with its own terraform state.

🧞 InfraGenie InfraGenie is allows you to split out your infrastructure project into separate independent pieces, each with its own terraform state. T

Digger 53 Nov 23, 2022
Edge static generator. Also Edge means: the outside limit of an object, area, or surface.

Edge Edge is a new static generator. Edge is onworking. Do not clone or do any changes. No P.R will be merged Also Edge means: the outside limit of an

AmirHossein Mohammadi 12 Jan 16, 2022
Socialhome is best described as a federated personal profile with social networking functionality

Description Socialhome is best described as a federated personal profile with social networking functionality. Users can create rich content using Mar

Jason Robinson 332 Dec 30, 2022
A Simplest TCP client and echo server

Простейшие TCP-клиент и эхо-сервер Цель работы Познакомиться с приемами работы с сетевыми сокетами в языке программирования Python. Задания для самост

Юля Нагубнева 1 Oct 25, 2021