{"id":13557724,"url":"https://github.com/puffinrocks/puffin","last_synced_at":"2025-04-03T12:31:00.583Z","repository":{"id":71079038,"uuid":"44172461","full_name":"puffinrocks/puffin","owner":"puffinrocks","description":"lightweight webapp catalog based on containers, with user interface à la mobile app store","archived":true,"fork":false,"pushed_at":"2019-07-07T16:08:03.000Z","size":2184,"stargazers_count":89,"open_issues_count":12,"forks_count":20,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-11-04T08:35:49.145Z","etag":null,"topics":["app-store","decentralized","docker","puffin"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/puffinrocks.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2015-10-13T11:44:49.000Z","updated_at":"2024-08-27T16:16:14.000Z","dependencies_parsed_at":"2024-01-14T16:09:19.131Z","dependency_job_id":"d169da9c-d1e9-429b-bd79-f6db1cbe1087","html_url":"https://github.com/puffinrocks/puffin","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puffinrocks%2Fpuffin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puffinrocks%2Fpuffin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puffinrocks%2Fpuffin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puffinrocks%2Fpuffin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/puffinrocks","download_url":"https://codeload.github.com/puffinrocks/puffin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247002198,"owners_count":20867422,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app-store","decentralized","docker","puffin"],"created_at":"2024-08-01T12:04:30.701Z","updated_at":"2025-04-03T12:30:59.895Z","avatar_url":"https://github.com/puffinrocks.png","language":"Python","funding_links":[],"categories":["Python","docker","Self-hosting Solutions"],"sub_categories":["Localization"],"readme":"# Puffin\n[![Build Status](https://travis-ci.org/puffinrocks/puffin.svg?branch=master)](https://travis-ci.org/puffinrocks/puffin)\n\n**NOTE**: The project is not maintained anymore, the code is here for historical / fork purposes.\n\n## Introduction\n\nThe goal of the project is to allow average, tech-oriented user to run web applications with ease.\nThe idea is to create an easy to host, technology agnostic private cloud.\nThe ultimate aim is to achieve greater decentralization of web services, such as social networks,\nfile sharing, blog or email.\n\nWhile many other tools are looking at containers as a way to run massive\napplications, Puffin concentrates on lightweight ones, each serving just a handful of people.\n\nYou can chose to host the applications on Puffin managed platform or on your own server.\n\n## Demo\n\nLive demo platform is available at [puffin.rocks](http://puffin.rocks)\n\n[![Puffin Front Page](/doc/screenshot.png?raw=true)](http://puffin.rocks)\n\n## Architecture\n\nPuffin consists of two main components - application catalog and interface that provides\nmeans to run the applications. Any of them can be used independently - you\ncan run the applications from the catalog directly, and you can use the\ninterface to run your own applications that are not present in the catalog.\n\n## Technology\n\nPuffin is based on [Docker](https://www.docker.com/) containers and\nfor orchestration is uses [Docker Compose](https://docs.docker.com/compose/).\n\nSoftware is written in [Python 3](https://www.python.org/),\nusing [Flask](http://flask.pocoo.org/) web microframework.\n[PosttgreSQL](http://www.postgresql.org/) database is used to store the data.\n[Nginx](http://nginx.org/) is used as a reverse proxy.\n\n## Deployment\n\n### Local deployment\n\n#### Set-up DNS\n\nTo access installed applications from localhost you need to set-up local DNS.\nThere are many alternative solutions to this problem, the simplest one is to\nadd the following lines at the top of your /etc/resolv.conf file:\n\n    nameserver 127.0.0.1\n    options ndots:0\n\nWhich can be done by executing the following command as root:\n\n    echo -e \"nameserver 127.0.0.1\\noptions ndots:0\\n$(cat /etc/resolv.conf)\" \u003e /etc/resolv.conf\n\nMake sure that you disable your other local DNS server, such as dnsmasq,\nbefore running Puffin.\n\n#### Clone git repository\n\nPuffin application catalog is stored as git submodules. When cloning the repo\nmake sure to use --recursive option:\n\n    git clone --recursive git@github.com:puffinrocks/puffin.git\n\nOr if you have already cloned the repo then update the submodules in it:\n\n    git submodule update --init --recursive\n\n#### Run Puffin\n\nClone the repository and use [Docker Compose](https://docs.docker.com/compose/):\n\n    docker-compose up\n\nGo to [http://puffin.localhost](http://puffin.localhost) to access Puffin.\nLog In as user \"puffin\", password \"puffin\".\nEmails sent from Puffin are accessible via embedded Mailhog server at\n[http://mailhog.localhost](http://mailhog.localhost).\n\nIf [http://puffin.localhost](http://puffin.localhost) is not accessible you can\ntry connecting to Puffin via a port: [http://localhost:8080](http://localhost:8080).\nHowever, without DNS configured correctly, you won't be able to access the apps.\n\nPuffin server is automatically reloaded on every code change thanks\nto [reload](https://github.com/loomchild/reload).\nTo rebuild the code after making more substantial change, such as modifying\ndependencies, run:\n\n    docker-compose build\n\nPuffin contains several convenience commands to upgrade the database,\nmanage users, execute internal shell, etc. To get a complete list, run:\n\n    docker-compose run puffin --help\n\n### Production deployment\n\n#### Configuration\n\nTo deploy Puffin for private needs, for a single user or a limited number of users,\nuse [docker-compose-example.yml](./docker-compose-example.yml) file as a basis:\n\n    cp docker-compose-example.yml docker-compose-production.yml\n\nYou need to change SERVER_NAME and VIRTUAL_HOST variables to point to your domain.\nYou also need to set SECRET_KEY variable to a random value.\n\nFor a full list of configuration options see [puffin/core/config.py](puffin/core/config.py).\n\n#### Email\n\nTo send emails from Puffin and the applications you need to configure few environment variables\nbefore starting Puffin. It's probably easiest to register to an external email service to avoid\nbeing classified as spammer. The variables are (not all are obligatory, see\n[puffin/core/config.py](puffin/core/config.py) for more details):\n\n    MAIL_SERVER\n    MAIL_PORT\n    MAIL_USE_TLS\n    MAIL_USE_SSL\n    MAIL_USERNAME\n    MAIL_PASSWORD\n    MAIL_DEFAULT_SENDER\n    MAIL_SUPPRESS_SEND\n\n#### Set-up DNS\n\nOn public server you need to configure wildacard DNS record to point to your\nroot domain and all its subdomains.\n\n#### Docker Machine\n\nIf you would like to deploy Puffin on a remote server, Docker Machine comes in handy.\nYou can easily install Docker [in the cloud](https://docs.docker.com/machine/get-started-cloud/)\nor on [your own server](http://loomchild.net/2015/09/20/your-own-docker-machine/).\n\nTo instruct Docker to interact with remote server run:\n\n    eval \"$(docker-machine env [machine-name])\"\n\n#### Run Puffin\n\nFinally you can run Puffin:\n\n    docker-compose -f docker-compose-production.yml up -d\n\n#### Configure users\n\nInitially only \"puffin\" user with \"puffin\" password will be created - make\nsure to change the password before exposing puffin to the outside world.\nLater you can either allow other users to register themselves on your platform\n(via SECURITY_REGISTERABLE=True config setting) or create them manually:\n\n    docker-compose run puffin user create [login]\n\n(The password will be the same as login, so it should be changed as soon as\npossible.)\n\n#### Clustering\n\nClustering is currently not supported, but you may run apps on a separate\nmachine than Puffin server itself. To achieve that take a look on MACHINE\\_\\* options.\nYou also won't need network sections in your docker-compose file,\nsince the networks will be created automatically on the remote machine.\n\n#### Application Update \u0026 Backup\n\nApplication versions are regularly updated. In order to assure than new version doesn't\ncorrupt the data, an automatic backup of all volumes is performed on every application restart.\n\n# Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n# Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md).\n\n# License\n\nAGPL, see [LICENSE.txt](LICENSE.txt) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuffinrocks%2Fpuffin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpuffinrocks%2Fpuffin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuffinrocks%2Fpuffin/lists"}