feat(lang): Add docs translation in br, ca, de, el, es, it, nl, pl, pt, sv

This commit is contained in:
Benjamin Bellamy 2023-09-03 23:01:23 +02:00
parent 6be38e9fda
commit 69587d53ac
110 changed files with 5539 additions and 10265 deletions

View File

@ -1,4 +1,4 @@
{
"label": "Contributing",
"label": "Heuliañ",
"position": 3
}

View File

@ -1,154 +1,112 @@
---
title: Guidelines
title: Tregerioù
---
# Contributing to Castopod
# O rei davet da Castopod
Love Castopod and want to help? Thanks so much, there's something to do for
everybody!
Amoureux de Castopod et souhaitez aider ? Merci beaucoup, il y a quelque chose à faire pour tout le monde !
Please take a moment to review this document in order to make the contribution
process easy and effective for everyone involved.
Prenez un moment pour parcourir ce document afin de rendre le processus de contribution facile et efficace pour tous les participants.
Following these guidelines helps to communicate that you respect the time of the
developers managing and developing this open source project. In return, they
should reciprocate that respect in addressing your issue or assessing patches
and features.
Le respect de ces directives contribue à communiquer que vous respectez le temps des développeurs qui gèrent et développent ce projet open source. En retour, ils devraient témoigner de ce respect en traitant votre problème ou en évaluant les correctifs et les fonctionnalités.
::: info Note
**Any** contribution made on a repository other than
[the original repository](https://code.castopod.org/adaures/castopod) will not
be accepted.
Toute contribution faite sur un dépôt autre que
[le dépôt original](https://code.castopod.org/adaures/castopod) ne sera pas acceptée.
:::
## Using the issue tracker
## Utilisation du suiveur d'incidents
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
Le [suiveur d'incidents](https://code.castopod.org/adaures/castopod/-/issues) est le canal privilégié pour [les rapports de bugs](#rapports-de-bugs), [les demandes de fonctionnalités](#demandes-de-fonctionnalités) et [la soumission de demandes d'intégration](#demandes-d'intégration).
## ⚠️ Security issues and vulnerabilities
## ⚠️ Problèmes de sécurité et vulnérabilités
If you encounter any security issue or vulnerability in the Castopod source,
please contact us directly by email at
[security@castopod.org](mailto:security@castopod.org)
Si vous rencontrez un problème de sécurité ou une vulnérabilité dans la source de Castopod, veuillez nous contacter directement par email à l'adresse [security@castopod.org](mailto:security@castopod.org).
## Bug reports
## Rapports de bugs
A bug is a _demonstrable problem_ that is caused by the code in the repository.
Good bug reports are extremely helpful - thank you!
Un bug est un problème _démontrable_ causé par le code du dépôt. Les bons rapports de bugs sont extrêmement utiles - merci !
Guidelines for bug reports:
Directives pour les rapports de bugs :
1. **Use the issue search** — check if the issue has already been
reported.
1. **Utilisez la recherche d'incidents** - vérifiez si le problème a déjà été rapporté.
2. **Check if the issue has been fixed** — try to reproduce it using the
latest `main` branch in the repository.
2. **Vérifiez si le problème a été résolu** - essayez de le reproduire en utilisant la dernière branche `main` du dépôt.
3. **Isolate the problem** — ideally create a
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
3. **Isolez le problème** - idéalement, créez un
[cas de test réduit](https://css-tricks.com/reduced-test-cases/) et un exemple en direct.
A good bug report shouldn't leave others needing to chase you up for more
information. Please try to be as detailed as possible in your report. What is
your environment? What steps will reproduce the issue? What browser(s) and OS
experience the problem? What would you expect to be the outcome? All these
details will help people to fix any potential bugs.
Un bon rapport de bug ne doit pas laisser les autres vous demander plus d'informations. Essayez d'être aussi détaillé que possible dans votre rapport. Quel est votre environnement ? Quelles sont les étapes pour reproduire le problème ? Quel(s) navigateur(s) et système(s) d'exploitation rencontrent le problème ? Qu'attendez-vous comme résultat ? Tous ces détails aideront les gens à corriger tout bug potentiel.
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> have been created for this project. You may use them to help you follow those
> guidelines.
> Des [modèles d'incidents](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates) ont été créés pour ce projet. Vous pouvez les utiliser pour vous aider à suivre ces directives.
## Feature requests
## Demandes de fonctionnalités
Feature requests are welcome. But take a moment to find out whether your idea
fits with the scope and aims of the project. It's up to _you_ to make a strong
case to convince the project's developers of the merits of this feature. Please
provide as much detail and context as possible.
Les demandes de fonctionnalités sont les bienvenues. Mais prenez un moment pour savoir si votre idée correspond au cadre et aux objectifs du projet. C'est à vous de fournir suffisamment de détails et de contexte pour convaincre les développeurs du projet des mérites de cette fonctionnalité. Veuillez fournir autant de détails et de contexte que possible.
## Pull requests
## Demandes d'intégration
Good pull requests - patches, improvements, new features - are a fantastic help.
They should remain focused in scope and avoid containing unrelated commits.
Les bonnes demandes d'intégration - correctifs, améliorations, nouvelles fonctionnalités - sont d'une grande aide. Elles doivent rester centrées sur l'objectif et éviter de contenir des commits non liés.
**Please ask first** before embarking on any significant pull request (e.g.
implementing features, refactoring code, porting to a different language),
otherwise you risk spending a lot of time working on something that the
project's developers might not want to merge into the project.
**Veuillez demander d'abord** avant de vous lancer dans une demande d'intégration importante (par exemple, la mise en œuvre de fonctionnalités, la refonte du code, le portage vers un autre langage), sinon vous risquez de passer beaucoup de temps à travailler sur quelque chose que les développeurs du projet ne souhaitent peut-être pas fusionner dans celui-ci.
Please adhere to the coding conventions used throughout a project (indentation,
accurate comments, etc.) and any other requirements (such as test coverage).
Veuillez respecter les conventions de codage utilisées dans tout projet (indentation, commentaires précis, etc.) ainsi que toutes les autres exigences (telles que la couverture des tests).
Adhering to the following process is the best way to get your work included in
the project:
Le respect du processus suivant est le meilleur moyen d'intégrer votre travail dans le projet :
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the
project, clone your fork, and configure the remotes:
1. [Faites un Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) du projet, clonez votre fork et configurez les remotes :
```bash
# Clone your fork of the repo into the current directory
# Clonez votre fork du dépôt dans le répertoire courant
git clone https://code.castopod.org/<your-username>/castopod.git
# Navigate to the newly cloned directory
# Allez dans le répertoire nouvellement cloné
cd castopod
# Assign the original repo to a remote called "upstream"
# Attribuez le dépôt d'origine à un remote appelé "upstream"
git remote add upstream https://code.castopod.org/adaures/castopod.git
```
2. If you cloned a while ago, get the latest changes from upstream:
2. Si vous avez cloné il y a un certain temps, récupérez les derniers changements depuis l'amont :
```bash
git checkout main
git pull upstream main
```
3. Create a new topic branch (off the `main` branch) to contain your feature,
change, or fix:
3. Créez une nouvelle branche de sujet (à partir de la branche `main`) pour contenir votre fonctionnalité, votre modification ou votre correction :
```bash
git checkout -b <topic-branch-name>
git checkout -b <nom-de-branche-de-sujet>
```
4. Commit your changes in logical chunks. Please adhere to these
[git commit message guidelines](https://conventionalcommits.org/) or your
code is unlikely be merged into the main project. Use Git's
[interactive rebase](https://help.github.com/articles/about-git-rebase/)
feature to tidy up your commits before making them public.
4. Committez vos modifications en morceaux logiques. Veuillez respecter ces
[directives de message de commit Git](https://conventionalcommits.org/) ou votre code risque de ne pas être fusionné dans le projet principal. Utilisez la
fonction [rebase interactif de Git](https://help.github.com/articles/about-git-rebase/) pour nettoyer vos commits avant de les rendre publics.
5. Locally merge (or rebase) the upstream dev branch into your topic branch:
5. Fusionnez localement (ou rebase) la branche de développement en amont dans votre branche de sujet :
```bash
git pull [--rebase] upstream main
```
6. Push your topic branch up to your fork:
6. Poussez votre branche de sujet vers votre fork :
```bash
git push origin <topic-branch-name>
git push origin <nom-de-branche-de-sujet>
```
7. [Open a Pull Request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
with a clear title and description.
7. [Ouvrez une demande d'intégration](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork) avec un titre et une description clairs.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
license your work under the terms of the
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
**IMPORTANT** : En soumettant un correctif, vous acceptez de permettre aux propriétaires du projet de licencier votre travail selon les termes de la [GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
## Collaborating guidelines
## Directives de collaboration
There are few basic rules to ensure high quality of the project:
Il y a quelques règles de base pour assurer une haute qualité du projet :
- Before merging, a PR requires at least two approvals from the collaborators
unless it's an architectural change, a large feature, etc. If it is, then at
least 50% of the core team have to agree to merge it, with every team member
having a full veto right. (i.e. every single one can block any PR)
- A PR should remain open for at least two days before merging (does not apply
for trivial contributions like fixing a typo). This way everyone has enough
time to look into it.
- Avant la fusion, une PR doit recevoir au moins deux approbations des collaborateurs, à moins qu'il ne s'agisse d'un changement architectural, d'une grande fonctionnalité, etc. Dans ces cas, au moins 50% de l'équipe de base doivent être d'accord pour la fusionner, chaque membre de l'équipe ayant un droit de veto complet. (c'est-à-dire que chacun peut bloquer n'importe quelle PR)
- Une PR doit rester ouverte pendant au moins deux jours avant d'être fusionnée (cela ne s'applique pas aux contributions triviales comme la correction d'une faute de frappe). De cette façon, chacun a suffisamment de temps pour l'examiner.
You are always welcome to discuss and propose improvements to this guideline.
Vous êtes toujours les bienvenus pour discuter et proposer des améliorations à cette directive.

View File

@ -1,423 +1,43 @@
---
title: Development setup
title: Prevez stummañ an hennezh
sidebarDepth: 3
---
# Setup your development environment
# Prevez stummañ an envoriamant ober-tre
## Introduction
## Aozet
Castopod is a web app based on the `php` framework
[CodeIgniter 4](https://codeigniter.com).
[[CodeIgniter 4]](https://codeigniter.com) eo Castopod, ul laezh web o kinnig
wordpress hag oberlec'hiañ podcasts.
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
Ober a ra neus un envoriamant [Docker](https://www.docker.com/) evit aozadur
alistri, un `docker-compose.yml` ha `Dockerfile` a zo en an droer gwask a-drugarez da vat-da-ober.
> You don't need any prior knowledge of Docker to follow the next steps.
> However, if you wish to use your own environment, feel free to do so!
> Ket ret deoc'h bezañ evidoc'h memestra gant Docker evitañ ober pep stapenn
> an drapo. Ma fell deoc'h implijout ho kement darzhoù unan, tepelt er
> mod-se!
## Setup instructions
## Kohed ebet evit stummañ
### 1. Pre-requisites
### 1. Ar oc'h en em winikal
0. Install [docker](https://docs.docker.com/get-docker).
0. Staliañ an diazired [docker](https://docs.docker.com/get-docker).
1. Clone Castopod project by running:
1. Kloniañ ar Roll ar safarez gant ober:
```bash
git clone https://code.castopod.org/adaures/castopod.git
```
2. Create a `.env` file with the minimum required config to connect the app to
the database and use redis as a cache handler:
2. Krouiñ ur restr `.env` gant kabell minorel ret evidoc'h stagañ ar roll gant
an diazired hag ober implij an diazired redis a-drugarez da c'hoarienn ar
roll.
```ini
CI_ENVIRONMENT="development"
# If set to development, you must run `npm run dev` to start the static assets server
# Ma vez roet evidoc'h development, ec'h eo ret deoc'h rañañ `npm run dev` evitañ startañ an diazired trummennañ statik
vite.environment="development"
# By default, this is set to true in the app config.
# For development, this must be set to false as it is
# on a local environment
app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/"
media.baseURL="http://localhost:8080/"
admin.gateway="cp-admin"
auth.gateway="cp-auth"
database.default.hostname="mariadb"
database.default.database="castopod"
database.default.username="castopod"
database.default.password="castopod"
cache.handler="redis"
cache.redis.host = "redis"
# You may not want to use redis as your cache handler
# Comment/remove the two lines above and uncomment
# the next line for file caching.
#cache.handler="file"
```
> _NB._ You can tweak your environment by setting more environment variables
> in your custom `.env` file. See the `env` for examples or the
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
> for more info.
3. (for docker desktop) Add the repository you've cloned to docker desktop's
`Settings` > `Resources` > `File Sharing`
### 2. (recommended) Develop inside the app Container with VSCode
If you're working in VSCode, you can take advantage of the `.devcontainer/`
folder. It defines a development environment (dev container) with preinstalled
requirements and VSCode extensions so you don't have to worry about them. All
required services will be loaded automagically! 🪄
1. Install the VSCode extension
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Open in container`
> The VSCode window will reload inside the dev container. Expect several
> minutes during first load as it is building all necessary services.
**Note**: The dev container will start by running Castopod's php server.
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
```bash
# run Vite dev server
npm run dev
```
If there is any issue with the php server not running, you can restart them
using the following commands:
```bash
# run Castopod server
php spark serve - 0.0.0.0
```
3. You're all set! 🎉
You're now **inside the dev container**, you may use the VSCode console
(`Terminal` > `New Terminal`) to run any command:
```bash
# PHP is installed
php -v
# Composer is installed
composer -V
# npm is installed
npm -v
# git is installed
git version
```
For more info, see
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
### 3. Start hacking
You're all set! Start working your magic by updating the project's files! Help
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
To see your changes, go to:
- `http://localhost:8080/` for the Castopod app
- `http://localhost:8888/` for the phpmyadmin interface:
- username: **castopod**
- password: **castopod**
### 2-alt. Develop outside the app container
You do not wish to use the VSCode devcontainer? No problem!
1. Start docker containers manually:
Go to project's root folder and run:
```bash
# starts all services declared in docker-compose.yml file
# -d option starts the containers in the background
docker-compose up -d
# See all running processes (you should see 3 processes running)
docker-compose ps
# Alternatively, you can check all docker processes
docker ps -a
```
> The `docker-compose up -d` command will boot 4 containers in the
> background:
>
> - `castopod_app`: a php based container with Castopod requirements
> installed
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries
> and pages caching
> - `castopod_mariadb`: a [mariadb](https://mariadb.org/) server for
> persistent data
> - `castopod_phpmyadmin`: a phpmyadmin server to visualize the mariadb
> database.
2. Run any command inside the containers by prefixing them with
`docker-compose run --rm app`:
```bash
# use PHP
docker-compose run --rm app php -v
# use Composer
docker-compose run --rm app composer -V
# use npm
docker-compose run --rm app npm -v
# use git
docker-compose run --rm app git version
```
---
## Going Further
### Install Castopod's dependencies
1. Install php dependencies with [Composer](https://getcomposer.org/)
```bash
composer install
```
::: info Note
The php dependencies aren't included in the repository. Composer will check
the `composer.json` and `composer.lock` files to download the packages with
the right versions. The dependencies will live under the `vendor/` folder.
For more info, check out the
[Composer documentation](https://getcomposer.org/doc/).
:::
2. Install javascript dependencies with [npm](https://www.npmjs.com/)
```bash
npm install
```
::: info Note
The javascript dependencies aren't included in the repository. Npm will check
the `package.json` and `package.lock` files to download the packages with the
right versions. The dependencies will live under the `node_module` folder.
For more info, check out the [NPM documentation](https://docs.npmjs.com/).
:::
3. Generate static assets:
```bash
# build all static assets at once
npm run build:static
# build specific assets
npm run build:icons
npm run build:svg
```
::: info Note
The static assets generated live under the `public/assets` folder, it
includes javascript, styles, images, fonts, icons and svg files.
:::
### Initialize and populate database
::: tip Tip
You may skip this section if you go through the install wizard (go to
`/cp-install`).
:::
1. Build the database with the migrate command:
```bash
# loads the database schema during first migration
php spark migrate -all
```
You may need to undo the migration (rollback):
```bash
# rolls back database schema (deletes all tables and their content)
php spark migrate:rollback
```
2. Populate the database with the required data:
```bash
# Populates all required data
php spark db:seed AppSeeder
```
You may choose to add data separately:
```bash
# Populates all categories
php spark db:seed CategorySeeder
# Populates all Languages
php spark db:seed LanguageSeeder
# Populates all podcasts platforms
php spark db:seed PlatformSeeder
# Populates all Authentication data (roles definition…)
php spark db:seed AuthSeeder
```
3. (optionnal) Populate the database with test data:
- Populate test data (login: admin / password: AGUehL3P)
```bash
php spark db:seed TestSeeder
```
- Populate with fake podcast analytics:
```bash
php spark db:seed FakePodcastsAnalyticsSeeder
```
- Populate with fake website analytics:
```bash
php spark db:seed FakeWebsiteAnalyticsSeeder
```
TestSeeder will add an active superadmin user with the following credentials:
- username: **admin**
- password: **AGUehL3P**
### Useful docker / docker-compose commands
- Monitor the app container:
```bash
docker-compose logs --tail 50 --follow --timestamps app
```
- Interact with redis server using included redis-cli command:
```bash
docker exec -it castopod_redis redis-cli
```
- Monitor the redis container:
```bash
docker-compose logs --tail 50 --follow --timestamps redis
```
- Monitor the mariadb container:
```bash
docker-compose logs --tail 50 --follow --timestamps mariadb
```
- Monitor the phpmyadmin container:
```bash
docker-compose logs --tail 50 --follow --timestamps phpmyadmin
```
- Restart docker containers:
```bash
docker-compose restart
```
- Destroy all containers, opposite of `up` command:
```bash
docker-compose down
```
- Rebuild app container:
```bash
docker-compose build app
```
Check [docker](https://docs.docker.com/engine/reference/commandline/docker/) and
[docker-compose](https://docs.docker.com/compose/reference/) documentations for
more insights.
## Known issues
### Allocation failed - JavaScript heap out of memory
This happens when running `npm install`.
👉 By default, docker might not have access to enough RAM. Allocate more memory
and run `npm install` again.
### (Linux) Files created inside container are attributed to root locally
You may use Linux user namespaces to fix this on your machine:
::: info Note
Replace "username" with your local username
:::
1. Go to `/etc/docker/daemon.json` and add:
```json
{
"userns-remap": "username"
}
```
2. Configure the subordinate uid/guid:
```bash
# in /etc/subuid
username:1000:1
username:100000:65536
```
```bash
# in /etc/subgid
username:1000:1
username:100000:65536
```
3. Restart docker:
```bash
sudo systemctl restart docker
```
4. That's it! Now, the root user in the container will be mapped to the user on
your local machine, no more permission issues! 🎉
You can check
[this great article](https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/)
to know more about how it works.
# Dre verd e veze

View File

@ -1,4 +1,4 @@
{
"label": "Getting Started",
"label": "O kregiñ",
"position": 2
}

View File

@ -1,87 +1,79 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Dilennadur ha Aotreoù
# Authentication & Authorization
Gestionet eo dilennadur ha aotreoù e Castopod en ur ober gant `codeigniter/shield` kevreet gant ar gerioù doujet. Kinniget e vez al rolloù ha dilennadurioù war duo stumm div niver :
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [war lec'h an enklask](#1-rolloù-ha-dilennadurioù-war-lec'h-an-enklask)
2. [diwar-benn ur podcast](#2-rolloù-ha-dilennadurioù-diwar-benn-ur-podcast)
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Rolloù ha dilennadurioù war lec'h an enklask
## 1. Instance wide roles and permissions
### Rolloù war lec'h an enklask
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Na sistañ na kemmoñ an devezh-mañ -->
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
| rol | deskrivadur | dilennadurioù |
| ------------ | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Super admin | Diell du uriñ war Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Tolter | Manaj an danvez en Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | An implijerien a veva gant Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
### Dilennadurioù war lec'h an enklask
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Na sistañ na kemmoñ an devezh-mañ -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
| dilennadur | deskrivadur |
| ----------------------- | ----------------------------------------------------------------------------------------------- |
| admin.access | Kerzhel da zenvel eno adalek kêr maez d'ar mareoù Castopod e vez diskouezhet. |
| admin.settings | Kerzhel da aked da preferadennoù Castopod. |
| users.manage | Kerzhel da monedañ an implijerien e Castopod. |
| persons.manage | Kerzhel da monedañ ar brudennoù. |
| pages.manage | Kerzhel da monedañ ar bajennoù. |
| podcasts.view | Kerzhel da welout an holl podcastoù. |
| podcasts.create | Kerzhel da grouiñ podcastoù nevez. |
| podcasts.import | Kerzhel da imporzhiañ podcastoù. |
| fediverse.manage-blocks | Kerzhel da ostilhoù blokea castorien/tirioù fediverse da gomz diouzh Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
## 2. Rolloù ha dilennadurioù diwar-benn ur podcast
### Per podcast roles
### Rolloù war buhez an enklask
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
<!-- AUTH-PODCAST-ROLES-LIST:START - Na sistañ na kemmoñ an devezh-mañ -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
| rol | deskrivadur | dilennadurioù |
| --------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Kontroll gwirouesel ouzh ar podcast #{id}. | \* |
| Reder | Manaj ar c'hoant hag an embannadur war ar podcast #{id}. | gwelet, kemm, embregiñ treuzkas, embregiñ urzhiataerien, embregiñ platfomoù, embregiñ embannadurioù, embregiñ niverennadennoù, kemm embregiñ, dilemel embregiñ, manaj embregiñ urzhiataerien, manaj embregiñ trolioù,
manaj embregiñ embannadurioù, manaj embregiñ commentoù |
| Aotrou | Manaj kontant ar podcast #{id}, met ne c'helle ket embannout anezho. | gwelet, manaj urzhiataerien, niverennadennoù, kemm niverennadennoù embregiñ, dilemel niverennadennoù |
| Devezhmat | Ousitan allenn eus ar podcast #{id}. | gwelet, kemm niverennadennoù |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
### Dilennadurioù war buhez an enklask
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Na sistañ na kemmoñ an devezh-mañ -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
| dilennadur | deskrivadur |
| ------------------------------ | ---------------------------------------------------------------------------------------------------- |
| gwelet | Gwelet daspyegelezh ha maez ar podcast #{id}. |
| kemm | Kemmañ ar podcast #{id}. |
| dilemel | Dilemel ar podcast #{id}. |
| embregiñ treuzkas | Kemmañ ar podcast treuzkaset #{id}. |
| embregiñ urzhiataerien | Gwiriañ/neuzeiañ embregiñ urzhiataerienient eus ar podcast #{id}. |
| embregiñ plaennerion | Gellet kempuniañ/skartañ ereuredoù al lunennañ embregel ar podcast #{id}. |
| embregiñ embannadurioù | Kemmañ ar podcast #{id}. |
| embregiñ niverennadennoù | Gwelet ha selaou treuzkas ar podcast #{id}. |
| embregiñ abonadennoù | Gwiriañ/neuzeiañ embregiñ an abonadennou eus ar podcast #{id}. |
| embregiñ embregelourion | Gwiriañ/neuzeiañ embregiñ embregelourion ar podcast #{id}. |
| embregiñ platfomoù | Gellet stlennu/dilemel liammoù etre ar podcast ha platfomoù #{id}. |
| embregiñ embregeriñ | Gell an embregiñ ar podcast #{id} embregeriñ. |
| embregiñ niverennadennoù | Gwiriañ/neuzeiañ embregiñ niverennadennoù eus ar podcast #{id}. |
| embregiñ treuzkredoù | Gwiriañ/neuzeiañ embregiñ treuzkredoù video pe sonenn eus ar podcast #{id}. |
| embregiñ embregelouriezhioù | Gwiriañ/neuzeiañ embregiñ embregelouriezhioù eus ar podcast #{id}. |
| embregiñ commentoù | Kemmañ/Seleiñ an aozerentoù war ur video eus ar podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -1,35 +1,28 @@
---
title: Official Docker images
title: Skoazelloù dreistlennadel Docker
sidebarDepth: 3
---
# Official Docker images
# Skoazelloù dreistlennadel Docker
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
En oberiant embann Castopod 3 skoazell dreistlennadel dre ar Restro_dressed Dockeñs :
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all
in one castopod image using nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): un holl-enn unan-stumm embannadenn Castopod a gousk gant ynji nginx
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): ar verzhiad mikro
gant pep tra zo anezho eus Castopod
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): ur skin eus Nginx evit Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
Deuit da essayal ez anvioù
## Supported tags
- `développer` [dibresel], ar verzhin-stub penn-blokhoù divyezhek
- `beta` [stabil], ar verzhin vanityou dibresel
- `1.x.x` [stabil], verzhin spaekadennel (abaoe `1.0.0`)
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Ur skouer da achampion
## Example usage
1. Install [docker](https://docs.docker.com/get-docker/) and
1. Montit [docker](https://docs.docker.com/get-docker/) ha
[docker-compose](https://docs.docker.com/compose/install/)
2. Create a `docker-compose.yml` file with the following:
2. Krouit ur restr `docker-compose.yml` gant an traoù-mañ :
```yml
version: "3.7"
@ -87,13 +80,12 @@ can be added as a cache handler.
castopod-db:
```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
Ret eo deoc'h troidigezañ boutailhoù nemetiñ ouzh ho aotrenioù (ennennoù p. ex.
`CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` ha `CP_ANALYTICS_SALT`).
3. Setup a reverse proxy for TLS (SSL/HTTPS)
3. Montit ur renverssez bregustell evit TLS (SSL/HTTPS)
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
Ret eo mont ul renverssez bregustell evit glotaat gant TLS. Gallout a reomp mont gant an betek [Caddy](https://caddyserver.com/):
```
#castopod
@ -102,57 +94,57 @@ can be added as a cache handler.
}
```
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
4. Leit-stur `docker-compose up -d`, kuitit evit ma vehe eno war
`https://castopod.example.com/cp-install` gant mañskrid ho dihuniañ.
5. You're all set, start podcasting! 🎙️🚀
5. Prest oc'h, deuit da embann! 🎙️🚀
## Environment Variables
## Aotrenioù Adalek
- **castopod/castopod** and **castopod/app**
- **castopod/castopod** ha **castopod/app**
| Variable name | Type (`default`) | Default |
| ------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Anv ar bajenn | Typ (`default`) | Parad pregemper |
| ------------------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | chadennell | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?chadennell | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?chadennell | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?chadennell | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | chadennell | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?chadennell | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?chadennell | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?chadennell | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?chadennell | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?chadennell | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` pe `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?chadennell | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?chadennell | `null` |
| **`CP_REDIS_PORT`** | ?niverenn | `6379` |
| **`CP_REDIS_DATABASE`** | ?niverenn | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?chadennell | `undefined` |
| **`CP_EMAIL_FROM`** | ?chadennell | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?chadennell | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?chadennell | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?niverenn | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` pe `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolezenn | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?niverenn | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolezenn | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?chadennell | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` pe `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?niverenn (gant saozh) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?niverenn (gant saozh) | `512M` |
| **`CP_TIMEOUT`** | ?niverenn | `900` |
- **castopod/web-server**
| Variable name | Type | Default |
| ---------------------- | --------------------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Anv ar bajenn | Typ | Parad pregemper |
| ------------------------------ | --------------------- | ---------------- |
| **`CP_APP_HOSTNAME`** | ?chadennell | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?niverenn (gant saozh) | `512M` |
| **`CP_TIMEOUT`** | ?niverenn | `900` |

View File

@ -1,221 +1,101 @@
---
title: Staliañ
title: Lec'hiadur
sidebarDepth: 3
---
# Penaos staliañ Castopod?
# Petra zo da ober evit staliañ Castopod?
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
Kaset eo bet Castopod da gas gant ma vo posupl. Mard oc'h o implijout un oberiant dedie pe-drosoc'h, posupl eo da staliañ war pep mañer ar servijer web a zegas PHP-MySQL.
::: tip Note
::: tip Notenn
We've released official Docker images for Castopod!
Kaset hon eus dastumenni Docker ofisiel evit Castopod!
If you prefer using Docker, you may skip this and go straight to the
[docker documentation](./docker.md) for Castopod.
Mard oc'h o soñj staliañ Docker, ur membris da daesmet Castopod, gellout a rit loñkañ kuit hemañ hag ober war lec'hienn [Docker Castopod](./docker.md).
:::
## Requirements
## Arventennoù
- PHP v8.1 only
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
- PHP v8.1 nemetken
- MariaDB version 5.7 pe c'hoazh pe MySQL version 10.2 pe lusiañ
- Geriañs HTTPS
- Oroerenn horlozh ntp-synced evit gwiriañ displya daoliou Breizh.
### PHP v8.1 only
### PHP v8.1 nemetken
PHP version 8.1 is required, with the following extensions installed:
Rez eo nemetken versadur 8.1 PHP, gant an estentiens War-lerc'h:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
**PNG** and **WEBP** libraries.
- [exif](https://www.php.net/manual/en/exif.installation.php)
- [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) gant **JPEG**,
**PNG** ha **WebP** levrioù.
- [exif](https://www.php.net/manual/fr/exif.installation.php)
Additionally, make sure that the following extensions are enabled in your PHP:
Gwell vat e fellout a reoc'h sellet ma vo an estentiens-se fardet en ho PHP :
- json (enabled by default - don't turn it off)
- xml (enabled by default - don't turn it off)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
- json (gweredekaet dre ziouar - ne lakaat ket da weredekaat)
- xml (gweredekaet dre ziouar - ne lakaat ket da weredekaat)
- [mysqlnd](https://www.php.net/manual/fr/mysqlnd.install.php)
### MySQL compatible database
### Diazez geriañs MySQL-penurzh
> We recommend using [MariaDB](https://mariadb.org).
> Gwerzhet ho peus stumm [MariaDB](https://mariadb.org).
::: warning Warning
::: warning Explicoù
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
Ne lakaer ket g Acastopod da van a-barzh a-dreuz MySQL 5.7 pe kenstroll diwezhañ 5.6 (e-korf ar skoazell dindan d'an 5 a viz C'hwevrer 2021) pe kelenn.
:::
You will need the server hostname, database name, username and password to
complete the installation process. If you do not have these, please contact your
server administrator.
Deoc'h eo ret gouzout stummañ an divyezhegezh servijer, anv an diaz, anv ar
geriadur ha ar ger-tremen da gemer perzh er stolidiñ. Mard oc'h ket ganto e usin,
galvit soudard ar wirinidigezh.
#### Privileges
#### Skoazell alc'hwez
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
`REFERENCES`, `CREATE VIEW`.
Ret eo eta reiñ a-stegal zo ar c'hlask reizhiad en ounskridoù stolidiñ da groc'hañ lakaet Castopod da gichenah da : `CREATE`, `ALTER`, `DILET`, `DETEXEKI`,
`GWENOLOU`, `ENASKI', `DIBAB`, `KENASKI`,`KEMMESK`, `KREUZAÑ GWENDEL`.
### (Optional) FFmpeg v4.1.8 or higher for Video Clips
### (Profetek) FFmpeg v4.1.8 pe lusiañ evit kuzhioù video
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required if you
want to generate Video Clips. The following extensions must be installed:
Ret eo FFmpeg divyezhezh 4.1.8 pe lusiañ evit kaout kuzhioù video. Setu ar c' estentiens monet :
- **FreeType 2** library for
[gd](https://www.php.net/manual/en/image.installation.php).
- levrioù **FreeType 2** evit ar [gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Other recommendations
### (Profetek) Itratelioù all
- Redis for better cache performances.
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
- Redis evit gwirioù gwellañ kuzhioù traoù
- CDN evit diflokañ dafar staoteriek ha gwirioù gwellañ kuzhioù traoù
- Dorrestell postel evit ar gerioù-pas goulennet.
## Install instructions
## Lec'hienn staliañ
### Pre-requisites
### Arventennennoù
0. Get a Web Server with [requirements](#requirements) installed
1. Create a MySQL database for Castopod with a user having access and
modification privileges (for more info, see
[MySQL compatible database](#mysql-compatible-database)).
2. Activate HTTPS on your domain with an _SSL certificate_.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
the web server if you havent already.
- ⚠️ Set the web server document root to the `public/` sub-folder within the
`castopod` folder.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
0. Pell eo bet ho serfer web gant ar [arventennoù](#arventennoù) a staliañ.
1. Krouiñ un diaz MySQL evit Castopod gant un implijer en deus ar geriañs gwellañ hag ar geriañs hizivaet-bev (evit muien etre, sellit war [diaz gesket MySQL-penurzh](#diazez-geriañs-mysql-penurzh)).
2. Diazeont HTTPS war ho domani gant ur _savadur SSL_ war-raok.
3. Prenit ha dezarputit al lazhet [pakad diabarzh] (https://castopod.org/)
war ar stolidiñ web m'ho peus ket graet dirak.
- ⚠️ Lakaat ar c'horn zellet ar stolidiñ web d'ober da voud eo _dont davet_
degasvez `public/` horvez e kasfe dantoñ hor genstrivad.
4. Ouzhañ **daskoù cron** war ho serfer web evit merañ.
```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1
```
**Note** - If you do not add this cron task, the following Castopod features
will not work:
**Notenn** - Mard oc'h ket o skrivañ an dask paour-mañ, ne vo ket ober a-barzh
Acastopod ne vo lakaet emgevreulek ar pezh a c'hoarvez:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
- Enporzhiañ boucleier podkast gant feed RSS diagaset dijaouel
- Skignaat evitañ ho c'hemerian e-barzh an aod-delveg gant ar fediverse
- Skignaat epizoedou da kehentiñ en e avidoù digunghevus en ur ober servij.
[WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (recommended) Install Wizard
1. Run the Castopod install script by going to the install wizard page
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
2. Follow the instructions on your screen.
3. Start podcasting!
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
:::
### Email/SMTP setup
Email configuration is required for some features to work properly (eg.
retrieving your forgotten password, sending instructions to premium subscribers,
…)
You may add your email configuration in your instance's `.env` like so:
```ini
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
```
#### Email config options
| Variable name | Type | Default |
| ---------------- | -------------------- | ------------ |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined` |
| **`SMTPPass`** | string | `undefined` |
| **`SMTPPort`** | number | `25` |
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
### Media storage
By default, files are saved to the `public/media` folder using the file system.
If you need to relocate the `media` folder to a different location, you can
specify it in your `.env` file as shown below:
```ini
# […]
media.root="media"
media.storage="/mnt/storage"
```
In this example, the files will be saved to the /mnt/storage/media folder. Make
sure to also update your web server configuration to reflect this change.
### S3
If you prefer storing your media files on an S3 compatible storage, you may
specify it in your `.env`:
```ini
# […]
media.fileManager="s3"
media.s3.endpoint="your_s3_host"
media.s3.key="your_s3_key"
media.s3.secret="your_s3_secret"
media.s3.region="your_s3_region"
```
#### S3 config options
| Variable name | Type | Default |
| ----------------------- | ------- | ----------- |
| **`endpoint`** | string | `undefined` |
| **`key`** | string | `undefined` |
| **`secret`** | string | `undefined` |
| **`region`** | string | `undefined` |
| **`bucket`** | string | `castopod` |
| **`protocol`** | number | `undefined` |
| **`pathStyleEndpoint`** | boolean | `false` |
| **`keyPrefix`** | string | `undefined` |
## Community packages
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
### Install with YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github
Repo</a>
</div>
- Krouiñ kaout filmoù-v [requires FFmpeg]
(#optional-ffmpeg-v418-or-higher-for-video-clips

View File

@ -1,23 +1,20 @@
---
title: Security
title: Gwiriadiad
---
# Security concerns
# Gwestiynau diogelwch
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP
framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
Mae Castopod wedi'i ddatblygu ar [CodeIgniter4](https://codeigniter.com/), fframwaith PHP sy'n annog
[arddulliau diogelwch da](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
Er mwyn sicrhau diogelwch eich copi ac osgoi ymosodiadau drwg, rydym yn argymell i chi ddiweddaru hawliau'r ffeiliau yn Castopod ar ôl y gosod a phob diweddariad (ac osgoi unrhyw gamgymeriadau mynediad i'r ffeiliau) :
- `writable/` folder must be **readable** and **writable**.
- `public/media/` folder must be **readable** and **writable**.
- any other file must be set to **readonly**.
- Rhaid i'r ffolder `writable/` fod ar gael i **darllen** ac i **ysgrifennu**.
- Rhaid i'r ffolder `public/media/` fod ar gael i **darllen** ac i
**ysgrifennu**.
- Rhaid i unrhyw ffeil arall fod ar gael i **darllen yn unig**.
For instance, if you are using Apache or NGINX with Ubuntu you may do the
following:
Er enghraifft, os ydych chi'n defnyddio Apache neu NGINX gyda Ubuntu, gallwch gychwyn y gorchmynion canlynol:
```bash
sudo chown -R root:root /path/to/castopod

View File

@ -1,109 +1,99 @@
---
title: Update
title: Hizivadennoù
sidebarDepth: 3
---
# How to update Castopod?
# Petra eo da ober evit Mont e Castopod ?
After installing Castopod, you may want to update your instance to the latest
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
Goude mont e barzh Castopod, e c'hellit kas ar vosion diwezhañ da zizoloiñ ho stagad dre astenn ar sterenn/theurellec'hioù nevez ✨, ar sutrennoù bugoù 🐛 ha skoazellet profadurezhioù ⚡.
## Update instructions
## Hizivadennoù miz eo bet graet
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
0. ⚠️ Da c'houzout a raio deoc'h heuliañ war da fardas keuz d'ar c'huzul war ho ficherien Castopod ha war ar bazenn roadennoù.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
[Plesk a meur eus un war-lerc'h war lerc'hañ och e vo saveteiñ fenstr saveteiñ a-raok treiñ](#plesk-a-meur-eus-un-war-larsh-war-lerch-och-e-vo-savetei-fenstr-savetin-a-raok-trein)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
1. Klikit war ar bajenn
[embannadegoù](https://code.castopod.org/adaures/castopod/-/releases) ha
gwelet setu ma vez savet ho stagad gant ar reizhiad nevezwezhañ Castopod
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
[Pelec'h e c'hellin kaout ho verzion Castopod ?](#pelech-e-chellin-kaout-ho-verzion-castopod)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
2. Prenniwit ar bitteg embannadur nevezwezhañ enoret `Castopod Package`, goude
e c'hallit dibunañ etre embannadurioù `zip` pe `tar.gz`
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
- ⚠️ Bezit sur oc'h prenañ ar Castopod Package ha **NANN** ar C'hod Anaoudegezh.
- Abarzh e c'hallit prenañ ar bitteg nevezwezhañ eus
[castopod.org](https://castopod.org/)
3. On your server:
3. War ho servijer :
- Dilemel an holl restr nevez en oberiant d'ar restr .env hag d'ar pub-/media
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
::: info Notenn
::: info Note
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
Gallet c'heller reiñ keveradur distrad-se war restr divyezhek warnañ ar
processus anthirdiñ. Gwelloc'h eo
[Strobellerezh](./security.md).
:::
4. Update your database schema from your `Castopod Admin` > `About` page or by
running:
4. Hizivaet ho tac'henn bazenn eus ho pajenn `Ger-tremen ar c'hastopod` ha `Ober`
pe drezañ:
```bash
php spark castopod:database-update
```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
5. Distrubañ gaelloù dor liveus ho c'hastopod eus ho pajenn `Ger-tremen ar
c'hastopod` > `Ardivink` > `Hentrol ar c'hoadoù`.
6. ✨ Kavit ho stagad nevez, pezet eo bet finyeah !
::: info Note
::: info Notenn
Releases may come with additional update instructions (see
[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
Gallet c'haller ober gant plijadur da vare ar vosioneoù (cf.
[Bladenn kasidañ embannadoù](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
[N'ho mont ket da zougañ ho stadur abaoe un den na oa bet paketiget e ioa
finyeah ?](#nho-mont-ket-da-zouga-ho-stadur-abaoe-un-den-na-oa-bet-paketiget-e-ioa-finyeah)
:::
## Fully Automated updates
## Mechouerioù en un doare lazhek
> Coming soon... 👀
> En ur bennach... 👀
## Frequently asked questions (FAQ)
## Goulennioù Frejal (FAQ)
### Where can I find my Castopod version?
### Pelec'h am c'haller kaout ho verzion Castopod ?
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
Klikit war ho c'huzul merdeiñ a vez skrivet e viz kentañ mennet war ho pannel merdeiñ
Castopod, e vez displeget e barzh an douarbenn gwerc'hentañ.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
Gellit kaout ur verzion arall e ruilhenn
`Holedoù > Kefluniou > Constants.php`.
### [I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
### N'ho mont ket da zougañ ho stadur evit ur forzh patromioù-termenet-mañ... Petra e fell deoc'h ober ?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
N'eo eus gwall geen ! Bezit sur mont da lavarout, hollek re ihti.
Prenit ar finyeah nevezizh eval mivioù skrivet warzu. Pa derit echuiñ urzelioù finyeah (4), oberit anezho urzhiañ, pedompenn diwar-benn an evorikoù ha goberiennioù finyeah.
> You may want to backup your instance depending on how long you haven't updated
> Castopod.
> Bezit sur ho skalpiteiñ ho stadur adalek dater eo ho stadur nevezault Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
`v1.0.0-beta.1`:
Er skouer, ma'z oc'h e `v1.0.0-alpha.42` hag oc'h ezhomm da guzumminañ evit dastum eus dastum da vroadañ bet leuniet e `v1.0.0-beta.1`:
0. (highly recommended) Make a backup of your files and database.
0. (hollek anavezet) Savetit ho ficherien ha bañdit ho bazenn roadennoù.
1. Download the latest release, overwrite your files whilst keeping `.env` and
`public/media`.
1. Prenit ar verzion diwezhañ, greit mac'het ho ficherien hag e chom-hed ho .env hag ho pub-/media.
2. Go through each release update instructions sequentially (from oldest to
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
2. Stalit ar mivioù da zougañ war ar renk (dispar da diwar kreskiñ).
3. ✨ Enjoy your fresh instance, you're all done!
3. ✨ Fellout a ra d'an novigezh ho nechal zo gant.
### Should I make a backup before updating?
### Ha n'eo ket ret da vont da zougañ a-raok ?
We advise you do, so you don't lose everything if anything goes wrong!
Kas a reomp deoc'h ho kas gantañ evit bezañ sur na gremañ ket ar pezh a c'hallfe bezañ gwisket gantoc'h-se !
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…
A-benn pell eo gortozet deoc'h kaout az canañ ho finyeah diwezhañ eus ho ficherien Castopod ha ho bazenn roadennoù er-maez evit na gremañt ket...

View File

@ -2,298 +2,62 @@
sidebarDepth: 2
---
# Welcome 👋
# Degemer Mat 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod is a free & open-source hosting platform made for podcasters who want
engage and interact with their audience.
Kasit ul levraoueg da faotañ. Kevre an testenn.
Castopod is easy to install and was built on top of
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
Castopod eo ur pladenn digoust ha frank abaoe ars, bet savet evit ar podkasterien o fell dezho stlabeollañ ha dibab eus ozeud, un tamm postioù a roñv ha tagellads e brezhoneg.
Divyezhek eo derc'hel gant Castopod hag en deus bet savet gant [CodeIgniter4](https://codeigniter.com/), ur perzhadenn PHP nerzhel disheñvel bras.
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
<a href="/fr/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Staliañ<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Features
## Fonksionoù
- 🌱 &nbsp;Free & open-source (AGPL v3 License)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics
belong to you, and&nbsp;you&nbsp;only
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding,
chapters, location, persons, soundbites, …
- 💬 &nbsp;Built-in social network:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes
- 📈 &nbsp;Built-in analytics:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant
- 🪙 &nbsp;Standard IABv2 audience measurement
- 🏡 &nbsp;On-premises analytics, no third party involved
- 📢 &nbsp;Built-in marketing tools:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: install as a standalone app
- 🎨 &nbsp;Customizable theme colors
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes
- 🔉 &nbsp;Generate soundbites
- ▶️ &nbsp;Embeddable player, embed your episodes on any website
- 💸 &nbsp;Monetization:
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod
- 📤 &nbsp;Move your podcast out of Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want
- 👥 &nbsp;Multi-user: add contributors and set roles
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
- 🌱 &nbsp;Digoust, frank ha digor-sourzh (Darvoudiezh AGPL v3)
- 🔐 &nbsp;dedennet gant suverenerezh ar roadennoù: ho kontinim, ho dudoc'h hag ho statistikoù a zo deoc'h, hag deoc'h hepken
- 🪄 &nbsp;Fonksionoù al Lodkamantoù 2.0 : GUID, diorren, disterrañvioù, sourn, kempennadurioù, lec'h, denierezourien, prezegennoù sonorez…
- 💬 &nbsp;Etrezhek gant ar reozerezh enni :
- 🚀 &nbsp;Castopod zo diwar-benn ar Fédivers, un Embannerezh estren peurunvan
- ❤️ &nbsp;Krouiñ postioù, rannañ, mizkeañ ha komz eus oaudioù
- 📈 &nbsp;Statistikoù chomlec'hiet enni :
- ⚖️ &nbsp;Ovezhañ GDPR / CCPA / LGPD
- 🪙 &nbsp;Mens gellet Iveziñ IABv2
- 🏡 &nbsp;Meur a statistikoù chomet unan ha na vezont na lod ha na daveont na politikourez anavezet
- 📢 &nbsp;[Outils de marketing intégrés:
- ✅ &nbsp;- &nbsp;Pret evit ar SEO (méta-tags open-graph, JSON-LD…)
- 📱 &nbsp;- &nbsp;PWA : stockeziñ evel ur meziant nemetañ
- 🎨 &nbsp;- &nbsp;Urzhioù hiriadur en tu-deoc'h
- 🎬 &nbsp;- &nbsp;Krouiñ da videoioù erfin dirak epeoù
- 🔉 &nbsp;- &nbsp;Krouiñ deoc'h prezegennoù sonorez
- ▶️ &nbsp;- &nbsp;Adkrouiñ ho evererezhioù er pros&nbsp;web nevez
- 💸 &nbsp;Tansevel&nbsp;:
- 🔗 &nbsp;- &nbsp;Liennoù tansevel
- 📲 &nbsp;- &nbsp;publomm
- 🤝 &nbsp;- &nbsp;value4value / WebMonetization
- 💎 &nbsp;- &nbsp;Ploedadoù prevez
- 📡 &nbsp;Adpubliañ ho levrer e-barzhstra gant&nbsp;RSS:
- 📱 &nbsp;- &nbsp;d'an holl doareoù peadra da bec'h renerrezhioù Pazenn Kaeoù, Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend…
- ⚡ &nbsp;- &nbsp;Staliñ o sammerezh diraklañ gant WebSub
- 📥 &nbsp;[Air importin ho podcast&nbsp;: stleellañ ho podcast dija enrollañ gant Castopod
- 📤 &nbsp;- &nbsp;Deuset eo e-unan evit mont ho levrer da lodenn all
- 🔀 &nbsp;Miltadañ
- 👥 &nbsp;- &nbsp;Bevañ e-lec'hiezh a-stroll ho peadra, lakaet rener peiñ ho badeier
- 🌎 &nbsp;- &nbsp;souten al lang : latin, galleg, brazilian, poloneg, aodoù math ha saozneg, hag en deiz-ermo…
- [bevet all eus un deiz](https://translate.castopod.org)!
## Motivation
## Perak kasout da implijout Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
Pe hor beajo un implijenn nemetañ evit pep den, eus ar pezh a rit stummiñ. C'hoant hor beajo e vez atav adunvanet dre hor c'hemeradur.
It is in fact one of the only media to have stayed this way for a long time.
Dreist-holl, e vez kenlabourat dreist pep araok primodiñ Castopod eus o bred. Skoazellañ primzivoù peo & digor-sourzh eo Castopod bet savet evit da gentañ anavezout o seurt heol. Re o deus bet disheñvel en armeziadur roadennoù e-pad un nebeut bloazioù, ha ne dremen ket faoudel.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
Kenavo, pa fell dezho ivez pellaat astenn ar sistem naosiek, e tennañ a reont anaoudegezh re'en em **1) WordPress & Castopod 2) Funkwhale & Castopod 3) Brandenn all da gaout ar postev dudualeg abegoù. Castopod eo ur ger anvioñ bras dirak Radiofrancolonia alies WordPress evit ar postev-time. Ne vira ket eo bet siviliaet gant parregeoù modallenn alies WordPress met n'eo ket bet disheñchegeat "Delestrañ" arouezh ar poellandouriezh, hini a c'hourivupl e krouerlez varrogezh al levrer a oa bet savet evit kasout ho doareoù renet d'ar-walc'h en dermen&nbsp;e voent mat.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
N'eo ket bet gebraet war-dro "&nbsp;WordPress&nbsp;" ez eo bet krouet Castopod troata alies ivez gant parregeoù gant straedoù trainkeg ar vezvel er bed arz&nbsp;-ni, gouzout ho komzo&ugrave; dre enor&nbsp;-noz e c'hortozo, abego&ugrave; dre veter loened&nbsp;-bu-heol adnumet. ni a zo bet tryoulet gant ar sistem sweat.Seurt disheñvel en hor predermit !
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
## Comparison with other solutions
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for&nbsp;you.
### Castopod vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running&nbsp;it.
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting&nbsp;journey.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
### Castopod vs other podcast hosts
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
That being said, there are two main differences with other podcasting solutions:
- Castopod can be self-hosted and is the only solution that allows you to keep
full control over what you produce. Also, as it is open-source, you can even
customize it as you wish.
- Castopod is the only solution that currently integrates both a decentralized
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
## Contributing
Love Castopod and would like to help? Take a look at the following documentation
to get you&nbsp;started.
### Code of conduct
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be&nbsp;tolerated.
### Contributing guide
Read our [contributing guide](./contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## Contributors ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Romain de Laage"/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Lyonel Bernard"/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt="Christopher Lagonick-Weitzel"/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ernesto Acosta"/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">🐛</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt="Bastien Luneteau"/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Cécile Ricordeau"/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Miś"/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt="Marcin Lewandowski"/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">🐛</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sebastian Janik"/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Karczmarczyk"/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="denis d"/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">🐛</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt="Douglas Kastle"/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">🐛</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="cExplorer"/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="ImaCrea"/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">🐛</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Jonas S"/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt="LEFEBVRE Yann"/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt="Sebastian Späth"/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">🐛</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="rocky III"/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt="Hermann Josef Eckl"/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Delhaye Cyrille"/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">🐛</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt="João Leandro"/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Angelos Chouvardas"/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt="Eivind"/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt="Ewen"/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt="forght"/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt="glottis0q"/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100" width="100px;" alt="ButterflyOfFire"/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt="Lucian I. Last"/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt="LuuzViir"/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt="CTHTC"/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt="Russian Retro"/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt="Marek L'ach"/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt="GunChleoc"/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt="GabiSnow"/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt="bendaha"/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt="Samuel Roland"/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Dimitri Regnier"/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100" width="100px;" alt="irithys"/><br /><sub><b>irithys</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sergi"/><br /><sub><b>Sergi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt="ghose (XoseM)"/><br /><sub><b>ghose (XoseM)</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/basen1982"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Andreas Olsson"/><br /><sub><b>Andreas Olsson</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/leonfrom"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="leonfrom"/><br /><sub><b>leonfrom</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/agentcobra57"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="agentcobra"/><br /><sub><b>agentcobra</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/alephoto85"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100" width="100px;" alt="Alessandro"/><br /><sub><b>Alessandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/liimee"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="liimee"/><br /><sub><b>liimee</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ahmedsabouni"><img src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100" width="100px;" alt="Ahmed Sabouni"/><br /><sub><b>Ahmed Sabouni</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KrzysztofDomanczyk"><img src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100" width="100px;" alt="KrzysztofDomanczyk"/><br /><sub><b>KrzysztofDomanczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## Contact
You may reach us for help or ask any question you have on:
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for
feature requests & bug reports)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponsors
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
</div>
## License
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md
[contributions]: https://code.castopod.org/adaures/castopod/-/issues
[semantic-release]: https://github.com/semantic-release/semantic-release
[discord]: https://castopod.org/discord
[stars]: https://github.com/ad-aures/castopod/stargazers
[crowdin]: https://translate.castopod.org/project/castopod
Kerkent a-walc'h, dedenn a-wechoù, WordPress ha Castopod a c'hello beilhaduff kasout&nbsp;hevken petra kar&nbsp;kasit gant an erioù&nbsp;gouel devil. Harriet etre ar roadennoù&nbsp;warc'hoazh&nbsp;&nbsp;(WordPress ha Castopod) etre ho ero evit kasout ho posto&ugrave;da-uri&#276; a-bezh da v&uuml;zio&ugrave;da&nbsp;a vo troeet dezho edaneg mynajio&ugrave; en oreu&ntilde;v ur gw

View File

@ -0,0 +1,4 @@
{
"etiqueta": "Contribució",
"posició": 3
}

View File

@ -0,0 +1,133 @@
---
title: Pautas
---
# Contribuir a Castopod
Estimes Castopod i vols ajudar? Moltes gràcies, hi ha moltes coses per fer per a tothom!
Si us plau, prende't un moment per revisar aquest document per fer que el procés de contribució sigui fàcil i efectiu per a totes les parts implicades.
Seguint aquestes pautas, ajudes a comunicar el teu respecte pel temps dels desenvolupadors que gestionen i desenvolupen aquest projecte de codi obert. A canvi, ells han de mostrar aquest respecte en atendre els teus problemes o avaluar les correccions i les noves funcionalitats.
::: info Nota
**Qualsevol** contribució realitzada en un repositori diferent al
[repositori original](https://code.castopod.org/adaures/castopod) no serà
acceptada.
:::
## Utilitzar el seguiment de problemes
El [seguiment de problemes](https://code.castopod.org/adaures/castopod/-/issues) és el canal preferit per a informar de
[informes de errors](#informes-de-errors),
[sol·licituds de funcionalitats](#sol·licituds-de-funcionalitats) i
[enviar sol·licituds de pull](#sol·licituds-de-pull).
## ⚠️ Problemes de seguretat i vulnerabilitats
Si et trobes amb algun problema de seguretat o vulnerabilitat en el codi font de Castopod, contacta'ns directament per correu electrònic a
[security@castopod.org](mailto:security@castopod.org).
## Informes de errors
Un error és un _problema demostrable_ causat pel codi del repositori. Els informes de errors bons són extremadament útils, gràcies!
Pautas per als informes de errors:
1. **Utilitza la cerca de problemes** &mdash; comprova si el problema ja ha estat
reportat.
2. **Verifica si el problema ha estat resolt** &mdash; intenta reproduir-lo utilitzant
l'últim `main` del repositori.
3. **Aïlla el problema** &mdash; idealment, crea un
[cas de prova reduït](https://css-tricks.com/reduced-test-cases/) i un exemple en viu.
Un bon informe d'errors no hauria de deixar als altres necessitant preguntar-te més
informació. Intenta ser tan detallat com sigui possible en el teu informe. Quin és el teu entorn? Quins passos reproducirien el problema? Quin navegador(s) i sistema operatiu experimenten el problema? Què esperaries que fos el resultat? Tots aquests detalls ajudaran a les persones a solucionar qualsevol error potencial.
> Han estat creats [models d'incidències](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> per aquest projecte. Pots utilitzar-los per ajudar-te a seguir aquestes pautes.
## Sol·licituds de funcionalitats
Les sol·licituds de funcionalitats són benvingudes. Però dedica un moment a comprovar si la teva idea encaixa amb l'abast i els objectius del projecte. Depèn de _tu_ de fer un cas sòlid per convèncer els desenvolupadors del projecte de les virtuts d'aquesta funcionalitat. Si us plau, proporciona tanta informació i context com sigui possible.
## Sol·licituds de pull
Les sol·licituds de pull bones: correccions, millores, noves funcionalitats, són una gran ajuda. Han de romandre centrades en l'abast i evitar contindre commits no relacionats.
**Si us plau, pregunta primer** abans d'emprendre qualsevol sol·licitud de pull important (per exemple, implementar funcionalitats, refactoritzar el codi, portar-lo a un llenguatge diferent), sinó et jugues de treballar molt temps en alguna cosa que els desenvolupadors del projecte poden no voler fusionar.
Si us plau, adhereix-te a les convencions de codificació utilitzades en tot el projecte (indentació, comentaris precisos, etc.) i a qualsevol altre requisit (com cobertura de proves).
Adherir-te al següent procés és la millor manera d'incloure la teva feina al projecte:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) del projecte,
clona la teva forquilla i configura els remots:
```bash
# Clona la teva forquilla del repositori a l'actual directori
git clone https://code.castopod.org/<el_teunom_usuari>/castopod.git
# Navega fins al directori clonat més nou
cd castopod
# Assigna el repositori original a un remot anomenat "upstream"
git remote add upstream https://code.castopod.org/adaures/castopod.git
```
2. Si vas fer aquesta clonació fa temps, obtén els canvis més recents de l'origen:
```bash
git checkout main
git pull upstream main
```
3. Crea una nova branca de tema (d'una branca `main`) per contenir la teva funcionalitat,
canvi o correcció:
```bash
git checkout -b <nom-branca-tema>
```
4. Fa els teus canvis en trossos lògics. Si us plau, segueix aquestes
[pautes de missatge de confirmació de Git](https://conventionalcommits.org/), o el teu
codi és poc probable que es fusioni amb el projecte principal. Utilitza la
característica de
[rebase interactiu de Git](https://help.github.com/articles/about-git-rebase/)
per netejar les teves confirmacions abans de fer-les públiques.
5. Fusiona localment (o rebase) la branca de desenvolupament d'origen amb la teva branca de tema:
```bash
git pull [--rebase] upstream main
```
6. Puja la teva branca de tema a la teva forquilla:
```bash
git push origin <nom-branca-tema>
```
7. [Obre una sol·licitud de pull](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
amb un títol clar i una descripció.
**IMPORTANT**: En enviar un patch, acceptes permetre als propietaris del projecte
llicenciar el teu treball sota els termes de
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
## Pautas de col·laboració
Hi ha algunes regles bàsiques per assegurar una alta qualitat del projecte:
- Abans de fusionar, una sol·licitud de pull requereix com a mínim dues aprovacions dels col·laboradors
a no ser que sigui un canvi arquitectònic, una funcionalitat important, etc. Si ho és, aleshores
ha de ser aprovada per almenys el 50% de l'equip principal, amb dret a veto complet. (és a dir, cada membre pot bloquejar qualsevol PR)
- Una sol·licitud de pull ha de romandre oberta com a mínim dos dies abans de fusionar (no s'aplica
per aportacions banals com arreglar una errada tipogràfica). D'aquesta manera, tothom té prou
temps per revisar-la.
Sempre ets benvingut a discutir i proposar millores per aquestes pautes.

View File

@ -0,0 +1,134 @@
---
title: Configuració del desenvolupament
sidebarDepth: 3
---
# Configura l'entorn de desenvolupament
## Introducció
Castopod és una aplicació web basada en el marc de treball `php`
[CodeIgniter 4](https://codeigniter.com).
Utilitzem [Docker](https://www.docker.com/) per configurar ràpidament un entorn de desenvolupament. Un
`docker-compose.yml` i un `Dockerfile` s'inclouen a la carpeta arrel del projecte
per ajudar-vos a iniciar la vostra contribució.
> No és necessari tenir coneixements previs de Docker per seguir els següents passos.
> No obstant això, si voleu utilitzar el vostre propi entorn, podeu fer-ho!
## Instruccions de configuració
### 1. Prerequisits
0. Instal·la [docker](https://docs.docker.com/get-docker).
1. Clona el projecte Castopod executant:
```bash
git clone https://code.castopod.org/adaures/castopod.git
```
2. Crea un fitxer `.env` amb la configuració mínima necessària per connectar l'aplicació a la base de dades i utilitzar Redis com a controlador de memòria cau:
```ini
CI_ENVIRONMENT="development"
# Si s'estableix a "development", cal executar `npm run dev` per iniciar el servidor d'actius estàtics
vite.environment="development"
# Per defecte, això està establert a true a la configuració de l'aplicació.
# Per al desenvolupament, s'ha d'establir a false ja que està
# en un entorn local
app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/"
media.baseURL="http://localhost:8080/"
admin.gateway="cp-admin"
auth.gateway="cp-auth"
database.default.hostname="mariadb"
database.default.database="castopod"
database.default.username="castopod"
database.default.password="castopod"
cache.handler="redis"
cache.redis.host = "redis"
# Potser no voleu utilitzar Redis com a controlador de memòria cau
# Comenteu o elimineu les dues línies anteriors i descomenteu
# la següent línia per utilitzar el controlador de fitxers en memòria cau.
# cache.handler="file"
```
> _NB._ Podeu ajustar el vostre entorn establint més variables d'entorn
> en el fitxer `.env` personalitzat. Consulteu l'`env` per obtenir exemples o el
> [Manual de l'usuari de CodeIgniter4](https://codeigniter.com/user_guide/index.html)
> per obtenir més informació.
3. (per a l'escritori Docker) Afegiu el repositori que heu clonat a `Configuració` de l'escritori Docker > `Recursos` > `Compartició de fitxers`
### 2. (recomanat) Desenvolupeu dins del contenidor de l'aplicació amb VSCode
Si esteu treballant a VSCode, podeu aprofitar la carpeta `.devcontainer/`.
Defineix un entorn de desenvolupament (contenidor de desenvolupament) amb requeriments preinstal·lats
i extensions de VSCode perquè no hàgiu de preocupar-vos per aquests. Tots els serveis
necessaris es carregaran automàticament! 🪄
1. Instal·leu l'extensió de VSCode
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Obrir a dins del contenidor`
> La finestra de VSCode es recarregarà a l'interior del contenidor de desenvolupament. Espereu diversos
> minuts durant la primera càrrega ja que està construint tots els serveis necessaris.
**Nota**: El contenidor de desenvolupament s'iniciarà executant el servidor php de Castopod.
Durant el desenvolupament, haureu d'iniciar el servidor de desenvolupament de [Vite](https://vitejs.dev)
per compilar el codi typescript i els estils:
```bash
# executa el servidor de desenvolupament de Vite
npm run dev
```
Si hi ha algun problema amb el servidor php no s'està executant, podeu reiniciar-lo
utilitzant les següents comandes:
```bash
# executa el servidor Castopod
php spark serve - 0.0.0.0
```
3. Ja esteu llest! 🎉
Ara esteu **al dins del contenidor de desenvolupament**, podeu utilitzar la consola de VSCode
(`Terminal` > `Terminal nou`) per executar qualsevol comanda:
```bash
# PHP està instal·lat
php -v
# Composer està instal·lat
composer -V
# npm està instal·lat
npm -v
# git està instal·lat
git version
```
Per obtenir més informació, consulteu
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
### 3. Comença a treballar
Ja esteu llestos! Comenceu a fer màgia actualitzant els fitxers del projecte! Ajudeu-vos del
[Manual de l'usuari de CodeIgniter4](https://codeigniter.com/user_guide/index.html) per obtenir més informació.
Per veure els vostres canvis, aneu a:
- `http://localhost:8080/` per a l'aplicació Castopod
- `http://localhost:8888/` per a la interfície phpmyadmin:
- nom d'usuari: **

View File

@ -0,0 +1,4 @@
{
"etiqueta": "Començant",
"posició": 2
}

View File

@ -3,85 +3,84 @@ title: Autenticació i Autorització
sidebarDepth: 3
---
# Authentication & Authorization
# Autenticació i Autorització
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
Castopod gestiona l'autenticació i l'autorització utilitzant `codeigniter/shield` amb regles personalitzades. Els rols i les autoritzacions es defineixen a dos nivells:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
1. [A nivell d'instància](#1-roles-i-autoritzacions-a-nivell-dinstancia)
2. [Per podcast](#2-roles-i-autoritzacions-per-podcast)
## 1. Instance wide roles and permissions
## 1. Rols i autoritzacions a nivell d'instància
### Instance roles
### Rols a l'instància
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
| rol | descripció | autoritzacions |
| -------------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Té un control complet sobre Castopod | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Gestor | Gestiona el contingut de Castopod | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Usuaris generals de Castopod | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
### Autoritzacions a l'instància
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
| autorització | descripció |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| admin.access | Pot accedir a la zona d'administració de Castopod. |
| admin.settings | Pot accedir a la configuració de Castopod. |
| users.manage | Pot gestionar els usuaris de Castopod. |
| persons.manage | Pot gestionar les persones. |
| pages.manage | Permet gestionar les pàgines. |
| podcasts.view | Pot veure tots els podcasts. |
| podcasts.create | Pot crear nous podcasts. |
| podcasts.import | Pot importar podcasts. |
| fediverse.manage-blocks | Pot bloquejar actors o dominis de la fediverse per interactuar amb Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
## 2. Rols i autoritzacions per podcast
### Per podcast roles
### Rols per podcast
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
| rol | descripció | autoritzacions |
| ---------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Té control total sobre el podcast #{id} | \* |
| Editor | Gestiona el contingut i les publicacions del podcast #{id} | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Autor | Gestiona el contingut del podcast #{id}, però no el pot publicar | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Convidat | Col·laborador general del podcast #{id} | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
### Autoritzacions per podcast
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
| autorització | descripció |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| veure | Visualització del tauler de control i l'anàlisi del podcast #{id}. |
| editar | Pot editar el podcast #{id}. |
| eliminar | Pot eliminar el podcast #{id}. |
| gestionar importacions | Pot sincronitzar el podcast importat #{id}. |
| gestionar persones | Permet gestionar les subscripcions al podcast #{id}. |
| gestionar subscripcions | Permet gestionar les subscripcions al podcast #{id}. |
| gestionar col·laboradors | Permet gestionar els col·laboradors del podcast #{id}. |
| gestionar plataformes | Pot configurar/eliminar els enllaços a les plataformes del podcast #{id}. |
| gestionar publicacions | Pot publicar el podcast #{id}. |
| gestionar notificacions | Pot veure i marcar les notificacions com a llegides per al podcast #{id}. |
| interactuar com a | Pot interactuar com a podcast #{id} per afegir, compartir o respondre missatges. |
| episodes.view | Pot veure el tauler de control i l'anàlisi del podcast #{id}. |
| crear episodis | Pot crear episodis per al podcast #{id}. |
| editar episodis | Pot editar el podcast #{id}. |
| eliminar episodis | Pot eliminar el podcast #{id}. |
| episodes.manage-persons | Permet gestionar les subscripcions al podcast #{id}. |
| episodes.manage-clips | Permet gestionar clips de vídeo o parts sonores del podcast #{id}. |
| episodes.manage-publications| Pot publicar el podcast #{id}. |
| episodes.manage-comments | Pot crear/eliminar comentaris de l'episodi del podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -1,35 +1,29 @@
---
title: Imatges Docker oficials
title: Imatges oficials de Docker
sidebarDepth: 3
---
# Imatges Docker oficials
# Imatges oficials de Docker
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
Castopod envia 3 imatges Docker al Hub de Docker durant el seu procés de construcció automàtica:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all
in one castopod image using nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el paquet
incloent Castopod i totes les dependències
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una
configuració de Nginx per a Castopod
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): una imatge de Castopod tot en un utilitzant Nginx Unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el paquet d'aplicació amb totes les dependències de Castopod
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una configuració de Nginx per a Castopod
A més, Castopod requereix una base de dades compatible amb MySQL. Es pot afegir
una base de dades Redis com a gestor de memòria cau.
A més, Castopod requereix una base de dades compatible amb MySQL. Es pot afegir una base de dades Redis com a gestor de memòria cau.
## Etiquetes compatibles
## Tags compatibles
- `develop` [no-estable], darrera versió de la branca de desenvolupament
- `beta` [stable], latest beta version build
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
- `develop` [inestable], última versió de la branca de desenvolupament
- `beta` [estable], última versió beta
- `1.x.x` [estable], versió específica (a partir de `1.0.0`)
## Exemple d'ús
1. Instal·leu [docker](https://docs.docker.com/get-docker/) i
1. Instal·la el [docker](https://docs.docker.com/get-docker/) i el
[docker-compose](https://docs.docker.com/compose/install/)
2. Creeu un fitxer `docker-compose.yml` amb el següent:
2. Crea un fitxer `docker-compose.yml` amb el següent contingut:
```yml
version: "3.7"
@ -87,15 +81,12 @@ una base de dades Redis com a gestor de memòria cau.
castopod-db:
```
Heu d'adaptar algunes variables a les vostres necessitats (per exemple,
`CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` i
`CP_ANALYTICS_SALT`).
Has d'adaptar algunes variables segons les teves necessitats (p. ex., `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` i `CP_ANALYTICS_SALT`).
3. Configureu un `reverse proxy` per a TLS (SSL/HTTPS)
3. Configura un servidor proxy invers per a TLS (SSL/HTTPS)
TLS és obligatori perquè ActivityPub funcioni. Aquest feina es pot gestionar
fàcilment amb un `reverse proxy`, per exemple amb
[Caddy](https://caddyserver.com/):
TLS és obligatori per a què funcioni ActivityPub. Aquesta tasca es pot gestionar fàcilment mitjançant un servidor proxy invers, per exemple amb [Caddy](https://caddyserver.com/):
```
#castopod
@ -104,57 +95,58 @@ una base de dades Redis com a gestor de memòria cau.
}
```
4. Executeu `docker-compose up -d`, espereu que s'inicialitzi i aneu a
`https://castopod.exemple.com/cp-install` per acabar de configurar Castopod!
4. Executa `docker-compose up -d`, espera que s'inicialitzi a
`https://castopod.example.com/cp-install` per finalitzar la configuració de
Castopod!
5. Ja esteu a punt, podeu començar a fer podcasts! 🎙️🚀
5. Estàs llest, comença a publicar podcasts! 🎙️🚀
## Variables d'entorn
- **castopod/castopod** and **castopod/app**
- **castopod/castopod** i **castopod/app**
| Nom de la variable | Tipus (`default`) | Default |
| ------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Nom de la variable | Tipus (`default`) | Valor per defecte |
| ------------------------------------- | -----------------------| ----------------- |
| **`CP_BASEURL`** | cadena | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?cadena | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?cadena | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?cadena | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | cadena | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?cadena | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?cadena | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?cadena | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?cadena | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?cadena | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` o `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?cadena | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?cadena | `null` |
| **`CP_REDIS_PORT`** | ?nombre | `6379` |
| **`CP_REDIS_DATABASE`** | ?nombre | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?cadena | `undefined` |
| **`CP_EMAIL_FROM`** | ?cadena | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?cadena | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?cadena | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?nombre | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` o `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?booleà | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?nombre | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?booleà | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?cadena | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` o `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?nombre (amb sufix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?nombre (amb sufix) | `512M` |
| **`CP_TIMEOUT`** | ?nombre | `900` |
- **castopod/web-server**
| Nom de la variable | Type | Default |
| ---------------------- | --------------------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Nom de la variable | Tipus | Valor per defecte |
| ----------------------| ----------------------| ----------------- |
| **`CP_APP_HOSTNAME`** | ?cadena | `"app"` |
| **`CP_MAX_BODY_SIZE`**| ?nombre (amb sufix) | `512M` |
| **`CP_TIMEOUT`** | ?nombre | `900` |

View File

@ -5,220 +5,119 @@ sidebarDepth: 3
# Com instal·lar Castopod?
Castopod va ser pensat per ser fàcil d'instal·lar. Ja sigui utilitzant un
allotjament dedicat o un compartit, podeu instal·lar-lo a la majoria de
servidors web compatibles amb PHP-MySQL.
Castopod ha estat dissenyat per ser fàcil d'instal·lar. Ja sigui que utilitzis
un allotjament dedicat o compartit, pots instal·lar-ho en la majoria de servidors
web compatibles amb PHP-MySQL.
::: tip Nota
Hem publicat imatges oficials de Docker per a Castopod!
Si preferiu utilitzar Docker, podeu ometre això i anar directament a la
[documentació de Docker](./docker.md) per a Castopod.
Si prefereixes utilitzar Docker, pots saltar aquesta part i anar directament a la
[documentació sobre Docker](./docker.md) per a Castopod.
:::
## Requisits
- PHP v8.1 only
- PHP v8.1 només
- MySQL versió 5.7 o superior o MariaDB versió 10.2 o superior
- Support d'HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
- Suport per a HTTPS
- Un [rellotge sincronitzat amb ntp](https://wiki.debian.org/NTP) per validar les
sol·licituds entrants de la federació
### PHP v8.1 only
### PHP v8.1 només
PHP version 8.1 is required, with the following extensions installed:
Es requereix la versió 8.1 de PHP, amb les següents extensions instal·lades:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) amb les llibreries
**JPEG**, **PNG** i **WEBP**.
- [exif](https://www.php.net/manual/en/exif.installation.php)
- [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) amb **JPEG**,
**PNG** i biblioteques **WEBP**.
- [exif](https://www.php.net/manual/fr/exif.installation.php)
A més, assegureu-vos que les extensions següents estiguin habilitades al vostre
PHP:
A més, assegura't que les següents extensions estiguin activades en el teu PHP:
- json (activat per defecte; no el desactiveu)
- xml (activat per defecte; no el desactiveu)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
- json (activat de forma predeterminada - no el desactivis)
- xml (activat de forma predeterminada - no el desactivis)
- [mysqlnd](https://www.php.net/manual/fr/mysqlnd.install.php)
### Base de dades compatible amb MySQL
> Us recomanem que utilitzeu [MariaDB](https://mariadb.org).
> Recomanem utilitzar [MariaDB](https://mariadb.org).
::: warning Avís
::: warning Atenció
Castopod només funciona amb bases de dades compatibles amb MySQL 5.7 o superior.
No funcionarà amb l'anterior MySQL v5.6, per exemple, ja que el seu final de
vida va ser el 5 de febrer de 2021.
Castopod només funciona amb bases de dades MySQL 5.7 o versions més recents.
Les versions 5.6 (que han deixat de rebre suport el 5 de febrer de 2021) o anteriors
de MySQL no funcionaran.
:::
Necessitareu el nom d'amfitrió del servidor (hostname), el nom de la base de
dades, el nom d'usuari i la contrasenya per completar el procés d'instal·lació.
Si no els teniu, poseu-vos en contacte amb l'administrador del vostre servidor.
Necessitaràs el nom de l'amfitrió del servidor, el nom de la base de dades, el nom
d'usuari i la contrasenya per completar el procés d'instal·lació. Si no tens aquesta
informació, posa't en contacte amb l'administrador.
#### Privilegis
#### Drets d'accés
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
`REFERENCES`, `CREATE VIEW`.
L'usuari ha de tenir com a mínim aquests drets d'accés a la base de dades perquè
Castopod funcioni: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`,
`INDEX`,`INSERT`, `SELECT`, `UPDATE`,`REFERENCES`, `CREATE VIEW`.
### (Opcional) FFmpeg v4.1.8 o superior per fer videoclips
### (Opcional) FFmpeg v4.1.8 o superior per a clips de vídeo
Si voleu generar videoclips, cal [FFmpeg](https://www.ffmpeg.org/) versió 4.1.8
o superior. Cal instal·lar les següents extensions:
Es requereix la versió 4.1.8 o superior de [FFmpeg](https://www.ffmpeg.org/) si
vols generar clips de vídeo. Les següents extensions han d'estar instal·lades:
- La llibreria **FreeType 2** per
- biblioteca **FreeType 2** per a
[gd](https://www.php.net/manual/en/image.installation.php).
### (Opcional) Altres recomanacions
- Redis per a un millor rendiment de la memòria cau.
- CDN per a la memòria cau de fitxers estàtics i millors rendiments.
- Passarel·la de correu electrònic per a contrasenyes perdudes.
- Redis per a un millor rendiment del memòria cau (cache).
- CDN per a la cache de fitxers estàtics i un millor rendiment.
- Passarel·la de correu electrònic per als contrasenyes perdudes.
## Instruccions d'instal·lació
### Pre-requisits
### Preparatius
0. Obteniu un servidor web amb els [requisits](#requirements) instal·lats
1. Creeu una base de dades MySQL per a Castopod amb un usuari amb privilegis
d'accés i modificació (per a més informació, vegeu
[base de dades compatible MySQL](#mysql-compatible-database)).
2. Activeu HTTPS al vostre domini amb un _certificat SSL_.
3. Baixeu i descomprimiu el darrer [paquet Castopod](https://castopod.org/) al
servidor web si encara no ho heu fet.
- ⚠️ Establiu l'arrel del document del servidor web a la subcarpeta
`castopod/public/`.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
0. Obtén un servidor web amb [els requisits](#requisits) instal·lats.
1. Crea una base de dades MySQL per a Castopod amb un usuari amb els permisos d'accés i
modificació (per a més informació, consulta la secció
[Base de dades compatible amb MySQL](#base-de-dades-compatible-amb-mysql)).
2. Activa HTTPS al teu domini amb un _certificat SSL_.
3. Descarrega i descomprimeix el paquet més recent de [Castopod](https://castopod.org/)
al servidor web si encara no ho has fet.
- ⚠️ Assegura't que la carpeta arrel del document del servidor web apunti a la subcarpeta
`public/` de la carpeta `castopod`.
4. Afegiu **tasques cron** al teu servidor web per als diversos processos en segon pla
(substitueix les rutes segons corresponguin):
```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1
* * * * * /ruta/fins/a/php /ruta/fins/a/castopod/spark tasks:run >> /dev/null 2>&1
```
**Note** - If you do not add this cron task, the following Castopod features
will not work:
**Nota** - Si no afegeixes aquesta tasca cron, les funcionalitats següents de Castopod
no funcionaran:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
- Importar un podcast des d'un aliment RSS existent
- Difondre activitats socials als teus seguidors a la federació
- Difondre episodis a hubs oberts utilitzant
[WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
- Generació de clips de vídeo -
[requereix FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (recomanat) Assistent d'instal·lació
### (Mètode recomanat) Assistent d'instal·lació
1. Executeu l'script d'instal·lació de Castopod anant a la pàgina web de
l'assistent d'instal·lació (`https://exemple.com/cp-install`) al vostre
navegador web preferit.
2. Seguiu les instruccions a la vostra pantalla.
3. Comenceu a fer podcasts!
1. Executa l'script d'instal·lació de Castopod accedint a la pàgina de l'assistent
d'instal·lació (`https://el-teu-nom-de-domini.com/cp-install`) des del teu navegador
web preferit.
2. Segueix les instruccions que s'hi mostren.
3. Comença a emetre el teu podcast!
::: info Nota
:::info Nota
L'script d'instal·lació escriu un fitxer `.env` a l'arrel del paquet. If you
cannot go through the install wizard, you can create and edit the `.env` file
manually based on the `.env.example` file.
:::
### Email/SMTP setup
Email configuration is required for some features to work properly (eg.
retrieving your forgotten password, sending instructions to premium subscribers,
…)
You may add your email configuration in your instance's `.env` like so:
```ini
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
```
#### Email config options
| Variable name | Type | Default |
| ---------------- | -------------------- | ------------ |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined` |
| **`SMTPPass`** | string | `undefined` |
| **`SMTPPort`** | number | `25` |
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
### Media storage
By default, files are saved to the `public/media` folder using the file system.
If you need to relocate the `media` folder to a different location, you can
specify it in your `.env` file as shown below:
```ini
# […]
media.root="media"
media.storage="/mnt/storage"
```
In this example, the files will be saved to the /mnt/storage/media folder. Make
sure to also update your web server configuration to reflect this change.
### S3
If you prefer storing your media files on an S3 compatible storage, you may
specify it in your `.env`:
```ini
# […]
media.fileManager="s3"
media.s3.endpoint="your_s3_host"
media.s3.key="your_s3_key"
media.s3.secret="your_s3_secret"
media.s3.region="your_s3_region"
```
#### S3 config options
| Variable name | Type | Default |
| ----------------------- | ------- | ----------- |
| **`endpoint`** | string | `undefined` |
| **`key`** | string | `undefined` |
| **`secret`** | string | `undefined` |
| **`region`** | string | `undefined` |
| **`bucket`** | string | `castopod` |
| **`protocol`** | number | `undefined` |
| **`pathStyleEndpoint`** | boolean | `false` |
| **`keyPrefix`** | string | `undefined` |
## Paquets de la comunitat
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
### Install with YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Instal·lar Castopod amb YunoHost" class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Repositori
a Github</a>
</div>
L'script d'instal·lació crea un fitxer `.env` a la carpeta arrel del paquet. Si no pots
utilitzar l'assistent d'

View File

@ -2,25 +2,25 @@
title: Seguretat
---
# Detalls de seguretat
# Qüestions de seguretat
Castopod està fet amb [CodeIgniter4](https://codeigniter.com/), un framework PHP
que fomenta les
Castopod està desenvolupat amb [CodeIgniter4](https://codeigniter.com/), un
framework PHP que fomenta les
[bones pràctiques de seguretat](https://codeigniter.com/user_guide/concepts/security.html).
Per maximitzar la seguretat de la vostra instància i evitar qualsevol atac
maliciós, us recomanem que actualitzeu tots els permisos dels fitxers de
Castopod després de la instal·lació o actualitzacions (per evitar qualsevol
error de permís previ):
Per garantir la màxima seguretat de la teva instància i evitar atacs maliciosos,
et recomanem actualitzar els permisos dels fitxers de Castopod després de la
instal·lació i després de cada actualització (i evitar errors d'accés als fitxers):
- el directori `writable/` ha de ser **llegible** i **escrivible**.
- el directori `public/media/` ha de ser **llegible** i **escrivible**.
- qualsevol altre fitxer ha de ser definit com a **només-lectura**.
- La carpeta `writable/` ha de ser accessible en **lectura** i en **escriptura**.
- La carpeta `public/media/` ha de ser accessible en **lectura** i en **escriptura**.
- qualsevol altre fitxer ha de ser accessible només en **lectura**.
Per exemple, si utilitzeu Apache o NGINX amb Ubuntu, podeu fer el següent:
Per exemple, si utilitzes Apache o NGINX amb Ubuntu, pots executar les següents
comandes:
```bash
sudo chown -R root:root /ruta/cap/a/castopod
sudo chown -R www-data:www-data /ruta/cap/a/castopod/writable
sudo chown -R www-data:www-data /ruta/cap/a/castopod/public/media
sudo chown -R root:root /ruta/fins/a/castopod
sudo chown -R www-data:www-data /ruta/fins/a/castopod/writable
sudo chown -R www-data:www-data /ruta/fins/a/castopod/public/media
```

View File

@ -1,110 +1,107 @@
---
title: Actualitzar
title: Actualització
sidebarDepth: 3
---
# Com actualitzar Castopod?
# Com instal·lar Castopod?
Després d'instal·lar Castopod, és possible que vulgueu actualitzar la vostra
instància a la darrera versió per gaudir de les últimes funcions ✨, correccions
d'errors 🐛 i millores de rendiment ⚡.
Després d'instal·lar Castopod, pots actualitzar la teva instància a la
darrera versió per poder gaudir de les últimes funcionalitats ✨, correccions de
bugs 🐛 i millores de rendiment ⚡.
## Update instructions
## Instruccions d'actualització
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
0. ⚠️ Abans de realitzar cap actualització, us recomanem encaridament que feu una còpia de seguretat
dels vostres fitxers de Castopod i de la base de dades.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
[He de fer una còpia de seguretat abans de fer la actualització?](#he-de-fer-una-còpia-de-seguretat-abans-de-fer-la-actualització)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
1. Vés a la
[pàgina de versions](https://code.castopod.org/adaures/castopod/-/releases) i
comprova si la teva instància està actualitzada a l'última versió de Castopod.
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
[On puc trobar la versió de Castopod?](#on-puc-trobar-la-versió-de-castopod)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
2. Descarrega el paquet de l'última versió anomenat `Paquet de Castopod`, pots triar
entre els arxius `zip` o `tar.gz`.
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
- ⚠️ Assegura't de descarregar el Paquet de Castopod i **NO** el Codi Font.
- Tingues en compte que també pots descarregar l'últim paquet des de
[castopod.org](https://castopod.org/).
3. On your server:
3. Al teu servidor:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
- Esborra tots els fitxers menys `.env` i `public/media`.
- Copia els nous fitxers del paquet descarregat al teu servidor.
::: info Note
::: info Nota
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
Potser hauràs de configurar de nou els permisos dels fitxers com
s'indica en el procés d'instal·lació. Consulta
[Qüestions de seguretat](./security.md).
:::
4. Update your database schema from your `Castopod Admin` > `About` page or by
running:
4. Actualitza l'esquema de la teva base de dades des de la pàgina `Castopod Admin` > `Sobre l'aplicació` o bé
executant:
```bash
php spark castopod:database-update
```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
5. Netega la memòria cau des de l'opció `Castopod Admin` > `Configuració` > `general` > `Netega`.
6. ✨ Gaudeix de la teva nova instància, has acabat!
::: info Note
::: info Nota
Releases may come with additional update instructions (see
[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
Les versions poden tenir instruccions d'actualització adicionals (consulta la
[pàgina de les notes de la versió](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
[Fa molt de temps que no actualitzo la meva instància... Què hauria de fer?](#fa-molt-de-temps-que-no-actualitzo-la-meva-instància-què-hauria-de-fer)
:::
## Fully Automated updates
## Actualitzacions totalment automatitzades
> Aviat... 👀
> Properament... 👀
## Preguntes més freqüents (FAQ)
## Preguntes Més Freqüents (PMF)
### On puc trobar la meva versió de Castopod?
### On puc trobar la versió de Castopod?
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
Ves al teu panell d'administració de Castopod, la versió es mostra a la part inferior esquerra.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
També pots trobar la versió a l'aplicació
`> Configuració > Constants.php` carpeta.
### Fa temps que no actualitzo la meva instància... Què hauria de fer?
### Fa molt de temps que no actualitzo la meva instància... Què hauria de fer?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
Cap problema! Només has de seguir els passos per aconseguir l'última versió com s'explica
anteriorment. Quan executis les instruccions d'actualització (4), executa-les
seqüencialment, de més antiga a més recent.
> És possible que vulgueu fer una còpia de seguretat de la vostra instància en
> funció del temps que no heu actualitzat Castopod.
> Hauries de fer una còpia de seguretat de la teva instància segons la data de l'última actualització
> de Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
`v1.0.0-beta.1`:
Per exemple, si estàs a la versió `v1.0.0-alpha.42` i vols actualitzar a
la versió `v1.0.0-beta.1`:
0. (molt recomanable) Feu una còpia de seguretat dels vostres fitxers i base de
0. (fortament recomanat) Fes una còpia de seguretat dels teus fitxers i de la teva base de
dades.
1. Baixeu la darrera versió, sobreescriu els vostres fitxers mantenint `.env` i
`public/media`.
1. Descarrega l'última versió, sobreescriu els teus fitxers conservant
`.env` i `public/media`.
2. Seguiu les instruccions d'actualització de cada versió seqüencialment (de la
més antiga a la més recent) començant per `v1.0.0-alpha.43`,
`v1.0.0-alpha.44`, `v1.0.0-alpha.45`, ..., `v1.0.0-beta.1`.
2. Executa les instruccions d'actualització una per una (de més antiga a més recent).
3. ✨ Gaudiu de la vostra nova instància, tot fet i preparat!
3. ✨ La teva nova instància està llesta!
### Hauria de fer una còpia de seguretat abans d'actualitzar?
### He de fer una còpia de seguretat abans de fer la actualització?
We advise you do, so you don't lose everything if anything goes wrong!
Et recomanem que ho facis, per si de cas alguna cosa anés malament!
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…
En general, et recomanem que facis còpies de seguretat regulars dels teus fitxers de Castopod i de la teva
base de dades per evitar perdre-ho tot...

View File

@ -2,244 +2,142 @@
sidebarDepth: 2
---
# Benvinguts 👋
# Benvingut 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod és una plataforma d'allotjament gratuïta i de codi obert creada per a
podcasters que volen involucrar i interactuar amb el seu públic.
Castopod és una plataforma de hosting gratuïta i de codi obert dissenyada per a podcasters que volen intercanviar i interactuar amb el seu públic.
Castopod és fàcil d'instal·lar i s'ha creat amb
[CodeIgniter4](https://codeigniter.com/), un marc PHP potent amb una empremta
molt petita.
Castopod és fàcil d'instal·lar i ha estat desenvolupat amb [CodeIgniter4](https://codeigniter.com/), un framework PHP potent i molt lleuger.
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Instal·lar<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
<a href="/fr/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Instal·la<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Característiques
- 🌱 &nbsp;Gratis i de codi obert (llicència AGPL v3)
- 🔐 &nbsp;Centrat en la sobirania de les dades: el vostre contingut, audiència
i estadístiques us pertanyen, i només a vosaltres
- 🪄 &nbsp;Funcions de podcasting 2.0: GUID, bloqueigos, transcripcions,
finançament, capítols, geo-localització, persones, fragments d'àudio, …
- 🌱 &nbsp;Lliure, gratuït i de codi obert (Llicència AGPL-3.0)
- 🔐 &nbsp;Centrat en la sobirania de les dades: el teu contingut, el teu públic i les teves estadístiques són teves i només teves
- 🪄 &nbsp;Funcionalitats del Podcasting 2.0 : GUID, bloquejos, transcripcions, finançament, capítols, geolocalització, convidats, fragments sonors, ...
- 💬 &nbsp;Xarxa social integrada:
- 🚀 &nbsp;Castopod forma part de Fediverse, una xarxa social descentralitzada
- ❤️ &nbsp;Creeu publicacions, compartiu-les, afegiu-hi com a preferits i
comenteu episodis
- 🚀 &nbsp;Castopod forma part del Fedivers, una xarxa social descentralitzada
- ❤️ &nbsp;Creació de publicacions, compartir, afegir a preferits i comentar episodis
- 📈 &nbsp;Estadístiques integrades:
- ⚖️ &nbsp;Complint amb GDPR / CCPA / LGPD
- 🪙 &nbsp;Mesura d'audiència segons l'estàndard IABv2
- 🏡 &nbsp;Estadístiques locals, sense cap tercer implicat
- ⚖️ &nbsp;Compliance GDPR / CCPA / LGPD
- 🪙 &nbsp;Mesura de l'audiència segons IABv2
- 🏡 &nbsp;Estadístiques integrades, sense intermediaris de terceres parts
- 📢 &nbsp;Eines de màrqueting integrades:
- ✅ &nbsp;Preparada per a SEO (metaetiquetes de gràfics oberts, JSON-LD, …)
- 📱 &nbsp;PWA: instal·lable pels oients com a aplicació autònoma
- 🎨 &nbsp;Colors del tema personalitzables
- 🎬 &nbsp;Genereu videoclips d'episodis preparats per compartir
- 🔉 &nbsp;Genera fragments d'àudio de cada episodi
- ▶️ &nbsp;Reproductor incrustable, per incrustar els episodis a qualsevol
lloc web
- ✅ &nbsp;Preparat per a SEO (metaetiquetes Open Graph, JSON-LD...)
- 📱 &nbsp;PWA: instal·la-ho com una aplicació independent
- 🎨 &nbsp;Colors de temes personalitzables
- 🎬 &nbsp;Genera clips de vídeo per compartir a partir dels episodis
- 🔉 &nbsp;Genera fragments sonors
- ▶️ &nbsp;Inclou els teus episodis a qualsevol lloc web
- 💸 &nbsp;Monetització:
- 🔗 &nbsp;Enllaços de finançament
- 📲 &nbsp;Anuncis per escoltar-fent-clic
- 🤝 &nbsp;Integració amb value4value i WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publiqueu els vostres episodis a tot arreu amb RSS:
- 📱 &nbsp;A tots els directoris i aplicacions: Podcast Index, Apple Podcasts,
Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Emeteu els vostres episodis a l'instant amb WebSub
- 📥 &nbsp;Importació de podcasts: moveu el vostre podcast existent a Castopod
- 📤 &nbsp;Traieu el vostre podcast fora de Castopod
- 🔀 &nbsp;Multi-podcast: allotgeu tants programes com vulgueu en un mateix lloc
- 👥 &nbsp;Multi-usuari: afegiu col·laboradors i definiu rols
- 🌎 &nbsp;Suport i18n: traduït a l'anglès, català, espanyol, xinès, francès,
polonès, alemany, portuguès brasiler ... i
[més per venir](https://translate.castopod.org)!
- 📲 &nbsp;Publicitat "listen-to-click"
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Podcasts de pagament
- 📡 &nbsp;Publica els teus episodis arreu amb RSS:
- 📱 &nbsp;A tots els índexs i aplicacions: Podcast Index, Podcasts d'Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend...
- ⚡ &nbsp;Un consum instantani d'episodis amb WebSub
- 📥 &nbsp;Importació de podcasts: trasllada el teu podcast existent a Castopod
- 📤 &nbsp;Canvia el teu podcast a un altre proveïdor d'hosting
- 🔀 &nbsp;Multiinquilí: allotja tants podcasts com vulguis
- 👥 &nbsp;Multiusuari: afegeix col·laboradors i determina els seus rols
- 🌎 &nbsp;Suport de i18n: traduït a l'anglès, francès, polonès, alemany, portuguès, portuguès del Brasil i espanyol... i [més a l'avenir](https://translate.castopod.org)!
## Motivació
## Per què Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
L'ecosistema dels podcasts és descentralitzat per naturalesa: pots crear el teu podcast com un fitxer RSS, publicar-lo a la web i compartir-lo arreu en línia.
It is in fact one of the only media to have stayed this way for a long time.
De fet, és un dels pocs mitjans que ha mantingut aquesta característica durant molt de temps.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
A mesura que els usos evolucionen, cada vegada hi ha més persones que s'interessen pels podcasts: ja sigui creadors que busquin noves maneres de compartir les seves idees o oients a la recerca de contingut millor.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
Amb l'increment de l'ús dels podcasts, algunes empreses intenten traslladar-lo cap a un mitjà més controlat i centralitzat.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
Castopod es va crear per oferir una alternativa oberta i sostenible per allotjar els teus podcasts, promoure la descentralització i assegurar que la creativitat dels podcasters es pugui expressar.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
Aquest projecte està impulsat per la comunitat de codi obert, i concretament pels moviments [Fedivers](https://fediverse.party/en/fediverse/) i [Podcasting 2.0](https://podcastindex.org/).
## Comparació amb altres solucions
## Comparativa amb altres solucions
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for&nbsp;you.
Creiem que una solució no és necessàriament adequada per a tothom, depèn molt de les teves necessitats. Així que aquí tens algunes comparatives amb altres eines per ajudar-te a veure si Castopod és la solució adequada per a&nbsp;tu.
### Castopod vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running&nbsp;it.
Castopod sovint s'anomena "el Wordpress dels podcasts" a causa de les similituds entre ambdues plataformes. En cert sentit, això és cert. De fet, Castopod s'ha inspirat en gran manera en l'ecosistema de Wordpress, observant la facilitat d'adopció per part de la comunitat i la gran quantitat de llocs web que l'utilitzen.
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
Com WordPress, Castopod és gratuït i de codi obert, construït amb PHP i una base de dades MySQL, i es presenta d'una manera fàcil d'instal·lar en la majoria dels servidors web.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
WordPress és una gran manera de crear el teu lloc web i ampliar-lo amb complementos per obtenir el que vols. És un CMS potent que t'ajuda a publicar qualsevol tipus de lloc web.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting&nbsp;journey.
D'altra banda, Castopod té com a objectiu satisfer les necessitats dels podcasters en concret, centrant-se exclusivament en els podcasts i en res més. No necessitaràs cap complement per començar amb la teva aventura de fer podcasts.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
Això permet optimitzar els processos específics dels podcasts: des de la creació dels teus podcasts i la publicació de nous episodis fins a la difusió, el màrqueting i les analítiques.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
Finalment, depenent de les teves necessitats, Castopod i WordPress fins i tot poden coexistir, ja que comparteixen els mateixos requisits!
### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
Funkwhale és un servidor de música autònom, modern i de codi obert. Com Castopod, Funkwhale es troba al fedivers, una xarxa social descentralitzada que permet la interoperabilitat entre ambdues.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
Funkwhale va ser creat inicialment per a la música. Més tard, a mesura que el projecte va evolucionar, es va introduir l'opció d'allotjar podcasts.
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
A diferència de Funkwhale, Castopod ha estat dissenyat i construït específicament per als podcasts. Això permet una implementació més senzilla de les funcions relacionades amb l'ecosistema dels podcasts, com ara les funcionalitats de podcasting 2.0 (transcripcions, capítols, ubicacions, persones, etcètera).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
Per tant, hauries d'utilitzar Funkwhale si vols allotjar la teva música i utilitzar Castopod si vols allotjar els teus podcasts.
### Castopod vs altres plataformes de podcast
### Castopod vs altres proveïdors d'allotjament de podcasts
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Hi ha moltes solucions per allotjar els teus podcasts, algunes de les quals són molt bones i [moltes d'elles](https://podcastindex.org/apps) es troben en la tendència del Podcasting 2.0 igual que Castopod!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
Cada una d'aquestes solucions és diferent de les altres; pots comparar-les amb la [llista de característiques](#característiques).
That being said, there are two main differences with other podcasting solutions:
Dit això, hi ha dues diferències principals amb les altres solucions de podcasts:
- Castopod es pot auto-allotjar i és la única solució que us permet mantenir el
control total sobre el que produïu. A més, com que és de codi obert, fins i
tot podeu personalitzar-lo com vulgueu.
- Castopod es pot autoallotjar i és l'únic proveïdor que et permet mantenir el control total del que produeixes. D'altra banda, com que és de codi obert, tens el poder de modificar-lo com vulguis.
- Castopod és l'única solució que actualment integra tant una xarxa social
descentralitzada amb ActivityPub com moltes de les funcions de podcasting 2.0,
amb l'esperança de salvar la bretxa entre les dues.
- Castopod és l'única solució que integra ara mateix tant una xarxa social descentralitzada basada en l'ActivityPub com funcionalitats de "Podcasting 2.0", reduint la distància entre ambdues.
## Col·laborar
## Contribució
Love Castopod and would like to help? Take a look at the following documentation
to get you&nbsp;started.
T'agrada Castopod i vols ajudar? Consulta la documentació següent per començar.
### Codi de conducta
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be&nbsp;tolerated.
Castopod ha adoptat el Codi de Conducta que fem servir perquè els participants en el projecte s'hi adhereixin. Llegeix el [manual del CODI_DE_CONDUCTA](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md) per entendre quines accions seran intolerables i quines no ho seran.
### Guia de col·laboració
### Guia de contribució
Read our [contributing guide](../contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
Llegeix la nostra [guia de contribució](./contributing/guidelines.md) per obtenir informació sobre el nostre procés de desenvolupament, com proposar correccions d'errors i millores, i com construir i provar els teus canvis a Castopod.
## Col·laboradors ✨
## Contribuïdors ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Volem agrair a aquesta gent fantàstica (clau d'emojis [aquí](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- ALL-CONTRIBUTORS-LIST:START - No esborris ni modifiquis aquesta secció -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Romain de Laage"/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rdlaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Romain de Laage"/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Lyonel Bernard"/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt="Christopher Lagonick-Weitzel"/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Christopher Lagonick-Weitzel"/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ernesto Acosta"/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">🐛</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt="Bastien Luneteau"/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Cécile Ricordeau"/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Miś"/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt="Marcin Lewandowski"/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">🐛</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sebastian Janik"/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Karczmarczyk"/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="denis d"/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">🐛</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt="Douglas Kastle"/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">🐛</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="cExplorer"/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="ImaCrea"/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">🐛</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Jonas S"/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt="LEFEBVRE Yann"/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt="Sebastian Späth"/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">🐛</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="rocky III"/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt="Hermann Josef Eckl"/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Delhaye Cyrille"/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">🐛</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt="João Leandro"/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Angelos Chouvardas"/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt="Eivind"/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt="Ewen"/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt="forght"/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt="glottis0q"/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100" width="100px;" alt="ButterflyOfFire"/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt="Lucian I. Last"/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt="LuuzViir"/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt="CTHTC"/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt="Russian Retro"/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt="Marek L'ach"/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt="GunChleoc"/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt="GabiSnow"/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt="bendaha"/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt="Samuel Roland"/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Dimitri Regnier"/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100" width="100px;" alt="irithys"/><br /><sub><b>irithys</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sergi"/><br /><sub><b>Sergi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt="ghose (XoseM)"/><br /><sub><b>ghose (XoseM)</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/basen1982"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Andreas Olsson"/><br /><sub><b>Andreas Olsson</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/leonfrom"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="leonfrom"/><br /><sub><b>leonfrom</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/agentcobra57"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="agentcobra"/><br /><sub><b>agentcobra</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/alephoto85"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100" width="100px;" alt="Alessandro"/><br /><sub><b>Alessandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/liimee"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="liimee"/><br /><sub><b>liimee</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ahmedsabouni"><img src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100" width="100px;" alt="Ahmed Sabouni"/><br /><sub><b>Ahmed Sabouni</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KrzysztofDomanczyk"><img src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100" width="100px;" alt="KrzysztofDomanczyk"/><br /><sub><b>KrzysztofDomanczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"></td>
<td align="center" valign="top" width="14.28%"></td>
</tr>
</tbody>
</table>
@ -249,49 +147,38 @@ Thanks goes to these wonderful people
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
Aquest projecte segueix l'especificació de
[all-contributors](https://github.com/all-contributors/all-contributors).
Totes les contribucions són benvingudes!
## Contacte
You may reach us for help or ask any question you have on:
Ens pots contactar per obtenir ajuda o fer preguntes sobre Castopod a:
- [Discord](https://castopod.org/discord) (per a la interacció directa amb
desenvolupadors i la comunitat)
- [Seguiment d'incidències](https://code.castopod.org/adaures/castopod/-/issues)
(per a sol·licituds de noves funcionalitats i informes d'errors)
- [Discord](https://castopod.org/discord) (per parlar en temps real amb els desenvolupadors i la comunitat)
- [Seguiment de problemes](https://code.castopod.org/adaures/castopod/-/issues) (per fer-ne qualsevol pregunta, suggeriment de nova funcionalitat o informe de bug)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
Alternativament, també pots seguir-nos a les xarxes socials per obtenir notícies sobre Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (instància de Mastodon)
- [podlibre.social](https://podlibre.social/@Castopod) (Instància Mastodon)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Patrocinadors
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
El desenvolupament continu de Castopod és possible gràcies al suport dels seus mecenes. Si vols ajudar, considera [patrocinar el desenvolupament de Castopod](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Logo d'Ad Aures" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="Logo de NLnet" class="h-16" /></a>
</div>
## Llicència
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[Llicència pública general Affero GNU v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Drets d'autor © 2020-present, [Ad Aures](https://adaures.com/).
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md
[contributions]: https://code.castopod.org/adaures/castopod/-/issues

View File

@ -1,4 +1,4 @@
{
"label": "Contributing",
"position": 3
"label": "Mitwirken",
"position": 3
}

View File

@ -1,154 +1,117 @@
---
title: Guidelines
title: Richtlinien
---
# Contributing to Castopod
# Mitarbeit an Castopod
Love Castopod and want to help? Thanks so much, there's something to do for
everybody!
Liebst du Castopod und möchtest helfen? Vielen Dank, es gibt für jeden etwas zu tun!
Please take a moment to review this document in order to make the contribution
process easy and effective for everyone involved.
Bitte nimm dir einen Moment Zeit, um dieses Dokument zu lesen, um den Beitragungsprozess einfach und effektiv für alle Beteiligten zu gestalten.
Following these guidelines helps to communicate that you respect the time of the
developers managing and developing this open source project. In return, they
should reciprocate that respect in addressing your issue or assessing patches
and features.
Die Befolgung dieser Richtlinien zeigt, dass du die Zeit der Entwickler respektierst, die dieses Open-Source-Projekt verwalten und entwickeln. Im Gegenzug sollten sie diesen Respekt erwidern, indem sie sich mit deinem Problem befassen oder Patches und Funktionen bewerten.
::: info Note
::: info Hinweis
**Any** contribution made on a repository other than
[the original repository](https://code.castopod.org/adaures/castopod) will not
be accepted.
**Jeder** Beitrag, der auf einem anderen Repository als dem
[Original-Repository](https://code.castopod.org/adaures/castopod) gemacht wird, wird nicht akzeptiert.
:::
## Using the issue tracker
## Verwendung des Issue-Trackers
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
Der [Issue-Tracker](https://code.castopod.org/adaures/castopod/-/issues) ist der bevorzugte Kanal für [Fehlerberichte](#bug-reports), [Funktionserweiterungen](#feature-requests) und [das Einreichen von Pull-Requests](#pull-requests).
## ⚠ Security issues and vulnerabilities
## ⚠ Sicherheitsprobleme und Schwachstellen
If you encounter any security issue or vulnerability in the Castopod source,
please contact us directly by email at
[security@castopod.org](mailto:security@castopod.org)
Wenn du auf ein Sicherheitsproblem oder eine Schwachstelle in der Castopod-Quelle stößt, kontaktiere uns bitte direkt per E-Mail unter [security@castopod.org](mailto:security@castopod.org)
## Bug reports
## Fehlerberichte
A bug is a _demonstrable problem_ that is caused by the code in the repository.
Good bug reports are extremely helpful - thank you!
Ein Fehler ist ein _nachweisbares Problem_, das durch den Code im Repository verursacht wird. Gute Fehlerberichte sind äußerst hilfreich - vielen Dank!
Guidelines for bug reports:
Richtlinien für Fehlerberichte:
1. **Use the issue search** &mdash; check if the issue has already been
reported.
1. **Verwende die Issue-Suche** &mdash; überprüfe, ob der Fehler bereits gemeldet wurde.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the
latest `main` branch in the repository.
2. **Überprüfe, ob der Fehler behoben wurde** &mdash; Versuche, ihn mit dem neuesten `main`-Zweig im Repository zu reproduzieren.
3. **Isolate the problem** &mdash; ideally create a
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
3. **Isoliere das Problem** &mdash; erstelle idealerweise eine
[reduzierte Testfall](https://css-tricks.com/reduced-test-cases/) und ein Live-Beispiel.
A good bug report shouldn't leave others needing to chase you up for more
information. Please try to be as detailed as possible in your report. What is
your environment? What steps will reproduce the issue? What browser(s) and OS
experience the problem? What would you expect to be the outcome? All these
details will help people to fix any potential bugs.
Ein guter Fehlerbericht sollte keine weiteren Informationen von anderen benötigen. Bitte versuche, deinen Bericht so detailliert wie möglich zu gestalten. Was ist deine Umgebung? Welche Schritte reproduzieren den Fehler? Welchen Browser(s) und welches Betriebssystem hast du? Was würdest du als Ergebnis erwarten? Alle diese Details helfen dabei, potenzielle Fehler zu beheben.
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> have been created for this project. You may use them to help you follow those
> guidelines.
> [Vorlagen für Fehlerberichte](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> wurden für dieses Projekt erstellt. Du kannst sie nutzen, um den Richtlinien zu folgen.
## Feature requests
## Funktionserweiterungen
Feature requests are welcome. But take a moment to find out whether your idea
fits with the scope and aims of the project. It's up to _you_ to make a strong
case to convince the project's developers of the merits of this feature. Please
provide as much detail and context as possible.
Funktionserweiterungen sind willkommen. Informiere dich jedoch vorher, ob deine Idee in den Rahmen und das Ziel des Projekts passt. Es liegt an _dir_, diesen Feature-Vorschlag überzeugend zu begründen, um die Entwickler des Projekts von den Vorteilen dieser Funktion zu überzeugen. Bitte gib so viele Details und Kontext wie möglich an.
## Pull requests
## Pull-Requests
Good pull requests - patches, improvements, new features - are a fantastic help.
They should remain focused in scope and avoid containing unrelated commits.
Gute Pull-Requests - Patches, Verbesserungen, neue Funktionen - sind eine fantastische Hilfe. Sie sollten sich auf einen bestimmten Bereich konzentrieren und sollten keine nicht zusammenhängenden Commits enthalten.
**Please ask first** before embarking on any significant pull request (e.g.
implementing features, refactoring code, porting to a different language),
otherwise you risk spending a lot of time working on something that the
project's developers might not want to merge into the project.
**Bitte frage zuerst**, bevor du mit einem größeren Pull-Request (z. B. Implementierung von Funktionen, Refaktorisierung von Code, Portierung in eine andere Sprache) beginnst, da du sonst Gefahr läufst, viel Zeit mit etwas zu verbringen, das die Entwickler des Projekts möglicherweise nicht in das Projekt aufnehmen möchten.
Please adhere to the coding conventions used throughout a project (indentation,
accurate comments, etc.) and any other requirements (such as test coverage).
Bitte halte dich an die Coding-Konventionen, die in einem Projekt verwendet werden (Einrückung, genaue Kommentare, etc.) und an alle anderen Anforderungen (wie Testabdeckung).
Adhering to the following process is the best way to get your work included in
the project:
Das Befolgen des folgenden Prozesses ist der beste Weg, um deine Arbeit in das Projekt aufzunehmen:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the
project, clone your fork, and configure the remotes:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) das Projekt, klone deinen Fork und konfiguriere die Remotes:
```bash
# Clone your fork of the repo into the current directory
git clone https://code.castopod.org/<your-username>/castopod.git
# Klone deinen Fork des Repos in das aktuelle Verzeichnis
git clone https://code.castopod.org/<dein-benutzername>/castopod.git
# Navigate to the newly cloned directory
# Navigiere zum neu geklonten Verzeichnis
cd castopod
# Assign the original repo to a remote called "upstream"
# Weise dem originalen Repo einen Remote namens "upstream" zu
git remote add upstream https://code.castopod.org/adaures/castopod.git
```
2. If you cloned a while ago, get the latest changes from upstream:
2. Wenn du vor einiger Zeit geklont hast, hole dir die neuesten Änderungen von upstream:
```bash
git checkout main
git pull upstream main
```
3. Create a new topic branch (off the `main` branch) to contain your feature,
change, or fix:
3. Erstelle einen neuen Topic-Branch (aus dem `main`-Zweig), um dein Feature, deine Änderung oder Behebung zu enthalten:
```bash
git checkout -b <topic-branch-name>
```
4. Commit your changes in logical chunks. Please adhere to these
[git commit message guidelines](https://conventionalcommits.org/) or your
code is unlikely be merged into the main project. Use Git's
[interactive rebase](https://help.github.com/articles/about-git-rebase/)
feature to tidy up your commits before making them public.
4. Commite deine Änderungen in logischen Teilen. Bitte halte dich an diese
[Git Commit Message-Richtlinien](https://conventionalcommits.org/), da dein
Code sonst wahrscheinlich nicht in das Hauptprojekt integriert wird. Verwende die
[interaktive Rebase-Funktion von Git](https://help.github.com/articles/about-git-rebase/),
um deine Commits vor ihrer Veröffentlichung aufzuräumen.
5. Locally merge (or rebase) the upstream dev branch into your topic branch:
5. Führe (rebase) den Upstream-Entwicklungszweig lokal in deinen Topic-Branch zusammen:
```bash
git pull [--rebase] upstream main
```
6. Push your topic branch up to your fork:
6. Pushe deinen Topic-Branch in deinen Fork:
```bash
git push origin <topic-branch-name>
```
7. [Open a Pull Request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
with a clear title and description.
7. [Öffne einen Pull-Request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
mit einem klaren Titel und einer Beschreibung.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
license your work under the terms of the
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
**WICHTIG**: Durch das Einreichen eines Patches stimmst du zu, dass die Projektbesitzer dein Werk unter den Bedingungen der
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE) lizenzieren.
## Collaborating guidelines
## Richtlinien für die Zusammenarbeit
There are few basic rules to ensure high quality of the project:
Es gibt ein paar grundlegende Regeln, um die hohe Qualität des Projekts sicherzustellen:
- Before merging, a PR requires at least two approvals from the collaborators
unless it's an architectural change, a large feature, etc. If it is, then at
least 50% of the core team have to agree to merge it, with every team member
having a full veto right. (i.e. every single one can block any PR)
- A PR should remain open for at least two days before merging (does not apply
for trivial contributions like fixing a typo). This way everyone has enough
time to look into it.
- Bevor ein PR gemerged wird, benötigt er mindestens zwei Zustimmungen von den Mitwirkenden, es sei denn, es handelt sich um eine architektonische Änderung, ein großes Feature usw. In diesem Fall müssen mindestens 50% des Kernteams zustimmen, es zu mergen, wobei jedes Teammitglied ein absolutes Vetorecht hat. (d.h. jeder einzelne kann jeden PR blockieren)
- Ein PR sollte mindestens zwei Tage lang geöffnet bleiben, bevor er gemerged wird (gilt nicht für triviale Beiträge wie das Beheben eines Tippfehlers). Auf diese Weise hat jeder ausreichend Zeit, ihn zu prüfen.
You are always welcome to discuss and propose improvements to this guideline.
Es ist immer willkommen, über diese Richtlinie zu diskutieren und Verbesserungsvorschläge zu machen.

View File

@ -1,45 +1,40 @@
---
title: Development setup
title: Einrichtung der Entwicklungsumgebung
sidebarDepth: 3
---
# Setup your development environment
# Richte deine Entwicklungsumgebung ein
## Introduction
## Einführung
Castopod is a web app based on the `php` framework
[CodeIgniter 4](https://codeigniter.com).
Castopod ist eine Webanwendung, die auf dem `php`-Framework [CodeIgniter 4](https://codeigniter.com) basiert.
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
Wir verwenden [Docker](https://www.docker.com/), um schnell eine Entwicklungs-Umgebung einzurichten. In dem Projektordner sind eine `docker-compose.yml`-Datei und eine `Dockerfile` enthalten, die dir helfen sollen, deinen Beitrag zu starten.
> You don't need any prior knowledge of Docker to follow the next steps.
> However, if you wish to use your own environment, feel free to do so!
> Du benötigst keine vorherigen Kenntnisse in Docker, um den nächsten Schritten zu folgen. Wenn du jedoch deine eigene Umgebung verwenden möchtest, kannst du das gerne tun!
## Setup instructions
## Installationsanleitung
### 1. Pre-requisites
### 1. Voraussetzungen
0. Install [docker](https://docs.docker.com/get-docker).
0. Installiere [docker](https://docs.docker.com/get-docker).
1. Clone Castopod project by running:
1. Klonen das Castopod-Projekt, indem du folgenden Befehl ausführst:
```bash
git clone https://code.castopod.org/adaures/castopod.git
```
2. Create a `.env` file with the minimum required config to connect the app to
the database and use redis as a cache handler:
2. Erstelle eine `.env` Datei mit der minimalen Konfiguration, um die App mit der Datenbank zu verbinden und Redis als Cache-Handler zu verwenden:
```ini
CI_ENVIRONMENT="development"
# If set to development, you must run `npm run dev` to start the static assets server
# Wenn die Einstellung auf "development" gesetzt ist, musst du `npm run dev` ausführen, um den Server für die statischen Assets zu starten
vite.environment="development"
# By default, this is set to true in the app config.
# For development, this must be set to false as it is
# on a local environment
# Standardmäßig ist dies in der App-Konfiguration auf "true" eingestellt.
# Für die Entwicklung muss dies auf "false" gesetzt werden, da es
# sich um eine lokale Umgebung handelt
app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/"
@ -56,368 +51,88 @@ to help you kickstart your contribution.
cache.handler="redis"
cache.redis.host = "redis"
# You may not want to use redis as your cache handler
# Comment/remove the two lines above and uncomment
# the next line for file caching.
# Du möchtest möglicherweise Redis nicht als Cache-Handler verwenden
# Kommentiere/entferne die beiden Zeilen darüber und kommentiere die
# nächste Zeile für den Datei-Cache.
#cache.handler="file"
```
> _NB._ You can tweak your environment by setting more environment variables
> in your custom `.env` file. See the `env` for examples or the
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
> for more info.
> _Hinweis:_ Du kannst deine Umgebung anpassen, indem du weitere Umgebungsvariablen in deiner eigenen `.env`-Datei festlegst. Siehe die `env`-Datei für Beispiele oder das [CodeIgniter4 Benutzerhandbuch](https://codeigniter.com/user_guide/index.html) für weitere Informationen.
3. (for docker desktop) Add the repository you've cloned to docker desktop's
`Settings` > `Resources` > `File Sharing`
3. (für Docker Desktop) Füge das von dir geklonte Repository unter "Settings" > "Resources" > "File Sharing" in Docker Desktop hinzu.
### 2. (recommended) Develop inside the app Container with VSCode
### 2. (empfohlen) Entwicklung innerhalb des App-Containers mit VSCode
If you're working in VSCode, you can take advantage of the `.devcontainer/`
folder. It defines a development environment (dev container) with preinstalled
requirements and VSCode extensions so you don't have to worry about them. All
required services will be loaded automagically! 🪄
Wenn du mit VSCode arbeitest, kannst du den `.devcontainer/`-Ordner nutzen. Dieser definiert eine Entwicklungsumgebung (Dev Container) mit vorinstallierten Anforderungen und VSCode-Erweiterungen, sodass du dir keine Sorgen darum machen musst. Alle erforderlichen Dienste werden automatisch geladen! 🪄
1. Install the VSCode extension
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Open in container`
1. Installiere die VSCode-Erweiterung [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).
2. `Strg/Cmd + Umschalt + P` > `Im Container öffnen`.
> The VSCode window will reload inside the dev container. Expect several
> minutes during first load as it is building all necessary services.
> Das VSCode-Fenster wird innerhalb des Dev-Containers neu geladen. Erwarte einige Minuten beim ersten Laden, da alle erforderlichen Dienste erstellt werden.
**Note**: The dev container will start by running Castopod's php server.
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
**Hinweis**: Der Dev-Container wird durch Starten des Castopod-php-Servers gestartet. Während der Entwicklung musst du den Dev-Server von [Vite](https://vitejs.dev) starten, um den TypeScript-Code und die Styles zu kompilieren:
```bash
# run Vite dev server
# Vite Dev-Server starten
npm run dev
```
If there is any issue with the php server not running, you can restart them
using the following commands:
Wenn es Probleme mit dem php-Server gibt, der nicht läuft, kannst du sie mit den folgenden Befehlen neu starten:
```bash
# run Castopod server
# Castopod-Server starten
php spark serve - 0.0.0.0
```
3. You're all set! 🎉
3. Du bist fertig! 🎉
You're now **inside the dev container**, you may use the VSCode console
(`Terminal` > `New Terminal`) to run any command:
Du befindest dich nun **im Dev-Container** und kannst die VSCode-Konsole (`Terminal` > `Neues Terminal`) verwenden, um beliebige Befehle auszuführen:
```bash
# PHP is installed
# PHP ist installiert
php -v
# Composer is installed
# Composer ist installiert
composer -V
# npm is installed
# npm ist installiert
npm -v
# git is installed
# git ist installiert
git version
```
For more info, see
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
Weitere Informationen findest du unter [VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
### 3. Start hacking
### 3. Leg los!
You're all set! Start working your magic by updating the project's files! Help
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
Du bist bereit! Fange an, deine Magie zu wirken, indem du die Dateien des Projekts aktualisierst! Nutze die [CodeIgniter4 Benutzerhandbuch](https://codeigniter.com/user_guide/index.html), um weitere Einblicke zu erhalten.
To see your changes, go to:
Um deine Änderungen zu sehen, gehe zu:
- `http://localhost:8080/` for the Castopod app
- `http://localhost:8888/` for the phpmyadmin interface:
- `http://localhost:8080/` für die Castopod-App
- `http://localhost:8888/` für die phpMyAdmin-Benutzeroberfläche:
- Benutzername: **castopod**
- Passwort: **castopod**
- username: **castopod**
- password: **castopod**
### 2-alt. Entwicklung außerhalb des App-Containers
### 2-alt. Develop outside the app container
Du möchtest den VSCode-Devcontainer nicht verwenden? Kein Problem!
You do not wish to use the VSCode devcontainer? No problem!
1. Starte Docker-Container manuell:
1. Start docker containers manually:
Go to project's root folder and run:
Gehe zum Stammordner des Projekts und führe aus:
```bash
# starts all services declared in docker-compose.yml file
# -d option starts the containers in the background
# startet alle im docker-compose.yml-Datei deklarierten Dienste
# Die Option -d startet die Container im Hintergrund
docker-compose up -d
# See all running processes (you should see 3 processes running)
# Zeige alle ausgeführten Prozesse an (du solltest 3 Prozesse sehen)
docker-compose ps
# Alternatively, you can check all docker processes
# Du kannst auch alle Docker-Prozesse anzeigen
docker ps -a
```
> The `docker-compose up -d` command will boot 4 containers in the
> background:
>
> - `castopod_app`: a php based container with Castopod requirements
> installed
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries
> and pages caching
> - `castopod_mariadb`: a [mariadb](https://mariadb.org/) server for
> persistent data
> - `castopod_phpmyadmin`: a phpmyadmin server to visualize the mariadb
> database.
2. Run any command inside the containers by prefixing them with
`docker-compose run --rm app`:
```bash
# use PHP
docker-compose run --rm app php -v
# use Composer
docker-compose run --rm app composer -V
# use npm
docker-compose run --rm app npm -v
# use git
docker-compose run --rm app git version
```
---
## Going Further
### Install Castopod's dependencies
1. Install php dependencies with [Composer](https://getcomposer.org/)
```bash
composer install
```
::: info Note
The php dependencies aren't included in the repository. Composer will check
the `composer.json` and `composer.lock` files to download the packages with
the right versions. The dependencies will live under the `vendor/` folder.
For more info, check out the
[Composer documentation](https://getcomposer.org/doc/).
:::
2. Install javascript dependencies with [npm](https://www.npmjs.com/)
```bash
npm install
```
::: info Note
The javascript dependencies aren't included in the repository. Npm will check
the `package.json` and `package.lock` files to download the packages with the
right versions. The dependencies will live under the `node_module` folder.
For more info, check out the [NPM documentation](https://docs.npmjs.com/).
:::
3. Generate static assets:
```bash
# build all static assets at once
npm run build:static
# build specific assets
npm run build:icons
npm run build:svg
```
::: info Note
The static assets generated live under the `public/assets` folder, it
includes javascript, styles, images, fonts, icons and svg files.
:::
### Initialize and populate database
::: tip Tip
You may skip this section if you go through the install wizard (go to
`/cp-install`).
:::
1. Build the database with the migrate command:
```bash
# loads the database schema during first migration
php spark migrate -all
```
You may need to undo the migration (rollback):
```bash
# rolls back database schema (deletes all tables and their content)
php spark migrate:rollback
```
2. Populate the database with the required data:
```bash
# Populates all required data
php spark db:seed AppSeeder
```
You may choose to add data separately:
```bash
# Populates all categories
php spark db:seed CategorySeeder
# Populates all Languages
php spark db:seed LanguageSeeder
# Populates all podcasts platforms
php spark db:seed PlatformSeeder
# Populates all Authentication data (roles definition…)
php spark db:seed AuthSeeder
```
3. (optionnal) Populate the database with test data:
- Populate test data (login: admin / password: AGUehL3P)
```bash
php spark db:seed TestSeeder
```
- Populate with fake podcast analytics:
```bash
php spark db:seed FakePodcastsAnalyticsSeeder
```
- Populate with fake website analytics:
```bash
php spark db:seed FakeWebsiteAnalyticsSeeder
```
TestSeeder will add an active superadmin user with the following credentials:
- username: **admin**
- password: **AGUehL3P**
### Useful docker / docker-compose commands
- Monitor the app container:
```bash
docker-compose logs --tail 50 --follow --timestamps app
```
- Interact with redis server using included redis-cli command:
```bash
docker exec -it castopod_redis redis-cli
```
- Monitor the redis container:
```bash
docker-compose logs --tail 50 --follow --timestamps redis
```
- Monitor the mariadb container:
```bash
docker-compose logs --tail 50 --follow --timestamps mariadb
```
- Monitor the phpmyadmin container:
```bash
docker-compose logs --tail 50 --follow --timestamps phpmyadmin
```
- Restart docker containers:
```bash
docker-compose restart
```
- Destroy all containers, opposite of `up` command:
```bash
docker-compose down
```
- Rebuild app container:
```bash
docker-compose build app
```
Check [docker](https://docs.docker.com/engine/reference/commandline/docker/) and
[docker-compose](https://docs.docker.com/compose/reference/) documentations for
more insights.
## Known issues
### Allocation failed - JavaScript heap out of memory
This happens when running `npm install`.
👉 By default, docker might not have access to enough RAM. Allocate more memory
and run `npm install` again.
### (Linux) Files created inside container are attributed to root locally
You may use Linux user namespaces to fix this on your machine:
::: info Note
Replace "username" with your local username
:::
1. Go to `/etc/docker/daemon.json` and add:
```json
{
"userns-remap": "username"
}
```
2. Configure the subordinate uid/guid:
```bash
# in /etc/subuid
username:1000:1
username:100000:65536
```
```bash
# in /etc/subgid
username:1000:1
username:100000:65536
```
3. Restart docker:
```bash
sudo systemctl restart docker
```
4. That's it! Now, the root user in the container will be mapped to the user on
your local machine, no more permission issues! 🎉
You can check
[this great article](https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/)
to know more about how it works.
> Der Befehl `docker-compose

View File

@ -1,4 +1,4 @@
{
"label": "Getting Started",
"label": "Erste Schritte",
"position": 2
}

View File

@ -1,88 +1,86 @@
---
title: Authentifizierung & Autorisierung
title: Authentifizierung und Autorisierung
sidebarDepth: 3
---
# Authentifizierung & Autorisierung
# Authentifizierung und Autorisierung
Castopod behandelt Authentifizierung und Autorisierung mit `codeigniter/shield`
kombiniert mit eigenen Regeln. Rollen und Berechtigungen sind auf zwei Ebenen
definiert:
Castopod verwaltet die Authentifizierung und Autorisierung mithilfe von `codeigniter/shield` in Verbindung mit benutzerdefinierten Regeln. Rollen und Berechtigungen werden auf zwei Ebenen definiert:
1. [instanzweit](#1-instance-wide-roles-and-permissions)
2. [pro Podcast](#2-per-podcast-roles-and-permissions)
1. [Auf Instanzebene](#1-Instanzweite-Rollen-und-Berechtigungen)
2. [Pro Podcast](#2-Rollen-und-Berechtigungen-pro-Podcast)
## 1. Instanzweite Rollen und Berechtigungen
### Instanz Rollen
### Rollen auf Instanzebene
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| Rolle | Beschreibung | Berechtigungen |
| ------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------ |
| Super-Administrator | Hat die vollständige Kontrolle über Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Verwaltet Castopods Inhalt. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Generelle Benutzer von Castopod. | admin.access |
| Rolle | Beschreibung | Berechtigungen |
| ------------- | ------------------------------------- | -------------------------------------------------------------------------------------------- |
| Superadmin | Hat vollständige Kontrolle über Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Verwaltet den Inhalt von Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Allgemeine Benutzer von Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instanz Berechtigungen
### Berechtigungen auf Instanzebene
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| Berechtigung | Beschreibung |
| ----------------------- | ---------------------------------------------------------------------------- |
| admin.access | Kann auf den Castopod Adminbereich zugreifen. |
| admin.settings | Kann auf die Castopod Einstellungen zugreifen. |
| users.manage | Kann Castopod Benutzer verwalten. |
| persons.manage | Kann Personen verwalten. |
| pages.manage | Kann Seiten verwalten. |
| podcasts.view | Kann alle Podcasts einsehen. |
| podcasts.create | Kann neue Podcasts erstellen. |
| podcasts.import | Kann Podcasts importieren. |
| fediverse.manage-blocks | Kann Fediverse Akteure/Domains davon abhalten, mit Castopod zu interagieren. |
| Berechtigung | Beschreibung |
| ----------------------- | ------------------------------------------------------ |
| admin.access | Kann auf den Castopod-Adminbereich zugreifen. |
| admin.settings | Kann auf die Castopod-Einstellungen zugreifen. |
| users.manage | Kann Benutzer von Castopod verwalten. |
| persons.manage | Kann Personen verwalten. |
| pages.manage | Kann Seiten verwalten. |
| podcasts.view | Kann alle Podcasts anzeigen. |
| podcasts.create | Kann neue Podcasts erstellen. |
| podcasts.import | Kann Podcasts importieren. |
| fediverse.manage-blocks | Kann fediverse-Akteure/ -Domains blockieren. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Pro Podcast Rollen und Berechtigungen
## 2. Rollen und Berechtigungen pro Podcast
### Pro Podcast Rollen
### Rollen pro Podcast
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| Rolle | Beschreibung | Berechtigungen |
| ------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Administrator | Hat vollständige Kontrolle über Podcast #{id}. | \* |
| Editor | Verwaltet Inhalte und Veröffentlichungen von Podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Autor | Verwaltet Inhalte von Podcast #{id}, kann diese aber nicht veröffentlichen. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gast | Allgemeiner Mitwirkender des Podcasts #{id}. | view, episodes.view |
| Rolle | Beschreibung | Berechtigungen |
| ----------- | --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Hat vollständige Kontrolle über den Podcast #{id}. | \* |
| Editor | Verwaltet den Inhalt und die Veröffentlichungen des Podcasts #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Autor | Verwaltet den Inhalt des Podcasts #{id}, kann ihn aber nicht veröffentlichen. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gast | Allgemeiner Beitragender des Podcasts #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Pro Podcast Berechtigung
### Berechtigungen pro Podcast
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| Berechtigung | Beschreibung |
| ---------------------------- | ------------------------------------------------------------------------------------------------ |
| view | Kann Dashboard und Analysen des Podcasts #{id} einsehen. |
| edit | Kann Podcast #{id} bearbeiten. |
| delete | Kann Podcast #{id} löschen. |
| manage-import | Kann importierten Podcast #{id} synchronisieren. |
| manage-persons | Kann Mitwirkende des Podcasts #{id} verwalten. |
| manage-subscriptions | Kann Abonnements des Podcast #{id} verwalten. |
| manage-contributors | Kann Mitwirkende des Podcasts #{id} verwalten. |
| manage-platforms | Kann Plattform-Links des Podcast #{id} setzen/entfernen. |
| manage-publications | Kann Podcast #{id} veröffentlichen. |
| manage-notifications | Kann Benachrichtigungen des Podcasts #{id} einsehen und als gelesen markieren. |
| interact-as | Kann als Podcast #{id} interagieren, um Beiträge zu favorisieren, zu teilen oder zu beantworten. |
| episodes.view | Kann Dashboard und Analysen des Podcasts #{id} einsehen. |
| episodes.create | Kann Folgen für Podcast #{id} erstellen. |
| episodes.edit | Kann Podcast #{id} bearbeiten. |
| episodes.delete | Kann Podcast #{id} löschen. |
| episodes.manage-persons | Kann Abonnements des Podcast #{id} verwalten. |
| episodes.manage-clips | Kann Videoclips und Soundbites des Podcasts #{id} verwalten. |
| episodes.manage-publications | Kann Podcast #{id} veröffentlichen. |
| episodes.manage-comments | Du kannst Episodenkommentare von Podcast #{id} erstellen/entfernen. |
| Berechtigung | Beschreibung |
| ---------------------------- | ----------------------------------------------------------------------------------------- |
| view | Anzeigen des Dashboards und der Analytics des Podcasts #{id}. |
| edit | Kann den Podcast #{id} bearbeiten. |
| delete | Kann den Podcast #{id} löschen. |
| manage-imports | Kann den importierten Podcast #{id} synchronisieren. |
| manage-persons | Kann Abonnements des Podcasts #{id} verwalten. |
| manage-subscriptions | Kann Abonnements des Podcasts #{id} verwalten. |
| manage-contributors | Kann Beitragende des Podcasts #{id} verwalten. |
| manage-platforms | Kann Plattform-Links des Podcasts #{id} konfigurieren/löschen. |
| manage-publications | Kann den Podcast #{id} veröffentlichen. |
| manage-notifications | Kann die Benachrichtigungen für den Podcast #{id} anzeigen und als gelesen markieren. |
| interact-as | Kann als Podcast #{id} interagieren und Nachrichten hinzufügen, teilen oder beantworten. |
| episodes.view | Kann das Dashboard und die Analysen des Podcasts #{id} anzeigen. |
| episodes.create | Kann Episoden für den Podcast #{id} erstellen. |
| episodes.edit | Kann den Podcast #{id} bearbeiten. |
| episodes.delete | Kann den Podcast #{id} löschen. |
| episodes.manage-persons | Kann Abonnements des Podcasts #{id} verwalten. |
| episodes.manage-clips | Kann Video-Clips oder Audio-Segmente des Podcasts #{id} verwalten. |
| episodes.manage-publications | Kann den Podcast #{id} veröffentlichen. |
| episodes.manage-comments | Kann Kommentare der Episode des Podcasts #{id} erstellen/löschen. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -1,35 +1,28 @@
---
title: Official Docker images
title: Offizielle Docker-Images
sidebarDepth: 3
---
# Offizielle Docker Images
# Offizielle Docker-Images
Castopod erstellt während des automatischen Build-Prozesses 3 Docker-Images auf
Docker Hub:
Während des automatischen Build-Prozesses lädt Castopod 3 Docker-Images in den Docker Hub hoch:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): Ein
umfassendes Castopod Image mit Nginx als Webserver
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): Das App Paket mit
allen Castopod Abhängigkeiten
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): Ein
Nginx Webserver für Castopod
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): ein All-in-One Castopod-Image mit Nginx Unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): das Anwendungs-Bundle mit allen Castopod-Abhängigkeiten
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): eine Nginx-Konfiguration für Castopod
Außerdem benötigt Castopod eine MySQL-kompatible Datenbank. Eine Redis-Datenbank
kann als Cache-Handler hinzugefügt werden.
Zusätzlich benötigt Castopod eine mit MySQL kompatible Datenbank. Eine Redis-Datenbank kann als Cache-Manager hinzugefügt werden.
## Unterstützte Tags
- `develop` [unstable], neueste Updates des development Branches
- `beta` [stable], neueste Beta-Version
- `latest` [stable], die neuste Version
- `1.x.x` [stable], spezifische Version (seit `1.0.0`)
- `develop` [unstable], die neueste Version des Entwicklungszweigs
- `beta` [stable], die neueste Beta-Version
- `1.x.x` [stable], eine bestimmte Version (ab `1.0.0`)
## Beispiel
## Beispielnutzung
1. Installiere [Docker](https://docs.docker.com/get-docker/) und
[Docker-Compose](https://docs.docker.com/compose/install/)
2. Erstelle eine `docker-compose.yml` Datei mit folgendem Inhalt:
1. Installiere [docker](https://docs.docker.com/get-docker/) und [docker-compose](https://docs.docker.com/compose/install/)
2. Erstelle eine `docker-compose.yml`-Datei mit folgendem Inhalt:
```yml
version: "3.7"
@ -87,15 +80,11 @@ kann als Cache-Handler hinzugefügt werden.
castopod-db:
```
Es müssen einige Variablen an deine Bedürfnisse angepasst werden (z.B.
`CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` und
`CP_ANALYTICS_SALT`).
Passe die Variablen (z.B. `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` und `CP_ANALYTICS_SALT`) an deine Bedürfnisse an.
3. Einen Reverse-Proxy für TLS (SSL/HTTPS) einrichten
3. Erstelle einen Reverse Proxy für TLS (SSL/HTTPS)
TLS ist notwendig damit ActivityPub korrekt arbeiten kann. Dieser Job kann
leicht von einem Reverse-Proxy bearbeitet werden, zum Beispiel mit
[Caddy](https://caddyserver.com/):
TLS ist zum Betrieb von ActivityPub erforderlich. Dies kann einfach mit einem Reverse Proxy wie [Caddy](https://caddyserver.com/) realisiert werden:
```
#castopod
@ -104,58 +93,56 @@ kann als Cache-Handler hinzugefügt werden.
}
```
4. Führe `docker-compose up -d` aus, warte darauf, dass es initialisiert wird
und gehe auf `https://castopod.example.com/cp-install` um die Einrichtung
von Castopod abzuschließen!
4. Führe `docker-compose up -d` aus und warte, bis unter `https://castopod.example.com/cp-install` die Castopod-Konfiguration abgeschlossen ist!
5. Ist alles da? Dann kann das Podcasten beginnen! 🎙️🚀
5. Du bist bereit, mit dem Podcasting zu beginnen! 🎙️🚀
## Umgebungsvariablen
- **castopod/castopod** and **castopod/app**
- **castopod/castopod** und **castopod/app**
| Variablennamen | Typ (`Standard`) | Standardwert |
| ------------------------------------- | ----------------------- | ----------------- |
| **`CP_BASEURL`** | string | `nicht definiert` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `nicht definiert` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `nicht definiert` |
| **`CP_EMAIL_FROM`** | ?string | `nicht definiert` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `nicht definiert` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `nicht definiert` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `nicht definiert` |
| **`CP_MEDIA_S3_REGION`** | ?string | `nicht definiert` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Variablenname | Typ (`default`) | Standardwert |
| -------------------------------- | ---------------------- | -------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` oder `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` oder `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` oder `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (mit Suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (mit Suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
- **castopod/web-server**
| Variablennamen | Typ | Standardwert |
| ---------------------- | --------------------- | ------------ |
| Variablenname | Typ | Standardwert |
| --------------------- | ----------------------| ------------ |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_MAX_BODY_SIZE`** | ?number (mit Suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |

View File

@ -5,222 +5,115 @@ sidebarDepth: 3
# Wie installiere ich Castopod?
Castopod ist für eine einfache Installation konzipiert. Ob dediziertes oder
Shared-Hosting, du kannst es auf den meisten PHP-MySQL-kompatiblen Webservern
installieren.
Castopod wurde entwickelt, um einfach zu installieren zu sein. Es kann auf den meisten PHP-MySQL-kompatiblen Webservern installiert werden, ob dediziert oder shared.
::: tip Note
::: tip Hinweis
Wir haben offizielle Docker Images für Castopod veröffentlicht!
Wir haben offizielle Docker-Images für Castopod veröffentlicht!
Wenn du Docker bevorzugst, kannst du die manuelle Anleitung überspringen und
direkt zur [Docker-Dokumentation](./docker.md) für Castopod gehen.
Wenn du Docker bevorzugst, kannst du diesen Teil überspringen und zur [Docker-Dokumentation](./docker.md) für Castopod gehen.
:::
## Voraussetzungen
- PHP v8.1 only
- PHP v8.1
- MySQL Version 5.7 oder höher oder MariaDB Version 10.2 oder höher
- HTTPS-Unterstützung
- Eine [ntp-synchronisierte Uhr](https://wiki.debian.org/NTP) um die eingehenden
Anfragen zu überprüfen
- Eine [mit NTP synchronisierte Uhr](https://wiki.debian.org/NTP), um eingehende Anfragen der Föderation zu validieren
### PHP v8.1 only
### PHP v8.1
PHP version 8.1 is required, with the following extensions installed:
Es wird PHP Version 8.1 benötigt, mit den folgenden installierten Erweiterungen:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) mit **JPEG**,
**PNG** und **WEBP** Bibliotheken.
- [exif](https://www.php.net/manual/en/exif.installation.php)
- [intl](https://www.php.net/manual/de/intl.requirements.php)
- [libcurl](https://www.php.net/manual/de/curl.requirements.php)
- [mbstring](https://www.php.net/manual/de/mbstring.installation.php)
- [gd](https://www.php.net/manual/de/image.installation.php) mit den Bibliotheken **JPEG**, **PNG** und **WEBP**.
- [exif](https://www.php.net/manual/de/exif.installation.php)
Stelle außerdem sicher, dass die folgenden Erweiterungen in deinem PHP aktiviert
sind:
Stelle außerdem sicher, dass die folgenden Erweiterungen in deinem PHP aktiviert sind:
- json (standardmäßig aktiviert - nicht ausschalten)
- xml (standardmäßig aktiviert - nicht ausschalten)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
- json (standardmäßig aktiviert - nicht deaktivieren)
- xml (standardmäßig aktiviert - nicht deaktivieren)
- [mysqlnd](https://www.php.net/manual/de/mysqlnd.install.php)
### MySQL kompatible Datenbank
### MySQL-kompatible Datenbank
> Wir empfehlen [MariaDB](https://mariadb.org).
> Wir empfehlen die Verwendung von [MariaDB](https://mariadb.org).
::: warning Warning
::: warning Achtung
Castopod funktioniert nur mit unterstützten MySQL 5.7 oder höher kompatiblen
Datenbanken. Es wird zum Beispiel mit dem vorherigen MySQL v5.6 nicht mehr
funktionieren, dessen Lebensende am 5. Februar 2021 war.
Castopod funktioniert nur mit MySQL-Datenbanken ab Version 5.7. Ältere Versionen wie 5.6 (der Support wurde am 5. Februar 2021 eingestellt) werden nicht funktionieren.
:::
Du benötigst den Servernamen, den Datenbanknamen, den Benutzernamen und das
Passwort, um den Installationsvorgang abzuschließen. Kontaktiere bitte den
Administrator, falls du keinen Benutzeraccount hast.
Du benötigst den Hostnamen des Servers, den Datenbanknamen, den Benutzernamen und das Passwort, um den Installationsprozess abzuschließen. Wenn du diese Informationen nicht hast, kontaktiere bitte deinen Administrator.
#### Berechtigungen
#### Zugriffsberechtigungen
Benutzer müssen mindestens diese Berechtigungen in der Datenbank haben, damit
Castopod funktioniert: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`,
`INSERT`, `SELECT`, `UPDATE`, `REFERENCES`, `CREATE VIEW`.
Der Benutzer muss mindestens die folgenden Zugriffsberechtigungen auf die Datenbank haben, damit Castopod funktioniert: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`, `REFERENCES`, `CREATE VIEW`.
### (Optional) FFmpeg v4.1.8 oder höher für Videoclips
[FFmpeg](https://www.ffmpeg.org/) Version 4.1.8 oder höher ist erforderlich,
wenn Du Videoclips generieren möchtest. Die folgenden Php-Erweiterungen sind
nicht installiert: %s:
[FFmpeg](https://www.ffmpeg.org/) in Version 4.1.8 oder höher wird benötigt, wenn du Videoclips generieren möchtest. Die folgenden Erweiterungen müssen installiert sein:
- **FreeType 2** Bibliothek für
[gd](https://www.php.net/manual/en/image.installation.php).
- Die **FreeType 2**-Bibliothek für [gd](https://www.php.net/manual/de/image.installation.php).
### (Optional) Weitere Empfehlungen
- Redis für bessere Cache-Leistungen.
- CDN für das Caching statischer Dateien und bessere Leistungen.
- E-Mail Server Anbindung für E-Mails zu verlorenen Passwörtern.
- Redis für bessere Cache-Performance
- CDN zur Cache-Speicherung statischer Dateien und für bessere Performance
- E-Mail-Gateway für verlorene Passwörter
## Installationsanleitung
### Voraussetzungen
0. Get a Web Server with [requirements](#requirements) installed
1. Create a MySQL database for Castopod with a user having access and
modification privileges (for more info, see
[MySQL compatible database](#mysql-compatible-database)).
2. Activate HTTPS on your domain with an _SSL certificate_.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
the web server if you havent already.
- ⚠️ Set the web server document root to the `public/` sub-folder within the
`castopod` folder.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
0. Beschaffe einen Webserver mit den [Voraussetzungen](#voraussetzungen) installiert
1. Erstelle eine MySQL-Datenbank für Castopod mit einem Benutzer mit Schreib- und Zugriffsrechten (Weitere Informationen findest du unter [MySQL-kompatible Datenbank](#mysql-kompatible-datenbank)).
2. Aktiviere HTTPS für deine Domain mit einem _SSL-Zertifikat_.
3. Lade das neueste [Castopod-Paket](https://castopod.org/) herunter und entpacke es auf deinem Webserver, falls noch nicht geschehen.
- ⚠️ Setze das Hauptdokument des Webservers auf den Unterordner `public/` des `castopod`-Ordners.
4. Füge **Cron-Jobs** auf deinem Webserver für verschiedene Hintergrundprozesse hinzu (ersetze die Pfade entsprechend):
```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1
```
**Note** - If you do not add this cron task, the following Castopod features
will not work:
**Hinweis** - Wenn du diesen Cron-Job nicht hinzufügst, werden folgende Castopod-Funktionen nicht funktionieren:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
[WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
- Importieren eines Podcasts aus einem vorhandenen RSS-Feed
- Teilen von sozialen Aktivitäten an deine Follower im Fediverse
- Veröffentlichen von Episoden an offene Hubs mit Hilfe von [WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generieren von Videoclips - [benötigt FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (recommended) Install Wizard
### (Empfohlen) Installationsassistent
1. Run the Castopod install script by going to the install wizard page
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
2. Follow the instructions on your screen.
3. Start podcasting!
1. Rufe das Castopod-Installations-Skript mit deinem bevorzugten Webbrowser auf, indem du die Installationsseite aufrufst (`https://your_domain_name.com/cp-install`).
2. Befolge die angezeigten Anweisungen.
3. Fang an zu podcasten!
::: info Note
:::info Hinweis
The install script writes a `.env` file in the package root. If you cannot go
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
Das Installations-Skript erstellt eine `.env`-Datei in der Wurzel des Pakets. Wenn du den Installationsassistenten nicht verwenden kannst, kannst du die `.env`-Datei manuell anhand der `.env.example`-Datei erstellen und bearbeiten.
:::
### Email/SMTP setup
### E-Mail/SMTP-Konfiguration
Email configuration is required for some features to work properly (eg.
retrieving your forgotten password, sending instructions to premium subscribers,
…)
Die E-Mail-Konfiguration ist erforderlich, damit bestimmte Funktionen ordnungsgemäß funktionieren (z. B. das Abrufen deines vergessenen Passworts, das Senden von Anweisungen an Premium-Abonnenten, ...).
You may add your email configuration in your instance's `.env` like so:
Du kannst deine E-Mail-Konfiguration in der `.env`-Datei deiner Instanz wie folgt hinzufügen:
```ini
# […]
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
email.fromEmail="deine_e-mail_adresse"
email.SMTPHost="dein_smtp_host"
email.SMTPUser="dein_smtp_benutzer"
email.SMTPPass="dein_smtp_passwort"
```
#### Email config options
| Variable name | Type | Default |
| ---------------- | -------------------- | ------------ |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined` |
| **`SMTPPass`** | string | `undefined` |
| **`SMTPPort`** | number | `25` |
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
### Media storage
By default, files are saved to the `public/media` folder using the file system.
If you need to relocate the `media` folder to a different location, you can
specify it in your `.env` file as shown below:
```ini
# […]
media.root="media"
media.storage="/mnt/storage"
```
In this example, the files will be saved to the /mnt/storage/media folder. Make
sure to also update your web server configuration to reflect this change.
### S3
If you prefer storing your media files on an S3 compatible storage, you may
specify it in your `.env`:
```ini
# […]
media.fileManager="s3"
media.s3.endpoint="your_s3_host"
media.s3.key="your_s3_key"
media.s3.secret="your_s3_secret"
media.s3.region="your_s3_region"
```
#### S3 config options
| Variable name | Type | Default |
| ----------------------- | ------- | ----------- |
| **`endpoint`** | string | `undefined` |
| **`key`** | string | `undefined` |
| **`secret`** | string | `undefined` |
| **`region`** | string | `undefined` |
| **`bucket`** | string | `castopod` |
| **`protocol`** | number | `undefined` |
| **`pathStyleEndpoint`** | boolean | `false` |
| **`keyPrefix`** | string | `undefined` |
## Community packages
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
### Install with YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github
Repo</a>
</div>
#### E

View File

@ -2,24 +2,17 @@
title: Sicherheit
---
# Sicherheitsbedenken
# Sicherheitsfragen
Castopod wurde mittels [CodeIgniter4](https://codeigniter.com/) (einem PHP
Framework) gebaut, welches
[gute Sicherheitspraktiken](https://codeigniter.com/user_guide/concepts/security.html)
fördert.
Castopod wird auf [CodeIgniter4](https://codeigniter.com/) entwickelt, einem PHP-Framework, das zu "Best Practices" in Bezug auf Sicherheit ermutigt.
Um die Sicherheit Ihrer Instanz zu erhöhen und bösartige Angriffe zu verhindern,
empfehlen wir, alle deine Castopod-Dateiberechtigungen nach der Installation
oder dem Updaten zu aktualisieren (um Fehler bei der vorherigen Berechtigung zu
vermeiden):
Um die Sicherheit Ihrer Instanz optimal zu gewährleisten und böswillige Angriffe zu verhindern, empfehlen wir Ihnen, die Dateiberechtigungen von Castopod nach der Installation und jedem Update zu aktualisieren (und Fehler im Dateizugriff zu vermeiden):
- der `writable/` Ordner muss **lesbar** und **beschreibbar** sein.
- `public/media/` muss **lesbar** und **beschreibbar** sein.
- jede andere Datei muss nur **lesbar** sein.
- Der Ordner `writable/` muss sowohl **lese- als auch schreibbar** sein.
- Der Ordner `public/media/` muss sowohl **lese- als auch schreibbar** sein.
- Alle anderen Dateien sollten nur **lesbar** sein.
Wenn Sie beispielsweise Apache oder NGINX mit Ubuntu verwenden, können Sie
folgendermaßen vorgehen:
Wenn Sie beispielsweise Apache oder NGINX mit Ubuntu verwenden, können Sie die folgenden Befehle ausführen:
```bash
sudo chown -R root:root /path/to/castopod

View File

@ -3,107 +3,93 @@ title: Update
sidebarDepth: 3
---
# How to update Castopod?
# Wie installiere ich Castopod?
After installing Castopod, you may want to update your instance to the latest
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
Nach der Installation von Castopod können Sie Ihre Instanz auf die neueste Version aktualisieren, um von den neuesten Funktionen ✨, Bugfixes 🐛 und Leistungsverbesserungen ⚡ zu profitieren.
## Update instructions
## Update-Anweisungen
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
0. ⚠️ Bevor Sie ein Update durchführen, empfehlen wir Ihnen dringend, Ihre Castopod-Dateien und die Datenbank zu sichern.
- cf.
- siehe
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
1. Gehen Sie zur
[Releases-Seite](https://code.castopod.org/adaures/castopod/-/releases) und
prüfen Sie, ob Ihre Instanz mit der neuesten Castopod-Version aktuell ist.
- cf.
- siehe
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
2. Laden Sie das neueste Release-Paket mit dem Namen "Castopod Package" herunter. Sie können zwischen den Archiven `zip` oder `tar.gz` wählen.
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
- ⚠️ Stellen Sie sicher, dass Sie das Castopod Package herunterladen und **NICHT** den Source Code.
- Beachten Sie, dass Sie das neueste Paket auch von
[castopod.org](https://castopod.org/) herunterladen können.
3. On your server:
3. Auf Ihrem Server:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
- Löschen Sie alle Dateien außer `.env` und `public/media`.
- Kopieren Sie die neuen Dateien aus dem heruntergeladenen Paket auf Ihren Server.
::: info Note
::: info Hinweis
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
Möglicherweise müssen Sie die Dateiberechtigungen neu festlegen, wie beim Installationsprozess bereits durchgeführt. Siehe
[Sicherheitshinweise](./security.md).
:::
4. Update your database schema from your `Castopod Admin` > `About` page or by
running:
4. Aktualisieren Sie das Datenbankschema über die Seite `Castopod Admin` > `About` oder führen Sie folgenden Befehl aus:
```bash
php spark castopod:database-update
```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
5. Leeren Sie Ihren Cache über `Castopod Admin` > `Settings` > `general` >
`Housekeeping`.
6. ✨ Genießen Sie Ihre neue Instanz, Sie sind fertig!
::: info Note
::: info Hinweis
Releases may come with additional update instructions (see
[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
Es kann sein, dass den Versionen zusätzliche Update-Anweisungen beigefügt werden (siehe
[Releases-Seite](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
- siehe
[Ich habe meine Instanz seit langer Zeit nicht mehr aktualisiert ... Was sollte ich tun?](#je-nai-pas-mis-à-jour-mon-instance-depuis-longtemps-que-devrais-je-faire)
:::
## Fully Automated updates
## Vollständig automatisierte Updates
> Coming soon... 👀
> Kommt bald... 👀
## Frequently asked questions (FAQ)
## Häufig gestellte Fragen (FAQ)
### Where can I find my Castopod version?
### Wo finde ich meine Castopod-Version?
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
Gehen Sie zu Ihrem Castopod-Administrationspanel. Die Version wird unten links angezeigt.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
Sie können die Version auch in der Anwendung unter
`> Configuration > Constantes.php`-Ordner finden.
### I haven't updated my instance in a long time… What should I do?
### Ich habe meine Instanz seit langer Zeit nicht mehr aktualisiert ... Was sollte ich tun?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
Kein Problem! Holen Sie sich einfach die neueste Version wie oben beschrieben. Wenn Sie die Update-Anweisungen (Punkt 4) ausführen, starten Sie sie der Reihe nach von der ältesten zur neuesten Version.
> You may want to backup your instance depending on how long you haven't updated
> Castopod.
> Sie sollten Ihre Instanz entsprechend dem Datum Ihres letzten Castopod-Updates sichern.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
`v1.0.0-beta.1`:
Zum Beispiel, wenn Sie auf `v1.0.0-alpha.42` sind und auf `v1.0.0-beta.1` aktualisieren möchten:
0. (highly recommended) Make a backup of your files and database.
0. (stark empfohlen) Sichern Sie Ihre Dateien und Datenbank.
1. Download the latest release, overwrite your files whilst keeping `.env` and
`public/media`.
1. Laden Sie die neueste Version herunter und ersetzen Sie Ihre Dateien, wobei Sie `.env` und `public/media` beibehalten.
2. Go through each release update instructions sequentially (from oldest to
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
2. Führen Sie die Update-Anweisungen einzeln aus (von der ältesten zur neuesten Version).
3. ✨ Enjoy your fresh instance, you're all done!
3. ✨ Ihre neue Instanz ist bereit!
### Should I make a backup before updating?
### Sollte ich vor dem Update eine Sicherungskopie erstellen?
We advise you do, so you don't lose everything if anything goes wrong!
Wir empfehlen Ihnen, dies zu tun, um möglichen Datenverlust zu vermeiden!
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…
Im Allgemeinen empfehlen wir Ihnen, regelmäßig Sicherungen Ihrer Castopod-Dateien und Ihrer Datenbank zu erstellen, um keine Daten zu verlieren...

View File

@ -1,4 +1,5 @@
---
sidebarDepth: 2
---
@ -6,294 +7,115 @@ sidebarDepth: 2
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod ist eine freie & Open-Source-Hosting-Plattform für Podcastende, die ihr
Publikum einbinden und mit ihnen interagieren möchten.
Castopod ist eine kostenlose und Open-Source-Hosting-Plattform, die für Podcaster entwickelt wurde, die mit ihrem Publikum kommunizieren und interagieren möchten.
Castopod ist einfach zu installieren und wurde auf
[CodeIgniter4](https://codeigniter.com/) aufgebaut, ein mächtiges PHP Framework,
mit einem sehr kleinen Fußabdruck.
Castopod ist einfach zu installieren und wurde mit [CodeIgniter4](https://codeigniter.com/), einem leistungsstarken PHP-Framework in sehr kleinem Umfang, entwickelt.
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Installieren<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
<a href="/fr/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Installieren<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Merkmale
## Eigenschaften
- 🌱 Kostenlos & Open-Source (AGPL v3 Lizenz)
- 🔐 &nbsp;Fokussiert auf die Datensouveränität: Ihre Inhalte, Ihr Publikum und
Analysen gehören zu Ihnen, und&nbsp;nur Ihnen&nbsp;
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding,
chapters, location, persons, soundbites, …
- 💬 &nbsp;Built-in social network:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes
- 📈 &nbsp;Built-in analytics:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant
- 🪙 &nbsp;Standard IABv2 audience measurement
- 🏡 &nbsp;On-premises analytics, no third party involved
- 📢 &nbsp;Built-in marketing tools:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: install as a standalone app
- 🎨 &nbsp;Customizable theme colors
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes
- 🔉 &nbsp;Generate soundbites
- ▶️ &nbsp;Embeddable player, embed your episodes on any website
- 💸 &nbsp;Monetization:
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🌱 &nbsp;Frei, kostenlos und Open-Source (Lizenz AGPL v3)
- 🔐 &nbsp;fokussiert auf Datenhoheit: Dein Inhalt, Deine Zuhörer und Deine Statistiken gehören dir und nur dir
- 🪄&nbsp;Podcasting 2.0 Funktionen: GUIDs, Sperren, Transkriptionen, Finanzierung, Kapitel, Geolokalisierung, Teilnehmer, Audio-Extrakte, ...
- 💬 &nbsp;Integriertes soziales Netzwerk:
- 🚀 &nbsp;Castopod ist Teil des Fediverse, ein dezentrales soziales Netzwerk
- ❤️ &nbsp;Erstellen von Beiträgen, Teilen, Favorisieren und Kommentieren von Episoden
- 📈 &nbsp;Integrierte Statistiken:
- ⚖️ &nbsp;Konform mit GDPR / CCPA / LGPD
- 🪙&nbsp;IABv2-Zielgruppenmessung
- 🏡 &nbsp;Integrierte Statistiken, keine Drittanbieter
- 📢 &nbsp;Integrierte Marketingtools:
- ✅ &nbsp;SEO-Bereitstellung (Open-Graph-Metatags, JSON-LD, ...)
- 📱 &nbsp;PWA: Installieren als eigenständige App
- 🎨 &nbsp;Anpassbare Themenfarben
- 🎬 &nbsp;Erstellen Sie Videoschnipsel, die Sie freigeben können, aus Episoden
- 🔉 &nbsp;Erstellen Sie Audio-Extrakte
- ▶️ &nbsp;Binden Sie Ihre Episoden in jede Website ein
- 💸 &nbsp;Monetarisierung:
- 🔗 &nbsp;Finanzierungslinks
- 📲 &nbsp;Werbung "listen-to-click"
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod
- 📤 &nbsp;Move your podcast out of Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want
- 👥 &nbsp;Multi-user: add contributors and set roles
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
- 💎 &nbsp;Premium-Podcasts
- 📡&nbsp;Veröffentlichen Sie Ihre Episoden überall mit RSS:
- 📱 &nbsp;Auf allen Indizes und Apps: Podcast Index, Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend ...
- ⚡&nbsp;Streamen Sie Ihre Episoden sofort mit WebSub
- 📥 &nbsp;Import von Podcasts: Ziehen Sie Ihren vorhandenen Podcast zu Castopod um
- 📤 &nbsp;Ziehen Sie Ihren Podcast zu einem anderen Hosting-Dienstleister um
- 🔀 &nbsp;Mehrmandantenfähigkeit: Hosten Sie so viele Podcasts, wie Sie möchten
- 👥 &nbsp;Mehrbenutzerfähigkeit: Fügen Sie Mitwirkende hinzu und definieren Sie ihre Rollen
- 🌍 &nbsp;i18n-Unterstützung: Übersetzt in Englisch, Französisch, Polnisch, Deutsch, Portugiesisch, Brasilianisch und Spanisch... und
[mehr in Zukunft](https://translate.castopod.org)!
## Motivation
## Warum Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
Der Podcasting-Ökosystem ist von Natur aus dezentralisiert: Du kannst deinen Podcast als RSS-Datei erstellen, ihn im Web veröffentlichen und überall im Internet teilen.
It is in fact one of the only media to have stayed this way for a long time.
In der Tat ist es eines der wenigen Medien, die seit langem auf diese Weise geblieben sind.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
Da sich die Gewohnheiten ändern, steigen immer mehr Menschen in Podcasts ein: sei es Kreative, die neue Wege suchen, um ihre Ideen zu teilen, oder Hörer, die nach besseren Inhalten suchen.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
Mit der zunehmenden Verbreitung von Podcasts versuchen einige Unternehmen, ihn in ein kontrollierteres und zentralisiertes Medium zu verwandeln.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
Castopod wurde geschaffen, um eine offene und nachhaltige Alternative zum Hosting von Podcasts zu bieten und die Dezentralisierung zu fördern, um die Kreativität der Podcaster zum Ausdruck zu bringen.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
Dieses Projekt wird von der Open-Source-Community vorangetrieben, insbesondere von der [Fediverse](https://fediverse.party/en/fediverse/)- und Podcasting 2.0-Bewegungen.
## Vergleiche mit anderen Lösungen
## Vergleich mit anderen Lösungen
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for&nbsp;you.
Wir glauben, dass nicht jede Lösung für jeden geeignet ist, sondern stark von deinen Bedürfnissen abhängt. Hier findest du Vergleiche mit anderen Tools, um herauszufinden, ob Castopod das Richtige für dich ist.
### Castopod vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running&nbsp;it.
Castopod wird oft als "das Wordpress für Podcasts" bezeichnet, aufgrund der Ähnlichkeiten zwischen den beiden. In gewisser Weise stimmt das. Tatsächlich wurde Castopod stark von der Wordpress-Umgebung inspiriert, da die Community die Leichtigkeit der Nutzung und die Vielzahl der damit betriebenen Websites erkannte.
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
Genau wie bei Wordpress ist Castopod kostenlos und Open Source. Es wird mit PHP und einer MySQL-Datenbank entwickelt und kann einfach auf den meisten Webserven installiert werden.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
Wordpress ist eine großartige Möglichkeit, deine Website zu erstellen und mit Plugins zu erweitern, um das zu erhalten, was du willst. Es ist ein vollwertiges Content-Management-System, mit dem du jede Art von Website online stellen kannst.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting&nbsp;journey.
Castopod dagegen ist darauf ausgelegt, speziell die Bedürfnisse der Podcaster zu erfüllen und sich ausschließlich auf das Podcasting zu konzentrieren. Du benötigst kein Plugin, um mit deinem Podcasting-Projekt zu beginnen.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
Dadurch können die spezifischen Prozesse des Podcastings optimiert werden: von der Erstellung deiner Podcasts und der Veröffentlichung neuer Episoden bis hin zur Verbreitung, Vermarktung und Analyse.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
Je nach Bedarf können Wordpress und Castopod sogar nebeneinander existieren, da sie dieselben Anforderungen teilen!
### Castopod vs Funkwale
### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
Funkwhale ist ein selbst gehosteter, moderner, kostenloser und Open Source Musikserver. Wie Castopod gehört Funkwhale zum Fediverse, einem dezentralen sozialen Netzwerk, das die Interoperabilität zwischen den beiden ermöglicht.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
Funkwhale wurde ursprünglich für Musik entwickelt. Später wurde die Möglichkeit, Podcasts zu hosten, eingeführt.
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
Im Gegensatz zu Funkwhale wurde Castopod speziell für das Podcasting entwickelt. Dies erleichtert die Implementierung von Funktionen, die mit dem Podcasting-Ökosystem verbunden sind, wie z.B. die Funktionen von Podcasting 2.0 (Transkripte, Kapitel, Orte, Personen, ...).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
Wenn du also deine Musik hosten möchtest, solltest du wahrscheinlich Funkwhale verwenden. Wenn du jedoch deine Podcasts hosten möchtest, solltest du Castopod verwenden.
### Castopod vs other podcast hosts
### Castopod vs andere Podcast-Hoster
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Es gibt viele Lösungen, um deine Podcasts zu hosten. Einige davon sind wirklich großartig und [viele von ihnen](https://podcastindex.org/apps) springen genauso wie Castopod auf den Podcasting-2.0-Zug!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
Jede dieser Lösungen unterscheidet sich voneinander. Du kannst sie anhand der [Feature-Liste](#-features) vergleichen.
That being said, there are two main differences with other podcasting solutions:
Das heißt, es gibt zwei Hauptunterschiede zu anderen Podcasting-Lösungen:
- Castopod can be self-hosted and is the only solution that allows you to keep
full control over what you produce. Also, as it is open-source, you can even
customize it as you wish.
- Castopod kann selbst gehostet werden und ist die einzige Lösung, mit der du die vollständige Kontrolle über das behältst, was du produzierst. Da es Open Source ist, hast du die Möglichkeit, es nach Belieben anzupassen.
- Castopod is the only solution that currently integrates both a decentralized
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
- Castopod ist die einzige Lösung, die heute eine dezentrale soziale Plattform mit ActivityPub und "Podcasting 2.0" -Funktionen integriert und so die Kluft zwischen den beiden verringert.
## Contributing
## Mitwirken
Love Castopod and would like to help? Take a look at the following documentation
to get you&nbsp;started.
Liebst du Castopod und möchtest helfen? Schau dir die folgende Dokumentation an, um loszulegen.
### Code of conduct
### Code of Conduct
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be&nbsp;tolerated.
Castopod hat einen Verhaltenskodex angenommen, an den sich Projektteilnehmer halten sollen. Bitte lese die [CODE_OF_CONDUCT-Anleitung](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md), damit du verstehst, welche Aktionen toleriert werden und welche nicht.
### Contributing guide
### Beitragshinweise
Read our [contributing guide](./contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
Lies unseren [Leitfaden zur Mitarbeit](./contributing/guidelines.md), um mehr über unseren Entwicklungsprozess, das Einreichen von Bugfixes und Verbesserungsvorschlägen sowie das Erstellen und Testen von Änderungen in Castopod zu erfahren.
## Contributors
## Beitragende ✨
Thanks goes to these wonderful people
Ein großer Dank geht an diese wunderbaren Menschen
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Romain de Laage"/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Lyonel Bernard"/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt="Christopher Lagonick-Weitzel"/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ernesto Acosta"/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">🐛</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt="Bastien Luneteau"/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Cécile Ricordeau"/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Miś"/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt="Marcin Lewandowski"/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">🐛</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sebastian Janik"/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Karczmarczyk"/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="denis d"/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">🐛</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt="Douglas Kastle"/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">🐛</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="cExplorer"/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="ImaCrea"/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">🐛</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Jonas S"/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt="LEFEBVRE Yann"/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt="Sebastian Späth"/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">🐛</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="rocky III"/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt="Hermann Josef Eckl"/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Delhaye Cyrille"/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">🐛</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt="João Leandro"/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Angelos Chouvardas"/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt="Eivind"/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt="Ewen"/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt="forght"/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt="glottis0q"/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100" width="100px;" alt="ButterflyOfFire"/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt="Lucian I. Last"/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt="LuuzViir"/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt="CTHTC"/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt="Russian Retro"/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt="Marek L'ach"/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt="GunChleoc"/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt="GabiSnow"/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt="bendaha"/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt="Samuel Roland"/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Dimitri Regnier"/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100" width="100px;" alt="irithys"/><br /><sub><b>irithys</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sergi"/><br /><sub><b>Sergi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt="ghose (XoseM)"/><br /><sub><b>ghose (XoseM)</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/basen1982"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Andreas Olsson"/><br /><sub><b>Andreas Olsson</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/leonfrom"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="leonfrom"/><br /><sub><b>leonfrom</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/agentcobra57"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="agentcobra"/><br /><sub><b>agentcobra</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/alephoto85"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100" width="100px;" alt="Alessandro"/><br /><sub><b>Alessandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/liimee"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="liimee"/><br /><sub><b>liimee</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ahmedsabouni"><img src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100" width="100px;" alt="Ahmed Sabouni"/><br /><sub><b>Ahmed Sabouni</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KrzysztofDomanczyk"><img src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100" width="100px;" alt="KrzysztofDomanczyk"/><br /><sub><b>KrzysztofDomanczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## Contact
You may reach us for help or ask any question you have on:
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for
feature requests & bug reports)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponsors
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
</div>
## License
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md
[contributions]: https://code.castopod.org/adaures/castopod/-/issues
[semantic-release]: https://github.com/semantic-release/semantic-release
[discord]: https://castopod.org/discord
[stars]: https://github.com/ad-aures/castopod/stargazers
[crowdin]: https://translate.castopod.org/project/castopod

View File

@ -1,4 +1,4 @@
{
"label": "Contributing",
"label": "Συνεισφορά",
"position": 3
}

View File

@ -1,154 +1,59 @@
---
title: Guidelines
title: Οδηγίες
---
# Contributing to Castopod
# Συνεισφορά στο Castopod
Love Castopod and want to help? Thanks so much, there's something to do for
everybody!
Αγαπάς το Castopod και θέλεις να βοηθήσεις; Ευχαριστούμε πολύ, υπάρχει κάτι για να κάνεις!
Please take a moment to review this document in order to make the contribution
process easy and effective for everyone involved.
Παρακαλούμε αφιέρωσε λίγο χρόνο για να διαβάσεις αυτό το έγγραφο προκειμένου να διευκολύνεις τη διαδικασία της συνεισφοράς για όλους τους εμπλεκόμενους.
Following these guidelines helps to communicate that you respect the time of the
developers managing and developing this open source project. In return, they
should reciprocate that respect in addressing your issue or assessing patches
and features.
Οι παρακάτω οδηγίες βοηθούν στην επικοινωνία και εκφράζουν τον σεβασμό σας για τον χρόνο των προγραμματιστών που διαχειρίζονται και αναπτύσσουν αυτό το ανοικτού κώδικα έργο. Αντίστοιχα, οι προγραμματιστές πρέπει να ανταποκριθούν με τον ίδιο σεβασμό στην επίλυση των θεμάτων που θέτετε και στην αξιολόγηση των διορθώσεων και χαρακτηριστικών που προτείνετε.
::: info Note
::: info Σημείωση
**Any** contribution made on a repository other than
[the original repository](https://code.castopod.org/adaures/castopod) will not
be accepted.
**Οποιαδήποτε** συνεισφορά που γίνεται σε ένα αποθετήριο εκτός
[του αρχικού αποθετηρίου](https://code.castopod.org/adaures/castopod) δεν
θα γίνεται δεκτή.
:::
## Using the issue tracker
## Χρήση του παρακολουθητή θεμάτων
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
Ο [παρακολουθητής θεμάτων](https://code.castopod.org/adaures/castopod/-/issues) είναι
η προτιμώμενη μέθοδος για [αναφορές σφαλμάτων](#αναφορά-σφαλμάτων),
[ζητήματα χαρακτηριστικών](#ζητήματα-χαρακτηριστικών) και
[υποβολή αιτημάτων ενσωμάτωσης](#αίτηματα-ενσωμάτωσης).
## ⚠️ Security issues and vulnerabilities
## ⚠️ Θέματα ασφαλείας και ευπάθειες
If you encounter any security issue or vulnerability in the Castopod source,
please contact us directly by email at
Εάν αντιμετωπίσετε οποιοδήποτε θέμα ασφαλείας ή ευπάθεια στον πηγαίο κώδικα του Castopod,
παρακαλούμε επικοινωνήστε απευθείας μαζί μας μέσω email στο
[security@castopod.org](mailto:security@castopod.org)
## Bug reports
## Αναφορά σφαλμάτων
A bug is a _demonstrable problem_ that is caused by the code in the repository.
Good bug reports are extremely helpful - thank you!
Ένα σφάλμα είναι ένα _αποδεδειγμένο πρόβλημα_ που προκαλείται από τον κώδικα στο αποθετήριο. Οι καλές αναφορές σφαλμάτων είναι εξαιρετικά χρήσιμες - σε ευχαριστούμε!
Guidelines for bug reports:
Οδηγίες για τις αναφορές σφαλμάτων:
1. **Use the issue search** &mdash; check if the issue has already been
reported.
1. **Χρησιμοποιήστε την αναζήτηση θεμάτων** &mdash; ελέγξτε εάν έχει ήδη αναφερθεί το θέμα.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the
latest `main` branch in the repository.
2. **Ελέγξτε εάν το θέμα έχει διορθωθεί** &mdash; προσπαθήστε να το αναπαράγετε χρησιμοποιώντας το τελευταίο `main` κλαδί στο αποθετήριο.
3. **Isolate the problem** &mdash; ideally create a
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
3. **Προσδιορίστε το πρόβλημα** &mdash; ιδανικά δημιουργήστε ένα
[μειωμένο τεστ κέισ](https://css-tricks.com/reduced-test-cases/) και ένα ζωντανό παράδειγμα.
A good bug report shouldn't leave others needing to chase you up for more
information. Please try to be as detailed as possible in your report. What is
your environment? What steps will reproduce the issue? What browser(s) and OS
experience the problem? What would you expect to be the outcome? All these
details will help people to fix any potential bugs.
Μια καλή αναφορά σφάλματος δεν θα αφήσει άλλους να σας κυνηγούν για περισσότερες πληροφορίες. Προσπαθήστε να δώσετε όσο το δυνατό περισσότερες λεπτομέρειες στην αναφορά σας. Ποιο είναι το περιβάλλον σας; Ποια βήματα θα αναπαραγάγουν το πρόβλημα; Ποιος προγραμματιστικός περιηγητής και λειτουργικό σύστημα αντιμετωπίζουν το πρόβλημα; Ποιο είναι το αναμενόμενο αποτέλεσμα; Όλες αυτές οι λεπτομέρειες θα βοηθήσουν άλλους ανθρώπους να επιδιορθώσουν πιθανά σφάλματα.
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> have been created for this project. You may use them to help you follow those
> guidelines.
> [Δημιουργήθηκαν πρότυπα θεμάτων](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates) για αυτό το έργο. Μπορείτε να τα χρησιμοποιήσετε για να σας βοηθήσουν να ακολουθήσετε αυτές τις οδηγίες.
## Feature requests
## Ζητήματα χαρακτηριστικών
Feature requests are welcome. But take a moment to find out whether your idea
fits with the scope and aims of the project. It's up to _you_ to make a strong
case to convince the project's developers of the merits of this feature. Please
provide as much detail and context as possible.
Τα ζητήματα χαρακτηριστικών είναι ευπρόσδεκτα. Όμως, πρώτα διευρεύνησε εάν η ιδέα σου ταιριάζει με το πεδίο και τους στόχους του έργου. Είναι στα χέρια _σου_ να καταθέσεις μια ισχυρή περίπτωση για να πείσεις τους προγραμματιστές του έργου για τα πλεονεκτήματα αυτού του χαρακτηριστικού. Παρακαλούμε παρέχετε όσο το δυνατόν περισσότερες λεπτομέρειες και πλαίσιο.
## Pull requests
## Αιτήματα ενσωμάτωσης
Good pull requests - patches, improvements, new features - are a fantastic help.
They should remain focused in scope and avoid containing unrelated commits.
Τα καλά αιτήματα ενσωμάτωσης - διορθώσεις, βελτιώσεις, νέα χαρακτηριστικά - είναι μια φανταστική βοήθεια. Θα πρέπει να παραμείνουν συγκεντρωμένα στο πεδίο εφαρμογής και να αποφεύγουν να περιλαμβάνουν άσχετες δεσμεύσεις.
**Please ask first** before embarking on any significant pull request (e.g.
implementing features, refactoring code, porting to a different language),
otherwise you risk spending a lot of time working on something that the
project's developers might not want to merge into the project.
Please adhere to the coding conventions used throughout a project (indentation,
accurate comments, etc.) and any other requirements (such as test coverage).
Adhering to the following process is the best way to get your work included in
the project:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the
project, clone your fork, and configure the remotes:
```bash
# Clone your fork of the repo into the current directory
git clone https://code.castopod.org/<your-username>/castopod.git
# Navigate to the newly cloned directory
cd castopod
# Assign the original repo to a remote called "upstream"
git remote add upstream https://code.castopod.org/adaures/castopod.git
```
2. If you cloned a while ago, get the latest changes from upstream:
```bash
git checkout main
git pull upstream main
```
3. Create a new topic branch (off the `main` branch) to contain your feature,
change, or fix:
```bash
git checkout -b <topic-branch-name>
```
4. Commit your changes in logical chunks. Please adhere to these
[git commit message guidelines](https://conventionalcommits.org/) or your
code is unlikely be merged into the main project. Use Git's
[interactive rebase](https://help.github.com/articles/about-git-rebase/)
feature to tidy up your commits before making them public.
5. Locally merge (or rebase) the upstream dev branch into your topic branch:
```bash
git pull [--rebase] upstream main
```
6. Push your topic branch up to your fork:
```bash
git push origin <topic-branch-name>
```
7. [Open a Pull Request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
with a clear title and description.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
license your work under the terms of the
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
## Collaborating guidelines
There are few basic rules to ensure high quality of the project:
- Before merging, a PR requires at least two approvals from the collaborators
unless it's an architectural change, a large feature, etc. If it is, then at
least 50% of the core team have to agree to merge it, with every team member
having a full veto right. (i.e. every single one can block any PR)
- A PR should remain open for at least two days before merging (does not apply
for trivial contributions like fixing a typo). This way everyone has enough
time to look into it.
You are always welcome to discuss and propose improvements to this guideline.
**Παρακαλούμε ρωτήστε πρώτα** πριν ξεκινήσετ

View File

@ -1,45 +1,45 @@
---
title: Development setup
title: Ρύθμιση ανάπτυξης
sidebarDepth: 3
---
# Setup your development environment
# Ρύθμιση του περιβάλλοντος ανάπτυξής σας
## Introduction
## Εισαγωγή
Castopod is a web app based on the `php` framework
Το Castopod είναι μια διαδικτυακή εφαρμογή βασισμένη στο πλαίσιο `php`
[CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
Χρησιμοποιούμε το [Docker](https://www.docker.com/) για γρήγορη δημιουργία περιβάλλοντος ανάπτυξης. Ένα
`docker-compose.yml` και ένα `Dockerfile` περιλαμβάνονται στον κατάλογο ρίζας του έργου
για να σας βοηθήσουν να ξεκινήσετε τη συνεισφορά σας.
> You don't need any prior knowledge of Docker to follow the next steps.
> However, if you wish to use your own environment, feel free to do so!
> Δεν χρειάζεστε καμία προηγούμενη γνώση του Docker για να ακολουθήσετε τα επόμενα βήματα.
> Ωστόσο, αν επιθυμείτε να χρησιμοποιήσετε το δικό σας περιβάλλον, μπορείτε να το κάνετε ελεύθερα!
## Setup instructions
## Οδηγίες εγκατάστασης
### 1. Pre-requisites
### 1. Προαπαιτούμενα
0. Install [docker](https://docs.docker.com/get-docker).
0. Εγκαταστήστε [docker](https://docs.docker.com/get-docker).
1. Clone Castopod project by running:
1. Κλωνοποιήστε το έργο Castopod εκτελώντας:
```bash
git clone https://code.castopod.org/adaures/castopod.git
```
2. Create a `.env` file with the minimum required config to connect the app to
the database and use redis as a cache handler:
2. Δημιουργήστε ένα αρχείο `.env` με τις ελάχιστες απαιτούμενες ρυθμίσεις για να συνδέσετε την εφαρμογή με τη
βάση δεδομένων και να χρησιμοποιήσετε την Redis ως χειριστή κρυφής κρατήσεως:
```ini
CI_ENVIRONMENT="development"
# If set to development, you must run `npm run dev` to start the static assets server
# Αν οριστεί ως development, πρέπει να εκτελέσετε `npm run dev` για να ξεκινήσετε τον διακομιστή στατικών πόρων
vite.environment="development"
# By default, this is set to true in the app config.
# For development, this must be set to false as it is
# on a local environment
# Από προεπιλογή, αυτό ορίζεται σε true στις ρυθμίσεις της εφαρμογής.
# Για ανάπτυξη, πρέπει να οριστεί σε false καθώς βρίσκεται
# σε τοπικό περιβάλλον
app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/"
@ -56,368 +56,15 @@ to help you kickstart your contribution.
cache.handler="redis"
cache.redis.host = "redis"
# You may not want to use redis as your cache handler
# Comment/remove the two lines above and uncomment
# the next line for file caching.
# Μπορεί να μην θέλετε να χρησιμοποιήσετε την Redis ως χειριστή κρυφής κρατήσεως
# Σχολιάστε/αφαιρέστε τις δύο παραπάνω γραμμές και ξεχολιάστε
# την επόμενη γραμμή για κρατήσεις σε αρχείο.
#cache.handler="file"
```
> _NB._ You can tweak your environment by setting more environment variables
> in your custom `.env` file. See the `env` for examples or the
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
> for more info.
> _NB._ Μπορείτε να ρυθμίσετε περισσότερες μεταβλητές περιβάλλοντος προσαρμόζοντας το αρχείο `.env`. Δείτε το
> παράδειγμα env ή τον
> [Οδηγό Χρήστη CodeIgniter4](https://codeigniter.com/user_guide/index.html)
> για περισσότερες πληροφορίες.
3. (for docker desktop) Add the repository you've cloned to docker desktop's
`Settings` > `Resources` > `File Sharing`
### 2. (recommended) Develop inside the app Container with VSCode
If you're working in VSCode, you can take advantage of the `.devcontainer/`
folder. It defines a development environment (dev container) with preinstalled
requirements and VSCode extensions so you don't have to worry about them. All
required services will be loaded automagically! 🪄
1. Install the VSCode extension
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Open in container`
> The VSCode window will reload inside the dev container. Expect several
> minutes during first load as it is building all necessary services.
**Note**: The dev container will start by running Castopod's php server.
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
```bash
# run Vite dev server
npm run dev
```
If there is any issue with the php server not running, you can restart them
using the following commands:
```bash
# run Castopod server
php spark serve - 0.0.0.0
```
3. You're all set! 🎉
You're now **inside the dev container**, you may use the VSCode console
(`Terminal` > `New Terminal`) to run any command:
```bash
# PHP is installed
php -v
# Composer is installed
composer -V
# npm is installed
npm -v
# git is installed
git version
```
For more info, see
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
### 3. Start hacking
You're all set! Start working your magic by updating the project's files! Help
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
To see your changes, go to:
- `http://localhost:8080/` for the Castopod app
- `http://localhost:8888/` for the phpmyadmin interface:
- username: **castopod**
- password: **castopod**
### 2-alt. Develop outside the app container
You do not wish to use the VSCode devcontainer? No problem!
1. Start docker containers manually:
Go to project's root folder and run:
```bash
# starts all services declared in docker-compose.yml file
# -d option starts the containers in the background
docker-compose up -d
# See all running processes (you should see 3 processes running)
docker-compose ps
# Alternatively, you can check all docker processes
docker ps -a
```
> The `docker-compose up -d` command will boot 4 containers in the
> background:
>
> - `castopod_app`: a php based container with Castopod requirements
> installed
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries
> and pages caching
> - `castopod_mariadb`: a [mariadb](https://mariadb.org/) server for
> persistent data
> - `castopod_phpmyadmin`: a phpmyadmin server to visualize the mariadb
> database.
2. Run any command inside the containers by prefixing them with
`docker-compose run --rm app`:
```bash
# use PHP
docker-compose run --rm app php -v
# use Composer
docker-compose run --rm app composer -V
# use npm
docker-compose run --rm app npm -v
# use git
docker-compose run --rm app git version
```
---
## Going Further
### Install Castopod's dependencies
1. Install php dependencies with [Composer](https://getcomposer.org/)
```bash
composer install
```
::: info Note
The php dependencies aren't included in the repository. Composer will check
the `composer.json` and `composer.lock` files to download the packages with
the right versions. The dependencies will live under the `vendor/` folder.
For more info, check out the
[Composer documentation](https://getcomposer.org/doc/).
:::
2. Install javascript dependencies with [npm](https://www.npmjs.com/)
```bash
npm install
```
::: info Note
The javascript dependencies aren't included in the repository. Npm will check
the `package.json` and `package.lock` files to download the packages with the
right versions. The dependencies will live under the `node_module` folder.
For more info, check out the [NPM documentation](https://docs.npmjs.com/).
:::
3. Generate static assets:
```bash
# build all static assets at once
npm run build:static
# build specific assets
npm run build:icons
npm run build:svg
```
::: info Note
The static assets generated live under the `public/assets` folder, it
includes javascript, styles, images, fonts, icons and svg files.
:::
### Initialize and populate database
::: tip Tip
You may skip this section if you go through the install wizard (go to
`/cp-install`).
:::
1. Build the database with the migrate command:
```bash
# loads the database schema during first migration
php spark migrate -all
```
You may need to undo the migration (rollback):
```bash
# rolls back database schema (deletes all tables and their content)
php spark migrate:rollback
```
2. Populate the database with the required data:
```bash
# Populates all required data
php spark db:seed AppSeeder
```
You may choose to add data separately:
```bash
# Populates all categories
php spark db:seed CategorySeeder
# Populates all Languages
php spark db:seed LanguageSeeder
# Populates all podcasts platforms
php spark db:seed PlatformSeeder
# Populates all Authentication data (roles definition…)
php spark db:seed AuthSeeder
```
3. (optionnal) Populate the database with test data:
- Populate test data (login: admin / password: AGUehL3P)
```bash
php spark db:seed TestSeeder
```
- Populate with fake podcast analytics:
```bash
php spark db:seed FakePodcastsAnalyticsSeeder
```
- Populate with fake website analytics:
```bash
php spark db:seed FakeWebsiteAnalyticsSeeder
```
TestSeeder will add an active superadmin user with the following credentials:
- username: **admin**
- password: **AGUehL3P**
### Useful docker / docker-compose commands
- Monitor the app container:
```bash
docker-compose logs --tail 50 --follow --timestamps app
```
- Interact with redis server using included redis-cli command:
```bash
docker exec -it castopod_redis redis-cli
```
- Monitor the redis container:
```bash
docker-compose logs --tail 50 --follow --timestamps redis
```
- Monitor the mariadb container:
```bash
docker-compose logs --tail 50 --follow --timestamps mariadb
```
- Monitor the phpmyadmin container:
```bash
docker-compose logs --tail 50 --follow --timestamps phpmyadmin
```
- Restart docker containers:
```bash
docker-compose restart
```
- Destroy all containers, opposite of `up` command:
```bash
docker-compose down
```
- Rebuild app container:
```bash
docker-compose build app
```
Check [docker](https://docs.docker.com/engine/reference/commandline/docker/) and
[docker-compose](https://docs.docker.com/compose/reference/) documentations for
more insights.
## Known issues
### Allocation failed - JavaScript heap out of memory
This happens when running `npm install`.
👉 By default, docker might not have access to enough RAM. Allocate more memory
and run `npm install` again.
### (Linux) Files created inside container are attributed to root locally
You may use Linux user namespaces to fix this on your machine:
::: info Note
Replace "username" with your local username
:::
1. Go to `/etc/docker/daemon.json` and add:
```json
{
"userns-remap": "username"
}
```
2. Configure the subordinate uid/guid:
```bash
# in /etc/subuid
username:1000:1
username:100000:65536
```
```bash
# in /etc/subgid
username:1000:1
username:100000:65536
```
3. Restart docker:
```bash
sudo systemctl restart docker
```
4. That's it! Now, the root user in the container will be mapped to the user on
your local machine, no more permission issues! 🎉
You can check
[this great article](https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/)
to know more about how it works.
3. (για το docker

View File

@ -1,4 +1,4 @@
{
"label": "Getting Started",
"label": "Ξεκινώντας",
"position": 2
}

View File

@ -1,88 +1,83 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Αυθεντικοποίηση και Εξουσιοδότηση
# Ταυτοποίηση & εξουσιοδότηση
Το Castopod διαχειρίζεται την αυθεντικοποίηση και την εξουσιοδότηση χρησιμοποιώντας
το `codeigniter/shield` σε συνδυασμό με προσαρμοσμένους κανόνες. Οι ρόλοι και οι
εξουσιοδοτήσεις καθορίζονται σε δύο επίπεδα:
Ο Castopod χειρίζεται τον έλεγχο ταυτότητας και την έγκριση χρησιμοποιώντας
`codeigniter/shield` σε συνδυασμό με προσαρμοσμένους κανόνες. Οι ρόλοι και τα
δικαιώματα καθορίζονται σε δύο επίπεδα:
1. [Σε όλη την πλατφόρμα](#1-σε-όλη-την-πλατφόρμα-ρόλοι-και-εξουσιοδοτήσεις)
2. [Ανά podcast](#2-ανά-podcast-ρόλοι-και-εξουσιοδοτήσεις)
1. [ευρεία παρουσία](#1-instance-wide-roles-and-permissions)
2. [ανά podcast](#2-per-podcast-roles-and-permissions)
## 1. Σε όλη την πλατφόρμα ρόλοι και εξουσιοδοτήσεις
## 1. Διαχείριση ρόλων και δικαιωμάτων
### Ρόλοι εμφάνισης
### Ρόλοι στην πλατφόρμα
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| ρόλος | περιγραφή | δικαιώματα |
| ---------------- | ------------------------------------- | ------------------------------------------------------------------------------------------ |
| Υπερδιαχειριστής | Έχει πλήρη έλεγχο του Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Διαχειριστής | Διαχείριση περιεχομένου του Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Γενικοί χρήστες του Castopod. | admin.access |
| Ρόλος | Περιγραφή | Εξουσιοδοτήσεις |
| ------------ | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Έχει πλήρη έλεγχο στο Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Διαχειριστής | Διαχειρίζεται το περιεχόμενο του Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Κανονικοί χρήστες του Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
### Εξουσιοδοτήσεις στην πλατφόρμα
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| Εξουσιοδότηση | Περιγραφή |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
| admin.access | Έχει πρόσβαση στην περιοχή διαχείρισης του Castopod. |
| admin.settings | Έχει πρόσβαση στις ρυθμίσεις του Castopod. |
| users.manage | Μπορεί να διαχειριστεί χρήστες του Castopod. |
| persons.manage | Μπορεί να διαχειριστεί πρόσωπα. |
| pages.manage | Μπορεί να διαχειριστεί σελίδες. |
| podcasts.view | Μπορεί να δει όλα τα podcasts. |
| podcasts.create | Μπορεί να δημιουργήσει νέα podcasts. |
| podcasts.import | Μπορεί να εισαγάγει podcasts. |
| fediverse.manage-blocks | Μπορεί να αποκλείσει χρήστες/τομείς από το Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
## 2. Ανά podcast ρόλοι και εξουσιοδοτήσεις
### Per podcast roles
### Ρόλοι ανά podcast
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
| Ρόλος | Περιγραφή | Εξουσιοδοτήσεις |
| ------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Έχει πλήρη έλεγχο στο podcast #{id}. | \* |
| Επεξεργαστής | Διαχειρίζεται το περιεχόμενο και τις δημοσιεύσεις του podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Συγγραφέας | Διαχειρίζεται το περιεχόμενο του podcast #{id}, αλλά δεν μπορεί να το δημοσιεύσει. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Καλεσμένος | Γενικός συνεισφέρων του podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
### Εξουσιοδοτήσεις ανά podcast
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
| Εξουσιοδότηση | Περιγραφή |
| ---------------------------- | ----------------------------------------------------------------------------------------- |
| view | Προβολή του πίνακα ελέγχου και της ανάλυσης του podcast #{id}. |
| edit | Μπορεί να επεξεργαστεί το podcast #{id}. |
| delete | Μπορεί να διαγράψει το podcast #{id}. |
| manage-imports | Μπορεί να συγχρονίσει το εισαγόμενο podcast #{id}. |
| manage-persons | Μπορεί να διαχειριστεί τις συνδρομές στο podcast #{id}. |
| manage-subscriptions | Μπορεί να διαχειριστεί τις συνδρομές στο podcast #{id}. |
| manage-contributors | Μπορεί να διαχειριστεί τους συνεισφέροντες του podcast #{id}. |
| manage-platforms | Μπορεί να διαμορφώσει/διαγράψει συνδέσμους πλατφόρμας στο podcast #{id}. |
| manage-publications | Μπορεί να δημοσιεύσει το podcast #{id}. |
| manage-notifications | Μπορεί να δει και να επισημάνει τις κοινωνικές ενημερώσεις ως αναγνωσμένες για το podcast #{id}. |
| interact-as | Μπορεί να αλληλεπιδράσει ως podcast #{id} για προσθήκη, κοινοποίηση ή απάντηση σε μηνύματα. |
| episodes.view | Μπορεί να δει τον πίνακα ελέγχου και τις αναλύσεις του podcast #{id}. |
| episodes.create | Μπορεί να δημιουργήσει επεισόδια για το podcast #{id}. |
| episodes.edit | Μπορεί να επεξεργαστεί το επεισόδιο του podcast #{id}. |
| episodes.delete | Μπορεί να διαγράψει το επεισόδιο του podcast #{id}. |
| episodes.manage-persons | Μπορεί να διαχειριστεί τις συνδρομές στο podcast #{id}. |
| episodes.manage-clips | Μπορεί να διαχειριστεί τα βίντεο clips ή τα ηχητικά αποσπάσματα του podcast #{id}. |
| episodes.manage-publications | Μπορεί να δημοσιεύσει το επεισόδιο του podcast #{id}. |
| episodes.manage-comments | Μπορεί να δημιουργήσει/διαγράψει σχόλια στο επεισόδιο του podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -1,35 +1,29 @@
---
title: Official Docker images
title: Επίσημες εικόνες Docker
sidebarDepth: 3
---
# Official Docker images
# Επίσημες εικόνες του Docker
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
Το Castopod αποστέλλει 3 εικόνες Docker στο Docker Hub κατά τη διάρκεια της αυτοματοποιημένης διαδικασίας κατασκευής:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all
in one castopod image using nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): μια εικόνα για το Castopod που περιλαμβάνει όλα τα απαιτούμενα στοιχεία, χρησιμοποιώντας το nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): το πακέτο εφαρμογής με όλες τις εξαρτήσεις του Castopod
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): μια διαμόρφωση του Nginx για το Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
Επιπλέον, το Castopod απαιτεί μια βάση δεδομένων που είναι συμβατή με το MySQL. Μια βάση δεδομένων Redis μπορεί επίσης να προστεθεί ως διαχειριστής προσωρινής αποθήκευσης.
## Supported tags
## Υποστηριζόμενες ετικέτες
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
- `develop` [ασταθής], η τελευταία έκδοση του κλαδιού ανάπτυξης
- `beta` [σταθερή], η πιο πρόσφατη έκδοση βήτα
- `1.x.x` [σταθερή], συγκεκριμένη έκδοση (από το `1.0.0` και μετά)
## Example usage
## Παράδειγμα χρήσης
1. Install [docker](https://docs.docker.com/get-docker/) and
[docker-compose](https://docs.docker.com/compose/install/)
2. Create a `docker-compose.yml` file with the following:
1. Εγκαταστήστε το [docker](https://docs.docker.com/get-docker/) και το
[docker-compose](https://docs.docker.com/compose/install/)
2. Δημιουργήστε ένα αρχείο `docker-compose.yml` με τα παρακάτω στοιχεία:
```yml
version: "3.7"
@ -87,13 +81,11 @@ can be added as a cache handler.
castopod-db:
```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
Θα πρέπει να προσαρμόσετε ορισμένες μεταβλητές στις ανάγκες σας (π.χ. `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` και `CP_ANALYTICS_SALT`).
3. Setup a reverse proxy for TLS (SSL/HTTPS)
3. Ρυθμίστε ένα αντίστροφο πρόξενο για το TLS (SSL/HTTPS)
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
Το TLS είναι υποχρεωτικό για να λειτουργήσει το ActivityPub. Αυτή η λειτουργία μπορεί να διαχειριστεί εύκολα από ένα αντίστροφο πρόξενο, για παράδειγμα το [Caddy](https://caddyserver.com/):
```
#castopod
@ -102,57 +94,41 @@ can be added as a cache handler.
}
```
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
4. Εκτελέστε `docker-compose up -d`, περιμένετε να ολοκληρωθεί η αρχικοποίηση στο
`https://castopod.example.com/cp-install` για να ολοκληρώσετε τη διαμόρφωση του Castopod!
5. You're all set, start podcasting! 🎙️🚀
5. Είστε έτοιμοι, αρχίστε να δημιουργείτε περιεχόμενο podcast! 🎙️🚀
## Environment Variables
## Μεταβλητές περιβάλλοντος
- **castopod/castopod** and **castopod/app**
- **castopod/castopod** και **castopod/app**
| Variable name | Type (`default`) | Default |
| ------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
- **castopod/web-server**
| Variable name | Type | Default |
| ---------------------- | --------------------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Όνομα μεταβλητής | Τύπος (`default`) | Προεπιλογή |
| ----------------------------- | -------------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` ή `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` ή `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined

View File

@ -1,221 +1,58 @@
---
title: Installation
title: Εγκατάσταση
sidebarDepth: 3
---
# How to install Castopod?
# Πώς να εγκαταστήσετε το Castopod;
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
Το Castopod έχει σχεδιαστεί να είναι εύκολο στην εγκατάσταση. Αν μιλάμε για
αποκλειστική ή κοινή φιλοξενία, μπορείτε να το εγκαταστήσετε σε περισσότερους
ιστοσέλιδους διακομιστές που υποστηρίζονται από PHP-MySQL.
::: tip Note
::: tip Σημείωση
We've released official Docker images for Castopod!
Έχουμε δημοσιεύσει επίσημες εικόνες Docker για το Castopod!
If you prefer using Docker, you may skip this and go straight to the
[docker documentation](./docker.md) for Castopod.
Εάν προτιμάτε να χρησιμοποιήσετε το Docker, μπορείτε να παραλείψετε αυτό το μέρος και να πάτε απευθείας στην αντίστοιχη [τεκμηρίωση Docker](./docker.md) για το Castopod.
:::
## Requirements
## Προαπαιτήσεις
- PHP v8.1 only
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
- PHP v8.1
- Έκδοση MySQL 5.7 ή νεότερη ή Έκδοση MariaDB 10.2 ή νεότερη
- Υποστήριξη HTTPS
- Ένα [συγχρονισμένο ρολόι](https://wiki.debian.org/NTP) για την επαλήθευση των εισερχομένων αιτημάτων της ένωσης
### PHP v8.1 only
### PHP v8.1
PHP version 8.1 is required, with the following extensions installed:
Απαιτείται η έκδοση 8.1 της PHP, με τις ακόλουθες επεκτάσεις εγκατεστημένες:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
**PNG** and **WEBP** libraries.
- [exif](https://www.php.net/manual/en/exif.installation.php)
- [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) με τις βιβλιοθήκες **JPEG**,
**PNG** και **WEBP**.
- [exif](https://www.php.net/manual/fr/exif.installation.php)
Additionally, make sure that the following extensions are enabled in your PHP:
Επιπλέον, βεβαιωθείτε ότι οι ακόλουθες επεκτάσεις είναι ενεργοποιημένες στην PHP:
- json (enabled by default - don't turn it off)
- xml (enabled by default - don't turn it off)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
- json (ενεργοποιημένο από προεπιλογή - μην το απενεργοποιείτε)
- xml (ενεργοποιημένο από προεπιλογή - μην το απενεργοποιείτε)
- [mysqlnd](https://www.php.net/manual/fr/mysqlnd.install.php)
### MySQL compatible database
### Συμβατή βάση δεδομένων MySQL
> We recommend using [MariaDB](https://mariadb.org).
> Συνιστούμε τη χρήση [της MariaDB](https://mariadb.org).
::: warning Warning
::: warning Προσοχή
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
Το Castopod λειτουργεί μόνο με βάσεις δεδομένων MySQL 5.7 ή νεότερες. Οι έκδοσης 5.6 (η υποστήριξη της οποίας έληξε στις 5 Φεβρουαρίου 2021) ή παλαιότερες του MySQL δεν θα λειτουργήσουν.
:::
You will need the server hostname, database name, username and password to
complete the installation process. If you do not have these, please contact your
server administrator.
Θα χρειαστείτε το όνομα του υποδοχέα του εξυπηρετητή, το όνομα της βάσης δεδομένων, το όνομα χρήστη και τον κωδικό πρόσβασης για να ολοκληρώσετε τη διαδικασία εγκατάστασης. Εάν δεν έχετε αυτές τις πληροφορίες, επικοινωνήστε με τον διαχειριστή.
#### Privileges
#### Δικαιώματα πρόσβασης
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
`REFERENCES`, `CREATE VIEW`.
### (Optional) FFmpeg v4.1.8 or higher for Video Clips
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required if you
want to generate Video Clips. The following extensions must be installed:
- **FreeType 2** library for
[gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Other recommendations
- Redis for better cache performances.
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
## Install instructions
### Pre-requisites
0. Get a Web Server with [requirements](#requirements) installed
1. Create a MySQL database for Castopod with a user having access and
modification privileges (for more info, see
[MySQL compatible database](#mysql-compatible-database)).
2. Activate HTTPS on your domain with an _SSL certificate_.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
the web server if you havent already.
- ⚠️ Set the web server document root to the `public/` sub-folder within the
`castopod` folder.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1
```
**Note** - If you do not add this cron task, the following Castopod features
will not work:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
[WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (recommended) Install Wizard
1. Run the Castopod install script by going to the install wizard page
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
2. Follow the instructions on your screen.
3. Start podcasting!
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
:::
### Email/SMTP setup
Email configuration is required for some features to work properly (eg.
retrieving your forgotten password, sending instructions to premium subscribers,
…)
You may add your email configuration in your instance's `.env` like so:
```ini
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
```
#### Email config options
| Variable name | Type | Default |
| ---------------- | -------------------- | ------------ |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined` |
| **`SMTPPass`** | string | `undefined` |
| **`SMTPPort`** | number | `25` |
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
### Media storage
By default, files are saved to the `public/media` folder using the file system.
If you need to relocate the `media` folder to a different location, you can
specify it in your `.env` file as shown below:
```ini
# […]
media.root="media"
media.storage="/mnt/storage"
```
In this example, the files will be saved to the /mnt/storage/media folder. Make
sure to also update your web server configuration to reflect this change.
### S3
If you prefer storing your media files on an S3 compatible storage, you may
specify it in your `.env`:
```ini
# […]
media.fileManager="s3"
media.s3.endpoint="your_s3_host"
media.s3.key="your_s3_key"
media.s3.secret="your_s3_secret"
media.s3.region="your_s3_region"
```
#### S3 config options
| Variable name | Type | Default |
| ----------------------- | ------- | ----------- |
| **`endpoint`** | string | `undefined` |
| **`key`** | string | `undefined` |
| **`secret`** | string | `undefined` |
| **`region`** | string | `undefined` |
| **`bucket`** | string | `castopod` |
| **`protocol`** | number | `undefined` |
| **`pathStyleEndpoint`** | boolean | `false` |
| **`keyPrefix`** | string | `undefined` |
## Community packages
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
### Install with YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github
Repo</a>
</div>
Ο χρήστης πρέπει να έχει τουλάχιστον αυτά τα δικαιώμ

View File

@ -1,23 +1,25 @@
---
title: Security
title: Ασφάλεια
---
# Security concerns
# Ερωτήσεις Ασφάλειας
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP
framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
Το Castopod αναπτύσσεται με χρήση του [CodeIgniter4](https://codeigniter.com/), ένα
framework PHP που προωθεί
[καλές πρακτικές ασφάλειας](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
Για να διασφαλίσετε μέγιστη ασφάλεια για την εγκατάσταση σας και να αποφύγετε
κακόβουλες επιθέσεις, σας συνιστούμε να ενημερώσετε τα δικαιώματα των
αρχείων του Castopod μετά την εγκατάσταση και μετά από κάθε αναβάθμιση (και να αποφεύγετε
οποιοδήποτε σφάλμα πρόσβασης στα αρχεία):
- `writable/` folder must be **readable** and **writable**.
- `public/media/` folder must be **readable** and **writable**.
- any other file must be set to **readonly**.
- Ο φάκελος `writable/` θα πρέπει να είναι προσβάσιμος σε καθεστώς **ανάγνωσης** και **εγγραφής**.
- Ο φάκελος `public/media/` θα πρέπει να είναι προσβάσιμος σε καθεστώς **ανάγνωσης** και
**εγγραφής**.
- Όλα τα υπόλοιπα αρχεία θα πρέπει να είναι προσβάσιμα μόνο σε κατάσταση **ανάγνωσης**.
For instance, if you are using Apache or NGINX with Ubuntu you may do the
following:
Για παράδειγμα, αν χρησιμοποιείτε τον Apache ή τον NGINX με το Ubuntu, μπορείτε να εκτελέσετε
τις παρακάτω εντολές:
```bash
sudo chown -R root:root /path/to/castopod

View File

@ -1,109 +1,110 @@
---
title: Update
title: Ενημέρωση
sidebarDepth: 3
---
# How to update Castopod?
# Πώς να εγκαταστήσετε το Castopod;
After installing Castopod, you may want to update your instance to the latest
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
Μετά την εγκατάσταση του Castopod, μπορείτε να ενημερώσετε την έκδοσή σας στην
πιο πρόσφατη έκδοση για να απολαύσετε τις τελευταίες δυνατότητες ✨, τις
διορθώσεις σφαλμάτων 🐛 και τις βελτιώσεις της απόδοσης ⚡.
## Update instructions
## Οδηγίες ενημέρωσης
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
0. ⚠️ Πριν από κάθε ενημέρωση, συστήνουμε ιδιαίτερα να δημιουργήσετε αντίγραφο
ασφαλείας των αρχείων Castopod και της βάσης δεδομένων σας.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
- βλέπε
[Πρέπει να κάνω αντίγραφο ασφαλείας πριν από την ενημέρωση;](#πρέπει-να-κάνω-αντίγραφο-ασφαλείας-πριν-από-την-ενημέρωση)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
1. Μεταβείτε στη
[σελίδα κυκλοφορίας](https://code.castopod.org/adaures/castopod/-/releases) και
δείτε αν η έκδοσή σας είναι ενημερωμένη με την πιο πρόσφατη έκδοση του Castopod.
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
- βλέπε
[Πού μπορώ να βρω την έκδοση του Castopod μου;](#πού-μπορώ-να-βρω-την-έκδοση-του-castopod-μου;)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
2. Κατεβάστε το πακέτο της τελευταίας έκδοσης με την ονομασία `Castopod Package`,
μπορείτε να επιλέξετε ανάμεσα στα αρχεία `zip` ή `tar.gz`.
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
- ⚠️ Βεβαιωθείτε ότι κατεβάζετε το Castopod Package και **ΌΧΙ** τον Πηγαίο Κώδικα.
- Σημειώστε ότι μπορείτε επίσης να κατεβάσετε το πιο πρόσφατο πακέτο από το
[castopod.org](https://castopod.org/).
3. On your server:
3. Στο δικό σας διακομιστή:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
- Διαγράψτε όλα τα αρχεία εκτός από το `.env` και το `public/media`
- Αντιγράψτε τα νέα αρχεία από το κατεβασμένο πακέτο στον δικό σας διακομιστή
::: info Note
::: info Σημείωση
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
Μπορεί να χρειαστεί να επανακαθορίσετε τα δικαιώματα αρχείων όπως
κάνατε κατά τη διάρκεια της διαδικασίας εγκατάστασης.
Δείτε [Ανησυχίες Ασφαλείας](./security.md).
:::
4. Update your database schema from your `Castopod Admin` > `About` page or by
running:
4. Ενημερώστε το σχήμα της βάσης δεδομένων σας από τη σελίδα `Castopod Admin` >
`Σχετικά` ή εκτελώντας:
```bash
php spark castopod:database-update
```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
5. Καθαρίστε τη μνήμη cache από τη σελίδα `Castopod Admin` > `Ρυθμίσεις` >
`Γενικές` > `Συντήρηση`.
6. ✨Απολαύστε τη νέα σας έκδοση, ολοκληρώσατε!
::: info Note
::: info Σημείωση
Releases may come with additional update instructions (see
[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
Οι εκδόσεις μπορεί να συνοδεύονται από πρόσθετες οδηγίες ενημέρωσης
(βλ. [Σελίδα Σημειώσεων Έκδοσης](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
- βλέπε
[Δεν έχω ενημερώσει την έκδοσή μου για καιρό… Τι πρέπει να κάνω;](#δεν-έχω-ενημερώσει-την-έκδοσή-μου-για-καιρό-τι-πρέπει-να-κάνω;)
:::
## Fully Automated updates
## Πλήρως αυτοματοποιημένες ενημερώσεις
> Coming soon... 👀
> Έρχονται σύντομα... 👀
## Frequently asked questions (FAQ)
## Συχνές Ερωτήσεις (FAQ)
### Where can I find my Castopod version?
### Πού μπορώ να βρω την έκδοση του Castopod μου;
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
Μεταβείτε στον πίνακα διαχείρισης του Castopod, η έκδοση εμφανίζεται στην
κάτω αριστερή γωνία.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
Μπορείτε επίσης να βρείτε την έκδοση στο αρχείο `> Configuration > Constantes.php`.
### I haven't updated my instance in a long time… What should I do?
### Δεν έχω ενημερώσει την έκδοσή μου για καιρό… Τι πρέπει να κάνω;
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
Κανένα πρόβλημα! Απλά αποκτήστε την τελευταία έκδοση, όπως περιγράφεται
παραπάνω. Όταν εκτελείτε τις οδηγίες ενημέρωσης (4), εκκινήστε τις
σειριακά, από την παλαιότερη στην πιο πρόσφατη.
> You may want to backup your instance depending on how long you haven't updated
> Castopod.
> Θα πρέπει να αποθηκεύσετε την έκδοση σας με βάση την ημερομηνία της
> τελευταίας ενημέρωσης του Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
`v1.0.0-beta.1`:
Για παράδειγμα, αν βρίσκεστε στην `v1.0.0-alpha.42` και θέλετε να
ενημερώσετε στην `v1.0.0-beta.1`:
0. (highly recommended) Make a backup of your files and database.
0. (ισχυρά συνιστάται) Δημιουργήστε αντίγραφο ασφαλείας των αρχείων σας και της
βάσης δεδομένων.
1. Download the latest release, overwrite your files whilst keeping `.env` and
`public/media`.
1. Κατεβάστε την τελευταία έκδοση, αντικαταστήστε τα αρχεία σας κρατώντας τα
`.env` και `public/media`.
2. Go through each release update instructions sequentially (from oldest to
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
2. Εκτελέστε τις οδηγίες ενημέρωσης μία-μία (από την παλαιότερη στην
πιο πρόσφατη).
3. ✨ Enjoy your fresh instance, you're all done!
3. ✨ Η νέα σας έκδοση είναι έτοιμη!
### Should I make a backup before updating?
### Πρέπει να κάνω αντίγραφο ασφαλείας πριν από την ενημέρωση;
We advise you do, so you don't lose everything if anything goes wrong!
Σας συνιστούμε να το κάνετε, για να μην χάσετε τίποτα αν κάτι πάει στραβά!
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…
Γενικότερα, σας συνιστούμε να κάνετε τακτικά αντίγραφα ασφαλείας των
αρχείων Castopod και της βάσης δεδομένων σας για να αποφύγετε την
απώλεια όλων των δεδομένων σας...

View File

@ -2,299 +2,150 @@
sidebarDepth: 2
---
# Καλώς Ήλθατε 👋
# Καλώς ήλθατε 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Το Castopod είναι μια δωρεάν & ανοικτού κώδικα πλατφόρμα φιλοξενίας podcast που
κατασκευάζεται για podcasters που θέλουν να συμμετάσχουν και να αλληλεπιδράσουν
με το κοινό τους.
Το Castopod είναι μια δωρεάν και ανοιχτού κώδικα πλατφόρμα φιλοξενίας που δημιουργήθηκε για ποδκαστερ που θέλουν να ανταλλάσσουν και να αλληλεπιδρούν με το κοινό τους.
Το Castopod είναι εύκολο στην εγκατάσταση και χτίστηκε με το
[CodeIgniter4](https://codeigniter.com/), ένα ισχυρό PHP framework με ένα πολύ
μικρό αποτύπωμα.
Το Castopod είναι εύκολο στην εγκατάσταση και δημιουργήθηκε με το [CodeIgniter4](https://codeigniter.com/), ένα ισχυρό πλαίσιο PHP μικρού μεγέθους.
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Εγκατάσταση<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
<a href="/fr/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Εγκατέστησε<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Χαρακτηριστικά
## Λειτουργίες
- 🌱 &nbsp;Δωρεάν & open-source (AGPL v3 License)
- 🔐 &nbsp;Εστιάζει στην κυριαρχία των δεδομένων: το περιεχόμενο, το κοινό και
τα αναλυτικά στοιχεία ανήκουν σε εσάς μόνο
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding,
chapters, location, persons, soundbites, …
- 🌱 &nbsp;Ελεύθερο, δωρεάν & ανοιχτού κώδικα (Άδεια AGPL v3)
- 🔐 &nbsp;Κεντρισμένο στην κυριαρχία των δεδομένων: ο περιεχόμενος σας, οι ακροατές
σας και οι στατιστικές σας σάς ανήκουν μόνο σας
- 🪄&nbsp;Χαρακτηριστικά του Podcasting 2.0: GUID, κλείδωμα,
μεταφράσεις, χρηματοδότηση, κεφάλαια, γεω-τοποθεσία, εισηγητές,
αποσπάσματα ήχου, …
- 💬 &nbsp;Ενσωματωμένο κοινωνικό δίκτυο:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes
- 📈 &nbsp;Built-in analytics:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant
- 🪙 &nbsp;Standard IABv2 audience measurement
- 🏡 &nbsp;On-premises analytics, no third party involved
- 📢 &nbsp;Built-in marketing tools:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: install as a standalone app
- 🎨 &nbsp;Customizable theme colors
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes
- 🔉 &nbsp;Generate soundbites
- ▶️ &nbsp;Embeddable player, embed your episodes on any website
- 💸 &nbsp;Monetization:
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🚀 &nbsp;Το Castopod είναι μέρος του Fediverse, ενός αποκεντρωμένου κοινωνικού δικτύου
- ❤️ &nbsp;Δημιουργήστε δημοσιεύσεις, μοιραστείτε, προσθέστε ως αγαπημένα και σχολιάστε
τα επεισόδια
- 📈 &nbsp;Ενσωματωμένες στατιστικές:
- ⚖️ &nbsp;Συμμορφωμένα με το GDPR/CCPA/LGPD
- 🪙&nbsp;Μέτρηση κοινής γνώμης IABv2
- 🏡 &nbsp;Ενσωματωμένες στατιστικές, καμία εμπλοκή τρίτων
- 📢 &nbsp;Ενσωματωμένα εργαλεία μάρκετινγκ:
- ✅ &nbsp;Έτοιμο για το SEO (open-graph μετα-ετικέτες, JSON-LD...)
- 📱 &nbsp;PWA: εγκατέστηση ως αυτόνομη εφαρμογή
- 🎨 &nbsp;Προσαρμογή χρωμάτων θεμάτων
- 🎬 &nbsp;Δημιουργία έτοιμων για κοινοποίηση επεισοδίων βίντεο κλιπ
- 🔉 &nbsp;Δημιουργία επιστροφών ήχου
- ▶️ &nbsp;Ενσωμάτωση των επεισοδίων σας σε οποιαδήποτε ιστοσελίδα
- 💸 &nbsp;Διασφάλιση εσόδων:
- 🔗 &nbsp;Σύνδεσμοι χρηματοδότησης
- 📲 &nbsp;διαφήμιση "ακούστε-κλικ"
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod
- 📤 &nbsp;Move your podcast out of Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want
- 👥 &nbsp;Multi-user: add contributors and set roles
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
- 📡&nbsp;Δημοσιεύστε τα επεισόδιά σας παντού με RSS:
- 📱 &nbsp;Σε όλες τις ευρετηριασμένες και όλες τις εφαρμογές: Podcast Index,
Ποδκαστς Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend…
- ⚡&nbsp;Αμέσως streaming των επεισοδίων σας με WebSub
- 📥 &nbsp;Εισαγωγή Podcast: μετακινήστε το υπάρχον podcast σας σε
Castopod
- 📤 &nbsp;Μεταφέρετε το podcast σας σε έναν άλλο φιλοξενητή
- 🔀 &nbsp;Πολλαπλές ενοικιαζόμενες θέσεις : φιλοξενήστε τόσα πολλά podcasts όσα θέλετε
- 👥 &nbsp;Πολλαπλοί χρήστες: προσθέστε συντελεστές και ορίστε τους
ρόλους τους
- 🌎 &nbsp;διαχείριση της i18n: μεταφρασμένο στα αγγλικά, γαλλικά, πολωνικά, γερμανικά,
πορτογαλικά, βραζιλιάνικα & ισπανικά… και
[σε άλλες πολλές γλώσσες](https://translate.castopod.org) στο μέλλον!
## Κίνητρα
## Γιατί το Castopod;
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
Το περιβάλλον του podcasting είναι αποκεντρωμένο κατά φύση: μπορείτε να δημιουργήσετε
το podcast σας ως ένα αρχείο RSS, να το δημοσιεύσετε στον ιστό και να το κοινοποιήσετε
παντού στο διαδίκτυο.
It is in fact one of the only media to have stayed this way for a long time.
Πρόκειται για ένα από τα λίγα μέσα που παρέμειναν για πολύ καιρό με αυτόν τον τρόπο.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
Καθώς οι χρήσεις εξελίσσονται, όλο και περισσότεροι άνθρωποι ασχολούνται με τα podcasts: είτε
πρόκειται για δημιουργούς που αναζητούν νέους τρόπους να μοιραστούν τις ιδέες τους, είτε για ακροατές
που αναζητούν ποιοτικό περιεχόμενο.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
Με την αυξημένη χρήση των podcasts, ορισμένες εταιρείες προσπαθούν να το προσανατολίσουν προς ένα πιο
ελεγχόμενο και κεντρικό μέσο.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
Το Castopod δημιουργήθηκε με σκοπό να παρέχει μια ανοιχτή και βιώσιμη εναλλακτική λύση για την
φιλοξενία των podcasts σας, προωθώντας την αποκεντρωμένη λειτουργία για να εξασφαλιστεί ότι
η δημιουργικότητα των δημιουργών ποδκαστ θα εκφράζεται.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
Αυτό το έργο υποστηρίζεται από την κοινότητα του ανοικτού πηγαίου κώδικα και συγκεκριμένα από τη
[Fediverse](https://fediverse.party/en/fediverse/) και την κίνηση
[Podcasting 2.0](https://podcastindex.org/).
## Comparison with other solutions
## Σύγκριση με άλλες λύσεις
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for&nbsp;you.
Πιστεύουμε ότι μια λύση δεν είναι απαραίτητα σωστή για όλους, εξαρτάται πολύ από τις ανάγκες σας.
Οπότε, εδώ είναι οι συγκρίσεις με άλλα εργαλεία για να σας βοηθήσουν να κρίνετε αν το Castopod
σας ταιριάζει&nbsp;ή όχι.
### Castopod vs Wordpress
### Castopod έναντι Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running&nbsp;it.
Το Castopod παραπέμπεται συχνά ως "το Wordpress για τα podcasts" λόγω των ομοιοτήτων μεταξύ τους.
Κατά κάποιον τρόπο αυτό είναι αληθές. Και στην πραγματικότητα, το Castopod ήταν έμπνευση από το
οικοσύστημα του Wordpress, βλέποντας την ευκολία ένταξης από την κοινότητα και τον αριθμό των
ιστότοπων που το χρησιμοποιούν&nbsp;το.
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
Όπως και το Wordpress, το Castopod είναι δωρεάν και ανοιχτού κώδικα, χτίστηκε με χρήση PHP με
ένα MySQL Βάση δεδομένων και είναι συσκευασμένο τρόπο έτσι ώστε να μπορείτε εύκολα να το
εγκαταστήσετε σε σχεδόν όλους τους διακομιστές&nbsp;βάσεως τού&nbsp;Ιστού.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
Το Wordpress είναι ένας εξαιρετικός τρόπος να δημιουργήσετε τον δικό σας ιστότοπο και να τον
επεκτείνετε χρησιμοποιώντας πρόσθετα για να πάρετε ό,τι θέλετε. Είναι ένα πλήρως εξελιγμένο σύστημα
διαχείρισης περιεχομένου που σας βοηθά να έχετε οποιοδήποτε είδος ιστότοπου online.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting&nbsp;journey.
Από την άλλη πλευρά, το Castopod έχει ως στόχο να εξυπηρετήσει αποκλειστικά τις ανάγκες των
ποδκάστερ, επικεντρώνοντας στο podcasting και τίποτα άλλο. Δεν χρειάζεστε επέκταση για να ξεκινήσετε
το podcasting&nbsp;σας.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
Αυτό επιτρέπει τη βελτιστοποίηση των διαδικασιών που σχετίζονται με το podcasting: από την
δημιουργία των ποδκάστ μέχρι τη δημοσίευση νέων επεισοδίων και την αναπαραγωγή,
την προώθηση και την ανάλυση.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
Τέλος, ανάλογα με τις ανάγκες σας, το Wordpress και το Castopod μπορούν ακόμα και να
υπάρχουν δίπλα-δίπλα καθώς έχουν τις ίδιες απαιτήσεις!
### Castopod vs Funkwhale
### Castopod έναντι Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
Το Funkwhale είναι ένα αυτο-φιλοξενούμενο, μοντέρνο δωρεάν και ανοιχτού κώδικα σέρβερ μουσικής.
Όπως το Castopod, το Funkwhale βρίσκεται στο Fediverse, ένα αποκεντρωμένο κοινωνικό δίκτυο που
επιτρέπει την αλληλεπίδραση μεταξύ των δύο.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
Το Funkwhale χτίστηκε αρχικά γύρω από τη μουσική. Αργότερα, καθώς εξελίχθηκε το έργο, προστέθηκε
η δυνατότητα φιλοξενίας podcasts.
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
Διαφορετικά από το Funkwhale, το Castopod έχει σχεδιαστεί και χτιστεί αποκλειστικά γύρω από
το podcasting. Αυτό δίνει τη δυνατότητα για ευκολότερη υλοποίηση χαρακτηριστικών που σχετίζονται με
το περιβάλλον του podcasting, όπως τα χαρακτηριστικά του podcasting 2.0 (μεταγραφές, κεφάλαια, τοποθεσίες,
πρόσωπα κ.λπ.).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
Λοιπόν, θα πρέπει πιθανώς να χρησιμοποιείτε το Funkwhale αν θέλετε να φιλοξενήσετε τη μουσική σας
και να χρησιμοποιείτε το Castopod αν θέλετε να φιλοξενήσετε τα podcasts σας.
### Castopod vs other podcast hosts
### Castopod έναντι άλλων παρόχων φιλοξενίας podcasts
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Υπάρχουν πολλές λύσεις για τη φιλοξενία των podcasts σας, μερικές από αυτές είναι πραγματικά
αξιόλογες και [πολλές](https://podcastindex.org/apps) με παίρνουνε στο τρένο του Podcasting&nbsp;2.0
ακριβώς όπως το Castopod!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
Κάθε μία από αυτές τις λύσεις διαφέρει μεταξύ τους, μπορείτε να τις συγκρίνετε με τον
[κατάλογο των λειτουργιών](#features).
That being said, there are two main differences with other podcasting solutions:
Αυτό που λέγαμε. υπάρχουν δύο κύριες διαφορές μεταξύ άλλων λύσεων podcasting:
- Castopod can be self-hosted and is the only solution that allows you to keep
full control over what you produce. Also, as it is open-source, you can even
customize it as you wish.
- Το Castopod μπορεί να είναι αυτο-φιλοξενούμενο και είναι η μόνη λύση που σας επιτρέπει
να έχετε πλήρη έλεγχο σε αυτό που παράγετε. Επίσης, καθώς είναι ανοιχτού κώδικα, έχετε την
ελευθερία να το τροποποιήσετε όπως θέλετε.
- Castopod is the only solution that currently integrates both a decentralized
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
- Το Castopod είναι η μόνη λύση που ενσωματώνει ήδη κοινωνικό δίκτυο που βασίζεται στο ActivityPub
και τα χαρακτηριστικά του "Podcasting 2.0", μειώνοντας την κατάσταση της εγκατάλειψης&nbsp;των δύο.
## Contributing
## Συνεισφορές
Love Castopod and would like to help? Take a look at the following documentation
to get you&nbsp;started.
### Code of conduct
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be&nbsp;tolerated.
### Contributing guide
Read our [contributing guide](./contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## Contributors ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Romain de Laage"/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Lyonel Bernard"/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt="Christopher Lagonick-Weitzel"/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ernesto Acosta"/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">🐛</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt="Bastien Luneteau"/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Cécile Ricordeau"/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Miś"/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt="Marcin Lewandowski"/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">🐛</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sebastian Janik"/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Karczmarczyk"/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="denis d"/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">🐛</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt="Douglas Kastle"/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">🐛</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="cExplorer"/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="ImaCrea"/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">🐛</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Jonas S"/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt="LEFEBVRE Yann"/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt="Sebastian Späth"/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">🐛</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="rocky III"/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt="Hermann Josef Eckl"/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Delhaye Cyrille"/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">🐛</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt="João Leandro"/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Angelos Chouvardas"/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt="Eivind"/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt="Ewen"/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt="forght"/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt="glottis0q"/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100" width="100px;" alt="ButterflyOfFire"/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt="Lucian I. Last"/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt="LuuzViir"/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt="CTHTC"/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt="Russian Retro"/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt="Marek L'ach"/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt="GunChleoc"/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt="GabiSnow"/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt="bendaha"/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt="Samuel Roland"/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Dimitri Regnier"/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100" width="100px;" alt="irithys"/><br /><sub><b>irithys</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sergi"/><br /><sub><b>Sergi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt="ghose (XoseM)"/><br /><sub><b>ghose (XoseM)</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/basen1982"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Andreas Olsson"/><br /><sub><b>Andreas Olsson</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/leonfrom"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="leonfrom"/><br /><sub><b>leonfrom</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/agentcobra57"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="agentcobra"/><br /><sub><b>agentcobra</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/alephoto85"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100" width="100px;" alt="Alessandro"/><br /><sub><b>Alessandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/liimee"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="liimee"/><br /><sub><b>liimee</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ahmedsabouni"><img src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100" width="100px;" alt="Ahmed Sabouni"/><br /><sub><b>Ahmed Sabouni</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KrzysztofDomanczyk"><img src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100" width="100px;" alt="KrzysztofDomanczyk"/><br /><sub><b>KrzysztofDomanczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## Contact
You may reach us for help or ask any question you have on:
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for
feature requests & bug reports)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponsors
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
</div>
## License
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md
[contributions]: https://code.castopod.org/adaures/castopod/-/issues
[semantic-release]: https://github.com/semantic-release/semantic-release
[discord]: https://castopod.org/discord
[stars]: https://github.com/ad-aures/castopod/stargazers
[crowdin]: https://translate.castopod.org/project/castopod
Αγαπάτε το Castopod και θέλατε να βοηθήσετε; Ρίξτε μια

View File

@ -1,4 +1,4 @@
{
"label": "Contributing",
"label": "Contribución",
"position": 3
}

View File

@ -1,154 +1,108 @@
---
title: Guidelines
title: Pautas
---
# Contributing to Castopod
# Contribuir a Castopod
Love Castopod and want to help? Thanks so much, there's something to do for
everybody!
¿Te encanta Castopod y quieres ayudar? ¡Muchas gracias, hay algo para hacer para todos!
Please take a moment to review this document in order to make the contribution
process easy and effective for everyone involved.
Por favor, dedica un momento a revisar este documento para que el proceso de contribución sea fácil y efectivo para todos los involucrados.
Following these guidelines helps to communicate that you respect the time of the
developers managing and developing this open source project. In return, they
should reciprocate that respect in addressing your issue or assessing patches
and features.
Seguir estas pautas ayuda a comunicar que respetas el tiempo de los desarrolladores que gestionan y desarrollan este proyecto de código abierto. A cambio, ellos deberían demostrar ese mismo respeto al abordar tu problema o evaluar parches y mejoras.
::: info Note
::: info Nota
**Any** contribution made on a repository other than
[the original repository](https://code.castopod.org/adaures/castopod) will not
be accepted.
Cualquier contribución realizada en un repositorio que no sea [el repositorio original](https://code.castopod.org/adaures/castopod) no será aceptada.
:::
## Using the issue tracker
## Uso del rastreador de problemas
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
El [rastreador de problemas](https://code.castopod.org/adaures/castopod/-/issues) es el canal preferido para [informes de errores](#informes-de-errores), [solicitudes de funciones](#solicitudes-de-funciones) y [envío de solicitudes de extracción](#solicitudes-de-extracción).
## ⚠️ Security issues and vulnerabilities
## ⚠️ Problemas de seguridad y vulnerabilidades
If you encounter any security issue or vulnerability in the Castopod source,
please contact us directly by email at
[security@castopod.org](mailto:security@castopod.org)
Si encuentras algún problema de seguridad o vulnerabilidad en el código fuente de Castopod, contáctanos directamente por correo electrónico a [security@castopod.org](mailto:security@castopod.org).
## Bug reports
## Informes de errores
A bug is a _demonstrable problem_ that is caused by the code in the repository.
Good bug reports are extremely helpful - thank you!
Un error es un _problema demostrable_ que es causado por el código en el repositorio. Los buenos informes de errores son extremadamente útiles, ¡gracias!
Guidelines for bug reports:
Pautas para los informes de errores:
1. **Use the issue search** &mdash; check if the issue has already been
reported.
1. **Utiliza la búsqueda de problemas** &mdash; comprueba si el problema ya ha sido notificado.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the
latest `main` branch in the repository.
2. **Verifica si el problema ha sido solucionado** &mdash; intenta reproducirlo utilizando la última versión de la rama `main` en el repositorio.
3. **Isolate the problem** &mdash; ideally create a
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
3. **Aisla el problema** &mdash; idealmente, crea un [caso de prueba reducido](https://css-tricks.com/reduced-test-cases/) y un ejemplo en vivo.
A good bug report shouldn't leave others needing to chase you up for more
information. Please try to be as detailed as possible in your report. What is
your environment? What steps will reproduce the issue? What browser(s) and OS
experience the problem? What would you expect to be the outcome? All these
details will help people to fix any potential bugs.
Un buen informe de error no debería dejar a los demás buscándote para obtener más información. Por favor, intenta ser lo más detallado posible en tu informe. ¿Cuál es tu entorno? ¿Qué pasos reproducirían el problema? ¿Qué navegador(es) y sistema(s) operativo(s) experimentan el problema? ¿Cuál sería el resultado esperado? Todos estos detalles ayudarán a las personas a solucionar posibles errores.
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> have been created for this project. You may use them to help you follow those
> guidelines.
> Se han creado [plantillas de problemas](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates) para este proyecto. Puedes utilizarlas para ayudarte a seguir estas pautas.
## Feature requests
## Solicitudes de funciones
Feature requests are welcome. But take a moment to find out whether your idea
fits with the scope and aims of the project. It's up to _you_ to make a strong
case to convince the project's developers of the merits of this feature. Please
provide as much detail and context as possible.
Las solicitudes de funciones son bienvenidas. Pero tómate un momento para averiguar si tu idea encaja con el alcance y los objetivos del proyecto. Depende de _ti_ presentar un sólido argumento para convencer a los desarrolladores del proyecto de los méritos de esta función. Por favor, proporciona la mayor cantidad de detalles y contexto posible.
## Pull requests
## Solicitudes de extracción
Good pull requests - patches, improvements, new features - are a fantastic help.
They should remain focused in scope and avoid containing unrelated commits.
Las solicitudes de extracción buenas - correcciones de errores, mejoras, nuevas funciones - son de gran ayuda. Deben mantenerse enfocadas en su alcance y evitar contener confirmaciones no relacionadas.
**Please ask first** before embarking on any significant pull request (e.g.
implementing features, refactoring code, porting to a different language),
otherwise you risk spending a lot of time working on something that the
project's developers might not want to merge into the project.
**Por favor, pregunta primero** antes de embarcarte en cualquier solicitud de extracción importante (por ejemplo, implementar funciones, refactorizar código, portar a un lenguaje diferente), de lo contrario corres el riesgo de pasar mucho tiempo trabajando en algo que los desarrolladores del proyecto pueden no querer fusionar en el proyecto.
Please adhere to the coding conventions used throughout a project (indentation,
accurate comments, etc.) and any other requirements (such as test coverage).
Por favor, sigue las convenciones de codificación utilizadas en todo el proyecto (sangría, comentarios precisos, etc.) y cualquier otro requisito (como la cobertura de pruebas).
Adhering to the following process is the best way to get your work included in
the project:
Seguir el siguiente proceso es la mejor manera de que tu trabajo se incluya en el proyecto:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the
project, clone your fork, and configure the remotes:
1. [Haz una bifurcación](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) del proyecto, clona tu bifurcación y configura los remotos:
```bash
# Clone your fork of the repo into the current directory
git clone https://code.castopod.org/<your-username>/castopod.git
# Clona tu bifurcación del repositorio en el directorio actual
git clone https://code.castopod.org/<tu-nombre-de-usuario>/castopod.git
# Navigate to the newly cloned directory
# Navega al directorio recién clonado
cd castopod
# Assign the original repo to a remote called "upstream"
# Asigna el repositorio original a un remoto llamado "upstream"
git remote add upstream https://code.castopod.org/adaures/castopod.git
```
2. If you cloned a while ago, get the latest changes from upstream:
2. Si clonaste hace un tiempo, obtén los últimos cambios de `upstream`:
```bash
git checkout main
git pull upstream main
```
3. Create a new topic branch (off the `main` branch) to contain your feature,
change, or fix:
3. Crea una nueva rama temática (desde la rama `main`) para contener tu función, cambio o corrección:
```bash
git checkout -b <topic-branch-name>
git checkout -b <nombre-de-la-rama-temática>
```
4. Commit your changes in logical chunks. Please adhere to these
[git commit message guidelines](https://conventionalcommits.org/) or your
code is unlikely be merged into the main project. Use Git's
[interactive rebase](https://help.github.com/articles/about-git-rebase/)
feature to tidy up your commits before making them public.
4. Realiza tus cambios en fragmentos lógicos. Por favor, sigue estas [pautas de mensajes de confirmación de Git](https://conventionalcommits.org/) o es posible que tu código no se fusione en el proyecto principal. Utiliza la función de [rebase interactivo de Git](https://help.github.com/articles/about-git-rebase/) para organizar tus confirmaciones antes de hacerlas públicas.
5. Locally merge (or rebase) the upstream dev branch into your topic branch:
5. Fusiona (o rebasea) localmente la rama de desarrollo de `upstream` en tu rama temática:
```bash
git pull [--rebase] upstream main
```
6. Push your topic branch up to your fork:
6. Sube tu rama temática a tu bifurcación:
```bash
git push origin <topic-branch-name>
git push origin <nombre-de-la-rama-temática>
```
7. [Open a Pull Request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
with a clear title and description.
7. [Abre una solicitud de extracción](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork) con un título y una descripción claros.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
license your work under the terms of the
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
**IMPORTANTE**: Al enviar un parche, aceptas permitir a los propietarios del proyecto otorgar una licencia a tu trabajo bajo los términos de la [GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
## Collaborating guidelines
## Pautas de colaboración
There are few basic rules to ensure high quality of the project:
Existen algunas reglas básicas para garantizar la alta calidad del proyecto:
- Before merging, a PR requires at least two approvals from the collaborators
unless it's an architectural change, a large feature, etc. If it is, then at
least 50% of the core team have to agree to merge it, with every team member
having a full veto right. (i.e. every single one can block any PR)
- A PR should remain open for at least two days before merging (does not apply
for trivial contributions like fixing a typo). This way everyone has enough
time to look into it.
- Antes de fusionar, una solicitud de extracción requiere al menos dos aprobaciones de los colaboradores, a menos que sea un cambio arquitectónico, una función grande, etc. Si es así, al menos el 50% del equipo principal debe estar de acuerdo en fusionarlo, y cada miembro del equipo tiene pleno derecho de veto. (es decir, cada uno puede bloquear cualquier solicitud de extracción)
- Una solicitud de extracción debe permanecer abierta al menos dos días antes de fusionarse (no se aplica a contribuciones triviales como corregir un error tipográfico). De esta manera, todos tienen suficiente tiempo para revisarla.
You are always welcome to discuss and propose improvements to this guideline.
Siempre eres bienvenido a discutir y proponer mejoras a estas pautas.

View File

@ -1,45 +1,40 @@
---
title: Development setup
title: Configuración de desarrollo
sidebarDepth: 3
---
# Setup your development environment
# Configurar tu entorno de desarrollo
## Introduction
## Introducción
Castopod is a web app based on the `php` framework
Castopod es una aplicación web basada en el framework `php`
[CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
Utilizamos [Docker](https://www.docker.com/) para configurar rápidamente un entorno de desarrollo. Se incluyen un archivo `docker-compose.yml` y `Dockerfile` en la carpeta raíz del proyecto para ayudarte a iniciar tu contribución.
> You don't need any prior knowledge of Docker to follow the next steps.
> However, if you wish to use your own environment, feel free to do so!
> No necesitas ningún conocimiento previo de Docker para seguir los siguientes pasos. Sin embargo, si deseas utilizar tu propio entorno, siéntete libre de hacerlo.
## Setup instructions
## Instrucciones de configuración
### 1. Pre-requisites
### 1. Pre-requisitos
0. Install [docker](https://docs.docker.com/get-docker).
0. Instala [docker](https://docs.docker.com/get-docker).
1. Clone Castopod project by running:
1. Clona el proyecto de Castopod ejecutando:
```bash
git clone https://code.castopod.org/adaures/castopod.git
```
2. Create a `.env` file with the minimum required config to connect the app to
the database and use redis as a cache handler:
2. Crea un archivo `.env` con la configuración mínima requerida para conectar la aplicación a la base de datos y usar redis como controlador de caché:
```ini
CI_ENVIRONMENT="development"
# If set to development, you must run `npm run dev` to start the static assets server
# Si se establece en development, debes ejecutar `npm run dev` para iniciar el servidor de activos estáticos
vite.environment="development"
# By default, this is set to true in the app config.
# For development, this must be set to false as it is
# on a local environment
# Por defecto, esto se establece en true en la configuración de la aplicación.
# Para desarrollo, debe establecerse en false ya que está en un entorno local
app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/"
@ -56,368 +51,94 @@ to help you kickstart your contribution.
cache.handler="redis"
cache.redis.host = "redis"
# You may not want to use redis as your cache handler
# Comment/remove the two lines above and uncomment
# the next line for file caching.
# Es posible que no desees utilizar redis como controlador de caché
# Comenta/elimina las dos líneas anteriores y descomenta
# la siguiente línea para el almacenamiento en caché de archivos.
#cache.handler="file"
```
> _NB._ You can tweak your environment by setting more environment variables
> in your custom `.env` file. See the `env` for examples or the
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
> for more info.
> _NB._ Puedes ajustar tu entorno estableciendo más variables de entorno en tu archivo `.env` personalizado. Consulta el archivo `env` para ver ejemplos o la [Guía del usuario de CodeIgniter4](https://codeigniter.com/user_guide/index.html) para obtener más información.
3. (for docker desktop) Add the repository you've cloned to docker desktop's
`Settings` > `Resources` > `File Sharing`
3. (para Docker Desktop) Agrega el repositorio que has clonado a "Settings" > "Resources" > "File Sharing" de Docker Desktop.
### 2. (recommended) Develop inside the app Container with VSCode
### 2. (Recomendado) Desarrolla dentro del contenedor de la aplicación con VSCode
If you're working in VSCode, you can take advantage of the `.devcontainer/`
folder. It defines a development environment (dev container) with preinstalled
requirements and VSCode extensions so you don't have to worry about them. All
required services will be loaded automagically! 🪄
Si estás trabajando en VSCode, puedes aprovechar la carpeta `.devcontainer/`. Define un entorno de desarrollo (contenedor de desarrollo) con los requisitos preinstalados y las extensiones de VSCode para que no tengas que preocuparte por ellos. ¡Todos los servicios necesarios se cargarán automáticamente! 🪄
1. Install the VSCode extension
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
1. Instala la extensión de VSCode [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).
2. `Ctrl/Cmd + Shift + P` > `Open in container`
> The VSCode window will reload inside the dev container. Expect several
> minutes during first load as it is building all necessary services.
> La ventana de VSCode se recargará dentro del contenedor de desarrollo. Espera varios minutos durante la primera carga, ya que se están compilando todos los servicios necesarios.
**Note**: The dev container will start by running Castopod's php server.
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
**Nota**: El contenedor de desarrollo se iniciará ejecutando el servidor php de Castopod. Durante el desarrollo, deberás iniciar el servidor de desarrollo de [Vite](https://vitejs.dev) para compilar el código typescript y los estilos:
```bash
# run Vite dev server
# ejecuta el servidor de desarrollo de Vite
npm run dev
```
If there is any issue with the php server not running, you can restart them
using the following commands:
Si hay algún problema con el servidor php que no se está ejecutando, puedes reiniciarlos utilizando los siguientes comandos:
```bash
# run Castopod server
# ejecuta el servidor de Castopod
php spark serve - 0.0.0.0
```
3. You're all set! 🎉
3. ¡Listo! 🎉
You're now **inside the dev container**, you may use the VSCode console
(`Terminal` > `New Terminal`) to run any command:
Ahora estás **dentro del contenedor de desarrollo**. Puedes usar la consola de VSCode (`Terminal` > `New Terminal`) para ejecutar cualquier comando:
```bash
# PHP is installed
# PHP está instalado
php -v
# Composer is installed
# Composer está instalado
composer -V
# npm is installed
# npm está instalado
npm -v
# git is installed
# git está instalado
git version
```
For more info, see
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
Para obtener más información, consulta la documentación de [VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers).
### 3. Start hacking
### 3. Comienza a programar
You're all set! Start working your magic by updating the project's files! Help
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
¡Todo está listo! ¡Comienza a trabajar en tus cambios en los archivos del proyecto! Siéntete libre de consultar la [Guía del usuario de CodeIgniter4](https://codeigniter.com/user_guide/index.html) para obtener más información.
To see your changes, go to:
Para ver tus cambios, ve a:
- `http://localhost:8080/` for the Castopod app
- `http://localhost:8888/` for the phpmyadmin interface:
- `http://localhost:8080/` para la aplicación de Castopod
- `http://localhost:8888/` para la interfaz de phpMyAdmin:
- username: **castopod**
- password: **castopod**
- nombre de usuario: **castopod**
- contraseña: **castopod**
### 2-alt. Develop outside the app container
### 2-alternativa. Desarrolla fuera del contenedor de la aplicación
You do not wish to use the VSCode devcontainer? No problem!
¿No deseas utilizar el contenedor de desarrollo de VSCode? ¡No hay problema!
1. Start docker containers manually:
1. Inicia los contenedores de Docker manualmente:
Go to project's root folder and run:
Ve a la carpeta raíz del proyecto y ejecuta:
```bash
# starts all services declared in docker-compose.yml file
# -d option starts the containers in the background
# inicia todos los servicios declarados en el archivo docker-compose.yml
# la opción -d inicia los contenedores en segundo plano
docker-compose up -d
# See all running processes (you should see 3 processes running)
# Ver todos los procesos en ejecución (deberías ver 3 procesos en ejecución)
docker-compose ps
# Alternatively, you can check all docker processes
# Alternativamente, puedes verificar todos los procesos de Docker
docker ps -a
```
> The `docker-compose up -d` command will boot 4 containers in the
> background:
> El comando `docker-compose up -d` iniciará 4 contenedores en segundo plano:
>
> - `castopod_app`: a php based container with Castopod requirements
> installed
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries
> and pages caching
> - `castopod_mariadb`: a [mariadb](https://mariadb.org/) server for
> persistent data
> - `castopod_phpmyadmin`: a phpmyadmin server to visualize the mariadb
> database.
2. Run any command inside the containers by prefixing them with
`docker-compose run --rm app`:
```bash
# use PHP
docker-compose run --rm app php -v
# use Composer
docker-compose run --rm app composer -V
# use npm
docker-compose run --rm app npm -v
# use git
docker-compose run --rm app git version
```
---
## Going Further
### Install Castopod's dependencies
1. Install php dependencies with [Composer](https://getcomposer.org/)
```bash
composer install
```
::: info Note
The php dependencies aren't included in the repository. Composer will check
the `composer.json` and `composer.lock` files to download the packages with
the right versions. The dependencies will live under the `vendor/` folder.
For more info, check out the
[Composer documentation](https://getcomposer.org/doc/).
:::
2. Install javascript dependencies with [npm](https://www.npmjs.com/)
```bash
npm install
```
::: info Note
The javascript dependencies aren't included in the repository. Npm will check
the `package.json` and `package.lock` files to download the packages with the
right versions. The dependencies will live under the `node_module` folder.
For more info, check out the [NPM documentation](https://docs.npmjs.com/).
:::
3. Generate static assets:
```bash
# build all static assets at once
npm run build:static
# build specific assets
npm run build:icons
npm run build:svg
```
::: info Note
The static assets generated live under the `public/assets` folder, it
includes javascript, styles, images, fonts, icons and svg files.
:::
### Initialize and populate database
::: tip Tip
You may skip this section if you go through the install wizard (go to
`/cp-install`).
:::
1. Build the database with the migrate command:
```bash
# loads the database schema during first migration
php spark migrate -all
```
You may need to undo the migration (rollback):
```bash
# rolls back database schema (deletes all tables and their content)
php spark migrate:rollback
```
2. Populate the database with the required data:
```bash
# Populates all required data
php spark db:seed AppSeeder
```
You may choose to add data separately:
```bash
# Populates all categories
php spark db:seed CategorySeeder
# Populates all Languages
php spark db:seed LanguageSeeder
# Populates all podcasts platforms
php spark db:seed PlatformSeeder
# Populates all Authentication data (roles definition…)
php spark db:seed AuthSeeder
```
3. (optionnal) Populate the database with test data:
- Populate test data (login: admin / password: AGUehL3P)
```bash
php spark db:seed TestSeeder
```
- Populate with fake podcast analytics:
```bash
php spark db:seed FakePodcastsAnalyticsSeeder
```
- Populate with fake website analytics:
```bash
php spark db:seed FakeWebsiteAnalyticsSeeder
```
TestSeeder will add an active superadmin user with the following credentials:
- username: **admin**
- password: **AGUehL3P**
### Useful docker / docker-compose commands
- Monitor the app container:
```bash
docker-compose logs --tail 50 --follow --timestamps app
```
- Interact with redis server using included redis-cli command:
```bash
docker exec -it castopod_redis redis-cli
```
- Monitor the redis container:
```bash
docker-compose logs --tail 50 --follow --timestamps redis
```
- Monitor the mariadb container:
```bash
docker-compose logs --tail 50 --follow --timestamps mariadb
```
- Monitor the phpmyadmin container:
```bash
docker-compose logs --tail 50 --follow --timestamps phpmyadmin
```
- Restart docker containers:
```bash
docker-compose restart
```
- Destroy all containers, opposite of `up` command:
```bash
docker-compose down
```
- Rebuild app container:
```bash
docker-compose build app
```
Check [docker](https://docs.docker.com/engine/reference/commandline/docker/) and
[docker-compose](https://docs.docker.com/compose/reference/) documentations for
more insights.
## Known issues
### Allocation failed - JavaScript heap out of memory
This happens when running `npm install`.
👉 By default, docker might not have access to enough RAM. Allocate more memory
and run `npm install` again.
### (Linux) Files created inside container are attributed to root locally
You may use Linux user namespaces to fix this on your machine:
::: info Note
Replace "username" with your local username
:::
1. Go to `/etc/docker/daemon.json` and add:
```json
{
"userns-remap": "username"
}
```
2. Configure the subordinate uid/guid:
```bash
# in /etc/subuid
username:1000:1
username:100000:65536
```
```bash
# in /etc/subgid
username:1000:1
username:100000:65536
```
3. Restart docker:
```bash
sudo systemctl restart docker
```
4. That's it! Now, the root user in the container will be mapped to the user on
your local machine, no more permission issues! 🎉
You can check
[this great article](https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/)
to know more about how it works.
> - `castopod_app`: un contenedor basado en php con los requisitos de Castopod instalados
> - `castopod_redis`: una base de datos [redis](https://redis.io/) para manejar consultas
> y almacenamiento en caché de páginas
> - `cast

View File

@ -1,4 +1,4 @@
{
"label": "Getting Started",
"label": "Comenzando",
"position": 2
}

View File

@ -1,88 +1,87 @@
---
title: Autenticación & Autenticación
title: Autenticación y Autorización
sidebarDepth: 3
---
# Autenticación & Autenticación
# Autenticación y Autorización
Castopod gestiona la autenticación y autorización usando `codeignitor/escudo`
emparejado con reglas personalizadas. Los roles y permisos se definen en dos
niveles:
Castopod maneja la autenticación y autorización mediante
`codeigniter/shield` y reglas personalizadas. Los roles y permisos se definen en dos niveles:
1. [por instancia](#1-instance-wide-roles-and-permissions)
2. [por podcast](#2-per-podcast-roles-and-permissions)
1. [A nivel de instancia](#1-roles-y-permisos-en-toda-la-instancia)
2. [Por podcast](#2-roles-y-permisos-por-podcast)
## 1. Roles por instancia y permisos
## 1. Roles y permisos en toda la instancia
### Roles de instancia
### Roles en la instancia
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
<!-- AUTH-INSTANCE-ROLES-LIST:START - No elimines ni modifiques esta sección -->
| roles | descripción | permisos |
| ------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------ |
| Super administrador | Tiene control completo sobre Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Administrador | Gestiona el contenido de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Usuarios generales de Castopod. | admin.access |
| rol | descripción | permisos |
| -------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------- |
| Super admin | Tiene control total sobre Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Gestor | Maneja el contenido de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Usuarios generales de Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Permisos de instancia
### Permisos en la instancia
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - No elimines ni modifiques esta sección -->
| permisos | descripción |
| ----------------------- | ------------------------------------------------------------------------------ |
| admin.access | Puedes acceder al área de administración de Castopod. |
| admin.settings | Puede acceder a la configuración de Castopod. |
| users.manage | Puede administrar usuarios de Castopod. |
| persons.manage | Puede administrar personas. |
| pages.manage | Puede administrar páginas. |
| podcasts.view | Puede ver todos los podcasts. |
| podcasts.create | Puede crear nuevos podcasts. |
| podcasts.import | Puede importar podcasts. |
| fediverse.manage-blocks | Puedes bloquear la interacción de actores/dominios del fediverso con Castopod. |
| permiso | descripción |
| ---------------------- | --------------------------------------------------------------------- |
| admin.access | Puede acceder al área de administración de Castopod. |
| admin.settings | Puede acceder a la configuración de Castopod. |
| users.manage | Puede gestionar usuarios de Castopod. |
| persons.manage | Puede gestionar personas. |
| pages.manage | Puede gestionar páginas. |
| podcasts.view | Puede ver todos los podcasts. |
| podcasts.create | Puede crear nuevos podcasts. |
| podcasts.import | Puede importar podcasts. |
| fediverse.manage-blocks| Puede bloquear actores/dominios de fediverso de interactuar con Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Permisos y roles por podcast
## 2. Roles y permisos por podcast
### Roles por podcast
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
<!-- AUTH-PODCAST-ROLES-LIST:START - No elimines ni modifiques esta sección -->
| roles | descripción | permisos |
| ------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Administrador | Tiene el control completo del podcast #{id}. | \* |
| Editor | Gestiona el contenido y las publicaciones del podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Autor | Gestiona el contenido del podcast #{id} pero no puede publicarlo. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Invitado | Colaborador general del podcast #{id}. | view, episodes.view |
| rol | descripción | permisos |
| -----------| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Tiene control total sobre el podcast #{id}. | \* |
| Editor | Gestiona el contenido y las publicaciones del podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Autor | Gestiona el contenido del podcast #{id}, pero no puede publicar.| view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Invitado | Contribuidor general del podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Permisos por podcast
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - No elimines ni modifiques esta sección -->
| permisos | descripción |
| ---------------------------- | -------------------------------------------------------------------------------------------------- |
| view | Puede ver el panel de control y análisis del podcast #{id}. |
| edit | Puede editar podcast #{id}. |
| delete | Puede borrar el podcast #{id}. |
| manage-import | Puede sincronizar el podcast importado #{id}. |
| manage-persons | Puede administrar las suscripciones del podcast #{id}. |
| manage-subscriptions | Puede administrar las suscripciones del podcast #{id}. |
| manage-contributors | Puede administrar colaboradores del podcast #{id}. |
| manage-platforms | Puede establecer/eliminar enlaces a la plataforma del podcast #{id}. |
| manage-publications | Puede publicar el podcast #{id}. |
| manage-notifications | Puede ver y marcar las notificaciones como leídas para podcast #{id}. |
| interact-as | Puede interactuar como el podcast #{id} para favoritar, compartir o responder a las publicaciones. |
| episodes.view | Puede ver el panel de control y analíticas del episodio #{id}. |
| episodes.create | Puede crear episodios para el podcast #{id}. |
| episodes.edit | Puede editar episodios #{id}. |
| episodes.delete | Puede borrar el podcast #{id}. |
| episodes.manage-persons | Puede administrar las suscripciones del podcast #{id}. |
| episodes.manage-clips | Puedes administrar video clips o sonidos del podcast #{id}. |
| episodes.manage-publications | Puede publicar el podcast #{id}. |
| episodes.manage-comments | Puede crear/eliminar los comentarios de episodio del podcast #{id}. |
| permiso | descripción |
| -------------------------------- | ----------------------------------------------------------------------------------------- |
| ver | Visualizar el panel de control y análisis del podcast #{id}. |
| editar | Puede editar el podcast #{id}. |
| eliminar | Puede eliminar el podcast #{id}. |
| gestionar-importaciones | Puede sincronizar el podcast importado #{id}. |
| gestionar-personas | Permite gestionar las suscripciones al podcast #{id}. |
| gestionar-suscriptores | Permite gestionar las suscripciones al podcast #{id}. |
| gestionar-contribuidores | Permite gestionar los contribuidores del podcast #{id}. |
| gestionar-plataformas | Puede configurar/eliminar los enlaces a plataformas del podcast #{id}. |
| gestionar-publicaciones | Puede publicar el podcast #{id}. |
| gestionar-notificaciones | Puede ver y marcar las notificaciones como leídas para el podcast #{id}. |
| interactuar-como | Puede interactuar como el podcast #{id} para agregar, compartir o responder mensajes. |
| episodes.view | Puede ver el panel de control y análisis del podcast #{id}. |
| crear-episodios | Puede crear episodios para el podcast #{id}. |
| editar-episodios | Puede editar el podcast #{id}. |
| eliminar-episodios | Puede eliminar el podcast #{id}. |
| episodes.manage-persons | Permite gestionar las suscripciones al podcast #{id}. |
| episodes.manage-clips | Permite gestionar clips de video o partes de audio del podcast #{id}. |
| episodes.manage-publications | Puede publicar el podcast #{id}. |
| episodes.manage-comments | Puede crear/eliminar comentarios de episodios del podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -5,31 +5,24 @@ sidebarDepth: 3
# Imágenes oficiales de Docker
Castopod lanza 3 imágenes Docker al Docker Hub durante su proceso de
construcción automatizada:
Castopod envía 3 imágenes de Docker al Hub de Docker durante su proceso de construcción automatizada:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): una
imagen completa de castopod que utiliza una unidad nginx
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el paquete
completo de la aplicación con todas las dependencias de Castopod
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una
configuración de Nginx para Castopod
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): una imagen de Castopod todo en uno que utiliza nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el paquete de la aplicación con todas las dependencias de Castopod
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una configuración de Nginx para Castopod
Adicionalmente, Castopod requiere una base de datos compatible con MySQL.
También se puede añadir una base de datos Redis como gestor de caché.
Además, Castopod requiere una base de datos compatible con MySQL. Se puede añadir una base de datos Redis como administrador de caché.
## Etiquetas admitidas
- `develop` [unstable], última rama construída de desarrollo
- `beta` [stable], última versión beta
- `latest` [stable], última versión
- `1.x.x` [stable], versión específica de compilación (desde `1.0.0`)
- `dev` [inestable], la última versión de la rama de desarrollo
- `beta` [estable], última versión beta
- `1.x.x` [estable], versión específica (desde `1.0.0`)
## Ejemplo de uso
1. Instalar [docker](https://docs.docker.com/get-docker/) y
[docker-compose](https://docs.docker.com/compose/install/)
2. Crear un archivo `docker-compose.yml` con lo siguiente:
1. Instala [docker](https://docs.docker.com/get-docker/) y [docker-compose](https://docs.docker.com/compose/install/)
2. Crea un archivo `docker-compose.yml` con los siguientes elementos:
```yml
version: "3.7"
@ -87,14 +80,11 @@ También se puede añadir una base de datos Redis como gestor de caché.
castopod-db:
```
Debes adaptar algunas variables a tus necesidades (ej. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` y `CP_ANALYTICS_SALT`).
Debes adaptar algunas variables según tus necesidades (por ejemplo, `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` y `CP_ANALYTICS_SALT`).
3. Configura un servidor proxy inverso para TLS (SSL/HTTPS).
3. Configura un proxy inverso para TLS (SSL/HTTPS)
TLS es imprescindible para que ActivityPub funcione. Este trabajo puede ser
fácilmente manejado por un proxy inverso, por ejemplo con
[Caddy](https://caddyserver.com/):
TLS es obligatorio para que funcione ActivityPub. Este trabajo se puede manejar fácilmente mediante un proxy inverso, por ejemplo con [Caddy](https://caddyserver.com/):
```
#castopod
@ -103,58 +93,56 @@ También se puede añadir una base de datos Redis como gestor de caché.
}
```
4. Ejecuta `docker-compose -d`, espera a que se inicie y ve a
`https://castopod.mi_dominio.com/cp-install` para terminar de configurar
Castopod!
4. Ejecuta `docker-compose up -d`, espera a que se inicialice en `https://castopod.example.com/cp-install` para completar la configuración de Castopod.
5. Todo listo, empieza a hacer podcasting! 🎙️🚀 🎙️🚀
5. ¡Estás listo, comienza a hacer podcasts! 🎙️🚀
## Variables de Entorno
## Variables de entorno
- **castopod/castopod** and **castopod/app**
- **castopod/castopod** y **castopod/app**
| Nombre de la Variable | Tipo (`predeterminado`) | Por defecto |
| ------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_URLBASE`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` o `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`HOST_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` o `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Nombre de la variable | Tipo (`default`) | Valor predeterminado |
| ---------------------------------- | ---------------------- | -------------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` o `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` o `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (con sufijo) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (con sufijo) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
- **castopod/servidor web**
- **castopod/web-server**
| Nombre de la variable | Tipo | Por defecto |
| ---------------------- | --------------------- | ----------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Nombre de la variable | Tipo | Valor predeterminado |
| --------------------- | --------------------- | -------------------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (con sufijo) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |

View File

@ -5,221 +5,121 @@ sidebarDepth: 3
# ¿Cómo instalar Castopod?
Castopod está pensado para ser fácil de instalar. Ya sea usando un alojamiento
dedicado o compartido, puedes instalarlo en la mayoría de servidores web
compatibles con PHP-MySQL.
Castopod ha sido diseñado para ser fácil de instalar. Ya sea que estés utilizando un alojamiento dedicado o compartido, puedes instalarlo en la mayoría de los servidores web compatibles con PHP-MySQL.
::: tip Nota
¡Hemos publicado imágenes oficiales de Docker para Castopod!
Si prefieres usar Docker, puedes saltarte esto e ir directamente a la
[documentación sobre docker](./docker.md) para Castopod.
Si prefieres utilizar Docker, puedes omitir esta parte e ir directamente a la [documentación de Docker](./docker.md) para Castopod.
:::
## Requisitos
## Requisitos previos
- PHP v8.1 only
- MySQL versión 5.7 o superior o MariaDB versión 10.2 o superior
- Soporte HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
- PHP v8.1 solamente
- Versión de MySQL 5.7 o superior o versión de MariaDB 10.2 o superior
- Soporte de HTTPS
- Un [reloj sincronizado con NTP](https://wiki.debian.org/NTP) para validar las solicitudes entrantes de federación
### PHP v8.1 only
### PHP v8.1 solamente
PHP version 8.1 is required, with the following extensions installed:
Se requiere la versión 8.1 de PHP, con las siguientes extensiones instaladas:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) con librerias
**JPEG**, **PNG** y **WEBP**.
- [exif](https://www.php.net/manual/en/exif.installation.php)
- [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) con bibliotecas **JPEG**, **PNG** y **WEBP**.
- [exif](https://www.php.net/manual/fr/exif.installation.php)
Además, asegúrate de que las siguientes extensiones están habilitadas en tu PHP:
Además, asegúrate de que las siguientes extensiones estén activadas en tu PHP:
- json (habilitada por defecto - no la desactives)
- xml (habilitada por defecto - no la desactives)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
- json (activado por defecto - no lo desactives)
- xml (activado por defecto - no lo desactives)
- [mysqlnd](https://www.php.net/manual/fr/mysqlnd.install.php)
### Base de datos compatible con MySQL
> Se recomienda usar [MariaDB](https://mariadb.org).
> Recomendamos utilizar [MariaDB](https://mariadb.org).
::: warning Alerta
::: warning Advertencia
Castopod solo funciona con base de datos compatibles con MySQL 5.7 o superior.
No funcionará por ejemplo con la version previa MySQL v5.6, ya que su vida útil
terminó el 5 de febrero de 2021.
Castopod solo funciona con bases de datos MySQL 5.7 o versiones más recientes. Las versiones 5.6 (cuyo soporte finalizó el 5 de febrero de 2021) o anteriores de MySQL no funcionarán.
:::
Necesitarás la dirección/nombre del servidor (hostname), el nombre de la base de
datos, el usuario y la contraseña para completar el proceso de instalación. Si
no cuentas con esta información, contacta con el administrador de tu servidor.
Necesitarás el nombre de host del servidor, el nombre de la base de datos, el nombre de usuario y la contraseña para completar el proceso de instalación. Si no tienes esta información, contacta a tu administrador.
#### Privilegios
#### Permisos de acceso
El usuario debe tener al menos estos privilegios en la base de datos para que
Castopod funcione: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`,
`SELECT`, `UPDATE`, `REFERENCES`, `CREATE VIEW`.
El usuario debe tener al menos los siguientes permisos de acceso a la base de datos para que Castopod funcione: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`,`INSERT`, `SELECT`, `UPDATE`,`REFERENCES`, `CREATE VIEW`.
### (Opcional) FFmpeg v4.1.8 o superior para poder generar clips de vídeo (recortes de vídeo)
### (Opcional) FFmpeg v4.1.8 o superior para clips de vídeo
Es necesario tener instalado [FFmpeg](https://www.ffmpeg.org/) versión 4.1.8 o
superior si desea generar recorte de vídeos. Se debe instalar las siguientes
extensiones:
Se requiere [FFmpeg](https://www.ffmpeg.org/) versión 4.1.8 o superior si deseas generar Clips de Vídeo. Deben estar instaladas las siguientes extensiones:
- Librería **FreeType 2** para
[gd](https://www.php.net/manual/en/image.installation.php).
- Biblioteca **FreeType 2** para [gd](https://www.php.net/manual/en/image.installation.php).
### (Opcional) Otras recomendaciones
- Redis para mejores rendimientos de caché.
- CDN para almacenamiento en caché de archivos estáticos y mejores rendimientos.
- Pasarela de correo para recuperación de contraseñas olvidadas.
- Redis para un mejor rendimiento del caché.
- CDN para la caché de archivos estáticos y un mejor rendimiento.
- Pasarela de correo electrónico para contraseñas olvidadas.
## Instrucciones de instalación
### Pre-requisitos
### Requisitos previos
0. Consigue un servidor web que cuente con todos los [requisitos](#requirements)
recomendados.
1. Crea una base de datos MySQL para Castopod con un usuario que tenga acceso y
privilegios de modificación (para más información, ver
[base de datos compatible con MySQL](#mysql-compatible-database)).
2. Activa HTTPS en tu dominio web mediante un _certificado SSL_.
3. Descarga y descomprime en tu servidor la última versión de
[Castopod](https://castopod.org/), si aún no lo has hecho.
- ⚠️ Edita la configuración de tu servidor para que el "document root" sea la
subcarpeta `castopod/public/`.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
0. Obtén un servidor web con [los requisitos previos](#requisitos) instalados.
1. Crea una base de datos MySQL para Castopod con un usuario que tenga los permisos de acceso y modificación (para obtener más información, consulta [Base de datos compatible con MySQL](#base-de-datos-compatible-con-mysql)).
2. Activa HTTPS en tu dominio con un _certificado SSL_.
3. Descarga y descomprime el último [paquete de Castopod](https://castopod.org/) en el servidor web si aún no lo has hecho.
- ⚠️ Haz que la raíz del documento del servidor web apunte a la subcarpeta `public/` de la carpeta `castopod`.
4. Agrega **tareas programadas** a tu servidor web para varios procesos en segundo plano (reemplaza las rutas según corresponda):
```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1
* * * * * /ruta/hacia/php /ruta/hacia/castopod/spark tasks:run >> /dev/null 2>&1
```
**Note** - If you do not add this cron task, the following Castopod features
will not work:
**Nota** - Si no añades esta tarea programada, las siguientes características de Castopod no funcionarán:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
[WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
- Importar un podcast desde un feed RSS existente
- Transmitir actividades sociales a tus seguidores en el federado
- Transmitir episodios a hubs abiertos utilizando [WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generación de clips de vídeo - [requiere FFmpeg](#opcional-ffmpeg-v418-o-superior-para-clips-de-v%C3%ADdeo)
### (recomendado) Asistente web de instalación
### (Método recomendado) Asistente de instalación
1. Ejecuta el script de instalación de Castopod visitando en tu navegador web
esta dirección: `https://tu_nombre_de_dominio.com/cp-install`
2. Sigue las instrucciones en pantalla.
3. ¡Empieza a hacer podcasting!
1. Ejecuta el script de instalación de Castopod visitando la página de Asistente de Instalación (`https://tu_nombre_de_dominio.com/cp-install`) en tu navegador web favorito.
2. Sigue las instrucciones que se muestran.
3. ¡Comienza a hacer podcast!
::: info Nota
:::info Nota
El script de instalación crea un archivo `.env` en la raíz de castopod. If you
cannot go through the install wizard, you can create and edit the `.env` file
manually based on the `.env.example` file.
El script de instalación crea un archivo `.env` en la raíz del paquete. Si no puedes usar el asistente de instalación, puedes crear y editar manualmente el archivo `.env` basándote en el archivo `.env.example`.
:::
### Configuración de Correo Electrónico/SMTP
### Configuración de correo electrónico/SMTP
La configuración del correo electrónico es necesaria para que algunas
características funcionen correctamente (por ejemplo, recuperar su contraseña
olvidada, enviando instrucciones a los suscriptores premium, …)
La configuración de correo electrónico es necesaria para que algunas características funcionen correctamente (por ejemplo, recuperar tu contraseña olvidada, enviar instrucciones a suscriptores premium, ...)
Puedes añadir tu configuración de correo electrónico en el archivo `.env` de tu
instancia así:
Puedes agregar la configuración de correo electrónico en el archivo `.env` de tu instancia de la siguiente manera:
```ini
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
email.fromEmail="tu_dirección_de_correo_electrónico"
email.SMTPHost="tu_host_smtp"
email.SMTPUser="tu_usuario_smtp"
email.SMTPPass="tu_contraseña_smtp"
```
#### Opciones de configuración de email
| Nombre de la variable | Tipo | Predeterminado |
| --------------------- | -------------------- | -------------- |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined` |
| **`SMTPPass`** | string | `undefined` |
| **`SMTPPort`** | number | `25` |
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
#### Opciones de configuración de correo electrónico
### Media storage
By default, files are saved to the `public/media` folder using the file system.
If you need to relocate the `media` folder to a different location, you can
specify it in your `.env` file as shown below:
```ini
# […]
media.root="media"
media.storage="/mnt/storage"
```
In this example, the files will be saved to the /mnt/storage/media folder. Make
sure to also update your web server configuration to reflect this change.
### S3
If you prefer storing your media files on an S3 compatible storage, you may
specify it in your `.env`:
```ini
# […]
media.fileManager="s3"
media.s3.endpoint="your_s3_host"
media.s3.key="your_s3_key"
media.s3.secret="your_s3_secret"
media.s3.region="your_s3_region"
```
#### S3 config options
| Nombre de variable | Type | Default |
| ----------------------- | ------- | ----------- |
| **`endpoint`** | string | `undefined` |
| **`key`** | string | `undefined` |
| **`secret`** | string | `undefined` |
| **`region`** | string | `undefined` |
| **`bucket`** | string | `castopod` |
| **`protocol`** | number | `undefined` |
| **`pathStyleEndpoint`** | boolean | `false` |
| **`keyPrefix`** | string | `undefined` |
## Paquetes de la comunidad
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
### Install with YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Instalar Castopod con YunoHost." class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github
Repo</a>
</div>
| Nombre de variable | Tipo | Valor por defecto |
| ----------------- | -------------------- | ----------------- |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost

View File

@ -2,26 +2,24 @@
title: Seguridad
---
# Problemas de seguridad
# Preguntas de seguridad
Castopod está construido sobre [CodeIgniter4](https://codeigniter.com/), un
framework de PHP que alienta
Castopod está desarrollado en [CodeIgniter4](https://codeigniter.com/), un
framework PHP que fomenta
[buenas prácticas de seguridad](https://codeigniter.com/user_guide/concepts/security.html).
Para maximizar la seguridad de su instancia y prevenir cualquier ataque
malicioso, le recomendamos que actualice todos los permisos de sus archivos
Castopod después de la instalación o actualizaciones (para evitar cualquier
error de permiso previo):
Para garantizar la máxima seguridad de tu instancia y evitar ataques maliciosos,
recomendamos actualizar los permisos de los archivos de Castopod después de la
instalación y cada actualización (y evitar cualquier error de acceso incorrecto a los archivos):
- `writable/` carpeta debe ser **legible** y **escribible**.
- `public/media/` carpeta debe ser **legible** y **escribible**.
- cualquier otro archivo debe establecerse a **solo lectura**.
- La carpeta `writable/` debe ser accesible en **lectura** y **escritura**.
- La carpeta `public/media/` debe ser accesible en **lectura** y **escritura**.
- cualquier otro archivo debe ser accesible solo en **lectura**.
Por ejemplo, si estás usando Apache o NGINX con Ubuntu puedes hacer lo
siguiente:
Por ejemplo, si estás utilizando Apache o NGINX con Ubuntu, puedes ejecutar los siguientes comandos:
```bash
sudo chown -R root:root /path/to/castopod
sudo chown -R www-data:www-data /path/to/castopod/writable
sudo chown -R www-data:www-data /path/to/castopod/public/media
sudo chown -R root:root /ruta/a/castopod
sudo chown -R www-data:www-data /ruta/a/castopod/writable
sudo chown -R www-data:www-data /ruta/a/castopod/public/media
```

View File

@ -3,111 +3,96 @@ title: Actualización
sidebarDepth: 3
---
# ¿Cómo actualizar Castopod?
# ¿Cómo instalar Castopod?
Después de instalar Castopod, es posible que quieras actualizar tu instancia a
la última versión para disfrutar de las últimas características ✨, correcciones
de errores 🐛 y mejoras de rendimiento ⚡.
Después de instalar Castopod, puedes actualizar tu instancia a la última versión para disfrutar de las últimas funcionalidades ✨, correcciones de errores 🐛 y mejoras de rendimiento ⚡.
## Instrucciones de Actualización
## Instrucciones de actualización
0. ⚠️ Antes de cualquier actualización, te recomendamos que respaldes tus
archivos de Castopod y base de datos.
0. ⚠️ Antes de actualizar, te recomendamos encarecidamente que hagas una copia de seguridad de tus archivos de Castopod y de la base de datos.
- cf.
[¿Debería hacer una copia de seguridad antes de actualizar?](#should-i-make-a-backup-before-updating)
- ver
[¿Debo hacer una copia de seguridad antes de actualizar?](#¿debo-hacer-una-copia-de-seguridad-antes-de-actualizar)
1. Vaya a la página de
[lanzamientos](https://code.castopod.org/adaures/castopod/-/releases) y vea
si su instancia está actualizada con la última versión de Castopod
1. Ve a la
[página de lanzamientos](https://code.castopod.org/adaures/castopod/-/releases) y
verifica si tu instancia está actualizada con la última versión de Castopod.
- cf.
[¿Dónde puedo encontrar mi versión de Castopod?](#where-can-i-find-my-castopod-version)
- ver
[¿Dónde puedo encontrar la versión de Castopod?](#¿dónde-puedo-encontrar-la-versión-de-castopod)
2. Descargue el último paquete de lanzamiento llamado `Paquete Castopod`, puede
elegir entre los archivos `zip` o `tar.gz`
2. Descarga el paquete de la última versión llamado `Paquete de Castopod`, puedes elegir entre los archivos `zip` o `tar.gz`
- ⚠️ Asegúrate de descargar el paquete de Castopod y **NO** el código fuente
- Ten en cuenta que también puedes descargar el último paquete de
- ⚠️ Asegúrate de descargar el Paquete de Castopod y **NO** el Código Fuente
- Ten en cuenta que también puedes descargar el último paquete desde
[castopod.org](https://castopod.org/)
3. En tu servidor:
- Eliminar todos los archivos excepto `.env` y la carpeta `public/media`
- Copie los nuevos archivos del paquete descargado en su servidor
- Elimina todos los archivos excepto `.env` y `public/media`
- Copia los nuevos archivos del paquete descargado en tu servidor
::: Nota informativa
::: info Nota
Es posible que necesite restablecer los permisos de los archivos después el
proceso de instalación. Compruebe
[preocupaciones de seguridad](./security.md).
Es posible que debas restablecer los permisos de archivo, como se hizo durante el proceso de instalación. Consulta
[Consideraciones de seguridad](./security.md).
:::
4. Actualice su esquema de base de datos desde su `Administrador de Castopod` >
`Acerca de` página o ejecutando:
4. Actualiza el esquema de tu base de datos desde la página `Castopod Admin` > `About` o ejecutando:
```bash
php spark castopod:database-update
```
5. Limpia tu caché en `Administrador de Castopod` > `Ajustes` > `general` >
5. Borra la caché desde la página `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ ¡Disfruta de tu instancia recién instalada, todo listo!
6. ✨¡Disfruta de tu nueva instancia, ¡has terminado!
::: Nota informativa
::: info Nota
Las versiones pueden venir con instrucciones de actualización adicionales (véase
la página de
[lanzamientos](https://code.castopod.org/adaures/castopod/-/releases)).
Es posible que las versiones vengan con instrucciones de actualización adicionales (ver
[página de notas de versión](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[No he actualizado mi instancia en mucho tiempo ¿Qué debo hacer?](#no-he-actualizado-mi-instancia-en-mucho-tiempo-¿qué-debo-hacer)
- ver
[No he actualizado mi instancia en mucho tiempo... ¿Qué debo hacer?](#no-he-actualizado-mi-instancia-en-mucho-tiempo-qué-debo-hacer)
:::
## Actualizaciones totalmente automatizadas
## Actualizaciones completamente automatizadas
> Próximamente...
> Próximamente... 👀
## Preguntas Frecuentes (FAQ)
## Preguntas frecuentes (FAQ)
### ¿Dónde puedo encontrar mi versión de Castopod?
### ¿Dónde puedo encontrar la versión de Castopod?
Ve al panel de administración de Castopod, la versión se muestra en la esquina
inferior izquierda.
Ve a tu panel de administración de Castopod, la versión se muestra en la parte inferior izquierda.
Alternativamente, puedes encontrar la versión en el archivo
`app > Config > Constants.php`.
También puedes encontrar la versión en la aplicación
`> Configuración > Constantes.php` carpeta.
### No he actualizado mi instancia en mucho tiempo ¿Qué debo hacer?
### No he actualizado mi instancia en mucho tiempo... ¿Qué debo hacer?
¡No hay problema! No problem! Just get the latest release as described above.
Simplemente cuando vaya a través de las instrucciones de lanzamiento (4),
realice la actualización secuencialmente, desde el más antiguo hasta el más
reciente.
¡No hay problema! Simplemente obtén la última versión según se describe
arriba. Cuando ejecutes las instrucciones de actualización (paso 4), ejecútalas
secuencialmente, desde la más antigua hasta la más reciente.
> Puede que quieras hacer una copia de seguridad de tu instancia dependiendo del
> tiempo que no hayas actualizado Castopod.
> Deberías hacer una copia de seguridad de tu instancia según la fecha de tu última actualización de Castopod.
Por ejemplo, si estás en `v1.0.0-alpha.42` y te gustaría actualizar a
`v1.0.0-beta.1`:
Por ejemplo, si estás en `v1.0.0-alpha.42` y deseas actualizar a
`v1.0.0-beta.1`:
0. (altamente recomendado) Haga una copia de seguridad de sus archivos y base de
datos.
0. (altamente recomendado) Haz una copia de seguridad de tus archivos y base de datos.
1. Descarga la última versión, sobrescribe tus archivos manteniendo `.env` y
`public/media`.
1. Descarga la última versión, sobrescribe tus archivos y conserva `.env` y `public/media`.
2. Repase las instrucciones de actualización de cada versión secuencialmente (de
más antiguo a más reciente) comenzando con `v1.0.0-alpha. 3`,
`v1.0.0-alpha.44`, `v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
2. Realiza las instrucciones de actualización una por una (desde la más antigua hasta la más reciente).
3. ✨ ¡Disfruta de tu instancia recién instalada, todo listo!
3. ✨¡Tu nueva instancia está lista!
### ¿Debo hacer una copia de seguridad antes de actualizar?
Te aconsejamos que lo hagas, así que no lo pierdas todo si algo sale mal!
Te recomendamos hacerlo, ¡para no perder nada en caso de que algo salga mal!
De manera más general, te aconsejamos hacer copias de seguridad regulares de tus
archivos de Castopod y base de datos para evitar que pierdas todo…
En general, te recomendamos hacer copias de seguridad regularmente de tus archivos de Castopod y de tu base de datos para evitar perderlo todo...

View File

@ -2,306 +2,189 @@
sidebarDepth: 2
---
# Bienvenid@ 👋
# Bienvenido 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod es una plataforma gratuita y de código abierto para hospedar podcasts
hecha para podcasters que quieren involucrar e interactuar más con su audiencia.
Castopod es una plataforma de alojamiento gratuita y de código abierto diseñada para los podcasters que quieren interactuar con su público.
Castopod es fácil de instalar y se ha desarrollado sobre
[CodeIgniter4](https://codeigniter.com/), un potente y muy ligero framework PHP.
Castopod es fácil de instalar y ha sido diseñado con [CodeIgniter4](https://codeigniter.com/), un framework PHP potente y liviano.
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Instalación<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
<a href="/es/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Instalar<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Características
- 🌱 &nbsp;Gratis & de código abierto (licencia AGPL v3).
- 🔐 &nbsp;Centrado en la soberanía de los datos: tu contenido, tu audiencia, y
tus estadísticas te pertenecen a ti y solo a ti.
- 🪄 &nbsp;Funciones de Podcasting 2.0: GUID (interfaz gráfica de usuario),
protección y bloqueo del podcast, transcripciones, monetización, episodios,
geo-localización, personas, fragmentos de audio, …
- 💬 &nbsp;Integración con redes sociales:
- 🚀 &nbsp;Castopod es parte del Fediverso, una red social descentralizada
- ❤️ &nbsp;Se puede crear mensajes, compartir, agregar a favoritos y comentar
en episodios
- 📈 &nbsp;Análisis estadísticos integrados:
- ⚖️ &nbsp;Compatible con GDPR / CCPA / LGPD
- 🪙 &nbsp;Medida de audiencia con el estándar IABv2
- 🏡 &nbsp;Estadísticas sin terceras partes involucradas
- 📢 &nbsp;Herramientas de marketing incorporadas:
- ✅ &nbsp;Listo para SEO (meta-etiquetas de open-graph, JSON-LD, …)
- 📱 &nbsp;PWA: instalable como una aplicación independiente
- 🎨 &nbsp;Personalizar los colores del tema
- 🎬 &nbsp;Generar recortes de vídeo listos para compartir, a partir de tus
episodios
- 🔉 &nbsp;Generar fragmentos de audio (Soundbites) para la promoción de tus
episodios.
- ▶️ &nbsp;Reproductor incrustable, con el que insertar tus episodios en
cualquier sitio web!
- 🌱 &nbsp;Libre, gratuito y de código abierto (Licencia AGPL v3)
- 🔐 &nbsp;Enfocado en la soberanía de los datos: tu contenido, tu audiencia y tus estadísticas te pertenecen únicamente a ti
- 🪄&nbsp;Funcionalidades de Podcasting 2.0: GUID, cerradura, transcripciones, financiación, capítulos, geolocalización, colaboradores, clips de audio, ...
- 💬 &nbsp;Red social integrada:
- 🚀 &nbsp;Castopod forma parte de Fédivers, una red social descentralizada
- ❤️ &nbsp;Crea publicaciones, comparte, favorita y comenta episodios
- 📈 &nbsp;Estadísticas integradas:
- ⚖️ &nbsp;Cumple con GDPR / CCPA / LGPD
- 🪙&nbsp;Medición de audiencia IABv2
- 🏡 &nbsp;Estadísticas integradas, sin intermediarios externos
- 📢 &nbsp;Herramientas de marketing integradas:
- ✅ &nbsp;Preparado para SEO (metatags de gráfico abierto, JSON-LD...)
- 📱 &nbsp;PWA: instala como aplicación autónoma
- 🎨 &nbsp;Personaliza los colores del tema
- 🎬 &nbsp;Genera clips de vídeo listos para compartir desde episodios
- 🔉 &nbsp;Genera clips de audio
- ▶️ &nbsp;Integra tus episodios en cualquier sitio web
- 💸 &nbsp;Monetización:
- 🔗 &nbsp;Enlaces de financiación
- 📲 &nbsp;Anuncios publicitarios del tipo click-para-escuchar
- 🤝 &nbsp;value4value / WebMonetization (criptomonedas para creadores de
contenido).
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publica tus episodios en todas partes con RSS:
- 📱 &nbsp;En todos los directorios y aplicaciones: Podcast Index, Apple
Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Emite tus episodios al instante con WebSub.
- 📥 &nbsp;Importación de podcasts: mueve tu podcast existente en otro servicio
a tu servidor Castopod.
- 📤 &nbsp;Mueve tu podcast fuera de Castopod.
- 🔀 &nbsp;Multi-podcast: aloja tantos podcasts como quieras en una misma
instancia/panel de CASTOPOD.
- 👥 &nbsp;Multi-usuario: añade colaboradores y define roles.
- 🌎 &nbsp;Soporte multilingüe i18n: traducido al Inglés, Francés, Polaco,
Alemán, Portugués brasileño, Español, Noruego, … ¡y
[más por venir](https://translate.castopod.org)!
- 📲 &nbsp;Publicidad "escucha-y-clica"
- 🤝 &nbsp;Value4value / WebMonetization
- 💎 &nbsp;Podcasts premium
- 📡&nbsp;Publica tus episodios en todas partes con RSS:
- 📱 &nbsp;En todos los índices y aplicaciones: Podcast Index, Podcasts de Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, ...
- ⚡&nbsp;Difunde tus episodios instantáneamente con WebSub
- 📥 &nbsp;Importa tu podcast: mueve tu podcast existente a Castopod
- 📤 &nbsp;Mueve tu podcast a otro proveedor de alojamiento
- 🔀 &nbsp;Multiinquilino: aloja tantos podcasts como quieras
- 👥 &nbsp;Multiusuario: agrega colaboradores y define sus roles
- 🌎 &nbsp;Soporte i18n: traducido al inglés, francés, polaco, alemán, portugués (brasileño) y español... y [más en el futuro](https://translate.castopod.org)!
## Motivación
¿Por qué Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
El ecosistema de los podcasts es descentralizado por naturaleza: puedes crear tu podcast como un archivo RSS, publicarlo en la web y compartirlo en todos los lugares online.
It is in fact one of the only media to have stayed this way for a long time.
De hecho, es uno de los pocos medios de comunicación que se ha mantenido así durante mucho tiempo.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
A medida que los usos evolucionan, cada vez más personas se sumergen en los podcasts: ya sea que los creadores busquen nuevas formas de compartir sus ideas, o que los oyentes busquen un contenido de mayor calidad.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
Con el aumento del uso de los podcasts, algunas empresas están tratando de convertirlo en un medio más controlado y centralizado.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
Castopod fue creado para proporcionar una alternativa abierta y sostenible para alojar tus podcasts, promoviendo la descentralización para asegurar que la creatividad de los podcasters pueda expresarse libremente.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
Este proyecto es impulsado por la comunidad de código abierto, y en particular por el movimiento de [Fediverse](https://fediverse.party/en/fediverse/) y [Podcasting 2.0](https://podcastindex.org/).
## Comparación con otras soluciones
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for&nbsp;you.
Creemos que una solución no siempre es adecuada para todos, depende mucho de tus necesidades. Por lo tanto, aquí tienes comparaciones con otras herramientas para ayudarte a determinar si Castopod es la opción adecuada para&nbsp;ti.
### Castopod vs. Wordpress
### Castopod vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running&nbsp;it.
Castopod a menudo se considera como "el Wordpress de los podcasts" debido a las similitudes entre ambos. En cierto sentido, esto es cierto. Y de hecho, Castopod se inspiró en gran medida en el ecosistema de Wordpress, al ver la facilidad de adopción por parte de la comunidad y la cantidad de sitios web en funcionamiento con&nbsp;él.
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
Al igual que Wordpress, Castopod es gratuito y de código abierto, construido con PHP y una base de datos MySQL, y se empaqueta de manera que puedas instalarlo fácilmente en la mayoría de los servidores&nbsp;web.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
Wordpress es una excelente manera de crear un sitio web y extenderlo con complementos para obtener lo que desees. Es un CMS completo que te ayuda a tener cualquier tipo de sitio web en&nbsp;línea.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting&nbsp;journey.
Por otro lado, Castopod está destinado a satisfacer las necesidades de los podcasters en particular, centrándose en el podcasting y nada más. No necesitas ningún complemento para comenzar tu viaje en el podcasting.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
Esto permite optimizar los procesos específicos del podcasting, desde la creación de tus podcasts y la publicación de nuevos episodios, hasta la difusión, el marketing y las&nbsp;analíticas.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
Finalmente, dependiendo de tus necesidades, ¡Wordpress y Castopod incluso pueden vivir juntos, ya que tienen los mismos requisitos!
### Castopod vs. Funkwhale
### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
Funkwhale es un servidor de música auto alojado, moderno, gratuito y de código abierto. Al igual que Castopod, Funkwhale se encuentra en el fediverso, una red social descentralizada que permite la interoperabilidad entre ambos.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
Funkwhale se construyó inicialmente en torno a la música. Y más adelante, el proyecto se amplió para permitir el alojamiento de podcasts.
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
A diferencia de Funkwhale, Castopod se ha diseñado y construido exclusivamente en torno a los podcasts. Esto permite una implementación más sencilla de características relacionadas con el ecosistema de podcasting, como las características del podcasting&nbsp;2.0 (transcripciones, capítulos, ubicaciones, personas, ...).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
Por lo tanto, probablemente deberías usar Funkwhale si quieres alojar tu música, y usar Castopod si quieres alojar tus&nbsp;podcasts.
### Castopod vs. otras plataformas de podcast
### Castopod vs Otros servicios de alojamiento de podcasts
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Hay muchas soluciones disponibles para alojar tus podcasts, ¡algunas de las cuales son realmente geniales y [muchas de ellas](https://podcastindex.org/apps) se están subiendo al carro de Podcasting&nbsp;2.0 como Castopod!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
Cada una de estas soluciones es diferente entre sí, por lo que puedes compararlas con la [lista de funcionalidades](#características).
That being said, there are two main differences with other podcasting solutions:
Dicho esto, hay dos diferencias principales con otras soluciones de podcasting:
- Castopod puede ser auto-hospedado en tu propio servidor y es la única solución
que te permite mantener un control completo sobre los contenidos que produces.
También, como es de código abierto, puedes incluso personalizarlo como desees
y necesites.
- Castopod se puede auto alojar y es la única solución que te permite tener un control total sobre lo que produces. Además, al ser de código abierto, tienes el poder de modificarlo como desees.
- Castopod es la única solución que hasta el momento integra tanto una red
social descentralizada con ActivityPub así como muchas de las características
del podcasting 2.0, con la esperanza de cerrar la brecha entre ambos.
- Castopod es la única solución que integra un fediverso, una red social descentralizada basada en ActivityPub, y funcionalidades de "Podcasting 2.0", reduciendo así la brecha entre&nbsp;ambas.
## Cómo colaborar
## Contribuir
Love Castopod and would like to help? Take a look at the following documentation
to get you&nbsp;started.
¿Te gusta Castopod y te gustaría ayudar? Echa un vistazo a la siguiente documentación para empezar.
### Código de conducta
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be&nbsp;tolerated.
Castopod ha adoptado un código de conducta al que esperamos que los participantes del proyecto se adhieran. Por favor, lee el manual de [CODE_OF_CONDUCT](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md) para que puedas entender qué acciones serán y no serán&nbsp;toleradas.
### Guía para colaborar
### Guía de contribución
Read our [contributing guide](./contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
Lee nuestra [guía de contribución](./contributing/guidelines.md) para aprender sobre nuestro proceso de desarrollo, cómo proponer correcciones de errores y mejoras, y cómo compilar y probar tus cambios en Castopod.
## Colaboradores ✨
## Contribuidores ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Agradecimientos a estas maravillosas personas ([leyenda de emoticonos](https://allcontributors.org/docs/es/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- ALL-CONTRIBUTORS-LIST:START - No eliminar ni modificar esta sección -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Romain de Laage"/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Lyonel Bernard"/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt="Christopher Lagonick-Weitzel"/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ernesto Acosta"/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">🐛</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt="Bastien Luneteau"/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Cécile Ricordeau"/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Miś"/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt="Marcin Lewandowski"/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">🐛</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sebastian Janik"/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Karczmarczyk"/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="denis d"/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">🐛</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt="Douglas Kastle"/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">🐛</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="cExplorer"/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="ImaCrea"/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">🐛</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Jonas S"/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt="LEFEBVRE Yann"/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt="Sebastian Späth"/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">🐛</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="rocky III"/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt="Hermann Josef Eckl"/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Delhaye Cyrille"/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">🐛</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt="João Leandro"/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Angelos Chouvardas"/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt="Eivind"/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt="Ewen"/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt="forght"/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt="glottis0q"/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100" width="100px;" alt="ButterflyOfFire"/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt="Lucian I. Last"/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt="LuuzViir"/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt="CTHTC"/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt="Russian Retro"/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt="Marek L'ach"/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt="GunChleoc"/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt="GabiSnow"/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt="bendaha"/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt="Samuel Roland"/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Dimitri Regnier"/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100" width="100px;" alt="irithys"/><br /><sub><b>irithys</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sergi"/><br /><sub><b>Sergi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt="ghose (XoseM)"/><br /><sub><b>ghose (XoseM)</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/basen1982"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Andreas Olsson"/><br /><sub><b>Andreas Olsson</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/leonfrom"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="leonfrom"/><br /><sub><b>leonfrom</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/agentcobra57"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="agentcobra"/><br /><sub><b>agentcobra</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/alephoto85"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100" width="100px;" alt="Alessandro"/><br /><sub><b>Alessandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/liimee"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="liimee"/><br /><sub><b>liimee</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ahmedsabouni"><img src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100" width="100px;" alt="Ahmed Sabouni"/><br /><sub><b>Ahmed Sabouni</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KrzysztofDomanczyk"><img src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100" width="100px;" alt="KrzysztofDomanczyk"/><br /><sub><b>KrzysztofDomanczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
</tr>
</tbody>
</table>
<tbody><tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100" alt="Yassine Doghri"/><br>
<sub><b>Yassine Doghri</b></sub></a><br>
<a href="#code-yassinedoghri" title="Código">💻</a>
<a href="#bug-yassinedoghri" title="Informes de errores">🐛</a>
<a href="#userTesting-yassinedoghri" title="Pruebas de usuario">📓</a>
<a href="#ideas-yassinedoghri" title="Ideas">🤔</a>
<a href="https://translate.castopod.org" title="Traducción">🌍</a>
<a href="#talk-yassinedoghri" title="Charlas">🗣</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100" alt="Benjamin Bellamy"/><br>
<sub><b>Benjamin Bellamy</b></sub></a><br>
<a href="#good-ideas-benjamin" title="Ideas">🤔</a>
<a href="#design-benjamin" title="Diseño">🎨</a>
<a href="https://translate.castopod.org" title="Traducción">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://castopod.org/assets/images/castopod-avatar.jpg"><img src="https://castopod.org/assets/images/castopod-avatar.jpg" width="100" alt="Ola Hneini"/><br>
<sub><b>Ola Hneini</b></sub></a><br>
<a href="#ideas-ola-hneini" title="Ideas">🤔</a>
<a href="https://translate.castopod.org" title="Traducción">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://castopod.org/assets/images/castopod-avatar.jpg"><img src="https://castopod.org/assets/images/castopod-avatar.jpg" width="100" alt="Romain de Laage"/><br>
<sub><b>Romain de Laage</b></sub></a><br>
<a href="#ideas-romain-de-laage" title="Ideas">🤔</a>
<a href="https://translate.castopod.org" title="Traducción">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg" width="100" alt="Lyonel Bernard"/><br>
<sub><b>Lyonel Bernard</b></sub></a><br>
<a href="#ideas-lyonel" title="Ideas">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon" width="100" alt="Christopher Lagonick-Weitzel"/><br>
<sub><b>Christopher Lagonick-Weitzel</b></sub></a><br>
<a href="#ideas-ctlw83" title="Ideas">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg" width="100" alt="Ernesto Acosta"/><br>
<sub><b>Ernesto Acosta</b></sub></a><br>
<a href="#ideas-ernestoacosta" title="Ideas">🤔</a></td>
</tr>
</tbody></table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
Este proyecto sigue la especificación de [all-contributors](https://github.com/all-contributors/all-contributors). Se aceptan contribuciones de cualquier tipo.
## Contacto
You may reach us for help or ask any question you have on:
Puedes ponerte en contacto con nosotros para ayuda o si tienes alguna pregunta en:
- [Discord](https://castopod.org/discord) (para interacción directa con
desarrolladores y la comunidad)
- [Seguimiento de incidencias](https://code.castopod.org/adaures/castopod/-/issues)
(para informar de errores y solicitar nuevas funcionalidades)
- [Discord](https://castopod.org/discord) (para chatear en tiempo real con los desarrolladores y la comunidad)
- [Seguimiento de problemas](https://code.castopod.org/adaures/castopod/-/issues) (para cualquier solicitud de nueva característica o informe de error)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
Alternativamente, puedes seguirnos en las redes sociales para obtener noticias sobre Castopod:
- [podlibre.social](https://podlibre.social/@castopod) (instancia de Mastodon)
- [[Twitter](https://twitter.com/castopod)](https://twitter.com/castopod)
- [[LinkedIn](https://linkedin.com/company/ad-aures)](https://linkedin.com/company/castopod)
- [Facebook (próximamente?)](https://www.facebook.com/castopod)
- [podlibre.social](https://podlibre.social/@Castopod) (Instancia Mastodon)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Patrocinadores
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
El desarrollo continuo de Castopod es posible gracias al apoyo de sus patrocinadores. Si quieres ayudar, considera [patrocinar el desarrollo de Castopod](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Logo de Ad Aures" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="Logo de NLnet" class="h-16" /></a>
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Logo de Ad Aures" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="Logo de NLnet" class="h-16" /></a>
</div>
## Licencia
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
[Licencia de GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md
[contributions]: https://code.castopod.org/adaures/castopod/-/issues
[semantic-release]: https://github.com/semantic-release/semantic-release
[discord]: https://castopod.org/discord
[stars]: https://github.com/ad-aures/castopod/stargazers
[crowdin]: https://translate.castopod.org/project/castopod
Derechos de autor © 2020-presente, [Ad Aures](https://adaures.com/).

View File

@ -1,4 +1,4 @@
{
"label": "Contributing",
"label": "Contribuire",
"position": 3
}

View File

@ -1,154 +1,123 @@
---
title: Guidelines
title: Linee guida
---
# Contributing to Castopod
# Contribuire a Castopod
Love Castopod and want to help? Thanks so much, there's something to do for
everybody!
Ami Castopod e vuoi aiutare? Grazie mille, c'è qualcosa da fare per tutti!
Please take a moment to review this document in order to make the contribution
process easy and effective for everyone involved.
Si prega di prendere un momento per leggere questo documento al fine di rendere il processo di contribuzione facile ed efficace per tutti coloro coinvolti.
Following these guidelines helps to communicate that you respect the time of the
developers managing and developing this open source project. In return, they
should reciprocate that respect in addressing your issue or assessing patches
and features.
Seguire queste linee guida aiuta a comunicare il rispetto del tempo dei sviluppatori che gestiscono e sviluppano questo progetto open source. In cambio, dovrebbero ricambiare questo rispetto affrontando i tuoi problemi o valutando le patch e le funzionalità.
::: info Note
::: info Nota
**Any** contribution made on a repository other than
[the original repository](https://code.castopod.org/adaures/castopod) will not
be accepted.
**Qualsiasi** contributo effettuato su un repository diverso dal
[repository originale](https://code.castopod.org/adaures/castopod) non verrà
accettato.
:::
## Using the issue tracker
## Utilizzare lo strumento di tracciamento problemi
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
Lo [strumento di tracciamento problemi](https://code.castopod.org/adaures/castopod/-/issues) è il
canale preferito per [segnalare bug](#segnalare-bug),
[richieste di funzionalità](#richieste-di-funzionalit) e
[inviare richieste pull](#richieste-pull).
## ⚠️ Security issues and vulnerabilities
## ⚠️ Problemi di sicurezza e vulnerabilità
If you encounter any security issue or vulnerability in the Castopod source,
please contact us directly by email at
Se incontri qualsiasi problema di sicurezza o vulnerabilità nel codice sorgente di Castopod,
per favore contattaci direttamente via email a
[security@castopod.org](mailto:security@castopod.org)
## Bug reports
## Segnalazione di bug
A bug is a _demonstrable problem_ that is caused by the code in the repository.
Good bug reports are extremely helpful - thank you!
Un bug è un _problema dimostrabile_ causato dal codice nel repository. Le segnalazioni di bug ben fatte sono estremamente utili: grazie!
Guidelines for bug reports:
Linee guida per le segnalazioni di bug:
1. **Use the issue search** &mdash; check if the issue has already been
reported.
1. **Utilizza la ricerca delle issue** controlla se il problema è già stato segnalato.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the
latest `main` branch in the repository.
2. **Controlla se il problema è stato risolto** prova a riprodurlo utilizzando il branch `main` più recente nel repository.
3. **Isolate the problem** &mdash; ideally create a
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
3. **Isola il problema** idealmente crea un
[ridotto caso di test](https://css-tricks.com/reduced-test-cases/) ed un esempio pratico.
A good bug report shouldn't leave others needing to chase you up for more
information. Please try to be as detailed as possible in your report. What is
your environment? What steps will reproduce the issue? What browser(s) and OS
experience the problem? What would you expect to be the outcome? All these
details will help people to fix any potential bugs.
Una buona segnalazione di bug non dovrebbe lasciare agli altri la necessità di cercarti ulteriori informazioni. Cerca di essere il più dettagliato possibile nella tua segnalazione. Quali sono le tue impostazioni? Quali passaggi riprodurranno il problema? Quali browser e sistemi operativi riscontrano il problema? Quale sarebbe l'esito atteso? Tutti questi dettagli aiuteranno le persone a risolvere eventuali bug potenziali.
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> have been created for this project. You may use them to help you follow those
> guidelines.
> Sono stati creati dei [modelli di issue](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates) per questo progetto. Puoi utilizzarli per aiutarti a seguire queste linee guida.
## Feature requests
## Richieste di funzionalità
Feature requests are welcome. But take a moment to find out whether your idea
fits with the scope and aims of the project. It's up to _you_ to make a strong
case to convince the project's developers of the merits of this feature. Please
provide as much detail and context as possible.
Le richieste di funzionalità sono benvenute. Tuttavia, prenditi un attimo per scoprire se la tua idea si adatta allo scopo e agli obiettivi del progetto. È tuo compito convincere gli sviluppatori del progetto dei meriti di questa funzionalità. Fornisci il maggior numero di dettagli e contesto possibile.
## Pull requests
## Richieste pull
Good pull requests - patches, improvements, new features - are a fantastic help.
They should remain focused in scope and avoid containing unrelated commits.
Le richieste pull (pull request) ben fatte - patch, miglioramenti, nuove funzionalità - sono di grande aiuto. Devono rimanere focalizzate nell'ambito e evitare commit non correlati.
**Please ask first** before embarking on any significant pull request (e.g.
implementing features, refactoring code, porting to a different language),
otherwise you risk spending a lot of time working on something that the
project's developers might not want to merge into the project.
**Per favore chiedi prima** di intraprendere una richiesta pull significativa (ad esempio implementare funzionalità, ristrutturare il codice, portare in un'altra lingua), altrimenti rischi di dedicare molto tempo a qualcosa che gli sviluppatori del progetto potrebbero non voler integrare nel progetto.
Please adhere to the coding conventions used throughout a project (indentation,
accurate comments, etc.) and any other requirements (such as test coverage).
Si prega di attenersi alle convenzioni di codifica utilizzate in tutto un progetto (indentazione, commenti precisi, ecc.) e ad ogni altro requisito (come la copertura dei test).
Adhering to the following process is the best way to get your work included in
the project:
Attenersi al seguente processo è il modo migliore per far includere il proprio lavoro nel progetto:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the
project, clone your fork, and configure the remotes:
1. [Forka](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) il
progetto, clona il tuo fork e configura i remoti:
```bash
# Clone your fork of the repo into the current directory
# Clona il tuo fork del repository nella directory corrente
git clone https://code.castopod.org/<your-username>/castopod.git
# Navigate to the newly cloned directory
# Sposta nella directory appena clonata
cd castopod
# Assign the original repo to a remote called "upstream"
# Assegna al repository originale un remoto chiamato "upstream"
git remote add upstream https://code.castopod.org/adaures/castopod.git
```
2. If you cloned a while ago, get the latest changes from upstream:
2. Se hai clonato tempo fa, ottieni gli ultimi cambiamenti dal repository upstream:
```bash
git checkout main
git pull upstream main
```
3. Create a new topic branch (off the `main` branch) to contain your feature,
change, or fix:
3. Crea un nuovo branch di argomento (dal ramo `main`) per contenere la tua funzionalità, modifica o correzione:
```bash
git checkout -b <topic-branch-name>
git checkout -b <nome-branch-argomento>
```
4. Commit your changes in logical chunks. Please adhere to these
[git commit message guidelines](https://conventionalcommits.org/) or your
code is unlikely be merged into the main project. Use Git's
[interactive rebase](https://help.github.com/articles/about-git-rebase/)
feature to tidy up your commits before making them public.
4. Fai il commit delle tue modifiche in blocchi logici. Segui queste
[linee guida per i messaggi di commit di Git](https://conventionalcommits.org/) o il tuo
codice difficilmente verrà integrato nel progetto principale. Utilizza la
funzionalità di [ribase interattivo di Git](https://help.github.com/articles/about-git-rebase/) per sistemare i tuoi commit prima di renderli pubblici.
5. Locally merge (or rebase) the upstream dev branch into your topic branch:
5. Esegui la fusione locale (o il rebase) del ramo dev upstream nel tuo ramo di argomento:
```bash
git pull [--rebase] upstream main
```
6. Push your topic branch up to your fork:
6. Fai push del tuo ramo di argomento nel tuo fork:
```bash
git push origin <topic-branch-name>
git push origin <nome-branch-argomento>
```
7. [Open a Pull Request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
with a clear title and description.
7. [Apri una richiesta pull](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
con un titolo e una descrizione chiari.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
license your work under the terms of the
**IMPORTANTE**: Inviando una patch, accetti di concedere ai proprietari del progetto il
diritto di licenziare il tuo lavoro secondo i termini della
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
## Collaborating guidelines
## Linee guida per la collaborazione
There are few basic rules to ensure high quality of the project:
Ci sono poche regole di base per garantire un'alta qualità del progetto:
- Before merging, a PR requires at least two approvals from the collaborators
unless it's an architectural change, a large feature, etc. If it is, then at
least 50% of the core team have to agree to merge it, with every team member
having a full veto right. (i.e. every single one can block any PR)
- A PR should remain open for at least two days before merging (does not apply
for trivial contributions like fixing a typo). This way everyone has enough
time to look into it.
- Prima di effettuare la fusione, una pull request richiede almeno due approvazioni dai collaboratori a meno che non si tratti di un cambiamento architettonico, di una grande funzionalità, ecc. In tal caso, almeno il 50% del team principale deve essere d'accordo per unirlo, mentre ogni membro del team ha un pieno diritto di veto (cioè ognuno può bloccare qualsiasi pull request).
- Una pull request dovrebbe rimanere aperta per almeno due giorni prima della fusione (non si applica a contributi banali come correggere un errore di battitura). In questo modo tutti avranno abbastanza tempo per esaminarla.
You are always welcome to discuss and propose improvements to this guideline.
Sei sempre il benvenuto per discutere e proporre miglioramenti a questa guida.

View File

@ -1,45 +1,40 @@
---
title: Development setup
title: Configurazione per lo sviluppo
sidebarDepth: 3
---
# Setup your development environment
# Configurazione dell'ambiente di sviluppo
## Introduction
## Introduzione
Castopod is a web app based on the `php` framework
[CodeIgniter 4](https://codeigniter.com).
Castopod è un'app web basata sul framework `php` [CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
Utilizziamo [Docker](https://www.docker.com/) per configurare rapidamente un ambiente di sviluppo. Un file `docker-compose.yml` e `Dockerfile` sono inclusi nella cartella radice del progetto per aiutarti ad avviare il tuo contributo.
> You don't need any prior knowledge of Docker to follow the next steps.
> However, if you wish to use your own environment, feel free to do so!
> Non è necessaria alcuna conoscenza precedente di Docker per seguire i passaggi successivi. Tuttavia, se desideri utilizzare il tuo ambiente, sentiti libero di farlo!
## Setup instructions
## Istruzioni di configurazione
### 1. Pre-requisites
### 1. Pre-requisiti
0. Install [docker](https://docs.docker.com/get-docker).
0. Installa [docker](https://docs.docker.com/get-docker).
1. Clone Castopod project by running:
1. Clona il progetto Castopod eseguendo:
```bash
git clone https://code.castopod.org/adaures/castopod.git
```
2. Create a `.env` file with the minimum required config to connect the app to
the database and use redis as a cache handler:
2. Crea un file `.env` con la configurazione minima richiesta per connettere l'app al database e utilizzare redis come gestore della cache:
```ini
CI_ENVIRONMENT="development"
# If set to development, you must run `npm run dev` to start the static assets server
# Se impostato su development, è necessario eseguire `npm run dev` per avviare il server degli asset statici
vite.environment="development"
# By default, this is set to true in the app config.
# For development, this must be set to false as it is
# on a local environment
# Di default, questo è impostato su true nella configurazione dell'app.
# Per lo sviluppo, deve essere impostato su false in quanto è
# in un ambiente locale
app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/"
@ -56,368 +51,90 @@ to help you kickstart your contribution.
cache.handler="redis"
cache.redis.host = "redis"
# You may not want to use redis as your cache handler
# Comment/remove the two lines above and uncomment
# the next line for file caching.
# Potresti non voler utilizzare redis come gestore della cache
# Commenta/rimuovi le due righe sopra e decommenta
# la riga successiva per utilizzare la memorizzazione nella cache dei file.
#cache.handler="file"
```
> _NB._ You can tweak your environment by setting more environment variables
> in your custom `.env` file. See the `env` for examples or the
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
> for more info.
> _NB._ Puoi personalizzare il tuo ambiente impostando ulteriori variabili d'ambiente nel tuo file `.env` personalizzato. Consulta il file `env` per esempi o la [Guida dell'utente di CodeIgniter4](https://codeigniter.com/user_guide/index.html) per ulteriori informazioni.
3. (for docker desktop) Add the repository you've cloned to docker desktop's
`Settings` > `Resources` > `File Sharing`
3. (per Docker Desktop) Aggiungi il repository che hai clonato a "File Sharing" in "Impostazioni" di Docker Desktop
### 2. (recommended) Develop inside the app Container with VSCode
### 2. (raccomandato) Sviluppa all'interno del contenitore dell'app con VSCode
If you're working in VSCode, you can take advantage of the `.devcontainer/`
folder. It defines a development environment (dev container) with preinstalled
requirements and VSCode extensions so you don't have to worry about them. All
required services will be loaded automagically! 🪄
Se stai lavorando in VSCode, puoi approfittare della cartella `.devcontainer/`. Definisce un ambiente di sviluppo (contenitore di sviluppo) con requisiti e estensioni preinstallati di VSCode in modo da non doverti preoccupare di loro. Tutti i servizi necessari verranno caricati automaticamente! 🪄
1. Install the VSCode extension
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Open in container`
1. Installa l'estensione di VSCode [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Maiusc + P` > `Apri nel contenitore`
> The VSCode window will reload inside the dev container. Expect several
> minutes during first load as it is building all necessary services.
> La finestra di VSCode verrà ricaricata all'interno del contenitore di sviluppo. Prevedi alcuni minuti durante il primo caricamento, poiché verranno creati tutti i servizi necessari.
**Note**: The dev container will start by running Castopod's php server.
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
**Nota**: Il contenitore di sviluppo verrà avviato eseguendo il server php di Castopod. Durante lo sviluppo, dovrai avviare il server di [Vite](https://vitejs.dev) per compilare il codice typescript e gli stili:
```bash
# run Vite dev server
# avvia il server Vite dev
npm run dev
```
If there is any issue with the php server not running, you can restart them
using the following commands:
Se si riscontrano problemi con il server php che non si avvia, è possibile riavviarlo utilizzando i seguenti comandi:
```bash
# run Castopod server
# avvia il server Castopod
php spark serve - 0.0.0.0
```
3. You're all set! 🎉
3. Sei pronto! 🎉
You're now **inside the dev container**, you may use the VSCode console
(`Terminal` > `New Terminal`) to run any command:
Ora sei **all'interno del contenitore di sviluppo**, puoi utilizzare la console di VSCode (`Terminale` > `Nuovo terminale`) per eseguire qualsiasi comando:
```bash
# PHP is installed
# PHP è installato
php -v
# Composer is installed
# Composer è installato
composer -V
# npm is installed
# npm è installato
npm -v
# git is installed
# git è installato
git version
```
For more info, see
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
Per ulteriori informazioni, consulta il sito [Remote Containers di VSCode](https://code.visualstudio.com/docs/remote/containers)
### 3. Start hacking
### 3. Inizia a programmare
You're all set! Start working your magic by updating the project's files! Help
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
Sei pronto! Inizia il tuo lavoro aggiornando i file del progetto! Ti consigliamo di consultare la [Guida dell'utente di CodeIgniter4](https://codeigniter.com/user_guide/index.html) per ulteriori informazioni.
To see your changes, go to:
Per visualizzare le tue modifiche, visita:
- `http://localhost:8080/` for the Castopod app
- `http://localhost:8888/` for the phpmyadmin interface:
- `http://localhost:8080/` per l'app Castopod
- `http://localhost:8888/` per l'interfaccia di phpmyadmin:
- username: **castopod**
- nome utente: **castopod**
- password: **castopod**
### 2-alt. Develop outside the app container
### 2-alt. Sviluppa al di fuori del contenitore dell'app
You do not wish to use the VSCode devcontainer? No problem!
Non desideri utilizzare il contenitore di sviluppo di VSCode? Nessun problema!
1. Start docker containers manually:
1. Avvia manualmente i contenitori Docker:
Go to project's root folder and run:
Vai nella cartella radice del progetto e esegui:
```bash
# starts all services declared in docker-compose.yml file
# -d option starts the containers in the background
# avvia tutti i servizi dichiarati nel file docker-compose.yml
# l'opzione -d avvia i contenitori in background
docker-compose up -d
# See all running processes (you should see 3 processes running)
# Vedi tutti i processi in esecuzione (dovresti vedere 3 processi in esecuzione)
docker-compose ps
# Alternatively, you can check all docker processes
# In alternativa, puoi controllare tutti i processi Docker
docker ps -a
```
> The `docker-compose up -d` command will boot 4 containers in the
> background:
>
> - `castopod_app`: a php based container with Castopod requirements
> installed
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries
> and pages caching
> - `castopod_mariadb`: a [mariadb](https://mariadb.org/) server for
> persistent data
> - `castopod_phpmyadmin`: a phpmyadmin server to visualize the mariadb
> database.
2. Run any command inside the containers by prefixing them with
`docker-compose run --rm app`:
```bash
# use PHP
docker-compose run --rm app php -v
# use Composer
docker-compose run --rm app composer -V
# use npm
docker-compose run --rm app npm -v
# use git
docker-compose run --rm app git version
```
---
## Going Further
### Install Castopod's dependencies
1. Install php dependencies with [Composer](https://getcomposer.org/)
```bash
composer install
```
::: info Note
The php dependencies aren't included in the repository. Composer will check
the `composer.json` and `composer.lock` files to download the packages with
the right versions. The dependencies will live under the `vendor/` folder.
For more info, check out the
[Composer documentation](https://getcomposer.org/doc/).
:::
2. Install javascript dependencies with [npm](https://www.npmjs.com/)
```bash
npm install
```
::: info Note
The javascript dependencies aren't included in the repository. Npm will check
the `package.json` and `package.lock` files to download the packages with the
right versions. The dependencies will live under the `node_module` folder.
For more info, check out the [NPM documentation](https://docs.npmjs.com/).
:::
3. Generate static assets:
```bash
# build all static assets at once
npm run build:static
# build specific assets
npm run build:icons
npm run build:svg
```
::: info Note
The static assets generated live under the `public/assets` folder, it
includes javascript, styles, images, fonts, icons and svg files.
:::
### Initialize and populate database
::: tip Tip
You may skip this section if you go through the install wizard (go to
`/cp-install`).
:::
1. Build the database with the migrate command:
```bash
# loads the database schema during first migration
php spark migrate -all
```
You may need to undo the migration (rollback):
```bash
# rolls back database schema (deletes all tables and their content)
php spark migrate:rollback
```
2. Populate the database with the required data:
```bash
# Populates all required data
php spark db:seed AppSeeder
```
You may choose to add data separately:
```bash
# Populates all categories
php spark db:seed CategorySeeder
# Populates all Languages
php spark db:seed LanguageSeeder
# Populates all podcasts platforms
php spark db:seed PlatformSeeder
# Populates all Authentication data (roles definition…)
php spark db:seed AuthSeeder
```
3. (optionnal) Populate the database with test data:
- Populate test data (login: admin / password: AGUehL3P)
```bash
php spark db:seed TestSeeder
```
- Populate with fake podcast analytics:
```bash
php spark db:seed FakePodcastsAnalyticsSeeder
```
- Populate with fake website analytics:
```bash
php spark db:seed FakeWebsiteAnalyticsSeeder
```
TestSeeder will add an active superadmin user with the following credentials:
- username: **admin**
- password: **AGUehL3P**
### Useful docker / docker-compose commands
- Monitor the app container:
```bash
docker-compose logs --tail 50 --follow --timestamps app
```
- Interact with redis server using included redis-cli command:
```bash
docker exec -it castopod_redis redis-cli
```
- Monitor the redis container:
```bash
docker-compose logs --tail 50 --follow --timestamps redis
```
- Monitor the mariadb container:
```bash
docker-compose logs --tail 50 --follow --timestamps mariadb
```
- Monitor the phpmyadmin container:
```bash
docker-compose logs --tail 50 --follow --timestamps phpmyadmin
```
- Restart docker containers:
```bash
docker-compose restart
```
- Destroy all containers, opposite of `up` command:
```bash
docker-compose down
```
- Rebuild app container:
```bash
docker-compose build app
```
Check [docker](https://docs.docker.com/engine/reference/commandline/docker/) and
[docker-compose](https://docs.docker.com/compose/reference/) documentations for
more insights.
## Known issues
### Allocation failed - JavaScript heap out of memory
This happens when running `npm install`.
👉 By default, docker might not have access to enough RAM. Allocate more memory
and run `npm install` again.
### (Linux) Files created inside container are attributed to root locally
You may use Linux user namespaces to fix this on your machine:
::: info Note
Replace "username" with your local username
:::
1. Go to `/etc/docker/daemon.json` and add:
```json
{
"userns-remap": "username"
}
```
2. Configure the subordinate uid/guid:
```bash
# in /etc/subuid
username:1000:1
username:100000:65536
```
```bash
# in /etc/subgid
username:1000:1
username:100000:65536
```
3. Restart docker:
```bash
sudo systemctl restart docker
```
4. That's it! Now, the root user in the container will be mapped to the user on
your local machine, no more permission issues! 🎉
You can check
[this great article](https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/)
to know more about how it works.

View File

@ -1,4 +1,4 @@
{
"label": "Getting Started",
"label": "Iniziare",
"position": 2
}

View File

@ -1,88 +1,88 @@
---
title: Autenticazione & Autorizzazione
title: Autenticazione e Autorizzazione
sidebarDepth: 3
---
# Autenticazione & Autorizzazione
# Autenticazione e Autorizzazione
Castopod gestisce l'autenticazione e l'autorizzazione utilizzando
`codeigniter/shield` abbinato a regole personalizzate. Ruoli e permessi sono
definiti a due livelli:
`codeigniter/shield` associato a regole personalizzate. I ruoli e i
permessi vengono definiti su due livelli:
1. [intera istanza](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
1. [a livello di istanza](#1-ruoli-e-permessi-a-livello-di-istanza)
2. [per podcast](#2-ruoli-e-permessi-per-podcast)
## 1. Ruoli e permessi per l'intera istanza
## 1. Ruoli e permessi a livello di istanza
### Ruoli dell'istanza
### Ruoli nell'istanza
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
<!-- AUTH-INSTANCE-ROLES-LIST:START - Non rimuovere o modificare questa sezione -->
| ruolo | descrizione | permessi |
| ----------- | ---------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Ha il pieno controllo su Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Gestisce il contenuto di Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Utenti generali di Castopod. | admin.access |
| ruolo | descrizione | permessi |
| ------------ | ------------------------------------ | ------------------------------------------------------------------------------------------- |
| Super admin | Ha completo controllo su Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Gestore | Gestisce i contenuti di Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Utenti generali di Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Permessi istanza
### Autorizzazioni nell'istanza
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Non rimuovere o modificare questa sezione -->
| permesso | descrizione |
| ----------------------- | ------------------------------------------------------------------------- |
| admin.access | Può accedere alla zona di amministrazione di Castopod. |
| admin.settings | Può accedere alle impostazioni di Castopod. |
| users.manage | Può gestire gli utenti di Castopod. |
| persons.manage | Può gestire le persone. |
| pages.manage | Può gestire le pagine. |
| podcasts.view | Può visualizzare tutti i podcast. |
| podcasts.create | Può creare nuovi podcast. |
| podcasts.import | Può importare podcast. |
| fediverse.manage-blocks | Può impedire agli attori/domini del fediverso di interagire con Castopod. |
| autorizzazione | descrizione |
| ------------------------- | ------------------------------------------------------------------ |
| admin.access | Può accedere all'area di amministrazione di Castopod. |
| admin.settings | Può accedere alle impostazioni di Castopod. |
| users.manage | Può gestire gli utenti di Castopod. |
| persons.manage | Può gestire le persone. |
| pages.manage | Permette di gestire le pagine. |
| podcasts.view | Può visualizzare tutti i podcast. |
| podcasts.create | Può creare nuovi podcast. |
| podcasts.import | Può importare podcast. |
| fediverse.manage-blocks | Può bloccare gli attori/domini fediverse dall'interagire con Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
## 2. Ruoli e permessi per podcast
### Per podcast roles
### Ruoli per podcast
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
<!-- AUTH-PODCAST-ROLES-LIST:START - Non rimuovere o modificare questa sezione -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
| ruolo | descrizione | permessi |
| -----------| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Admin | Ha il controllo completo sul podcast #{id}. | \* |
| Editor | Gestisce i contenuti e le pubblicazioni del podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Autore | Gestisce i contenuti del podcast #{id}, ma non può pubblicarli. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Ospite | Contributore generale del podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
### Autorizzazioni per podcast
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Non rimuovere o modificare questa sezione -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
| autorizzazione | descrizione |
| --------------------------- | ----------------------------------------------------------------------------------------- |
| view | Visualizza la dashboard e le statistiche del podcast #{id}. |
| edit | Può modificare il podcast #{id}. |
| delete | Può cancellare il podcast #{id}. |
| manage-imports | Può sincronizzare il podcast importato #{id}. |
| manage-persons | Permette di gestire gli iscritti al podcast #{id}. |
| manage-subscriptions | Permette di gestire gli abbonamenti al podcast #{id}. |
| manage-contributors | Permette di gestire i contributori del podcast #{id}. |
| manage-platforms | Può configurare/rimuovere i link delle piattaforme del podcast #{id}. |
| manage-publications | Può pubblicare il podcast #{id}. |
| manage-notifications | Può visualizzare e contrassegnare come lette le notifiche per il podcast #{id}. |
| interact-as | Può interagire come podcast #{id} per aggiungere, condividere o rispondere ai messaggi. |
| episodes.view | Può visualizzare la dashboard e le statistiche del podcast #{id}. |
| episodes.create | Può creare episode per il podcast #{id}. |
| episodes.edit | Può modificare il podcast #{id}. |
| episodes.delete | Può cancellare il podcast #{id}. |
| episodes.manage-persons | Permette di gestire gli iscritti al podcast #{id}. |
| episodes.manage-clips | Permette di gestire le clip video o parti audio del podcast #{id}. |
| episodes.manage-publications| Può pubblicare il podcast #{id}. |
| episodes.manage-comments | Può creare/eliminare i commenti degli episodi del podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -1,35 +1,30 @@
---
title: Official Docker images
title: Immagini ufficiali Docker
sidebarDepth: 3
---
# Official Docker images
# Immagini ufficiali di Docker
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
Castopod invia 3 immagini Docker all'hub Docker durante il suo processo di
costruzione automatizzata:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all
in one castopod image using nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): un'immagine di castopod all-in-one che utilizza nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): il bundle dell'app con tutte le dipendenze di Castopod
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una configurazione Nginx per Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
Inoltre, Castopod richiede un database compatibile con MySQL. Un database Redis può essere aggiunto come gestore della cache.
## Supported tags
## Tags supportate
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
- `développer` [instabile], l'ultima versione del ramo di sviluppo
- `beta` [stabili], l'ultima versione beta
- `1.x.x` [stabili], versione specifica (a partire da `1.0.0`)
## Example usage
## Esempio di utilizzo
1. Install [docker](https://docs.docker.com/get-docker/) and
[docker-compose](https://docs.docker.com/compose/install/)
2. Create a `docker-compose.yml` file with the following:
1. Installa [docker](https://docs.docker.com/get-docker/) e
[docker-compose](https://docs.docker.com/compose/install/)
2. Crea un file `docker-compose.yml` con i seguenti contenuti:
```yml
version: "3.7"
@ -43,9 +38,9 @@ can be added as a cache handler.
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
MYSQL_PASSWORD: cambiami
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_ANALYTICS_SALT: cambiami
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
networks:
@ -63,10 +58,10 @@ can be added as a cache handler.
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_ROOT_PASSWORD: cambiami
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
MYSQL_PASSWORD: cambiami
restart: unless-stopped
redis:
@ -87,72 +82,72 @@ can be added as a cache handler.
castopod-db:
```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
È necessario adattare alcune variabili alle tue esigenze (ad esempio `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` e `CP_ANALYTICS_SALT`).
3. Setup a reverse proxy for TLS (SSL/HTTPS)
3. Configura un reverse proxy per TLS (SSL/HTTPS)
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
TLS è obbligatorio per far funzionare ActivityPub. Questa operazione può essere facilmente gestita da un reverse proxy, ad esempio con [Caddy](https://caddyserver.com/):
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
4. Esegui `docker-compose up -d`, aspetta che si inizializzi su
`https://castopod.example.com/cp-install` per completare la configurazione di
Castopod!
5. You're all set, start podcasting! 🎙️🚀
5. Sei pronto per iniziare a creare podcast! 🎙️🚀
## Environment Variables
## Variabili d'ambiente
- **castopod/castopod** and **castopod/app**
- **castopod/castopod** e **castopod/app**
| Variable name | Type (`default`) | Default |
| ------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Nome variabile | Tipo (`default`) | Predefinito |
| -------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | stringa | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?stringa | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?stringa | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?stringa | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | stringa | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?stringa | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?stringa | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?stringa | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?stringa | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?stringa | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` o `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?stringa | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?stringa | `null` |
| **`CP_REDIS_PORT`** | ?numero | `6379` |
| **`CP_REDIS_DATABASE`** | ?numero | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?stringa | `undefined` |
| **`CP_EMAIL_FROM`** | ?stringa | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?stringa | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?stringa | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?numero | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` o `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?booleano | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?stringa | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?stringa | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?stringa | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?stringa | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?stringa | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?stringa | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?numero | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?booleano | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?stringa | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` o `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?numero (con suffisso) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?numero (con suffisso) | `512M` |
| **`CP_TIMEOUT`** | ?numero | `900` |
- **castopod/web-server**
| Variable name | Type | Default |
| ---------------------- | --------------------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Nome variabile | Tipo | Predefinito |
| ---------------------- | --------------------- | ---------- |
| **`CP_APP_HOSTNAME`** | ?stringa | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?numero (con suffisso) | `512M` |
| **`CP_TIMEOUT`** | ?numero | `900` |

View File

@ -1,221 +1,143 @@
---
title: Installation
title: Installazione
sidebarDepth: 3
---
# How to install Castopod?
# Come installare Castopod?
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
Castopod è progettato per essere facile da installare. Che tu stia usando un
hosting dedicato o condiviso, puoi installarlo sulla maggior parte dei
server web compatibili con PHP-MySQL.
::: tip Note
::: tip Nota
We've released official Docker images for Castopod!
Abbiamo rilasciato immagini Docker ufficiali per Castopod!
If you prefer using Docker, you may skip this and go straight to the
[docker documentation](./docker.md) for Castopod.
Se preferisci utilizzare Docker, puoi saltare questa parte e andare
direttamente alla [documentazione Docker](./docker.md) per Castopod.
:::
## Requirements
## Prerequisiti
- PHP v8.1 only
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
- PHP v8.1 solo
- Versione MySQL 5.7 o superiore o MariaDB version 10.2 o superiore
- Supporto HTTPS
- Un [orologio sincronizzato con NTP](https://wiki.debian.org/NTP) per convalidare le richieste in arrivo di federtazione
### PHP v8.1 only
### PHP v8.1 solo
PHP version 8.1 is required, with the following extensions installed:
È richiesta la versione 8.1 di PHP, con le seguenti estensioni installate:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
**PNG** and **WEBP** libraries.
- [exif](https://www.php.net/manual/en/exif.installation.php)
- [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) con **JPEG**,
**PNG** e le librerie **WEBP**.
- [exif](https://www.php.net/manual/fr/exif.installation.php)
Additionally, make sure that the following extensions are enabled in your PHP:
Inoltre, assicurati che le seguenti estensioni siano abilitate nel tuo PHP:
- json (enabled by default - don't turn it off)
- xml (enabled by default - don't turn it off)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
- json (abilitato per impostazione predefinita: non disabilitarlo)
- xml (abilitato per impostazione predefinita: non disabilitarlo)
- [mysqlnd](https://www.php.net/manual/fr/mysqlnd.install.php)
### MySQL compatible database
### Database compatibile con MySQL
> We recommend using [MariaDB](https://mariadb.org).
> Ti consigliamo di utilizzare [MariaDB](https://mariadb.org).
::: warning Warning
::: warning Attento
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
Castopod funziona solo con database MySQL versione 5.7 o successiva.
Le versioni 5.6 (che hanno smesso di ricevere supporto il 5 febbraio 2021) o precedenti di
MySQL non funzioneranno.
:::
You will need the server hostname, database name, username and password to
complete the installation process. If you do not have these, please contact your
server administrator.
Avrai bisogno del nome host del server, del nome del database, del nome
utente e della password per completare il processo di installazione. Se non
hai queste informazioni, ti preghiamo di contattare l'amministratore.
#### Privileges
#### Permessi di accesso
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
`REFERENCES`, `CREATE VIEW`.
L'utente deve avere almeno questi permessi di accesso al database per far
funzionare Castopod: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`,
`INDEX`,`INSERT`, `SELECT`, `UPDATE`,`REFERENCES`, `CREATE VIEW`.
### (Optional) FFmpeg v4.1.8 or higher for Video Clips
### (Facoltativo) FFmpeg v4.1.8 o superiore per i video clip
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required if you
want to generate Video Clips. The following extensions must be installed:
[FFmpeg](https://www.ffmpeg.org/) versione 4.1.8 o superiore è richiesto se si
desidera generare video clip. L'estensione seguente deve essere installata:
- **FreeType 2** library for
- la libreria **FreeType 2** per
[gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Other recommendations
### (Facoltativo) Altri consigli
- Redis for better cache performances.
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
- Redis per una migliore performance nella cache.
- CDN per la cache dei file statici e una migliore performance.
- Gateway di posta per le password dimenticate.
## Install instructions
## Istruzioni di installazione
### Pre-requisites
### Prerequisiti
0. Get a Web Server with [requirements](#requirements) installed
1. Create a MySQL database for Castopod with a user having access and
modification privileges (for more info, see
[MySQL compatible database](#mysql-compatible-database)).
2. Activate HTTPS on your domain with an _SSL certificate_.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
the web server if you havent already.
- ⚠️ Set the web server document root to the `public/` sub-folder within the
`castopod` folder.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
0. Prendi un server web con i [prerequisiti](#prerequisites) installati
1. Crea un database MySQL per Castopod con un utente che abbia i
permessi di accesso e modifica (per ulteriori informazioni, vedi
[Database compatibile con MySQL](#mysql-compatible-database)).
2. Abilita HTTPS sul tuo dominio con un _certificato SSL_.
3. Scarica e decomprimi l'ultimo [pacchetto di Castopod](https://castopod.org/)
sul server web se non l'hai già fatto.
- ⚠️ Assicurati di puntare la radice dei documenti del server web alla sotto-cartella
`public/` della cartella `castopod`.
4. Aggiungi **attività cron** al tuo server web per vari processi in background
(sostituisci i percorsi di conseguenza):
```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1
* * * * * /percorso/all/php /percorso/di/castopod/spark tasks:run >> /dev/null 2>&1
```
**Note** - If you do not add this cron task, the following Castopod features
will not work:
**Nota** - Se non aggiungi questo task cron, le seguenti funzionalità di Castopod
non funzioneranno:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
- Importazione di un podcast da un feed RSS esistente
- Diffusione delle attività sociali ai tuoi seguaci nel fediverso
- Diffusione di episodi ad hub aperti usando
[WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
- Generazione di video clip -
[richiede FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (recommended) Install Wizard
### (Metodo consigliato) Installatore
1. Run the Castopod install script by going to the install wizard page
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
2. Follow the instructions on your screen.
3. Start podcasting!
1. Esegui lo script di installazione di Castopod andando alla pagina
dell'installatore (`https://il_tuo_nome_di_dominio.com/cp-install`) nel tuo
browser web preferito.
2. Segui le istruzioni visualizzate.
3. Inizia a podcastare!
::: info Note
:::info Nota
The install script writes a `.env` file in the package root. If you cannot go
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
Lo script di installazione crea un file `.env` nella root del pacchetto. Se non
puoi utilizzare l'installatore, puoi creare ed editare manualmente il file `.env` basandoti
sul file `.env.example`.
:::
### Email/SMTP setup
### Configurazione email/SMTP
Email configuration is required for some features to work properly (eg.
retrieving your forgotten password, sending instructions to premium subscribers,
…)
La configurazione dell'email è necessaria affinché alcune funzionalità funzionino correttamente (ad es.
recuperare la password dimenticata, inviare istruzioni agli abbonati premium, ...)
You may add your email configuration in your instance's `.env` like so:
Puoi aggiungere la configurazione dell'email nel file `.env` della tua istanza come segue:
```ini
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
email.fromEmail="tuo_indirizzo_email"
email.SMTPHost="il_tuo_host_smtp"
email.SMTPUser="il_tuo_utente_smtp"
email.SMTPPass="la_tua_password_smtp"
```
#### Email config options
| Variable name | Type | Default |
| ---------------- | -------------------- | ------------ |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined` |
| **`SMTPPass`** | string | `undefined` |
| **`SMTPPort`** | number | `25` |
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
### Media storage
By default, files are saved to the `public/media` folder using the file system.
If you need to relocate the `media` folder to a different location, you can
specify it in your `.env` file as shown below:
```ini
# […]
media.root="media"
media.storage="/mnt/storage"
```
In this example, the files will be saved to the /mnt/storage/media folder. Make
sure to also update your web server configuration to reflect this change.
### S3
If you prefer storing your media files on an S3 compatible storage, you may
specify it in your `.env`:
```ini
# […]
media.fileManager="s3"
media.s3.endpoint="your_s3_host"
media.s3.key="your_s3_key"
media.s3.secret="your_s3_secret"
media.s3.region="your_s3_region"
```
#### S3 config options
| Variable name | Type | Default |
| ----------------------- | ------- | ----------- |
| **`endpoint`** | string | `undefined` |
| **`key`** | string | `undefined` |
| **`secret`** | string | `undefined` |
| **`region`** | string | `undefined` |
| **`bucket`** | string | `castopod` |
| **`protocol`** | number | `undefined` |
| **`pathStyleEndpoint`** | boolean | `false` |
| **`keyPrefix`** | string | `undefined` |
## Community packages
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
### Install with YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github
Repo</a>
</div>
#### Opzioni di configurazione

View File

@ -1,26 +1,21 @@
---
title: Security
title: Sicurezza
---
# Security concerns
# Domande di sicurezza
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP
framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
Castopod è sviluppato su [CodeIgniter4](https://codeigniter.com/), un framework PHP che promuove [buone pratiche di sicurezza](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
Per garantire la massima sicurezza della tua applicazione e prevenire attacchi malevoli, ti consigliamo di aggiornare le autorizzazioni dei file di Castopod dopo l'installazione e ogni aggiornamento (evitando errori di accesso ai file):
- `writable/` folder must be **readable** and **writable**.
- `public/media/` folder must be **readable** and **writable**.
- any other file must be set to **readonly**.
- La cartella `writable/` deve essere accessibile in **lettura** e **scrittura**.
- La cartella `public/media/` deve essere accessibile in **lettura** e **scrittura**.
- Qualsiasi altro file deve essere accessibile in **sola lettura**.
For instance, if you are using Apache or NGINX with Ubuntu you may do the
following:
Ad esempio, se stai utilizzando Apache o NGINX con Ubuntu, puoi eseguire i seguenti comandi:
```bash
sudo chown -R root:root /path/to/castopod
sudo chown -R www-data:www-data /path/to/castopod/writable
sudo chown -R www-data:www-data /path/to/castopod/public/media
sudo chown -R root:root /percorso/di/castopod
sudo chown -R www-data:www-data /percorso/di/castopod/writable
sudo chown -R www-data:www-data /percorso/di/castopod/public/media
```

View File

@ -1,109 +1,102 @@
---
title: Update
title: Aggiornamento
sidebarDepth: 3
---
# How to update Castopod?
# Come installare Castopod?
After installing Castopod, you may want to update your instance to the latest
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
Dopo aver installato Castopod, puoi aggiornare la tua istanza all'ultima versione per usufruire delle ultime funzionalità ✨, dei bug fix 🐛 e delle miglioramenti delle prestazioni ⚡.
## Update instructions
## Istruzioni per l'aggiornamento
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
0. ⚠️ Prima di effettuare un aggiornamento, ti consigliamo vivamente di fare un backup dei tuoi file Castopod e del tuo database.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
- vedi
[Dovrei fare un backup prima di aggiornare?](#should-i-make-a-backup-before-updating)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
1. Vai alla
[pagina delle release](https://code.castopod.org/adaures/castopod/-/releases) e
verifica se la tua istanza è aggiornata all'ultima versione di Castopod.
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
- vedi
[Dove posso trovare la versione di Castopod?](#where-can-i-find-my-castopod-version)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
2. Scarica l'ultima versione denominata `Pacchetto di Castopod`, puoi scegliere tra gli archivi `zip` o `tar.gz`.
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
- ⚠️ Assicurati di scaricare il Pacchetto di Castopod e **NON** il codice sorgente
- Nota che puoi anche scaricare l'ultimo pacchetto da
[castopod.org](https://castopod.org/)
3. On your server:
3. Sul tuo server:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
- Elimina tutti i file tranne `.env` e `public/media`
- Copia i nuovi file dal pacchetto scaricato sul tuo server
::: info Note
::: info Nota
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
Potrebbe essere necessario reimpostare i permessi dei file come
fatto durante il processo di installazione. Vedi
[Security Concerns](./security.md).
:::
4. Update your database schema from your `Castopod Admin` > `About` page or by
running:
4. Aggiorna lo schema del database dalla pagina `Castopod Admin` > `About` o eseguendo:
```bash
php spark castopod:database-update
```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
5. Cancella la cache dalla pagina `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
6. ✨ Goditi la tua nuova istanza, hai finito!
::: info Note
::: info Nota
Releases may come with additional update instructions (see
[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
Le versioni potrebbero essere accompagnate da istruzioni di aggiornamento
aggiuntive (vedi la
[page delle release notes](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
- vedi
[Non ho aggiornato la mia istanza per molto tempo... Cosa dovrei fare?](#je-nai-pas-mis-à-jour-mon-instance-depuis-longtemps-que-devrais-je-faire)
:::
## Fully Automated updates
## Aggiornamenti completamente automatizzati
> Coming soon... 👀
> Prossimamente... 👀
## Frequently asked questions (FAQ)
## Domande frequenti (FAQ)
### Where can I find my Castopod version?
### Dove posso trovare la versione di Castopod?
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
Vai al pannello di amministrazione di Castopod, la versione viene visualizzata in
basso a sinistra.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
Puoi anche trovare la versione nell'applicazione
`> Configuration > Constantes.php` cartella.
### [I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
### Non ho aggiornato la mia istanza per molto tempo... Cosa dovrei fare?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
Nessun problema! Basta ottenere l'ultima versione come descritto
sopra. Quando esegui le istruzioni per l'aggiornamento (4), eseguile
sequenzialmente, dalla versione più vecchia alla più recente.
> You may want to backup your instance depending on how long you haven't updated
> Castopod.
> Dovresti fare un backup della tua istanza in base alla data dell'ultimo aggiornamento di Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
Ad esempio, se sei alla versione `v1.0.0-alpha.42` e desideri aggiornare alla
`v1.0.0-beta.1`:
0. (highly recommended) Make a backup of your files and database.
0. (fortemente consigliato) Esegui un backup dei tuoi file e del tuo database.
1. Download the latest release, overwrite your files whilst keeping `.env` and
`public/media`.
1. Scarica l'ultima versione, sovrascrivi i file mantenendo
`.env` e `public/media`.
2. Go through each release update instructions sequentially (from oldest to
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
2. Esegui le istruzioni per l'aggiornamento uno dopo l'altro (dal più vecchio al più recente).
3. ✨ Enjoy your fresh instance, you're all done!
3. ✨ La tua nuova istanza è pronta!
### Should I make a backup before updating?
### Devo fare un backup prima di aggiornare?
We advise you do, so you don't lose everything if anything goes wrong!
Ti consigliamo di farlo, per non perdere tutto in caso di problemi!
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…
In generale, ti consigliamo di creare regolarmente un backup dei tuoi file Castopod e del tuo database per evitare di perdere tutto...

View File

@ -2,171 +2,120 @@
sidebarDepth: 2
---
# Welcome 👋
# Benvenuto 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod is a free & open-source hosting platform made for podcasters who want
engage and interact with their audience.
Castopod è una piattaforma di hosting gratuita e open-source progettata per i podcaster che desiderano interagire con il proprio pubblico.
Castopod is easy to install and was built on top of
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
Castopod è facile da installare ed è stato progettato con [CodeIgniter4](https://codeigniter.com/), un framework PHP potente e leggero.
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
<a href="/it/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Installare<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Features
## Caratteristiche
- 🌱 &nbsp;Free & open-source (AGPL v3 License)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics
belong to you, and&nbsp;you&nbsp;only
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding,
chapters, location, persons, soundbites, …
- 💬 &nbsp;Built-in social network:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes
- 📈 &nbsp;Built-in analytics:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant
- 🪙 &nbsp;Standard IABv2 audience measurement
- 🏡 &nbsp;On-premises analytics, no third party involved
- 📢 &nbsp;Built-in marketing tools:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: install as a standalone app
- 🎨 &nbsp;Customizable theme colors
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes
- 🔉 &nbsp;Generate soundbites
- ▶️ &nbsp;Embeddable player, embed your episodes on any website
- 💸 &nbsp;Monetization:
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🌱 &nbsp;Libero, gratuito e open-source (Licenza AGPL v3)
- 🔐 &nbsp;orientato alla sovranità dei dati: il tuo contenuto, la tua audience e le tue statistiche ti appartengono e solo a te
- 🪄&nbsp;Funzionalità del Podcasting 2.0: GUID, blocco, trascrizioni, finanziamento, capitoli, geolocalizzazione, ospiti, estratti audio, ...
- 💬 &nbsp;Social network integrato:
- 🚀 &nbsp;Castopod fa parte del Fediverso, una rete sociale decentralizzata
- ❤️ &nbsp;Crea pubblicazioni, condividi, metti in preferiti e commenta gli episodi
- 📈 &nbsp;Statistiche integrate:
- ⚖️ &nbsp;Conforme GDPR / CCPA / LGPD
- 🪙&nbsp;Misurazione dell'audience IABv2
- 🏡 &nbsp;Statistiche integrate, nessuna terza parte coinvolta
- 📢 &nbsp;Strumenti di marketing integrati:
- ✅ &nbsp;Pronto per l'ottimizzazione per i motori di ricerca (metadati open-graph, JSON-LD...)
- 📱 &nbsp;PWA: installa come app standalone
- 🎨 &nbsp;Colori del tema personalizzabili
- 🎬 &nbsp;Genera clip video pronte per la condivisione dagli episodi
- 🔉 &nbsp;Genera estratti audio
- ▶️ &nbsp;Incorpora i tuoi episodi in qualsiasi sito web
- 💸 &nbsp;Monetizzazione:
- 🔗 &nbsp;Link di finanziamento
- 📲 &nbsp;pubblicità "listen-to-click"
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod
- 📤 &nbsp;Move your podcast out of Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want
- 👥 &nbsp;Multi-user: add contributors and set roles
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
- 💎 &nbsp;Podcast premium
- 📡&nbsp;Pubblica i tuoi episodi ovunque con RSS:
- 📱 &nbsp;Su tutti gli indici e le applicazioni: Podcast Index, Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend...
- ⚡&nbsp;Trasmetti i tuoi episodi istantaneamente con WebSub
- 📥 &nbsp;Importa il tuo podcast: sposta il tuo podcast esistente su Castopod
- 📤 &nbsp;Sposta il tuo podcast su un altro servizio di hosting
- 🔀 &nbsp;Multi-tenant: ospita quanti podcast desideri
- 👥 &nbsp;Multi-utente: aggiungi contributori e assegna i loro ruoli
- 🌎 &nbsp;supporto i18n: tradotto in inglese, francese, polacco, tedesco, portoghese, brasiliano e spagnolo... e [altro in futuro](https://translate.castopod.org)!
## Motivation
## Perché Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
L'ecosistema del podcasting è decentralizzato per natura: puoi creare il tuo podcast come file RSS, pubblicarlo sul web e farlo condividere ovunque online.
It is in fact one of the only media to have stayed this way for a long time.
È infatti uno dei pochi mezzi di comunicazione che è rimasto così a lungo.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
Con l'evolversi degli usi, sempre più persone si stanno avvicinando ai podcast: sia che si tratti di creatori che cercano nuovi modi per condividere le proprie idee, sia che si tratti di ascoltatori alla ricerca di contenuti migliori.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
Con l'aumento dell'uso dei podcast, alcune aziende stanno cercando di trasformarlo in un mezzo più controllato e centralizzato.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
Castopod è stato creato con l'obiettivo di fornire un'alternativa aperta e sostenibile all'hosting dei tuoi podcast, promuovendo la decentralizzazione per garantire che la creatività dei podcaster possa esprimersi.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
Questo progetto è sostenuto dalla comunità open-source, e in particolare dai movimenti [Fediverse](https://fediverse.party/en/fediverse/) e [Podcasting 2.0](https://podcastindex.org/).
## Comparison with other solutions
## Confronto con altre soluzioni
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for&nbsp;you.
Crediamo che una soluzione non sia necessariamente adatta a tutti, dipende molto dalle tue esigenze. Ecco quindi alcuni confronti con altri strumenti per aiutarti a valutare se Castopod è quello giusto per te.
### Castopod vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running&nbsp;it.
Castopod viene spesso definito come "il Wordpress dei podcast" a causa delle somiglianze tra i due. In qualche modo è vero. E in realtà, Castopod è stato fortemente ispirato dall'ecosistema di Wordpress, vedendo la facilità di adozione da parte della comunità e il numero di siti web che lo utilizzano.
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
Proprio come Wordpress, Castopod è gratuito e open source, costruito con PHP e un database MySQL e viene confezionato in modo da poterlo facilmente installare sulla maggior parte dei server web.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
Wordpress è un ottimo modo per creare il tuo sito web e personalizzarlo con plugin per ottenere quello che vuoi. È un CMS completo che ti aiuta a creare qualsiasi tipo di sito web.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting&nbsp;journey.
D'altra parte, Castopod è stato creato per soddisfare specificamente le esigenze dei podcaster, concentrandosi sul podcasting e basta. Non hai bisogno di nessun plugin per cominciare il tuo percorso nel mondo dei podcast.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
Ciò consente di ottimizzare i processi specifici del podcasting: dalla creazione del tuo podcast alla pubblicazione di nuovi episodi, fino alla diffusione, al marketing ed alle analisi.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
Infine, a seconda delle tue esigenze, Wordpress e Castopod possono perfettamente convivere in quanto condividono gli stessi requisiti!
### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
Funkwhale è un server musicale auto-ospitato, moderno, gratuito e open source. Come Castopod, Funkwhale fa parte del Fediverso, una rete sociale decentralizzata che permette l'interoperabilità tra i due.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
Funkwhale è stato inizialmente costruito intorno alla musica. E successivamente, con l'evoluzione del progetto, è stata introdotta la possibilità di ospitare podcast.
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
A differenza di Funkwhale, Castopod è stato progettato e costruito esclusivamente intorno al podcasting. Ciò consente un'implementazione più facile delle funzionalità legate all'ecosistema del podcasting, come le funzionalità del podcasting 2.0 (trascrizioni, capitoli, posizioni, persone, ...).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
Quindi, è probabile che tu utilizzi Funkwhale se desideri ospitare la tua musica e utilizzi Castopod se desideri ospitare i tuoi podcast.
### Castopod vs other podcast hosts
### Castopod vs altri servizi di hosting dei podcast
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Ci sono molte soluzioni per ospitare i tuoi podcast, alcune delle quali sono davvero ottime e [molte di loro](https://podcastindex.org/apps) stanno aderendo alla fazione del Podcasting 2.0 proprio come Castopod!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
Ogni soluzione ha le sue peculiarità, puoi confrontarle con l'elenco delle caratteristiche.
That being said, there are two main differences with other podcasting solutions:
Detto questo, ci sono due differenze principali rispetto alle altre soluzioni per podcasting:
- Castopod can be self-hosted and is the only solution that allows you to keep
full control over what you produce. Also, as it is open-source, you can even
customize it as you wish.
- Castopod può essere auto-ospitato ed è l'unica soluzione che ti consente di mantenere il controllo completo su ciò che produci. D'altra parte, essendo open-source, hai il potere di modificarlo come desideri.
- Castopod is the only solution that currently integrates both a decentralized
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
- Castopod è l'unica soluzione che integra sia una rete sociale decentralizzata con ActivityPub che le funzionalità del "Podcasting 2.0", riducendo la distanza tra i due.
## Contributing
## Contribuire
Love Castopod and would like to help? Take a look at the following documentation
to get you&nbsp;started.
Ti piace Castopod e vorresti aiutare? Dai un'occhiata alla seguente documentazione per iniziare.
### Code of conduct
### Codice di condotta
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be&nbsp;tolerated.
Castopod ha adottato un codice di condotta a cui si aspetta che i partecipanti del progetto si attengano. Leggi il [CODE_OF_CONDUCT](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md) per capire quali azioni saranno e non saranno tollerate.
### Contributing guide
### Guida alla contribuzione
Read our [contributing guide](./contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
Leggi la nostra [guida alla contribuzione](./contributing/guidelines.md) per conoscere il nostro processo di sviluppo, come proporre correzioni di bug e miglioramenti, e come costruire e testare le tue modifiche a Castopod.
## Contributors
## Sostenitori ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Un ringraziamento a queste persone meravigliose ([chiave dei emoji](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
@ -177,67 +126,15 @@ Thanks goes to these wonderful people
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Romain de Laage"/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Lyonel Bernard"/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt="Christopher Lagonick-Weitzel"/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ernesto Acosta"/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">🐛</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/adrinux"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Adriano"/><br /><sub><b>Adriano</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#ideas-adrinux" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/vCroco"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Emanuele Carotenuto"/><br /><sub><b>Emanuele Carotenuto</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/robertomorgana"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Roberto Morgana"/><br /><sub><b>Roberto Morgana</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Metioche"><img src="https://avatars.githubusercontent.com/u/15211050?v=4?s=100" width="100px;" alt="Metioche"/><br /><sub><b>Metioche</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt="Bastien Luneteau"/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Cécile Ricordeau"/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Miś"/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt="Marcin Lewandowski"/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">🐛</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sebastian Janik"/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Karczmarczyk"/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="denis d"/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">🐛</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt="Douglas Kastle"/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">🐛</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="cExplorer"/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="ImaCrea"/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">🐛</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Jonas S"/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt="LEFEBVRE Yann"/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt="Sebastian Späth"/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">🐛</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="rocky III"/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt="Hermann Josef Eckl"/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Delhaye Cyrille"/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">🐛</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt="João Leandro"/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Angelos Chouvardas"/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt="Eivind"/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt="Ewen"/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt="forght"/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt="glottis0q"/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100" width="100px;" alt="ButterflyOfFire"/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt="Lucian I. Last"/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt="LuuzViir"/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt="CTHTC"/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt="Russian Retro"/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt="Marek L'ach"/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt="GunChleoc"/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt="GabiSnow"/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt="bendaha"/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt="Samuel Roland"/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Dimitri Regnier"/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100" width="100px;" alt="irithys"/><br /><sub><b>irithys</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sergi"/><br /><sub><b>Sergi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt="ghose (XoseM)"/><br /><sub><b>ghose (XoseM)</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/basen1982"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Andreas Olsson"/><br /><sub><b>Andreas Olsson</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/leonfrom"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="leonfrom"/><br /><sub><b>leonfrom</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/agentcobra57"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="agentcobra"/><br /><sub><b>agentcobra</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/alephoto85"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100" width="100px;" alt="Alessandro"/><br /><sub><b>Alessandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/liimee"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="liimee"/><br /><sub><b>liimee</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ahmedsabouni"><img src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100" width="100px;" alt="Ahmed Sabouni"/><br /><sub><b>Ahmed Sabouni</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KrzysztofDomanczyk"><img src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100" width="100px;" alt="KrzysztofDomanczyk"/><br /><sub><b>KrzysztofDomanczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pizzapieball"><img src="https://avatars.githubusercontent.com/u/8199516?v=4?s=100" width="100px;" alt="pizzapieball"/><br /><sub><b>pizzapieball</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/raiwa03"><img src="https://avatars.githubusercontent.com/u/5203107?v=4?s=100" width="100px;" alt="Raiwa"/><br /><sub><b>Raiwa</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/krzysztof-domanczyk"><img src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100" width="100px;" alt="Krzysztof Domanczyk"/><br /><sub><b>Krzysztof Domanczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
</tr>
</tbody>
</table>
@ -247,43 +144,36 @@ Thanks goes to these wonderful people
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
Questo progetto segue le specifiche di [all-contributors](https://github.com/all-contributors/all-contributors). Contributi di qualsiasi tipo sono benvenuti!
## Contact
## Contattaci
You may reach us for help or ask any question you have on:
Puoi contattarci per ottenere aiuto o fare qualsiasi domanda su:
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for
feature requests & bug reports)
- [Discord](https://castopod.org/discord) (per chattare in tempo reale con gli sviluppatori e la community)
- [Tracciamento dei problemi](https://code.castopod.org/adaures/castopod/-/issues) (per ogni richiesta di nuova funzionalità o segnalazione di bug)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
In alternativa, puoi seguirci sui social media per rimanere aggiornato sulle novità di Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon Instance)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponsors
## Sostenitori
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
Lo sviluppo continuativo di Castopod è reso possibile grazie al supporto dei suoi sostenitori. Se vuoi aiutare, considera di [sostenere lo sviluppo di Castopod](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Logo di Ad Aures" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="Logo di NLnet" class="h-16" /></a>
</div>
## License
## Licenza
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
Diritti d'autore © 2020-presente, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg

View File

@ -1,4 +1,4 @@
{
"label": "Contributing",
"label": "Bijdragen",
"position": 3
}

View File

@ -1,154 +1,147 @@
---
title: Guidelines
title: Richtlijnen
---
# Contributing to Castopod
# Bijdragen aan Castopod
Love Castopod and want to help? Thanks so much, there's something to do for
everybody!
Hou je van Castopod en wil je helpen? Bedankt, er is voor iedereen iets te doen!
Please take a moment to review this document in order to make the contribution
process easy and effective for everyone involved.
Neem even de tijd om dit document door te nemen om het bijdrageproces makkelijk en effectief te maken voor alle betrokkenen.
Following these guidelines helps to communicate that you respect the time of the
developers managing and developing this open source project. In return, they
should reciprocate that respect in addressing your issue or assessing patches
and features.
Het volgen van deze richtlijnen laat zien dat je respect hebt voor de tijd van de ontwikkelaars die dit open source project beheren en ontwikkelen. Zij zouden dat respect moeten beantwoorden door zich bezig te houden met jouw probleem of het beoordelen van patches en functies.
::: info Note
::: info Opmerking
**Any** contribution made on a repository other than
[the original repository](https://code.castopod.org/adaures/castopod) will not
be accepted.
**Elke** bijdrage op een repository anders dan
[de oorspronkelijke repository](https://code.castopod.org/adaures/castopod) zal niet
geaccepteerd worden.
:::
## Using the issue tracker
## Gebruik van de issue tracker
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
Het [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is het
voorkeurskanaal voor [bugmeldingen](#bugmeldingen),
[verzoek om functies](#functieverzoeken) en
[het indienen van pull-aanvragen](#pull-aanvragen).
## ⚠️ Security issues and vulnerabilities
## ⚠️ Veiligheidsproblemen en kwetsbaarheden
If you encounter any security issue or vulnerability in the Castopod source,
please contact us directly by email at
Als je een veiligheidsprobleem of kwetsbaarheid tegenkomt in de Castopod broncode,
neem dan direct contact met ons op via e-mail op
[security@castopod.org](mailto:security@castopod.org)
## Bug reports
## Bugmeldingen
A bug is a _demonstrable problem_ that is caused by the code in the repository.
Good bug reports are extremely helpful - thank you!
Een bug is een _aantoonbaar probleem_ dat wordt veroorzaakt door de code in de repository.
Goede bugmeldingen zijn erg nuttig - bedankt!
Guidelines for bug reports:
Richtlijnen voor bugmeldingen:
1. **Use the issue search** &mdash; check if the issue has already been
reported.
1. **Gebruik de probleemzoeker** &mdash; controleer of het probleem al
gemeld is.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the
latest `main` branch in the repository.
2. **Controleer of het probleem is opgelost** &mdash; probeer het te reproduceren met behulp van de
laatste versie van de `main` branch in de repository.
3. **Isolate the problem** &mdash; ideally create a
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
3. **Isoleer het probleem** &mdash; creëer idealiter een
[gereduceerd testgeval](https://css-tricks.com/reduced-test-cases/) en een live
voorbeeld.
A good bug report shouldn't leave others needing to chase you up for more
information. Please try to be as detailed as possible in your report. What is
your environment? What steps will reproduce the issue? What browser(s) and OS
experience the problem? What would you expect to be the outcome? All these
details will help people to fix any potential bugs.
Een goede bugmelding zou anderen niet moeten dwingen om je achterna te gaan voor meer
informatie. Probeer alsjeblieft zo gedetailleerd mogelijk te zijn in jouw rapport. Wat is
jouw omgeving? Welke stappen zullen het probleem reproduceren? Welke browser(s) en besturingssytemen
ondervinden het probleem? Wat zou je verwachten als resultaat? Al deze
details zullen mensen helpen om eventuele fouten op te lossen.
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> have been created for this project. You may use them to help you follow those
> guidelines.
> [Issue sjablonen](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> zijn gemaakt voor dit project. Je kunt ze gebruiken om je te helpen deze richtlijnen te volgen.
## Feature requests
## Functieverzoeken
Feature requests are welcome. But take a moment to find out whether your idea
fits with the scope and aims of the project. It's up to _you_ to make a strong
case to convince the project's developers of the merits of this feature. Please
provide as much detail and context as possible.
Functieverzoeken zijn welkom. Maar neem even de tijd om te controleren of jouw idee
past binnen de reikwijdte en doelstellingen van het project. Het is aan _jou_ om een sterke
zaak te maken om de ontwikkelaars van het project te overtuigen van de waarde van deze functie. Geef alsjeblieft
zoveel mogelijk details en context.
## Pull requests
## Pull-aanvragen
Good pull requests - patches, improvements, new features - are a fantastic help.
They should remain focused in scope and avoid containing unrelated commits.
Goede pull-aanvragen - patches, verbeteringen, nieuwe functies - zijn fantastisch. Ze moeten gericht blijven en geen ongerelateerde commits bevatten.
**Please ask first** before embarking on any significant pull request (e.g.
implementing features, refactoring code, porting to a different language),
otherwise you risk spending a lot of time working on something that the
project's developers might not want to merge into the project.
**Vraag alsjeblieft eerst om toestemming** voordat je aan een significante pull-aanvraag begint (bijvoorbeeld
het implementeren van functies, code refactoring, porteren naar een andere taal),
anders loop je het risico veel tijd te besteden aan iets dat de
ontwikkelaars van het project mogelijk niet willen samenvoegen.
Please adhere to the coding conventions used throughout a project (indentation,
accurate comments, etc.) and any other requirements (such as test coverage).
Houd je alsjeblieft aan de coderingsconventies die door het project worden gebruikt (inspringing,
nauwkeurige opmerkingen, etc.) en aan andere vereisten (zoals testdekking).
Adhering to the following process is the best way to get your work included in
the project:
Het volgen van het volgende proces is de beste manier om ervoor te zorgen dat jouw werk wordt opgenomen.
in het project:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the
project, clone your fork, and configure the remotes:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) het
project, kloon je fork en configureer de remotes:
```bash
# Clone your fork of the repo into the current directory
git clone https://code.castopod.org/<your-username>/castopod.git
# Kloon je repositoryfork naar de huidige map
git clone https://code.castopod.org/<jouw-gebruikersnaam>/castopod.git
# Navigate to the newly cloned directory
# Navigeer naar de nieuw gekloonde map
cd castopod
# Assign the original repo to a remote called "upstream"
# Koppel de originele repository aan een remote genaamd "upstream"
git remote add upstream https://code.castopod.org/adaures/castopod.git
```
2. If you cloned a while ago, get the latest changes from upstream:
2. Als je al een tijdje geleden hebt gekloond, haal je de nieuwste wijzigingen op van upstream:
```bash
git checkout main
git pull upstream main
```
3. Create a new topic branch (off the `main` branch) to contain your feature,
change, or fix:
3. Maak een nieuwe onderwerp-branch (van de `main` branch) om jouw functie,
wijziging of oplossing in op te nemen:
```bash
git checkout -b <topic-branch-name>
git checkout -b <onderwerp-branch-naam>
```
4. Commit your changes in logical chunks. Please adhere to these
[git commit message guidelines](https://conventionalcommits.org/) or your
code is unlikely be merged into the main project. Use Git's
[interactive rebase](https://help.github.com/articles/about-git-rebase/)
feature to tidy up your commits before making them public.
4. Commit jouw wijzigingen in logische delen. Houd je alsjeblieft aan deze
[richtlijnen voor git commits](https://conventionalcommits.org/) anders zal jouw
code waarschijnlijk niet worden samengevoegd met het hoofdproject. Gebruik Git's
[interactieve rebase](https://help.github.com/articles/about-git-rebase/)
functie om jouw commits op te schonen voordat je ze openbaar maakt.
5. Locally merge (or rebase) the upstream dev branch into your topic branch:
5. Combineer lokaal (met behulp van merge of rebase) de upstream-ontwikkelingsbranch met jouw onderwerp-branch:
```bash
git pull [--rebase] upstream main
```
6. Push your topic branch up to your fork:
6. Push jouw onderwerp-branch naar jouw fork:
```bash
git push origin <topic-branch-name>
git push origin <onderwerp-branch-naam>
```
7. [Open a Pull Request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
with a clear title and description.
7. [Open een pull-aanvraag](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
met een duidelijke titel en beschrijving.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
license your work under the terms of the
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
**BELANGRIJK**: Door een patch in te dienen, stem je ermee in dat de eigenaren van het project
jouw werk onder de voorwaarden van de
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE) kunnen licenseren.
## Collaborating guidelines
## Richtlijnen voor samenwerking
There are few basic rules to ensure high quality of the project:
Er zijn een paar basisregels om de kwaliteit van het project te waarborgen:
- Before merging, a PR requires at least two approvals from the collaborators
unless it's an architectural change, a large feature, etc. If it is, then at
least 50% of the core team have to agree to merge it, with every team member
having a full veto right. (i.e. every single one can block any PR)
- A PR should remain open for at least two days before merging (does not apply
for trivial contributions like fixing a typo). This way everyone has enough
time to look into it.
- Voor het samenvoegen van een PR zijn ten minste twee goedkeuringen van de samenwerkers
vereist, tenzij het om een architecturale wijziging, een grote functie, etc. gaat. In dat geval moet
minstens 50% van het kernteam akkoord gaan met het samenvoegen, waarbij elk teamlid
een volledig vetorecht heeft. (d.w.z. dat iedereen elke PR kan blokkeren)
- Een PR moet minstens twee dagen open blijven voordat het wordt samengevoegd (geldt niet
voor triviale bijdragen zoals het corrigeren van een typefout). Op deze manier heeft iedereen voldoende
tijd om ernaar te kijken.
You are always welcome to discuss and propose improvements to this guideline.
Je bent altijd welkom om deze richtlijn te bespreken en verbeteringen voor te stellen.

View File

@ -1,36 +1,31 @@
---
title: Development setup
title: Ontwikkelomgeving instellen
sidebarDepth: 3
---
# Setup your development environment
# Stel je ontwikkelomgeving in
## Introduction
## Inleiding
Castopod is a web app based on the `php` framework
[CodeIgniter 4](https://codeigniter.com).
Castopod is een web-app gebaseerd op het `php` framework [CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
We gebruiken [Docker](https://www.docker.com/) om snel een ontwikkelomgeving in te stellen. Een `docker-compose.yml` en `Dockerfile` zijn opgenomen in de hoofdmap van het project om je op weg te helpen met je bijdrage.
> You don't need any prior knowledge of Docker to follow the next steps.
> However, if you wish to use your own environment, feel free to do so!
> Je hebt geen voorkennis van Docker nodig om de volgende stappen te volgen. Als je echter je eigen omgeving wilt gebruiken, voel je vrij om dat te doen!
## Setup instructions
## Instructies voor installatie
### 1. Pre-requisites
### 1. Benodigdheden
0. Install [docker](https://docs.docker.com/get-docker).
0. Installeer [docker](https://docs.docker.com/get-docker).
1. Clone Castopod project by running:
1. Clone het Castopod project door het volgende commando uit te voeren:
```bash
git clone https://code.castopod.org/adaures/castopod.git
```
2. Create a `.env` file with the minimum required config to connect the app to
the database and use redis as a cache handler:
2. Maak een `.env`-bestand aan met de minimale vereiste configuratie om de app te verbinden met de database en redis te gebruiken als cache handler:
```ini
CI_ENVIRONMENT="development"
@ -62,362 +57,86 @@ to help you kickstart your contribution.
#cache.handler="file"
```
> _NB._ You can tweak your environment by setting more environment variables
> in your custom `.env` file. See the `env` for examples or the
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
> for more info.
> _NB._ Je kunt je omgeving aanpassen door meer omgevingsvariabelen in je aangepaste `.env`-bestand in te stellen. Zie `env` voor voorbeelden of de [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) voor meer informatie.
3. (for docker desktop) Add the repository you've cloned to docker desktop's
`Settings` > `Resources` > `File Sharing`
3. (voor docker desktop) Voeg de repository die je hebt gekloond toe aan `Settings` > `Resources` > `File Sharing` van Docker desktop.
### 2. (recommended) Develop inside the app Container with VSCode
### 2. (aanbevolen) Ontwikkel binnen de app container met VSCode
If you're working in VSCode, you can take advantage of the `.devcontainer/`
folder. It defines a development environment (dev container) with preinstalled
requirements and VSCode extensions so you don't have to worry about them. All
required services will be loaded automagically! 🪄
Als je werkt in VSCode, kun je gebruikmaken van de `.devcontainer/` map. Hiermee definieer je een ontwikkelomgeving (dev container) met vooraf geïnstalleerde vereisten en VSCode-extensies, zodat je je daar geen zorgen over hoeft te maken. Alle vereiste services worden automatisch geladen! 🪄
1. Install the VSCode extension
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Open in container`
1. Installeer de VSCode-extensie [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).
2. `Ctrl/Cmd + Shift + P` > `Openen in container`
> The VSCode window will reload inside the dev container. Expect several
> minutes during first load as it is building all necessary services.
> Het VSCode-venster wordt opnieuw geladen in de development container. Verwacht enkele minuten tijdens de eerste keer laden, omdat alle benodigde services worden opgebouwd.
**Note**: The dev container will start by running Castopod's php server.
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
**Let op**: De ontwikkelcontainer wordt gestart door de php-server van Castopod uit te voeren. Tijdens de ontwikkeling moet je de [Vite](https://vitejs.dev) dev-server starten voor het compileren van de TypeScript-code en stijlen:
```bash
# run Vite dev server
# voer Vite dev server uit
npm run dev
```
If there is any issue with the php server not running, you can restart them
using the following commands:
Als er problemen zijn met de php-server die niet wordt uitgevoerd, kun je deze opnieuw starten met de volgende commando's:
```bash
# run Castopod server
# voer Castopod server uit
php spark serve - 0.0.0.0
```
3. You're all set! 🎉
3. Je bent klaar! 🎉
You're now **inside the dev container**, you may use the VSCode console
(`Terminal` > `New Terminal`) to run any command:
Je bent nu **binnen de dev container**, je kunt de VSCode-console (`Terminal` > `Nieuwe Terminal`) gebruiken om elk commando uit te voeren:
```bash
# PHP is installed
# PHP is geïnstalleerd
php -v
# Composer is installed
# Composer is geïnstalleerd
composer -V
# npm is installed
# npm is geïnstalleerd
npm -v
# git is installed
# git is geïnstalleerd
git version
```
For more info, see
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
Voor meer informatie, zie [VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers).
### 3. Start hacking
### 3. Begin met programmeren
You're all set! Start working your magic by updating the project's files! Help
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
Je bent klaar! Begin met het bijwerken van de bestanden van het project! Raadpleeg de [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) voor meer inzicht.
To see your changes, go to:
Om je wijzigingen te zien, ga naar:
- `http://localhost:8080/` for the Castopod app
- `http://localhost:8888/` for the phpmyadmin interface:
- `http://localhost:8080/` voor de Castopod-app
- `http://localhost:8888/` voor de phpmyadmin-interface:
- username: **castopod**
- password: **castopod**
- gebruikersnaam: **castopod**
- wachtwoord: **castopod**
### 2-alt. Develop outside the app container
### 2-alt. Ontwikkelen buiten de app-container
You do not wish to use the VSCode devcontainer? No problem!
Wil je de VSCode-devcontainer niet gebruiken? Geen probleem!
1. Start docker containers manually:
1. Start de Docker-containers handmatig:
Go to project's root folder and run:
Ga naar de hoofdmap van het project en voer het volgende commando uit:
```bash
# starts all services declared in docker-compose.yml file
# -d option starts the containers in the background
# start alle services die zijn gedeclareerd in het docker-compose.yml-bestand
# de optie -d start de containers op de achtergrond
docker-compose up -d
# See all running processes (you should see 3 processes running)
# Bekijk alle actieve processen (je zou 3 processen moeten zien uitgevoerd worden)
docker-compose ps
# Alternatively, you can check all docker processes
# Als alternatief kun je alle Docker-processen bekijken
docker ps -a
```
> The `docker-compose up -d` command will boot 4 containers in the
> background:
> Het commando `docker-compose up -d` start 4 containers op de achtergrond:
>
> - `castopod_app`: a php based container with Castopod requirements
> installed
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries
> and pages caching
> - `castopod_mariadb`: a [mariadb](https://mariadb.org/) server for
> persistent data
> - `castopod_phpmyadmin`: a phpmyadmin server to visualize the mariadb
> database.
2. Run any command inside the containers by prefixing them with
`docker-compose run --rm app`:
```bash
# use PHP
docker-compose run --rm app php -v
# use Composer
docker-compose run --rm app composer -V
# use npm
docker-compose run --rm app npm -v
# use git
docker-compose run --rm app git version
```
---
## Going Further
### Install Castopod's dependencies
1. Install php dependencies with [Composer](https://getcomposer.org/)
```bash
composer install
```
::: info Note
The php dependencies aren't included in the repository. Composer will check
the `composer.json` and `composer.lock` files to download the packages with
the right versions. The dependencies will live under the `vendor/` folder.
For more info, check out the
[Composer documentation](https://getcomposer.org/doc/).
:::
2. Install javascript dependencies with [npm](https://www.npmjs.com/)
```bash
npm install
```
::: info Note
The javascript dependencies aren't included in the repository. Npm will check
the `package.json` and `package.lock` files to download the packages with the
right versions. The dependencies will live under the `node_module` folder.
For more info, check out the [NPM documentation](https://docs.npmjs.com/).
:::
3. Generate static assets:
```bash
# build all static assets at once
npm run build:static
# build specific assets
npm run build:icons
npm run build:svg
```
::: info Note
The static assets generated live under the `public/assets` folder, it
includes javascript, styles, images, fonts, icons and svg files.
:::
### Initialize and populate database
::: tip Tip
You may skip this section if you go through the install wizard (go to
`/cp-install`).
:::
1. Build the database with the migrate command:
```bash
# loads the database schema during first migration
php spark migrate -all
```
You may need to undo the migration (rollback):
```bash
# rolls back database schema (deletes all tables and their content)
php spark migrate:rollback
```
2. Populate the database with the required data:
```bash
# Populates all required data
php spark db:seed AppSeeder
```
You may choose to add data separately:
```bash
# Populates all categories
php spark db:seed CategorySeeder
# Populates all Languages
php spark db:seed LanguageSeeder
# Populates all podcasts platforms
php spark db:seed PlatformSeeder
# Populates all Authentication data (roles definition…)
php spark db:seed AuthSeeder
```
3. (optionnal) Populate the database with test data:
- Populate test data (login: admin / password: AGUehL3P)
```bash
php spark db:seed TestSeeder
```
- Populate with fake podcast analytics:
```bash
php spark db:seed FakePodcastsAnalyticsSeeder
```
- Populate with fake website analytics:
```bash
php spark db:seed FakeWebsiteAnalyticsSeeder
```
TestSeeder will add an active superadmin user with the following credentials:
- username: **admin**
- password: **AGUehL3P**
### Useful docker / docker-compose commands
- Monitor the app container:
```bash
docker-compose logs --tail 50 --follow --timestamps app
```
- Interact with redis server using included redis-cli command:
```bash
docker exec -it castopod_redis redis-cli
```
- Monitor the redis container:
```bash
docker-compose logs --tail 50 --follow --timestamps redis
```
- Monitor the mariadb container:
```bash
docker-compose logs --tail 50 --follow --timestamps mariadb
```
- Monitor the phpmyadmin container:
```bash
docker-compose logs --tail 50 --follow --timestamps phpmyadmin
```
- Restart docker containers:
```bash
docker-compose restart
```
- Destroy all containers, opposite of `up` command:
```bash
docker-compose down
```
- Rebuild app container:
```bash
docker-compose build app
```
Check [docker](https://docs.docker.com/engine/reference/commandline/docker/) and
[docker-compose](https://docs.docker.com/compose/reference/) documentations for
more insights.
## Known issues
### Allocation failed - JavaScript heap out of memory
This happens when running `npm install`.
👉 By default, docker might not have access to enough RAM. Allocate more memory
and run `npm install` again.
### (Linux) Files created inside container are attributed to root locally
You may use Linux user namespaces to fix this on your machine:
::: info Note
Replace "username" with your local username
:::
1. Go to `/etc/docker/daemon.json` and add:
```json
{
"userns-remap": "username"
}
```
2. Configure the subordinate uid/guid:
```bash
# in /etc/subuid
username:1000:1
username:100000:65536
```
```bash
# in /etc/subgid
username:1000:1
username:100000:65536
```
3. Restart docker:
```bash
sudo systemctl restart docker
```
4. That's it! Now, the root user in the container will be mapped to the user on
your local machine, no more permission issues! 🎉
You can check
[this great article](https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/)
to know more about how it works.
> - `castopod_app`: een op php gebaseerde container met Castopod-vereisten geïnstalleerd
> - `castopod_redis`: een [redis](

View File

@ -1,4 +1,4 @@
{
"label": "Getting Started",
"label": "Aan de slag",
"position": 2
}

View File

@ -1,88 +1,88 @@
---
title: Authentication & Authorization
title: Authenticatie en Autorisatie
sidebarDepth: 3
---
# Authenticatie & Autorisatie
# Authenticatie en Autorisatie
Castopod gebruikt voor de authenticatie en autorisatie `codeigniter/schild` met
een aantal aangepaste regels. Rollen en permissies zijn gedefinieerd op twee
niveaus:
Castopod beheert authenticatie en autorisatie met behulp van
`codeigniter/shield` in combinatie met aangepaste regels. Rollen en
machtigingen zijn gedefinieerd op twee niveaus:
1. [globaal: serverbreed](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
1. [Instancebrede rollen en machtigingen](#1-instance-wide-roles-and-permissions)
2. [Per podcast](#2-per-podcast-roles-and-permissions)
## 1. Globale rollen en rechten
## 1. Instancebrede rollen en machtigingen
### Globale rollen
### Rollen in de instance
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| rol | omschrijving | rechten |
| ----------- | ------------------------------------------ | ------------------------------------------------------------------------------------------ |
| Super admin | Heeft de volledige controle over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Beheert de inhoud van Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Algemene gebruikers van Castopod. | admin.access |
| rol | beschrijving | machtigingen |
| ------------ | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Heeft volledige controle over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Beheert de inhoud van Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Gewone gebruikers van Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Globale rechten
### Machtigingen in de instance
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| recht | omschrijving |
| machtiging | beschrijving |
| ----------------------- | -------------------------------------------------------------------- |
| admin.access | Kan toegang krijgen tot de beheeromgeving van Castopod. |
| admin.settings | Kan toegang krijgen tot de instellingen van Castopod. |
| users.manage | Kan Castopod-gebruikers beheren. |
| admin.access | Kan toegang krijgen tot het Castopod-beheergebied. |
| admin.settings | Kan Castopod-instellingen bekijken en wijzigen. |
| users.manage | Kan gebruikers beheren. |
| persons.manage | Kan personen beheren. |
| pages.manage | Kan pagina's beheren. |
| podcasts.view | Kan alle podcasts bekijken. |
| podcasts.create | Kan nieuwe podcast aanmaken. |
| podcasts.create | Kan nieuwe podcasts aanmaken. |
| podcasts.import | Kan podcasts importeren. |
| fediverse.manage-blocks | Kan fediverse actors/domains blokkeren voor interactie met Castopod. |
| fediverse.manage-blocks | Kan fediverse actoren/domeinen blokkeren zodat ze niet kunnen communiceren met Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast rollen en permissies
## 2. Rollen en machtigingen per podcast
### Per podcast rollen
### Rollen per podcast
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| rol | omschrijving | rechten |
| ------ | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Heeft de volledige controle over podcast #{id}. | \* |
| Editor | Beheert inhoud en publicaties van podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Author | Beheert de inhoud van podcast #{id} maar kan deze niet publiceren. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | Algemene bijdrager van podcast #{id}. | view, episodes.view |
| rol | beschrijving | machtigingen |
| ------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Heeft volledige controle over podcast #{id}. | \* |
| Editor | Beheert de inhoud en publicaties van podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Auteur | Beheert de inhoud van podcast #{id}, maar kan deze niet publiceren. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gast | Algemene bijdrager van podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per aflevering rollen
### Machtigingen per podcast
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| recht | omschrijving |
| ---------------------------- | -------------------------------------------------------------------------------------- |
| view | Kan dashboard en statistieken van podcast #{id} zien. |
| edit | Kan podcast #{id} wijzigen. |
| delete | Kan podcast #{id} verwijderen. |
| manage-import | Kan de geïmporteerde podcast #{id} synchroniseren. |
| manage-persons | Kan personen van podcast #{id} beheren. |
| manage-subscriptions | Kan abonnees van podcast #{id} beheren. |
| manage-contributors | Kan bijdragers van podcast #{id} beheren. |
| manage-platforms | Kan platform links van podcast #{id} instellen of verwijderen. |
| manage-publications | Kan podcast #{id} publiceren. |
| manage-notifications | Kan meldingen voor podcast #{id} bekijken en als gelezen markeren. |
| interact-as | Kan als podcast #{id} handelen om te favorieten, te delen of te reageren op berichten. |
| episodes.view | Kan dashboard en statistieken van podcast #{id} zien. |
| episodes.create | Kan afleveringen voor podcast #{id} aanmaken. |
| episodes.edit | Kan afleveringen van podcast #{id} wijzigen. |
| episodes.delete | Kan afleveringen van podcast #{id} verwijderen. |
| episodes.manage-persons | Kan personen in aflevering van podcast #{id} beheren. |
| episodes.manage-clips | Kan videoclips of soundbites van podcast #{id} beheren. |
| episodes.manage-publications | Kan afleveringen van podcast #{id} publiceren. |
| episodes.manage-comments | Kan reacties op afleveringen van podcast #{id} maken of verwijderen. |
| machtiging | beschrijving |
| ------------------------ | ------------------------------------------------------------------------------------------------- |
| view | Toegang tot het dashboard en de analyse van podcast #{id}. |
| edit | Kan podcast #{id} bewerken. |
| delete | Kan podcast #{id} verwijderen. |
| manage-import | Kan geïmporteerde podcast #{id} synchroniseren. |
| manage-persons | Kan abonnees beheren van podcast #{id}. |
| manage-subscriptions | Kan abonnementen beheren van podcast #{id}. |
| manage-contributors | Kan bijdragers beheren van podcast #{id}. |
| manage-platforms | Kan koppelingen naar podcast #{id} platformen configureren/verwijderen. |
| manage-publications | Kan podcast #{id} publiceren. |
| manage-notifications | Kan meldingen voor podcast #{id} bekijken en markeren als gelezen. |
| interact-as | Kan namens podcast #{id} interacties toevoegen, delen of beantwoorden. |
| episodes.view | Kan dashboard en analyses van podcast #{id} bekijken. |
| episodes.create | Kan afleveringen maken voor podcast #{id}. |
| episodes.edit | Kan podcast #{id} bewerken. |
| episodes.delete | Kan podcast #{id} verwijderen. |
| episodes.manage-persons | Kan abonnees beheren van podcast #{id}. |
| episodes.manage-clips | Kan videoclips of audiofragmenten van podcast #{id} beheren. |
| episodes.manage-publications | Kan podcast #{id} publiceren. |
| episodes.manage-comments | Kan opmerkingen maken/verwijderen voor afleveringen van podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -1,35 +1,28 @@
---
title: Official Docker images
title: Officiële Docker-afbeeldingen
sidebarDepth: 3
---
# Official Docker images
# Officiële Docker-afbeeldingen
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
Tijdens het geautomatiseerde bouwproces maakt Castopod gebruik van 3 Docker-afbeeldingen die naar de Docker-hub worden gestuurd:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all
in one castopod image using nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): een alles-in-één Castopod-afbeelding met behulp van NGINX Unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): de app-bundel met alle afhankelijkheden van Castopod
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): een NGINX-configuratie voor Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
Daarnaast heeft Castopod een MySQL-compatibele database nodig. Een Redis-database kan worden toegevoegd als cachebeheerder.
## Supported tags
## Ondersteunde tags
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
- `latest` [onstabiel], de nieuwste ontwikkelingsversie
- `beta` [stabiel], de nieuwste bètaversie
- `1.x.x` [stabiel], specifieke versie (vanaf `1.0.0`)
## Example usage
## Gebruik voorbeeld
1. Install [docker](https://docs.docker.com/get-docker/) and
[docker-compose](https://docs.docker.com/compose/install/)
2. Create a `docker-compose.yml` file with the following:
1. Installeer [docker](https://docs.docker.com/get-docker/) en [docker-compose](https://docs.docker.com/compose/install/)
2. Maak een `docker-compose.yml`-bestand met de volgende inhoud:
```yml
version: "3.7"
@ -87,13 +80,11 @@ can be added as a cache handler.
castopod-db:
```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
Pas enkele variabelen aan naar jouw wensen (bijvoorbeeld `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` en `CP_ANALYTICS_SALT`).
3. Setup a reverse proxy for TLS (SSL/HTTPS)
3. Configureer een reverse proxy voor TLS (SSL/HTTPS)
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
TLS is nodig voor ActivityPub om te werken. Dit kan eenvoudig worden geregeld met een reverse proxy, bijvoorbeeld met [Caddy](https://caddyserver.com/):
```
#castopod
@ -102,57 +93,56 @@ can be added as a cache handler.
}
```
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
4. Voer `docker-compose up -d` uit, wacht tot het geïnitialiseerd is op `https://castopod.example.com/cp-install` om de configuratie van Castopod te voltooien!
5. You're all set, start podcasting! 🎙️🚀
5. Je bent klaar om te podcasten! 🎙️🚀
## Environment Variables
## Omgevingsvariabelen
- **castopod/castopod** and **castopod/app**
- **castopod/castopod** en **castopod/app**
| Variable name | Type (`default`) | Default |
| ------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Variabelenaam | Type (`default`) | Standaardwaarde |
| -------------------------------- | ----------------------- | --------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE`|
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD`|
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` of `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` of `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` of `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
- **castopod/web-server**
| Variable name | Type | Default |
| ---------------------- | --------------------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Variabelenaam | Type | Standaardwaarde |
| ---------------------- | --------------------- | ----------------|
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |

View File

@ -1,221 +1,118 @@
---
title: Installation
title: Installatie
sidebarDepth: 3
---
# How to install Castopod?
# Hoe installeer ik Castopod?
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
Castopod is ontworpen om eenvoudig te installeren te zijn. Of je nu een
dedicated of shared hosting gebruikt, je kunt het installeren op de meeste
web servers die compatibel zijn met PHP-MySQL.
::: tip Note
::: tip Opmerking
We've released official Docker images for Castopod!
We hebben officiële Docker-afbeeldingen voor Castopod uitgebracht!
If you prefer using Docker, you may skip this and go straight to the
[docker documentation](./docker.md) for Castopod.
Als je Docker wilt gebruiken, kun je dit gedeelte overslaan en direct naar de [Docker-documentatie](./docker.md) voor Castopod gaan.
:::
## Requirements
## Vereisten
- PHP v8.1 only
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
- MySQL versie 5.7 of hoger of MariaDB versie 10.2 of hoger
- Ondersteuning voor HTTPS
- Een [ntp-gesynchroniseerde klok](https://wiki.debian.org/NTP) om binnenkomende verzoeken van de federatie te valideren
### PHP v8.1 only
PHP version 8.1 is required, with the following extensions installed:
PHP versie 8.1 is vereist, met de volgende geïnstalleerde extensies:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
**PNG** and **WEBP** libraries.
- [exif](https://www.php.net/manual/en/exif.installation.php)
- [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) met **JPEG**,
**PNG** en **WEBP** bibliotheken.
- [exif](https://www.php.net/manual/fr/exif.installation.php)
Additionally, make sure that the following extensions are enabled in your PHP:
Zorg er daarnaast voor dat de volgende extensies zijn ingeschakeld in je PHP:
- json (enabled by default - don't turn it off)
- xml (enabled by default - don't turn it off)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
- json (standaard ingeschakeld - niet uitschakelen)
- xml (standaard ingeschakeld - niet uitschakelen)
- [mysqlnd](https://www.php.net/manual/fr/mysqlnd.install.php)
### MySQL compatible database
### Compatibele MySQL-database
> We recommend using [MariaDB](https://mariadb.org).
> We raden aan om [MariaDB](https://mariadb.org) te gebruiken.
::: warning Warning
::: warning Let op
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
Castopod werkt alleen met MySQL-databases van versie 5.7 of hoger. Versies 5.6 (waarvan de ondersteuning op 5 februari 2021 is gestopt) of ouder werken niet.
:::
You will need the server hostname, database name, username and password to
complete the installation process. If you do not have these, please contact your
server administrator.
Je hebt de hostnaam van de server, de naam van de database, de gebruikersnaam en het wachtwoord nodig om het installatieproces te voltooien. Als je deze informatie niet hebt, neem dan contact op met je beheerder.
#### Privileges
#### Toegangsrechten
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
`REFERENCES`, `CREATE VIEW`.
De gebruiker moet in ieder geval de volgende toegangsrechten hebben op de database om Castopod te laten werken: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`,
`INDEX`,`INSERT`, `SELECT`, `UPDATE`,`REFERENCES`, `CREATE VIEW`.
### (Optional) FFmpeg v4.1.8 or higher for Video Clips
### (Optioneel) FFmpeg v4.1.8 of hoger voor videoclips
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required if you
want to generate Video Clips. The following extensions must be installed:
[FFmpeg](https://www.ffmpeg.org/) versie 4.1.8 of hoger is vereist als je videoclips wilt genereren. De volgende extensies moeten zijn geïnstalleerd:
- **FreeType 2** library for
[gd](https://www.php.net/manual/en/image.installation.php).
- **FreeType 2** bibliotheek voor [gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Other recommendations
### (Optioneel) Andere aanbevelingen
- Redis for better cache performances.
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
- Redis voor betere cache-prestaties.
- CDN voor het cachen van statische bestanden en betere prestaties.
- E-mail gateway voor verloren wachtwoorden.
## Install instructions
## Installatie-instructies
### Pre-requisites
### Vereisten
0. Get a Web Server with [requirements](#requirements) installed
1. Create a MySQL database for Castopod with a user having access and
modification privileges (for more info, see
[MySQL compatible database](#mysql-compatible-database)).
2. Activate HTTPS on your domain with an _SSL certificate_.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
the web server if you havent already.
- ⚠️ Set the web server document root to the `public/` sub-folder within the
`castopod` folder.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
0. Verkrijg een webserver met de geïnstalleerde [vereisten](#vereisten)
1. Maak een MySQL-database aan voor Castopod met een gebruiker met de juiste toegangsrechten en bewerkingsrechten (zie [compatibele MySQL-database](#comptible-mysql-database) voor meer informatie).
2. Zorg ervoor dat HTTPS is ingeschakeld op je domein met een _SSL-certificaat_.
3. Download en unzip het laatste [Castopod-pakket](https://castopod.org/) op de webserver als je dat nog niet hebt gedaan.
- ⚠️ Zorg ervoor dat de rootmap van het webdocument verwijst naar de `public/` submap van de `castopod` map.
4. Voeg **cron-taken** toe aan je webserver voor verschillende achtergrondprocessen (vervang de paden dienovereenkomstig):
```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1
* * * * * /pad/naar/php /pad/naar/castopod/spark tasks:run >> /dev/null 2>&1
```
**Note** - If you do not add this cron task, the following Castopod features
will not work:
**Opmerking** - Als je deze cron-taak niet toevoegt, werken de volgende Castopod-functies niet:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
[WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
- Het importeren van een podcast uit een bestaande RSS-feed
- Het delen van sociale activiteiten met je volgers in het Fediverse
- Het uitzenden van afleveringen naar open hubs met behulp van [WebSub](https://en.wikipedia.org/wiki/WebSub)
- Het genereren van videoclips - [vereist FFmpeg](#optioneel-ffmpeg-v418-of-hoger-voor-videoclips)
### (recommended) Install Wizard
### (Aanbevolen methode) Installatiewizard
1. Run the Castopod install script by going to the install wizard page
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
2. Follow the instructions on your screen.
3. Start podcasting!
1. Voer het Castopod-installatiescript uit door naar de installatiewizard-pagina (`https://your_domain_name.com/cp-install`) te gaan in je favoriete webbrowser.
2. Volg de weergegeven instructies.
3. Begin met podcasten!
::: info Note
:::info Opmerking
The install script writes a `.env` file in the package root. If you cannot go
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
Het installatiescript maakt een `.env`-bestand aan in de hoofdmap van het pakket. Als je de installatiewizard niet kunt gebruiken, kun je het `.env`-bestand handmatig maken en bewerken op basis van het `.env.example`-bestand.
:::
### Email/SMTP setup
### E-mail/SMTP-configuratie
Email configuration is required for some features to work properly (eg.
retrieving your forgotten password, sending instructions to premium subscribers,
…)
E-mailconfiguratie is vereist voor sommige functies om correct te werken (bijv. het ophalen van je vergeten wachtwoord, het verzenden van instructies naar premium-abonnees, ...)
You may add your email configuration in your instance's `.env` like so:
Je kunt je e-mailconfiguratie toevoegen aan het `.env`-bestand van je Castopod-instantie zoals hieronder weergegeven:
```ini
# []
# [...]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
```
#### Email config options
| Variable name | Type | Default |
| ---------------- | -------------------- | ------------ |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined` |
| **`SMTPPass`** | string | `undefined` |
| **`SMTPPort`** | number | `25` |
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
### Media storage
By default, files are saved to the `public/media` folder using the file system.
If you need to relocate the `media` folder to a different location, you can
specify it in your `.env` file as shown below:
```ini
# […]
media.root="media"
media.storage="/mnt/storage"
```
In this example, the files will be saved to the /mnt/storage/media folder. Make
sure to also update your web server configuration to reflect this change.
### S3
If you prefer storing your media files on an S3 compatible storage, you may
specify it in your `.env`:
```ini
# […]
media.fileManager="s3"
media.s3.endpoint="your_s3_host"
media.s3.key="your_s3_key"
media.s3.secret="your_s3_secret"
media.s3.region="your_s3_region"
```
#### S3 config options
| Variable name | Type | Default |
| ----------------------- | ------- | ----------- |
| **`endpoint`** | string | `undefined` |
| **`key`** | string | `undefined` |
| **`secret`** | string | `undefined` |
| **`region`** | string | `undefined` |
| **`bucket`** | string | `castopod` |
| **`protocol`** | number | `undefined` |
| **`pathStyleEndpoint`** | boolean | `false` |
| **`keyPrefix`** | string | `undefined` |
## Community packages
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
### Install with YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github
Repo</a>
</div>
email.SM

View File

@ -1,23 +1,19 @@
---
title: Security
title: Veiligheid
---
# Security concerns
# Veiligheidsvragen
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP
framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
Castopod is ontwikkeld op [CodeIgniter4](https://codeigniter.com/), een PHP-framework dat
[goede veiligheidspraktijken](https://codeigniter.com/user_guide/concepts/security.html) aanmoedigt.
To maximize your instance's safety and prevent any malicious attack, we
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
Om de veiligheid van uw instantie te waarborgen en kwaadwillige aanvallen te voorkomen, raden we u aan de bestandsmachtigingen van Castopod bij te werken na de installatie en elke update (en fouten in bestandstoegang te vermijden):
- `writable/` folder must be **readable** and **writable**.
- `public/media/` folder must be **readable** and **writable**.
- any other file must be set to **readonly**.
- De map `writable/` moet **leesbaar** en **schrijfbaar** zijn.
- De map `public/media/` moet **leesbaar** en **schrijfbaar** zijn.
- Alle andere bestanden moeten alleen **leesbaar** zijn.
For instance, if you are using Apache or NGINX with Ubuntu you may do the
following:
Bijvoorbeeld, als u Apache of NGINX gebruikt met Ubuntu, kunt u de volgende commando's uitvoeren:
```bash
sudo chown -R root:root /path/to/castopod

View File

@ -3,107 +3,93 @@ title: Update
sidebarDepth: 3
---
# How to update Castopod?
# Hoe Castopod te installeren?
After installing Castopod, you may want to update your instance to the latest
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
Nadat je Castopod hebt geïnstalleerd, kun je je instantie updaten naar de nieuwste versie om te profiteren van de nieuwste functies ✨, bugfixes 🐛 en prestatieverbeteringen ⚡.
## Update instructions
## Update-instructies
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
0. ⚠️ Voordat je een update uitvoert, raden we je ten zeerste aan om een back-up te maken van je Castopod-bestanden en database.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
- Zie
[Moet ik een back-up maken voordat ik update?](#should-i-make-a-backup-before-updating)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
1. Ga naar de
[releases-pagina](https://code.castopod.org/adaures/castopod/-/releases) en
controleer of je instantie up-to-date is met de nieuwste Castopod-versie.
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
- Zie
[Waar kan ik mijn Castopod-versie vinden?](#where-can-i-find-my-castopod-version)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
2. Download het meest recente release-pakket genaamd `Castopod Package`, je kunt kiezen tussen de `zip` of `tar.gz` archieven.
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
- ⚠️ Zorg ervoor dat je het Castopod Package downloadt en **NIET** de broncode.
- Let op dat je het nieuwste pakket ook kunt downloaden vanaf
[castopod.org](https://castopod.org/).
3. On your server:
3. Op je server:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
- Verwijder alle bestanden behalve `.env` en `public/media`.
- Kopieer de nieuwe bestanden van het gedownloade pakket naar je server.
::: info Note
::: info Opmerking
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
Mogelijk moet je de bestandsrechten opnieuw instellen, zoals je deed tijdens het installatieproces. Zie
[Beveiligingsproblemen](./security.md).
:::
4. Update your database schema from your `Castopod Admin` > `About` page or by
running:
4. Werk je databaseschema bij vanuit je `Castopod Admin` > `About` pagina of door het volgende uit te voeren:
```bash
php spark castopod:database-update
```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
5. Wis je cache vanuit je `Castopod Admin` > `Settings` > `general` >
`Housekeeping`.
6. ✨Geniet van je nieuwe instantie, je bent klaar!
::: info Note
::: info Opmerking
Releases may come with additional update instructions (see
[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
Versies kunnen aanvullende update-instructies bevatten (zie
[Releases-pagina](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
- Zie
[Wat moet ik doen als ik mijn instantie lange tijd niet heb bijgewerkt?](#je-nai-pas-mis-à-jour-mon-instance-depuis-longtemps-que-devrais-je-faire)
:::
## Fully Automated updates
## Volledig geautomatiseerde updates
> Coming soon... 👀
> Binnenkort beschikbaar... 👀
## Frequently asked questions (FAQ)
## Veelgestelde vragen (FAQ)
### Where can I find my Castopod version?
### Waar kan ik mijn Castopod-versie vinden?
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
Ga naar je Castopod-beheerderspaneel, de versie wordt weergegeven linksonder.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
Je kunt de versie ook vinden in de applicatie
`> Configuration > Constantes.php` map.
### I haven't updated my instance in a long time… What should I do?
### Wat moet ik doen als ik mijn instantie lange tijd niet heb bijgewerkt?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
Geen probleem! Haal gewoon de nieuwste versie op zoals hierboven beschreven. Bij het uitvoeren van de update-instructies (4), voer ze sequentieel uit, van oudste naar nieuwste.
> You may want to backup your instance depending on how long you haven't updated
> Castopod.
> Je moet je instance back-uppen op basis van de datum van je laatste Castopod-update.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
`v1.0.0-beta.1`:
Bijvoorbeeld, als je op `v1.0.0-alpha.42` zit en je wilt updaten naar `v1.0.0-beta.1`:
0. (highly recommended) Make a backup of your files and database.
0. (sterk aanbevolen) Maak een back-up van je bestanden en database.
1. Download the latest release, overwrite your files whilst keeping `.env` and
`public/media`.
1. Download de nieuwste versie, overschrijf je bestanden terwijl je `.env` en `public/media` behoudt.
2. Go through each release update instructions sequentially (from oldest to
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
2. Voer de update-instructies één voor één uit (van oudste naar nieuwste).
3. ✨ Enjoy your fresh instance, you're all done!
3. ✨Je nieuwe instantie is klaar!
### Should I make a backup before updating?
### Moet ik een back-up maken voordat ik update?
We advise you do, so you don't lose everything if anything goes wrong!
We raden je aan dit te doen, zodat je niets verliest als er iets misgaat!
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…
Over het algemeen raden we je aan regelmatig back-ups te maken van je Castopod-bestanden en database om te voorkomen dat je alles kwijtraakt...

View File

@ -2,171 +2,120 @@
sidebarDepth: 2
---
# Welcome 👋
# Welkom 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod is a free & open-source hosting platform made for podcasters who want
engage and interact with their audience.
Castopod is a gratis en open-source hostingplatform die is ontworpen voor podcasters die willen communiceren en interageren met hun publiek.
Castopod is easy to install and was built on top of
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
Castopod is eenvoudig te installeren en is gebouwd met [CodeIgniter4](https://codeigniter.com/), een krachtig PHP-framework van zeer kleine omvang.
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
<a href="/fr/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Installeren<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Features
## Kenmerken
- 🌱 &nbsp;Free & open-source (AGPL v3 License)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics
belong to you, and&nbsp;you&nbsp;only
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding,
chapters, location, persons, soundbites, …
- 💬 &nbsp;Built-in social network:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes
- 📈 &nbsp;Built-in analytics:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant
- 🪙 &nbsp;Standard IABv2 audience measurement
- 🏡 &nbsp;On-premises analytics, no third party involved
- 📢 &nbsp;Built-in marketing tools:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: install as a standalone app
- 🎨 &nbsp;Customizable theme colors
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes
- 🔉 &nbsp;Generate soundbites
- ▶️ &nbsp;Embeddable player, embed your episodes on any website
- 💸 &nbsp;Monetization:
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🤝 &nbsp;value4value / WebMonetization
- 🌱 &nbsp;Gratis, gratis en open-source (Licentie AGPL v3)
- 🔐 &nbsp;Gefocust op gegevenssoevereiniteit: uw inhoud, uw publiek en uw statistieken zijn van u en alleen van u
- 🪄&nbsp;Podcasting 2.0-functies: GUID, vergrendeling, transcripties, financiering, hoofdstukken, geolocatie, deelnemers, geluidsfragmenten, ...
- 💬 &nbsp;Geïntegreerd sociaal netwerk:
- 🚀 &nbsp;Castopod maakt deel uit van Fediverse, een gedecentraliseerd sociaal netwerk
- ❤️ &nbsp;Berichten maken, delen, markeren als favoriet en reageren op afleveringen
- 📈 &nbsp;Ingebouwde statistieken:
- ⚖️ &nbsp;Compatibel met GDPR / CCPA / LGPD
- 🪙&nbsp;IABv2 publieksmeting
- 🏡 &nbsp;Ingebouwde statistieken, geen tussenpartij
- 📢 &nbsp;Geïntegreerde marketingtools:
- ✅ &nbsp;Klaar voor SEO (open-graph metatags, JSON-LD, ...)
- 📱 &nbsp;PWA: installeer als standalone app
- 🎨 &nbsp;Aanpasbare themakleuren
- 🎬 &nbsp;Genereer deelklare videoclips van afleveringen
- 🔉 &nbsp;Genereer geluidsfragmenten
- ▶️ &nbsp;Integreer uw afleveringen op elke website
- 💸 &nbsp;Monetisatie:
- 🔗 &nbsp;Financieringslink
- 📲 &nbsp;advertenties "listen-to-click"
- 🤝 &nbsp;value4value / WebMonetisatie
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod
- 📤 &nbsp;Move your podcast out of Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want
- 👥 &nbsp;Multi-user: add contributors and set roles
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
- 📡 &nbsp;Publiceer uw afleveringen overal met RSS:
- 📱 &nbsp;Op alle indexen en apps: Podcast Index, Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, ...
- ⚡&nbsp;Stream uw afleveringen onmiddellijk via WebSub
- 📥 &nbsp;Podcast importeren: verplaats uw bestaande podcast naar Castopod
- 📤 &nbsp;Verhuis uw podcast naar een andere host
- 🔀 &nbsp;Multi-tenant: host zoveel podcasts als je wilt
- 👥 &nbsp;Multi-gebruiker: voeg bijdragers toe en definieer hun rollen
- 🌎 &nbsp;i18n-ondersteuning: vertaald in het Engels, Frans, Pools, Duits, Portugees, Braziliaans & Spaans... en [meer in de toekomst](https://translate.castopod.org)!
## Motivation
## Waarom Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
Het podcastecosysteem is van nature decentraal: je kunt je podcast maken als een RSS-bestand, het publiceren op het web en het overal online delen.
It is in fact one of the only media to have stayed this way for a long time.
Het is eigenlijk een van de weinige media die lange tijd op deze manier is gebleven.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
Naarmate het gebruik verandert, raken steeds meer mensen geïnteresseerd in podcasts: of het nu gaat om makers die nieuwe manieren vinden om hun ideeën te delen, of luisteraars die op zoek zijn naar betere inhoud.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
Met het steeds wijdverspreider gebruik van podcasting proberen sommige bedrijven het te verschuiven naar een meer gecontroleerd en gecentraliseerd medium.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
Castopod is gemaakt om een open en duurzaam alternatief te bieden voor het hosten van uw podcasts, en bevordert decentralisatie om ervoor te zorgen dat de creativiteit van podcasters zich kan uiten.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
Dit project wordt gesteund door de open-source community, en specifiek door de Fediverse- en Podcasting 2.0-bewegingen.
## Comparison with other solutions
## Vergelijking met andere oplossingen
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for&nbsp;you.
Wij zijn van mening dat een oplossing niet per se geschikt is voor iedereen, het hangt sterk af van uw behoeften. Hier zijn vergelijkingen met andere tools om u te helpen beoordelen of Castopod bij u&nbsp;past.
### Castopod vs Wordpress
### Castopod vs. Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running&nbsp;it.
Castopod wordt vaak aangeduid als "de Wordpress voor podcasts" vanwege de overeenkomsten tussen beide. In zekere zin is dit waar. En eigenlijk is Castopod sterk geïnspireerd door het Wordpress-ecosysteem, gezien de gemakkelijke acceptatie door de community en het aantal websites dat het gebruikt&nbsp;
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
Net als Wordpress is Castopod gratis & open-source, gebouwd met behulp van PHP en een MySQL-database en is het verpakt op een manier dat je het gemakkelijk kunt installeren op de meeste webservers.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
Wordpress is een geweldige manier om je website te maken en uit te breiden met plugins om te krijgen wat je wilt. Het is een volwaardig CMS waarmee je elk type website online kunt krijgen.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting&nbsp;journey.
Castopod daarentegen is bedoeld om specifiek aan de behoeften van podcasters te voldoen, waarbij de focus ligt op podcasting, en niets anders. Je hebt geen plugin nodig om aan de slag te gaan met je podcast-reis.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
Dit maakt het mogelijk om de processen die specifiek zijn voor podcasting te optimaliseren: van het maken van je podcasts en het publiceren van nieuwe afleveringen tot het uitzenden, promoten en analyseren van je podcasts.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
Uiteindelijk kunnen Wordpress en Castopod, afhankelijk van uw behoeften, zelfs naast elkaar bestaan omdat ze dezelfde vereisten delen!
### Castopod vs Funkwhale
### Castopod vs. Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
Funkwhale is een zelf-gehoste, moderne gratis en open-source muziekserver. Net als Castopod bevindt Funkwhale zich op het Fediverse, een gedecentraliseerd sociaal netwerk dat interoperabiliteit tussen de twee mogelijk maakt.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
Funkwhale is oorspronkelijk gebouwd rond muziek. Later, naarmate het project zich ontwikkelde, werd de mogelijkheid om podcasts te hosten geïntroduceerd.
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
In tegenstelling tot Funkwhale is Castopod exclusief ontworpen en gebouwd rond podcasting. Dit maakt het eenvoudiger om functies te implementeren die verband houden met het podcastecosysteem, zoals de podcasting 2.0-functies (transcripties, hoofdstukken, locaties, personen, ...).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
Je zou Funkwhale moeten gebruiken als je je muziek wilt hosten, en Castopod als je je podcasts wilt hosten.
### Castopod vs other podcast hosts
### Castopod vs. Andere podcasthosts
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Er zijn veel oplossingen voor het hosten van je podcasts, waarvan er vele echt geweldig zijn en [veel ervan](https://podcastindex.org/apps) springen net zo goed op de Podcasting 2.0-trein als Castopod!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
Elke oplossing verschilt van elkaar, je kunt vergelijken met de [lijst met functies](#features).
That being said, there are two main differences with other podcasting solutions:
Dat gezegd hebbende, zijn er twee belangrijke verschillen met andere podcastoplossingen:
- Castopod can be self-hosted and is the only solution that allows you to keep
full control over what you produce. Also, as it is open-source, you can even
customize it as you wish.
- Castopod kan zelf worden geïnstalleerd en is de enige oplossing waarmee u de volledige controle heeft over wat u produceert. Aan de andere kant, omdat het open-source is, heeft u de mogelijkheid om het aan uw behoeften aan te passen.
- Castopod is the only solution that currently integrates both a decentralized
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
- Castopod is de enige oplossing die op dit moment zowel een gedecentraliseerd sociaal netwerk met ActivityPub integreert als "Podcasting 2.0"-functionaliteiten, waardoor de kloof tussen beide wordt verkleind.
## Contributing
## Bijdragen
Love Castopod and would like to help? Take a look at the following documentation
to get you&nbsp;started.
Hou je van Castopod en wil je helpen? Bekijk de volgende documentatie om je op weg te helpen.
### Code of conduct
### Gedragscode
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be&nbsp;tolerated.
Castopod heeft een Gedragscode aangenomen waarvan we verwachten dat deelnemers aan het project zich eraan houden. Lees de [GEDRAGSREGELS](https://code.castopod.org/adaures/castopod/-/blob/beta/gedragsregels.md) zodat je begrijpt welke acties wel en niet zullen worden&nbsp;getolereerd.
### Contributing guide
### Bijdragengids
Read our [contributing guide](./contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
Lees onze [bijdragengids](./contributing/guidelines.md) om meer te weten te komen over ons ontwikkelingsproces, hoe je bugfixes en verbeteringen kunt voorstellen, en hoe je je wijzigingen in Castopod kunt bouwen en testen.
## Contributors ✨
## Bijdragers ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Dank aan deze geweldige mensen ([emoji sleutel](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
@ -174,126 +123,25 @@ Thanks goes to these wonderful people
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Romain de Laage"/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Lyonel Bernard"/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt="Christopher Lagonick-Weitzel"/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ernesto Acosta"/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">🐛</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&amp;state=all&amp;approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&amp;state=all&amp;approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=mattrude" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-benjamin" title="Maintenance">🚧</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&amp;state=all&amp;approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.federati.net/@spark"><img src="https://secure.gravatar.com/avatar/ebdc35166d85286f02f640a5a8279d29?s=80&d=identicon?s=100" width="100px;" alt="Mark Spark"/><br /><sub><b>Mark Spark</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-spark" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fgrégoire"><img src="https://avatars.githubusercontent.com/u/4352491?v=4?s=100" width="100px;" alt="François Grégoire"/><br /><sub><b>François Grégoire</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt="Bastien Luneteau"/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Cécile Ricordeau"/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Miś"/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt="Marcin Lewandowski"/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">🐛</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sebastian Janik"/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Karczmarczyk"/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="denis d"/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">🐛</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.cloud/@ComputerGuru"><img src="https://secure.gravatar.com/avatar/f6e42e077aec4ce60352210d84a1a6db?s=80&d=identicon?s=100" width="100px;" alt="ComputerGuru"/><br /><sub><b>ComputerGuru</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://roarnomore.com/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Joe Scylla"/><br /><sub><b>Joe Scylla</b></sub></a><br /><a href="#infra-joe" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#question-joe" title="Answering Questions">💬</a> <a href="#ideas-joe" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fedi.be/@amdg2"><img src="https://avatars.githubusercontent.com/u/236482?v=4?s=100" width="100px;" alt="amdg2 on Mastodon"/><br /><sub><b>amdg2 on Mastodon</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#question-amdg2" title="Answering Questions">💬</a> <a href="#ideas-amdg2" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://opencollective.com/castopod/sponsor/2/website" target="_blank"><img src="https://avatars.githubusercontent.com/u/12787079?v=4?s=100" width="100px;" alt="Incenp on Open Collective"/><br /><sub><b>Incenp on Open Collective</b></sub></a><br /><a href="#financial-incenp" title="Financial">💵</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ad-aures"><img src="https://avatars.githubusercontent.com/u/207360?v=4?s=100" width="100px;" alt="Philippe Charrière"/><br /><sub><b>Philippe Charrière</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-ad-aures" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-ad-aures" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-ad-aures" title="Project Management">📆</a> <a href="#tool-ad-aures" title="Tools">🔧</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lucas830"><img src="https://avatars.githubusercontent.com/u/2420195?v=4?s=100" width="100px;" alt="Lucas"/><br /><sub><b>Lucas</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt="Douglas Kastle"/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">🐛</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="cExplorer"/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="ImaCrea"/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">🐛</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Jonas S"/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt="LEFEBVRE Yann"/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt="Sebastian Späth"/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">🐛</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="rocky III"/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt="Hermann Josef Eckl"/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Delhaye Cyrille"/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">🐛</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt="João Leandro"/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Angelos Chouvardas"/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt="Eivind"/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt="Ewen"/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt="forght"/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt="glottis0q"/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100" width="100px;" alt="ButterflyOfFire"/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt="Lucian I. Last"/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt="LuuzViir"/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt="CTHTC"/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt="Russian Retro"/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt="Marek L'ach"/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt="GunChleoc"/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt="GabiSnow"/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt="bendaha"/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt="Samuel Roland"/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Dimitri Regnier"/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100" width="100px;" alt="irithys"/><br /><sub><b>irithys</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sergi"/><br /><sub><b>Sergi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt="ghose (XoseM)"/><br /><sub><b>ghose (XoseM)</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/basen1982"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Andreas Olsson"/><br /><sub><b>Andreas Olsson</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/leonfrom"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="leonfrom"/><br /><sub><b>leonfrom</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/agentcobra57"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="agentcobra"/><br /><sub><b>agentcobra</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/alephoto85"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100" width="100px;" alt="Alessandro"/><br /><sub><b>Alessandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/liimee"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="liimee"/><br /><sub><b>liimee</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ahmedsabouni"><img src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100" width="100px;" alt="Ahmed Sabouni"/><br /><sub><b>Ahmed Sabouni</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KrzysztofDomanczyk"><img src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100" width="100px;" alt="KrzysztofDomanczyk"/><br /><sub><b>KrzysztofDomanczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## Contact
You may reach us for help or ask any question you have on:
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for
feature requests & bug reports)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponsors
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
</div>
## License
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md
[contributions]: https://code.castopod.org/adaures/castopod/-/issues
[semantic-release]: https://github.com/semantic-release/semantic-release
[discord]: https://castopod.org/discord
[stars]: https://github.com/ad-aures/castopod/stargazers
[crowdin]: https://translate.castopod.org/project/castopod
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mdyd-dev"><img src="https://avatars.githubusercontent.com/u/82813877?v=4?s=100" width="100px;" alt="Maxime Desantis"/><br /><sub><b>Maxime Desantis</b></sub></a><br /><a href="#infra-mdyd-dev" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/vpoyet-dev"><img src="https://secure.gravatar.com/avatar/f2e8ed84d918ea40d6d87e3cbe91014a?s=80&d=identicon?s=100" width="100px;" alt="Virgile POYET"/><br /><sub><b>Virgile POYET</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Comain"><img src="https://avatars.githubusercontent.com/u/9818080?v=4?s=100" width="100px;" alt="Comain"/><br /><sub><b>Comain</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/antoinelr"><img src="https://secure.gravatar.com/avatar/6e52a901f8cc89a25beecdcee8a36fa9?s=80&d=identicon?s=100" width="100px;" alt="Antoine Le Roy"/><br /><sub><b>Antoine Le Roy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-antoinelr" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/melvin"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Melvin"/><br /><sub><b>Melvin</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-melvin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-melvin" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/fabio77"><img src="https://secure.gravatar.com/avatar/15346816abdfc20cf0f4e28b65e259cc?size=160?s=100" width="100px;" alt="mimilantern"/><br /><sub><b>mimilantern</b></sub></a><br /><a href="https

View File

@ -0,0 +1,4 @@
{
"label": "Bidra",
"position": 3
}

View File

@ -0,0 +1,108 @@
---
title: Retningslinjer
---
# Bidra til Castopod
Elsker du Castopod og ønsker å hjelpe til? Takk så mye, det er noe å gjøre for alle!
Vennligst ta deg et øyeblikk til å gjennomgå dette dokumentet for å gjøre bidragsprosessen enkel og effektiv for alle involverte.
Å følge disse retningslinjene bidrar til å kommunisere at du respekterer utviklernes tid i forvaltningen og utviklingen av dette åpne prosjektet. Som takk bør de gjengjelde denne respekten ved å håndtere problemene dine eller vurdere lappene og funksjonene dine.
::: info Merk
**Enhver** bidrag gjort på et annet depot enn [det originale depotet](https://code.castopod.org/adaures/castopod) vil ikke bli akseptert.
:::
## Bruk av oppgavesystemet
[Oppgavesystemet](https://code.castopod.org/adaures/castopod/-/issues) er den foretrukne kanalen for [feilrapporter](#feilrapporter), [forespørsler om funksjoner](#funksjonsforespørsler) og [sending av trekkforespørsler](#trekkforespørsler).
## ⚠️ Sikkerhetsproblemer og sårbarheter
Hvis du oppdager noen sikkerhetsproblemer eller sårbarheter i Castopod-koden, vennligst kontakt oss direkte på e-post til [security@castopod.org](mailto:security@castopod.org).
## Feilrapporter
En feil er et _påvisbart problem_ som skyldes koden i depotet. Gode feilrapporter er svært nyttige - takk!
Retningslinjer for feilrapporter:
1. **Bruk søkefunksjonen for problemer** &mdash; sjekk om problemet allerede er rapportert.
2. **Sjekk om problemet er løst** &mdash; prøv å gjenskape det ved å bruke den nyeste `main`-grenen i depotet.
3. **Isoler problemet** &mdash; ideelt sett, opprett en [reduksjonstest](https://css-tricks.com/reduced-test-cases/) og et levende eksempel.
En god feilrapport bør ikke etterlate andre behov for å be om mer informasjon. Vennligst forsøk å være så detaljert som mulig i din rapport. Hva er miljøet ditt? Hvilke trinn vil gjenskape problemet? Hvilke nettlesere og operativsystemer opplever problemet? Hva forventer du som utfallet? Alle disse detaljene vil hjelpe folk med å fikse eventuelle potensielle feil.
> [Malene for oppgaver](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates) har blitt opprettet for dette prosjektet. Du kan bruke dem til å hjelpe deg å følge disse retningslinjene.
## Funksjonsforespørsler
Funksjonsforespørsler er velkomne. Men ta deg et øyeblikk til å finne ut om ideen din passer innenfor prosjektets omfang og mål. Det er opp til _deg_ å argumentere godt for å overbevise prosjektets utviklere om fordelene med denne funksjonen. Vennligst gi så mye detaljer og sammenheng som mulig.
## Trekkforespørsler
Gode trekkforespørsler - lapper, forbedringer, nye funksjoner - er en fantastisk hjelp. De bør være fokusert på et bestemt område og unngå å inneholde irrelevante lapper.
**Spør først** før du begynner på en betydelig trekkforespørsel (f.eks. implementering av funksjoner, omstrukturering av kode, overføring til et annet språk), ellers risikerer du å bruke mye tid på noe som prosjektets utviklere kanskje ikke ønsker å fusjonere inn i prosjektet.
Vennligst følg kodestandardene som brukes gjennom hele prosjektet (innrykk, korrekte kommentarer, osv.) og eventuelle andre krav (som testdekning).
Å følge følgende prosess er den beste måten å få arbeidet ditt inkludert i prosjektet:
1. [Gaffel](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) prosjektet, klone gaflen din og konfigurere fjernkontrollene:
```bash
# Klone gaflen av depotet til gjeldende mappe
git clone https://code.castopod.org/<ditt-brukernavn>/castopod.git
# Naviger til den nyklonede mappen
cd castopod
# Tilordne originaldepotet til en fjernkontroll som kalles "upstream"
git remote add upstream https://code.castopod.org/adaures/castopod.git
```
2. Hvis du klonet for en stund siden, få de nyeste endringene fra upstream:
```bash
git checkout main
git pull upstream main
```
3. Opprett en ny emnegren (fra `main`-grenen) for å inneholde funksjonen, endringen eller reparasjonen:
```bash
git checkout -b <emne-gren-navn>
```
4. Commit endringene dine i logiske deler. Vennligst følg disse [git commit-meldingsretningslinjene](https://conventionalcommits.org/), ellers kan koden din være usannsynlig å fusjoneres inn i hovedprosjektet. Bruk Gits [interaktive omgjøring](https://help.github.com/articles/about-git-rebase/) -funksjon til å rydde opp i commitene dine før du publiserer dem.
5. Flet dine lokale endringer (eller omgjør) fra oppstrømsgrenen til ditt emnet gren:
```bash
git pull [--omgjør] oppstrøm main
```
6. Trykk emnet gren opp til gaflen din:
```bash
git push origin <emne-gren-navn>
```
7. [Åpne en trekkforespørsel](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork) med en tydelig tittel og beskrivelse.
**VIKTIG**: Ved å sende en lapp samtykker du i at prosjekteierne kan lisensiere arbeidet ditt under vilkårene for [GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
## Samarbeidsretningslinjer
Det er noen grunnleggende regler for å sikre høy kvalitet på prosjektet:
- Før en fusjon krever en trekkforespørsel minst to godkjennelser fra samarbeiderne, med mindre det er en arkitektonisk endring, en stor funksjon, osv. I så fall må minst 50% av kjerne-teamet være enige om å fusjonere det, der hver teammedlem har full rett til å legge ned veto. (dvs. alle kan blokkere alle trekkforespørsler)
- En trekkforespørsel skal være åpen i minst to dager før fusjonering (gjelder ikke trivielle bidrag som å rette en skrivefeil). Slik har alle nok tid til å se på det.
Du er alltid velkommen til å diskutere og foreslå forbedringer til disse retningslinjene.

View File

@ -0,0 +1,149 @@
---
title: Oppsett av utviklingsmiljø
sidebarDepth: 3
---
# Sett opp utviklingsmiljøet ditt
## Innledning
Castopod er en nettapplikasjon basert på `php`-rammeverket
[CodeIgniter 4](https://codeigniter.com).
Vi bruker [Docker](https://www.docker.com/) for å raskt sette opp et utviklingsmiljø. En
`docker-compose.yml`- og en `Dockerfile`-fil er inkludert i prosjektets rotmappe for å hjelpe deg med å komme i gang med bidraget.
> Du trenger ingen forkunnskaper om Docker for å følge de neste trinnene.
> Hvis du ønsker å bruke ditt eget miljø, er du velkommen til å gjøre det!
## Oppsettinstruksjoner
### 1. Forutsetninger
0. Installer [docker](https://docs.docker.com/get-docker).
1. Klon Castopod-prosjektet ved å kjøre:
```bash
git clone https://code.castopod.org/adaures/castopod.git
```
2. Opprett en `.env`-fil med minimumskonfigurasjonen som kreves for å koble appen til
databasen og bruke Redis som hurtigbufferbehandler:
```ini
CI_ENVIRONMENT="development"
# Hvis det er satt til development, må du kjøre `npm run dev` for å starte serveren for statiske ressurser
vite.environment="development"
# Som standard er dette satt til true i appkonfigurasjonen.
# For utvikling må dette settes til false fordi det
# kjøres i et lokalt miljø
app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/"
media.baseURL="http://localhost:8080/"
admin.gateway="cp-admin"
auth.gateway="cp-auth"
database.default.hostname="mariadb"
database.default.database="castopod"
database.default.username="castopod"
database.default.password="castopod"
cache.handler="redis"
cache.redis.host = "redis"
# Du vil muligens ikke bruke Redis som hurtigbufferbehandler
# Kommenter/fjern de to linjene ovenfor og kommenter ut
# neste linje for filhurtigbufretjenester.
#cache.handler="file"
```
> _NB._ Du kan tilpasse miljøet ditt ved å sette flere miljøvariabler
> i den egendefinerte `.env`-filen din. Se `env` for eksempler eller
> [CodeIgniter4-brukerveiledningen](https://codeigniter.com/user_guide/index.html)
> for mer informasjon.
3. (for Docker Desktop) Legg til repositoriet du har klonet i Docker Desktops
`Settings` > `Resources` > `File Sharing`
### 2. (anbefalt) Utvikle inne i appkontaineren med VSCode
Hvis du bruker VSCode, kan du dra nytte av `.devcontainer/`-mappen. Den definerer et utviklingsmiljø (utviklerkontainer) med forhåndsinstallerte
krav og VSCode-utvidelser, slik at du ikke trenger å bekymre deg for dem. Alle
nødvendige tjenester vil bli lastet inn automatisk! 🪄
1. Installer VSCode-utvidelsen
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Open in container`
> VSCode-vinduet lastes inn på nytt inne i utviklerkontaineren. Forvent flere
> minutter under første lasting, da det bygger alle nødvendige tjenester.
**Merk**: Utviklerkontaineren vil starte ved å kjøre Castopods PHP-server.
Under utviklingen må du også starte [Vite](https://vitejs.dev)s utviklingsserver for å kompilere TypeScript-koden og stilene:
```bash
# Kjør Vite-utviklingsserveren
npm run dev
```
Hvis det oppstår problemer med at PHP-serveren ikke kjører, kan du starte dem på nytt
ved å bruke følgende kommandoer:
```bash
# Kjør Castopod-serveren
php spark serve - 0.0.0.0
```
3. Du er klar til å starte! 🎉
Du er nå **inne i utviklerkontaineren**, og du kan bruke VSCode-konsollen
(`Terminal` > `New Terminal`) for å kjøre kommandoer:
```bash
# PHP er installert
php -v
# Composer er installert
composer -V
# npm er installert
npm -v
# Git er installert
git version
```
For mer informasjon, se
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
### 3. Start med å utvikle
Du er klar til å gå i gang! Begynn med å trylle frem endringer i prosjektfilene! Du kan
bruke
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
for å få flere innsikter.
For å se endringene dine, gå til:
- `http://localhost:8080/` for Castopod-appen
- `http://localhost:8888/` for phpmyadmin-grensesnittet:
- Brukernavn: **castopod**
- Passord: **castopod**
### 2-alt. Utvikle utenfor appkontaineren
Hvis du ikke ønsker å bruke VSCode-utviklerkontaineren, er det ikke noe problem!
1. Start Docker-kontainere manuelt:
Gå til prosjektets rotmappe og kjør:
```bash
# Starter alle tjenester som er oppført i docker-compose.yml-filen
# -d-bruket starter kontainerne i bakgrunnen
docker

View File

@ -0,0 +1,4 @@
{
"label": "Kom i gang",
"position": 2
}

View File

@ -0,0 +1,87 @@
---
title: Autentisering og Autorisering
sidebarDepth: 3
---
# Autentisering og Autorisering
Castopod håndterer autentisering og autorisering ved hjelp av `codeigniter/shield`
sammen med tilpassede regler. Roller og tillatelser er definert på to nivåer:
1. [Instance-baserte roller og tillatelser](#1-roller-og-tillatelser-basert-på-instans)
2. [Podcast-baserte roller og tillatelser](#2-roller-og-tillatelser-basert-på-podcast)
## 1. Roller og tillatelser basert på instans
### Roller på instansen
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| rolle | beskrivelse | tillatelser |
| ------------ | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Har full kontroll over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Leder | Håndterer innholdet i Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Generelle brukere av Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Tillatelser på instansen
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| tillatelse | beskrivelse |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Kan få tilgang til administrasjonssiden til Castopod. |
| admin.settings | Kan få tilgang til innstillingene til Castopod. |
| users.manage | Kan administrere brukere på Castopod. |
| persons.manage | Kan håndtere personer. |
| pages.manage | Kan administrere sider. |
| podcasts.view | Kan se alle podcaster. |
| podcasts.create | Kan opprette nye podcaster. |
| podcasts.import | Kan importere podcaster. |
| fediverse.manage-blocks | Kan blokkere fediverse-brukere/domener fra å samhandle med Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Roller og tillatelser basert på podcast
### Roller basert på podcast
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| rolle | beskrivelse | tillatelser |
| ------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Har full kontroll over podcast #{id}. | \* |
| Redaktør | Administrerer innholdet og publiseringene til podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Forfatter | Håndterer innholdet i podcast #{id}, men kan ikke publisere det. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gjest | Generell bidragsyter til podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Tillatelser basert på podcast
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| tillatelse | beskrivelse |
| ------------------------ | ----------------------------------------------------------------------------------------- |
| view | Kan se oversikten og analysene av podcast #{id}. |
| edit | Kan redigere podcast #{id}. |
| delete | Kan slette podcast #{id}. |
| manage-imports | Kan synkronisere importerte podcast #{id}. |
| manage-persons | Kan håndtere abonnementer for podcast #{id}. |
| manage-subscriptions | Kan håndtere abonnementer for podcast #{id}. |
| manage-contributors | Kan håndtere bidragsytere for podcast #{id}. |
| manage-platforms | Kan konfigurere/slette plattformkoblinger for podcast #{id}. |
| manage-publications | Kan publisere podcast #{id}. |
| manage-notifications | Kan vise og merke notifikasjoner som lest for podcast #{id}. |
| interact-as | Kan samhandle som podcast #{id} for å legge til, dele eller svare på meldinger. |
| episodes.view | Kan se oversikten og analysene av podcast #{id}. |
| episodes.create | Kan opprette episoder for podcast #{id}. |
| episodes.edit | Kan redigere podcast #{id}. |
| episodes.delete | Kan slette podcast #{id}. |
| episodes.manage-persons | Kan håndtere abonnementer for podcast #{id}. |
| episodes.manage-clips | Kan administrere videoklipp eller lydbiter for podcast #{id}. |
| episodes.manage-publications | Kan publisere podcast #{id}. |
| episodes.manage-comments | Kan opprette/slette kommentarer for episoder i podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -0,0 +1,148 @@
---
title: Offisielle Docker-bilder
sidebarDepth: 3
---
# Offisielle Docker-bilder for Castopod
Castopod sender 3 Docker-bilder til Docker-hubben under den automatiserte byggprosessen:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): et alt-i-ett Castopod-bilde som bruker nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): app-pakken med alle Castopod-avhengigheter
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): en Nginx-konfigurasjon for Castopod
I tillegg krever Castopod en MySQL-kompatibel database. En Redis-database kan legges til som en cache-håndterer.
## Støttede tagger
- `devel` [unstable], siste utviklerutgave
- `beta` [stable], siste betautgave
- `1.x.x` [stable], spesifikk versjon (fra `1.0.0`)
## Eksempelbruk
1. Installer [docker](https://docs.docker.com/get-docker/) og [docker-compose](https://docs.docker.com/compose/install/)
2. Opprett en `docker-compose.yml`-fil med følgende innhold:
```yml
version: "3.7"
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
volumes:
- castopod-cache:/data
networks:
- castopod-app
volumes:
castopod-media:
castopod-db:
castopod-cache:
networks:
castopod-app:
castopod-db:
```
Du må tilpasse noen variabler etter dine behov (f.eks. `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` og `CP_ANALYTICS_SALT`).
3. Sett opp en revers proxy for TLS (SSL/HTTPS)
TLS er påkrevd for at ActivityPub skal fungere. Dette kan enkelt håndteres av en revers proxy, for eksempel med [Caddy](https://caddyserver.com/):
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
4. Kjør `docker-compose up -d`, og vent til konfigurasjonen av Castopod er ferdig på `https://castopod.example.com/cp-install`!
5. Du er klar! Begynn å podcaste! 🎙️🚀
## Miljøvariabler
- **castopod/castopod** og **castopod/app**
| Variabelnavn | Type (`default`) | Standardverdi |
| ------------------------------- | ----------------------- | --------------- |
| **`CP_BASEURL`** | streng | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?streng | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?streng | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?streng | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | streng | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?streng | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?streng | `MYSQL_DATABASE`|
| **`CP_DATABASE_USERNAME`** | ?streng | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?streng | `MYSQL_PASSWORD`|
| **`CP_DATABASE_PREFIX`** | ?streng | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` eller `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?streng | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?streng | `null` |
| **`CP_REDIS_PORT`** | ?nummer | `6379` |
| **`CP_REDIS_DATABASE`** | ?nummer | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?streng | `undefined` |
| **`CP_EMAIL_FROM`** | ?streng | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?streng | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?streng | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?nummer | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` eller `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?streng | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?streng | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?streng | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?streng | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?streng | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?streng | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?nummer | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?streng | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` eller `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?nummer (med suffiks) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?nummer (med suffiks) | `512M` |
| **`CP_TIMEOUT`** | ?nummer | `900` |
- **castopod/web-server**
| Variabelnavn | Type | Standardverdi |
| -------------------- | --------------------- | --------------- |
| **`CP_APP_HOSTNAME`**| ?streng | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?nummer (med suffiks) | `512M` |
| **`CP_TIMEOUT`** | ?nummer | `900` |

View File

@ -0,0 +1,127 @@
---
title: Installering
sidebarDepth: 3
---
# Korleis installere Castopod?
Castopod er designa for å vere enkel å installere. Uansett om du bruker
dedikert eller delt hosting, kan du installere det på dei fleste
webserverar som støttar PHP-MySQL.
::: tip Merk
Vi har offisielle Docker-bilete for Castopod!
Hvis du vil bruke Docker, kan du hoppe over dette avsnittet og gå direkte
til [Docker-dokumentasjonen](./docker.md) for Castopod.
:::
## Førehandskrav
- PHP v8.1 eller nyare
- MySQL versjon 5.7 eller nyare eller MariaDB versjon 10.2 eller nyare
- Støtte for HTTPS
- Eit [ntp-synced clock](https://wiki.debian.org/NTP) for å validere innkomande forespørsler til føderasjonen
### PHP v8.1 eller nyare
PHP-versjon 8.1 er naudsynt, med følgjande utvidingar installert:
- [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) med **JPEG**,
**PNG** og **WEBP** bibliotek.
- [exif](https://www.php.net/manual/fr/exif.installation.php)
I tillegg bør du sjekke om følgjande utvidingar er aktivert i PHP:
- json (aktivert som standard - ikkje slå av)
- xml (aktivert som standard - ikkje slå av)
- [mysqlnd](https://www.php.net/manual/fr/mysqlnd.install.php)
### MySQL-kompatibel databaseserver
> Vi anbefalar å bruke [MariaDB](https://mariadb.org).
::: warning Merk
Castopod fungerer berre med MySQL-databaseserverar versjon 5.7 eller nyare.
Tidlegare versjonar av MySQL, som 5.6 (med støttetid som enda 5. februar 2021), vil ikkje fungere.
:::
Du vil trenge følgjande informasjon for å fullføre installasjonsprosessen:
vertsnamn for serveren, databasenamn, brukarnamn og passord. Hvis du
ikke har denne informasjonen, bør du kontakte administratoren din.
#### Tilgangsrettar
Brukaren må ha minst desse tilgangsrettane for databasen for at Castopod
skal fungere: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`,
`INDEX`,`INSERT`, `SELECT`, `UPDATE`,`REFERENCES`, `CREATE VIEW`.
### (Fakultativt) FFmpeg v4.1.8 eller nyare for videoklipp
[FFmpeg](https://www.ffmpeg.org/) versjon 4.1.8 eller nyare er nødvendig
hvis du ønsker å generere videoklipp. Følgjande utvidingar må vere installert:
- biblioteket **FreeType 2** for
[gd](https://www.php.net/manual/en/image.installation.php).
### (Fakultativt) Andre anbefalingar
- Redis for betre ytelse på cache.
- CDN for lagring av statiske filer og betre ytelse.
- E-postteneste for mista passord.
## Installasjonsinstruksjonar
### Førehandskrav
0. Skaff deg ein nettserver med [førehandskrava](#prerequisites) installert.
1. Opprett ein MySQL-databaseserver for Castopod, med ein brukar som har rettar
til å opprette og endre (for meir informasjon, sjå [MySQL-kompatibel databaseserver](#mysql-kompatible-databaser)).
2. Aktiver HTTPS på domenet ditt med eit _SSL-sertifikat_.
3. Last ned og pakk ut den siste versjonen av [Castopod-pakken](https://castopod.org/)
på nettserveren hvis du ikkje allereie har gjort det.
- ⚠️ Sørg for at rotmappaen til nettserverdokumentet peiker på undermappa
`public/` i `castopod`-mappa.
4. Legg til **cron-oppdrag** på nettserveren din for ulike bakgrunnsprosessar
(bytt ut filstiane etter behov):
```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1
```
**Merk** - Hvis du ikkje legg til dette cron-oppdraget, vil følgjande Castopod-funksjonar
ikkje fungere:
- Importere en podkast frå ein eksisterande RSS-feed
- Kringkaste sosiale aktivitetar til følgjarane dine i fediverse
- Sende episodar til open hubs ved å bruke
[WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generere videoklipp -
[krever FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (Føreslått metode) Installasjonsveiviser
1. Kjør Castopod-installasjonsskriptet ved å gå til installasjonsveiviser-sida
(`https://domain_name.com/cp-install`) i nettlesaren din.
2. Følg instruksjonane som blir vist.
3. Kom igang med podkasting!
:::info Merk
Installasjonsskriptet opprettar ei `.env`-fil i rotmappa til pakken. Hvis du
ikkje kan bruke installasjonsveiviseren, kan du opprette og redigere
`.env`-fila manuelt ved å bruke `.env.example`-fila som guide.
:::
### E-post/SMTP-oppsett
E-postoppsett er nødvendig for at nokre funksjonar skal fungere skikkeleg
(t.d.

View File

@ -0,0 +1,24 @@
---
title: Tryggleik
---
# Tryggleiksspørsmål
Castopod er utvikla på [CodeIgniter4](https://codeigniter.com/), eit PHP-rammeverk
som oppfordrar til [gode tryggleikspraksisar](https://codeigniter.com/user_guide/concepts/security.html).
For å sikre installasjonen og unngå skadelege angrep, tilråder vi at du oppdaterer
tilgangsretten til Castopod-filene etter installasjon og kvar oppdatering (og unngår
rettighetsproblem med filer):
- Mappa `writable/` skal vere tilgjengeleg for **lesing** og **skriving**.
- Mappa `public/media/` skal vere tilgjengeleg for **lesing** og **skriving**.
- Alle andre filer skal vere tilgjengelege for **berre lesing**.
Til dømes, om du brukar Apache eller NGINX med Ubuntu, kan du køyre følgande kommandoar:
```bash
sudo chown -R root:root /path/to/castopod
sudo chown -R www-data:www-data /path/to/castopod/writable
sudo chown -R www-data:www-data /path/to/castopod/public/media
```

View File

@ -0,0 +1,101 @@
---
title: Oppdatering
sidebarDepth: 3
---
# Hvordan installere Castopod?
Etter at du har installert Castopod, kan du oppdatere instansen din til den
nyeste versjonen for å dra nytte av de siste funksjonene ✨, feilrettinger 🐛, og ytelsesforbedringer ⚡.
## Oppdateringsinstruksjoner
0. ⚠️ Før du oppdaterer, anbefaler vi sterkt at du sikkerhetskopierer
Castopod-filene dine og databasen din.
- se
[Skal jeg ta en sikkerhetskopi før oppdatering?](#skal-jeg-ta-en-sikkerhetskopi-før-oppdatering)
1. Gå til
[utgivelser-siden](https://code.castopod.org/adaures/castopod/-/releases) og
sjekk om instansen din er oppdatert med den nyeste versjonen av Castopod
- se
[Hvor finner jeg min Castopod-versjon?](#hvor-finner-jeg-min-castopod-versjon)
2. Last ned den nyeste utgaven av `Castopod-pakken`, du kan velge mellom `zip` eller `tar.gz`-arkiver
- ⚠️ Pass på at du laster ned Castopod-pakken og **IKKE** kildekoden
- Merk at du også kan laste ned den nyeste pakken fra
[castopod.org](https://castopod.org/)
3. På serveren din:
- Slett alle filer unntatt `.env` og `public/media`
- Kopier de nye filene fra nedlastingspakken til serveren din
::: info Tips
Du må kanskje sette filrettigheter på nytt som gjort under installasjonsprosessen. Sjekk
[Sikkerhetstiltak](./security.md).
:::
4. Oppdater databasens skjema fra din `Castopod-admin`> `About`-side eller ved å kjøre:
```bash
php spark castopod:database-update
```
5. Tøm bufferen fra din `Castopod-admin`> `Innstillinger`> `Generelt` > `Rydd opp`.
6. ✨Nå kan du nyte den nye instansen din, du er ferdig!
::: info Tips
Versjonene kan komme med ytterligere oppdateringsinstruksjoner (se
[utgivelsesmerknadene](https://code.castopod.org/adaures/castopod/-/releases)).
- se
[Jeg har ikke oppdatert instansen min på lenge... Hva bør jeg gjøre?](#jeg-har-ikke-oppdatert-instansen-min-på-lenge-hva-bør-jeg-gjøre)
:::
## Fullstendig automatiserte oppdateringer
> Kommer snart... 👀
## Ofte Stilte Spørsmål (FAQ)
### Hvor finner jeg min Castopod-versjon?
Gå til adminpanelet i Castopod, versjonen vises nederst til venstre.
Du kan også finne versjonen i applikasjonen
`> Konfigurasjon > Constantes.php`-mappen.
### Jeg har ikke oppdatert instansen min på lenge... Hva bør jeg gjøre?
Ingen problem! Du trenger bare å få den nyeste versjonen som beskrevet
ovenfor. Når du kjører oppdateringsinstruksjonene (steg 4), kjør dem
sekvensielt fra den eldste til den nyeste.
> Du bør sikkerhetskopiere instansen din basert på datoen for din siste Castopod-oppdatering.
For eksempel, hvis du er på `v1.0.0-alpha.42` og ønsker å oppdatere til
`v1.0.0-beta.1`:
0. (sterkt anbefalt) Ta en sikkerhetskopi av filene dine og databasen din.
1. Last ned den nyeste versjonen, overskriv filene dine mens du beholder
`.env` og `public/media`.
2. Kjør oppdateringsinstruksjonene en etter en (fra eldste til nyeste).
3. ✨Din nye instans er klar!
### Må jeg ta sikkerhetskopi før jeg oppdaterer?
Vi anbefaler at du gjør det, slik at du ikke mister noe hvis noe går galt!
Generelt sett anbefaler vi å ta regelmessige sikkerhetskopier av
Castopod-filene og databasen din for å unngå å miste noe...

186
docs/src/nn/index.md Normal file
View File

@ -0,0 +1,186 @@
---
sidebarDepth: 2
---
# Velkommen 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod er en gratis og åpen programvare for hosting av podcaster, designet for podcastere som ønsker å utveksle og samhandle med sitt publikum.
Castopod er enkel å installere og er bygget med [CodeIgniter4](https://codeigniter.com/), et kraftig PHP-rammeverk med svært liten størrelse.
<div class="flex items-center">
<a href="/fr/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Installer<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Funksjoner
- 🌱 &nbsp;GPLv3-lisensiert gratis og åpen programvare
- 🔐 &nbsp;fokus på data-suverenitet: innholdet, publikummet og statistikken tilhører deg og bare deg
- 🪄 &nbsp;Mange funksjoner fra Podcasting 2.0: GUID, låsing, transkripsjoner, finansiering, kapitler, geolokalisering, gjester, lydklipp osv.
- 💬 &nbsp;Innebygd sosialt nettverk:
- 🚀 &nbsp;Castopod er en del av Fediverse, et desentralisert sosialt nettverk
- ❤️ &nbsp;Opprett innlegg, del, favoritt og kommenter episoder
- 📈 &nbsp;Innebygd statistikk:
- ⚖️ &nbsp;GDPR / CCPA / LGPD-kompatibel
- 🪙 &nbsp;IABv2-tilpasset publikumsanalyse
- 🏡 &nbsp;Innebygde statistikker, ingen mellomtjeneste
- 📢 &nbsp;Innebygd markedsføringsverktøy:
- ✅ &nbsp;Klar for søkemotoroptimalisering (åpne-grafikk metatagger, JSON-LD, osv.)
- 📱 &nbsp;Progressive Web App: Installer som en selvstendig app
- 🎨 &nbsp;Tilpassbare fargetemaer
- 🎬 &nbsp;Generer delbare videoklipp fra episoder
- 🔉 &nbsp;Generer lydklipp
- ▶️ &nbsp;Bygg inn episodene dine på hvilken som helst nettside
- 💸 &nbsp;Monetisering:
- 🔗 &nbsp;Finansieringslenker
- 📲 &nbsp;«lytt-for-å-klikke»-reklame
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium-podcaster
- 📡 &nbsp;Publiser episodene dine overalt med RSS:
- 📱 &nbsp;På alle indekser og apper: Podcast Index, Apple Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend osv.
- ⚡ &nbsp;Send episodene dine øyeblikkelig med WebSub
- 📥 &nbsp;Importer podcaster: Flytt den eksisterende podcasten din til Castopod
- 📤 &nbsp;Flytt podcasten din til en annen vert
- 🔀 &nbsp;Flere leietakere: Vert så mange podcaster du vil
- 👥 &nbsp;Multibrukersystem: Legg til bidragsytere og definer rollene deres
- 🌎 &nbsp;i18n-støtte: Oversatt til engelsk, fransk, polsk, tysk, portugisisk, brasiliansk og spansk... og [flere i fremtiden](https://translate.castopod.org)!
## Hvorfor Castopod?
Podcast-økosystemet er desentralisert av natur: Du kan opprette en podcast som en RSS-fil, publisere den på nettet og dele den overalt på nettet.
Det er faktisk den eneste medietypen som har forblitt slik i lang tid.
Mens bruken endrer seg, blir det stadig flere som lager podcaster: Enten det er skapere som finner nye måter å dele ideene sine på, eller lyttere som søker bedre innhold.
Med den økende populariteten til podcasting, prøver noen selskaper å gjøre den til et mer kontrollert og sentralisert medium.
Castopod ble opprettet for å tilby et åpent og bærekraftig alternativ til hosting av podcaster, og fremme desentralisering for å sikre at kreativiteten til podcasteren kan utfolde seg.
Dette prosjektet blir drevet av det åpne kildemiljøet, spesielt av Fediverse og Podcasting 2.0-bevegelsene.
## Sammenligning med andre løsninger
Vi mener at en løsning ikke nødvendigvis passer alle. Det avhenger i stor grad av dine behov. Så her er sammenligninger med andre verktøy som kan hjelpe deg med å avgjøre om Castopod passer for&nbsp;deg.
### Castopod vs Wordpress
Castopod blir ofte referert til som "WordPress for podcaster" på grunn av likhetene mellom de to. På noen måter er dette sant. Og faktisk ble Castopod sterkt inspirert av WordPress-økosystemet, da vi så hvor enkelt det var å adoptere det fra fellesskapet og antall nettsteder som bruker&nbsp;det.
Akkurat som WordPress, er Castopod gratis og åpen programvare, bygget med PHP og MySQL og kan enkelt installeres på de fleste webservere.
WordPress er en flott måte å lage nettsiden din på og utvide den med utvidelser for å få det du ønsker. Det er et fullstendig CMS som hjelper deg med å få all type nettsider på&nbsp;nett.
På den annen side er Castopod ment å adressere podcasterens spesifikke behov, med fokus på podcasting, og ingenting annet. Du trenger ikke en eneste utvidelse for å komme i gang med din podcasting&nbsp;reise.
Dette gir mulighet for å optimalisere prosessene som er spesifikke for podcasting: fra opprettelsen av podcaster og publisering av nye episoder helt til&nbsp;markedsføring og analyse.
Avhengig av behovene dine kan WordPress og Castopod til og med leve side om side, da de deler samme&nbsp;krav!
### Castopod vs Funkwhale
Funkwhale er en selvhostet, moderne gratis og åpen musikkserver. Akkurat som Castopod er Funkwhale i Fediverse, et desentralisert sosialt nettverk som tillater samhandling mellom&nbsp;dem.
Funkwhale ble opprinnelig bygget rundt musikk, og senere, da prosjektet utviklet seg, ble evnen til å hoste podcaster introdusert.
I motsetning til Funkwhale, er Castopod utelukkende bygget og designet med tanke på podcasting. Dette gjør det enklere å implementere funksjoner som er relatert til podcasting, som funksjoner som er knyttet til podcasting 2.0 (transkripsjoner, kapitler, steder, personer, osv.).
Derfor bør du sannsynligvis bruke Funkwhale hvis du vil hoste musikken din, og Castopod hvis du vil hoste&nbsp;podcastene dine.
### Castopod vs Andre vertstjenester for podcaster
Det finnes mange løsninger for hosting av podcaster, enkelte av dem er virkelig gode og [mange](https://podcastindex.org/apps) av dem hopper på Podcasting 2.0-toget, akkurat som&nbsp;Castopod!
Hver av disse løsningene er forskjellige fra hverandre, og du kan sammenligne dem ved å se på listen over&nbsp;funksjoner.
Det sagt, er det to hovedforskjeller med andre podcasting-løsninger:
- Castopod kan være selvhostet og er den eneste løsningen som lar deg ha full kontroll over det du produserer. Samtidig som det er en åpen kildekode-løsning kan du endre den slik du vil.
- Castopod er den eneste løsningen som i dag inneholder både en desentralisert sosial plattform med ActivityPub og funksjoner fra "Podcasting 2.0", og reduserer dermed avstanden mellom&nbsp;dem.
## Bli med oss
Synes du Castopod er flott og vil hjelpe til? Ta en titt på følgende dokumentasjon for å komme&nbsp;i&nbsp;gang.
### Verktøyetikk
Castopod har vedtatt en Verktøyetisk som vi forventer at prosjektdeltakere følger. Vennligst les
[Verktøyetiskhåndboken](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
slik at du kan forstå hvilke handlinger som vil bli tolerert og ikke tolerert.
### Bidragsveiledning
Les [veiledningen vår for bidrag](./contributing/guidelines.md) for å lære mer om vår utviklingsprosess, hvordan du foreslår feilrettinger og forbedringer, og hvordan du bygger og tester endringene dine i Castopod.
## Bidragsytere ✨
Takk til disse fantastiske menneskene ([disse emojiene betyr forskjellige ting](https://allcontributors.org/docs/nb/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Du ikke fjerne eller endre denne seksjonen -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Kode">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Feilrapporter">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Dokumentasjon">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Vurderte forespørsler">👀</a> <a href="#maintenance-yassinedoghri" title="Vedlikehold">🚧</a> <a href="#content-yassinedoghri" title="Innhold">🖋️</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Tilgjengelighet">️️️️️♿️</a> <a href="https://translate.castopod.org" title="Oversettelse">🌍</a> <a href="#question-yassinedoghri" title="Besvare spørsmål">💬</a> <a href="#mentoring-yassinedoghri" title="Mentorering">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastruktur (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Idéer, planlegging og tilbakemelding">🤔</a> <a href="#projectManagement-yassinedoghri" title="Prosjektledelse">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogginnlegg">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Kode">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Feilrapporter">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Vurderte forespørsler">👀</a> <a href="#content-benjamin" title="Innhold">🖋️</a> <a href="https://translate.castopod.org" title="Oversettelse">🌍</a> <a href="#question-benjamin" title="Besvare spørsmål">💬</a> <a href="#infra-benjamin" title="Infrastruktur (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Idéer, planlegging og tilbakemelding">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogginnlegg">📝</a> <a href="#projectManagement-benjamin" title="Prosjektledelse">📆</a> <a href="#talk-benjamin" title="Presentasjoner">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Kode">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Vurderte forespørsler">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Dokumentasjon">📖</a> <a href="#maintenance-ola" title="Vedlikehold">🚧</a> <a href="#question-ola" title="Besvare spørsmål">💬</a> <a href="#ideas-ola" title="Idéer, planlegging og tilbakemelding">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arnonleh"><img src="https://code.castopod.org/uploads/-/system/user/avatar/41/avatar.png?s=100" width="100px;" alt="Arnþór L. Emilsson"/><br /><sub><b>Arnþór L. Emilsson</b></sub></a><br /><a href="#ideas-arnonleh" title="Idéer, planlegging og tilbakemelding">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/say9"><img src="https://code.castopod.org/uploads/-/system/user/avatar/45/avatar.png?s=100" width="100px;" alt="Ryugasaki Yuno"/><br /><sub><b>Ryugasaki Yuno</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=say9" title="Feilrapporter">🐛</a> <a href="#question-say9" title="Besvare spørsmål">💬</a> <a href="#infra-say9" title="Infrastruktur (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/upengareri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/58/avatar.png?s=100" width="100px;" alt="Ugo Pengaréri"/><br /><sub><b>Ugo Pengaréri</b></sub></a><br /><a href="https://translate.castopod.org" title="Oversettelse">🌍</a> <a href="#question-uxam" title="Besvare spørsmål">💬</a> <a href="#ideas-uxam" title="Idéer, planlegging og tilbakemelding">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/onderceylan"><img src="https://code.castopod.org/uploads/-/system/user/avatar/70/avatar.png?s=100" width="100px;" alt="Onder Ceylan"/><br /><sub><b>Onder Ceylan</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Kode">💻</a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
Dette prosjektet følger spesifikasjonen for
[all-contributors](https://github.com/all-contributors/all-contributors).
Alle typer bidrag er velkomne!
## Kontakte Oss
Du kan nå oss for hjelp eller stille spørsmål du har på:
- [Discord](https://castopod.org/discord) (for sanntidssamtaler med utviklere og samfunn)
- [Problemer](https://code.castopod.org/adaures/castopod/issues) (for forespørsler om nye funksjoner eller feilrapporter)
Alternativt kan du følge oss på sosiale medieplattformer for å få nyheter om Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon-instans)
- [Twitter](https://twitter.com/castopod)
## Sponsorer
Den kontinuerlige utviklingen av Castopod er mulig med støtte fra bidragsytere. Hvis du vil hjelpe til, kan du vurdere å [sponsere utviklingen av Castopod](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Banner for Adaures" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet banner" class="h-16" /></a>
</div>
## Lisens
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Opphavsrett © 2020-nå, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md
[contributions]: https://code.castopod.org/adaures/castopod/-/issues
[semantic-release]: https://github.com/semantic-release/semantic-release
[discord]: https://castopod.org/discord
[stars]: https://github.com/ad-aures/castopod/stargazers
[crowdin]: https://translate.castopod.org/project/castopod

View File

@ -1,4 +1,4 @@
{
"label": "Contributing",
"label": "Współpraca",
"position": 3
}

View File

@ -1,154 +1,113 @@
---
title: Guidelines
title: Wytyczne
---
# Contributing to Castopod
# Współtworzenie Castopod
Love Castopod and want to help? Thanks so much, there's something to do for
everybody!
Kochasz Castopod i chcesz pomóc? Bardzo dziękujemy, jest wiele do zrobienia dla każdego!
Please take a moment to review this document in order to make the contribution
process easy and effective for everyone involved.
Prosimy o chwilę czasu, aby zapoznać się z tym dokumentem, aby proces współtworzenia był łatwy i skuteczny dla wszystkich zaangażowanych.
Following these guidelines helps to communicate that you respect the time of the
developers managing and developing this open source project. In return, they
should reciprocate that respect in addressing your issue or assessing patches
and features.
Przestrzeganie tych wytycznych pomaga w komunikacji, która świadczy o szacunku dla czasu programistów zarządzających i rozwijających ten projekt open source. W zamian, powinni oni odwzajemnić ten szacunek, odpowiadając na zgłoszone problemy lub oceniając poprawki i nowe funkcje.
::: info Note
::: info Notka
**Any** contribution made on a repository other than
[the original repository](https://code.castopod.org/adaures/castopod) will not
be accepted.
**Każdy** wkład na repozytorium innym niż [oryginalne repozytorium](https://code.castopod.org/adaures/castopod) nie zostanie przyjęty.
:::
## Using the issue tracker
## Korzystanie z systemu śledzenia problemów
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
[System śledzenia problemów](https://code.castopod.org/adaures/castopod/-/issues) jest preferowanym kanałem do zgłaszania [błędów](#zgłaszanie-błędów), [propozycji funkcji](#propozycje-funkcji) i [przesyłania żądań wciągnięcia zmian](#żądania-wciągnięcia-zmian).
## ⚠️ Security issues and vulnerabilities
## ⚠️ Problemy dotyczące bezpieczeństwa i luki
If you encounter any security issue or vulnerability in the Castopod source,
please contact us directly by email at
[security@castopod.org](mailto:security@castopod.org)
Jeśli napotkasz jakiekolwiek problemy dotyczące bezpieczeństwa lub luki w kodzie źródłowym Castopoda, prosimy o bezpośredni kontakt z nami drogą mailową na adres [security@castopod.org](mailto:security@castopod.org).
## Bug reports
## Zgłaszanie błędów
A bug is a _demonstrable problem_ that is caused by the code in the repository.
Good bug reports are extremely helpful - thank you!
Błąd to _widoczny problem_, który jest spowodowany kodem w repozytorium. Dobre zgłoszenia błędów są niezwykle pomocne - bardzo dziękujemy!
Guidelines for bug reports:
Wytyczne dotyczące zgłaszania błędów:
1. **Use the issue search** &mdash; check if the issue has already been
reported.
1. **Skorzystaj z wyszukiwarki problemów** &mdash; sprawdź, czy problem został już zgłoszony.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the
latest `main` branch in the repository.
2. **Sprawdź, czy problem został naprawiony** &mdash; spróbuj odtworzyć go korzystając z najnowszej gałęzi `main` w repozytorium.
3. **Isolate the problem** &mdash; ideally create a
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
3. **Izoluj problem** &mdash; idealnie stwórz [testową wersję redukowaną](https://css-tricks.com/reduced-test-cases/) i przykład na żywo.
A good bug report shouldn't leave others needing to chase you up for more
information. Please try to be as detailed as possible in your report. What is
your environment? What steps will reproduce the issue? What browser(s) and OS
experience the problem? What would you expect to be the outcome? All these
details will help people to fix any potential bugs.
Dobre zgłoszenie błędu nie powinno wymagać dodatkowych próśb o więcej informacji. Prosimy, staraj się być jak najbardziej szczegółowy w zgłoszeniu. Jaka jest Twoja środowisku? Jakie kroki powodują wystąpienie problemu? Jakie przeglądarki i systemy operacyjne go doświadczają? Jaki jest oczekiwany rezultat? Wszystkie te szczegóły pomogą innym osobom w naprawieniu potencjalnych błędów.
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> have been created for this project. You may use them to help you follow those
> guidelines.
>[Szablony zgłoszeń](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates) zostały stworzone dla tego projektu. Możesz z nich skorzystać, aby ułatwić przestrzeganie tych wytycznych.
## Feature requests
## Propozycje funkcji
Feature requests are welcome. But take a moment to find out whether your idea
fits with the scope and aims of the project. It's up to _you_ to make a strong
case to convince the project's developers of the merits of this feature. Please
provide as much detail and context as possible.
Propozycje funkcji są mile widziane. Jednak zastanów się przez chwilę, czy Twój pomysł pasuje do zakresu i celów projektu. To od _ciebie_ zależy, aby przekonać programistów projektu o wartości tej funkcji. Proszę dostarcz jak najwięcej szczegółów i kontekstu.
## Pull requests
## Żądania wciągnięcia zmian
Good pull requests - patches, improvements, new features - are a fantastic help.
They should remain focused in scope and avoid containing unrelated commits.
Dobre żądania wciągnięcia zmian &ndash; poprawki, ulepszenia, nowe funkcje, to fantastyczna pomoc. Powinny one pozostać skoncentrowane i unikać zawierania niepowiązanych zmian.
**Please ask first** before embarking on any significant pull request (e.g.
implementing features, refactoring code, porting to a different language),
otherwise you risk spending a lot of time working on something that the
project's developers might not want to merge into the project.
**Prosimy o zapytanie** przed przystąpieniem do znacznego żądania wciągnięcia zmian (np. implementacja funkcji, refaktoring kodu, przenoszenie do innego języka), w przeciwnym razie ryzykujesz, że spędzisz dużo czasu na czymś, co programiści projektu mogą nie chcieć scalić.
Please adhere to the coding conventions used throughout a project (indentation,
accurate comments, etc.) and any other requirements (such as test coverage).
Prosimy o przestrzeganie konwencji kodowania stosowanych w całym projekcie (wcięcia, dokładne komentarze itp.) oraz innych wymagań (takich jak pokrycie testami).
Adhering to the following process is the best way to get your work included in
the project:
Przestrzeganie poniższego procesu to najlepszy sposób na uwzględnienie Twojej pracy w projekcie:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the
project, clone your fork, and configure the remotes:
1. [Sforkuj](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) projekt, sklonuj swoje repozytorium (`fork`) i skonfiguruj zdalne repozytoria:
```bash
# Clone your fork of the repo into the current directory
git clone https://code.castopod.org/<your-username>/castopod.git
# Sklonuj swoje repository (`fork`) do obecnego katalogu
git clone https://code.castopod.org/<twoja-nazwa-użytkownika>/castopod.git
# Navigate to the newly cloned directory
# Przejdź do nowo sklonowanego katalogu
cd castopod
# Assign the original repo to a remote called "upstream"
# Przypisz oryginalne repozytorium do zdalnego o nazwie "upstream"
git remote add upstream https://code.castopod.org/adaures/castopod.git
```
2. If you cloned a while ago, get the latest changes from upstream:
2. Jeżeli sklonowałeś repozytorium jakiś czas temu, pobierz najnowsze zmiany ze zdalnego repozytorium:
```bash
git checkout main
git pull upstream main
```
3. Create a new topic branch (off the `main` branch) to contain your feature,
change, or fix:
3. Utwórz nową gałąź tematyczną (od gałęzi `main`), która będzie zawierać Twoją funkcję, zmianę lub poprawkę:
```bash
git checkout -b <topic-branch-name>
git checkout -b <nazwa-gałęzi-tematycznej>
```
4. Commit your changes in logical chunks. Please adhere to these
[git commit message guidelines](https://conventionalcommits.org/) or your
code is unlikely be merged into the main project. Use Git's
[interactive rebase](https://help.github.com/articles/about-git-rebase/)
feature to tidy up your commits before making them public.
4. Zatwierdź swoje zmiany w logicznych częściach. Prosimy przestrzegać tych
[wytycznych dotyczących zatwierdzania zmian w systemie Git](https://conventionalcommits.org/) lub kod nie zostanie prawdopodobnie scalony z głównym projektem. Skorzystaj z funkcji
[przerywania interaktywnego w systemie Git](https://help.github.com/articles/about-git-rebase/)
w celu uporządkowania swoich zmian przed ich ujawnieniem publicznie.
5. Locally merge (or rebase) the upstream dev branch into your topic branch:
5. Lokalnie scal (lub przepisz historię) gałąź `dev` ze zdalnej gałęzi tematycznej:
```bash
git pull [--rebase] upstream main
```
6. Push your topic branch up to your fork:
6. Wypchnij swoją gałąź tematyczną do swojego repozytorium (`fork`):
```bash
git push origin <topic-branch-name>
git push origin <nazwa-gałęzi-tematycznej>
```
7. [Open a Pull Request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
with a clear title and description.
7. [Otwórz żądanie wciągnięcia zmian](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
z wyraźnym tytułem i opisem.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
license your work under the terms of the
**WAŻNE**: Przesyłając poprawkę, zgadzasz się na udostępnienie jej na licencji
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
## Collaborating guidelines
## Wytyczne współpracy
There are few basic rules to ensure high quality of the project:
Istnieje kilka podstawowych zasad, które należy przestrzegać, aby zapewnić wysoką jakość projektu:
- Before merging, a PR requires at least two approvals from the collaborators
unless it's an architectural change, a large feature, etc. If it is, then at
least 50% of the core team have to agree to merge it, with every team member
having a full veto right. (i.e. every single one can block any PR)
- A PR should remain open for at least two days before merging (does not apply
for trivial contributions like fixing a typo). This way everyone has enough
time to look into it.
- Przed scaleniem, żądanie wciągnięcia wymaga co najmniej dwóch zatwierdzeń od współpracowników, chyba że dotyczy to zmian architektonicznych, większej funkcji itp. Jeśli tak, to co najmniej 50% rdzenia zespołu musi zgodzić się na jego scalenie, przy pełnym prawie veta każdego członka zespołu. (tj. każdy może zablokować dowolne żądanie wciągnięcia zmian)
- Żądanie wciągnięcia zmian powinno pozostać otwarte przez co najmniej dwa dni przed scaleniem (nie dotyczy to trywialnych wkładów, takich jak poprawianie literówek). W ten sposób wszyscy mają wystarczająco dużo czasu, aby się przyjrzeć.
You are always welcome to discuss and propose improvements to this guideline.
Zawsze jesteś mile widziany, aby omawiać i proponować ulepszenia tych wytycznych.

View File

@ -1,423 +1,115 @@
---
title: Development setup
title: Konfiguracja środowiska programistycznego
sidebarDepth: 3
---
# Setup your development environment
# Skonfiguruj swoje środowisko programistyczne
## Introduction
## Wprowadzenie
Castopod is a web app based on the `php` framework
[CodeIgniter 4](https://codeigniter.com).
Castopod jest aplikacją internetową opartą na frameworku `php` [CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
Używamy [Dockera](https://www.docker.com/), aby szybko skonfigurować środowisko deweloperskie. W projekcie w folderze głównym znajdziesz pliki `docker-compose.yml` i `Dockerfile`, które pomogą Ci rozpocząć pracę nad projektem.
> You don't need any prior knowledge of Docker to follow the next steps.
> However, if you wish to use your own environment, feel free to do so!
> Nie potrzebujesz żadnej wiedzy na temat Dockera, aby przejść do następnych kroków. Jeśli jednak chcesz używać własnego środowiska, możesz to zrobić!
## Setup instructions
## Instrukcje konfiguracji
### 1. Pre-requisites
### 1. Wymagania wstępne
0. Install [docker](https://docs.docker.com/get-docker).
0. Zainstaluj [dockera](https://docs.docker.com/get-docker).
1. Clone Castopod project by running:
1. Sklonuj projekt Castopod, wykonując polecenie:
```bash
git clone https://code.castopod.org/adaures/castopod.git
```
```
git clone https://code.castopod.org/adaures/castopod.git
```
2. Create a `.env` file with the minimum required config to connect the app to
the database and use redis as a cache handler:
2. Utwórz plik `.env` z minimalną wymaganą konfiguracją, aby połączyć aplikację z bazą danych i skonfigurować Redis jako obsługę pamięci podręcznej:
```ini
CI_ENVIRONMENT="development"
# If set to development, you must run `npm run dev` to start the static assets server
vite.environment="development"
```
CI_ENVIRONMENT="development"
# Jeśli ustawione na development, należy uruchomić `npm run dev`, aby uruchomić serwer statycznych zasobów
vite.environment="development"
# By default, this is set to true in the app config.
# For development, this must be set to false as it is
# on a local environment
app.forceGlobalSecureRequests=false
# Domyślnie jest to ustawione na true w konfiguracji aplikacji.
# Dla środowiska deweloperskiego należy ustawić to na false, jak na lokalnym środowisku
app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/"
media.baseURL="http://localhost:8080/"
app.baseURL="http://localhost:8080/"
media.baseURL="http://localhost:8080/"
admin.gateway="cp-admin"
auth.gateway="cp-auth"
admin.gateway="cp-admin"
auth.gateway="cp-auth"
database.default.hostname="mariadb"
database.default.database="castopod"
database.default.username="castopod"
database.default.password="castopod"
database.default.hostname="mariadb"
database.default.database="castopod"
database.default.username="castopod"
database.default.password="castopod"
cache.handler="redis"
cache.redis.host = "redis"
cache.handler="redis"
cache.redis.host = "redis"
# You may not want to use redis as your cache handler
# Comment/remove the two lines above and uncomment
# the next line for file caching.
#cache.handler="file"
```
# Możesz nie chcieć używać Redis jako obsługi pamięci podręcznej
# Wykomentuj/usuń dwie linie powyżej i odkomentuj
# następną linię dla pamięci podręcznej plikowej.
#cache.handler="file"
```
> _NB._ You can tweak your environment by setting more environment variables
> in your custom `.env` file. See the `env` for examples or the
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
> for more info.
> _NB._ Możesz dostosować swoje środowisko, ustawiając więcej zmiennych środowiskowych w swoim niestandardowym pliku `.env`. Zobacz `env` dla przykładów lub [Przewodnik użytkownika CodeIgniter4](https://codeigniter.com/user_guide/index.html) dla więcej informacji.
3. (for docker desktop) Add the repository you've cloned to docker desktop's
`Settings` > `Resources` > `File Sharing`
3. (dla Dockera Desktop) Dodaj sklonowany projekt do `Ustawienia` > `Zasoby` > `Udostępnianie plików` w Docker Desktop.
### 2. (recommended) Develop inside the app Container with VSCode
### 2. (zalecane) Twórz w kontenerze aplikacji w VSCode
If you're working in VSCode, you can take advantage of the `.devcontainer/`
folder. It defines a development environment (dev container) with preinstalled
requirements and VSCode extensions so you don't have to worry about them. All
required services will be loaded automagically! 🪄
Jeśli pracujesz w VSCode, możesz skorzystać z folderu `.devcontainer/`. Definiuje on środowisko deweloperskie (kontener deweloperski) z zainstalowanymi wcześniej wymaganiami i rozszerzeniami VSCode, więc nie musisz się tym martwić. Wszystkie wymagane usługi zostaną załadowane automatycznie! 🪄
1. Install the VSCode extension
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Open in container`
1. Zainstaluj rozszerzenie VSCode [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).
2. `Ctrl/Cmd + Shift + P` > `Otwórz w kontenerze`.
> The VSCode window will reload inside the dev container. Expect several
> minutes during first load as it is building all necessary services.
> Okno VSCode zostanie ponownie załadowane wewnątrz kontenera deweloperskiego. Oczekuj kilku minut podczas pierwszego ładowania, ponieważ budowane są wszystkie wymagane usługi.
**Note**: The dev container will start by running Castopod's php server.
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
**Uwaga**: Kontener deweloperski uruchomi serwer php Castopoda. Podczas pracy deweloperskiej będziesz musiał uruchomić serwer deweloperski [Vite](https://vitejs.dev), aby skompilować kod TypeScript i style:
```bash
# run Vite dev server
npm run dev
```
```bash
# uruchom serwer deweloperski Vite
npm run dev
```
If there is any issue with the php server not running, you can restart them
using the following commands:
Jeśli wystąpi problem z nieuruchomieniem serwera php, możesz go ponownie uruchomić za pomocą poniższych poleceń:
```bash
# run Castopod server
php spark serve - 0.0.0.0
```
```bash
# uruchom serwer Castopod
php spark serve - 0.0.0.0
```
3. You're all set! 🎉
3. Gotowe! 🎉
You're now **inside the dev container**, you may use the VSCode console
(`Terminal` > `New Terminal`) to run any command:
Jesteś teraz wewnątrz kontenera deweloperskiego, możesz używać konsoli VSCode (`Terminal` > `Nowy terminal`), aby uruchomić dowolne polecenie:
```bash
# PHP is installed
php -v
```bash
# PHP jest zainstalowany
php -v
# Composer is installed
composer -V
# Composer jest zainstalowany
composer -V
# npm is installed
npm -v
# npm jest zainstalowane
npm -v
# git is installed
git version
```
# git jest zainstalowany
git version
```
For more info, see
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
Więcej informacji znajdziesz w dokumentacji [VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers).
### 3. Start hacking
### 3. Zacznij pracować
You're all set! Start working your magic by updating the project's files! Help
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
Gotowe! Zaczynamy tworzyć magię, aktualizując pliki projektu! Skorzystaj z [Przewodnika użytkownika CodeIgniter4](https://codeigniter.com/user_guide/index.html), aby uzyskać więcej informacji na ten temat.
To see your changes, go to:
Aby zobaczyć swoje zmiany, przejdź do:
- `http://localhost:8080/` for the Castopod app
- `http://localhost:8888/` for the phpmyadmin interface:
- `http://localhost:8080/` dla aplikacji Castopod
- `http://localhost:8888/` dla interfejsu phpmyadmin:
- username: **castopod**
- password: **castopod**
### 2-alt. Develop outside the app container
You do not wish to use the VSCode devcontainer? No problem!
1. Start docker containers manually:
Go to project's root folder and run:
```bash
# starts all services declared in docker-compose.yml file
# -d option starts the containers in the background
docker-compose up -d
# See all running processes (you should see 3 processes running)
docker-compose ps
# Alternatively, you can check all docker processes
docker ps -a
```
> The `docker-compose up -d` command will boot 4 containers in the
> background:
>
> - `castopod_app`: a php based container with Castopod requirements
> installed
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries
> and pages caching
> - `castopod_mariadb`: a [mariadb](https://mariadb.org/) server for
> persistent data
> - `castopod_phpmyadmin`: a phpmyadmin server to visualize the mariadb
> database.
2. Run any command inside the containers by prefixing them with
`docker-compose run --rm app`:
```bash
# use PHP
docker-compose run --rm app php -v
# use Composer
docker-compose run --rm app composer -V
# use npm
docker-compose run --rm app npm -v
# use git
docker-compose run --rm app git version
```
---
## Going Further
### Install Castopod's dependencies
1. Install php dependencies with [Composer](https://getcomposer.org/)
```bash
composer install
```
::: info Note
The php dependencies aren't included in the repository. Composer will check
the `composer.json` and `composer.lock` files to download the packages with
the right versions. The dependencies will live under the `vendor/` folder.
For more info, check out the
[Composer documentation](https://getcomposer.org/doc/).
:::
2. Install javascript dependencies with [npm](https://www.npmjs.com/)
```bash
npm install
```
::: info Note
The javascript dependencies aren't included in the repository. Npm will check
the `package.json` and `package.lock` files to download the packages with the
right versions. The dependencies will live under the `node_module` folder.
For more info, check out the [NPM documentation](https://docs.npmjs.com/).
:::
3. Generate static assets:
```bash
# build all static assets at once
npm run build:static
# build specific assets
npm run build:icons
npm run build:svg
```
::: info Note
The static assets generated live under the `public/assets` folder, it
includes javascript, styles, images, fonts, icons and svg files.
:::
### Initialize and populate database
::: tip Tip
You may skip this section if you go through the install wizard (go to
`/cp-install`).
:::
1. Build the database with the migrate command:
```bash
# loads the database schema during first migration
php spark migrate -all
```
You may need to undo the migration (rollback):
```bash
# rolls back database schema (deletes all tables and their content)
php spark migrate:rollback
```
2. Populate the database with the required data:
```bash
# Populates all required data
php spark db:seed AppSeeder
```
You may choose to add data separately:
```bash
# Populates all categories
php spark db:seed CategorySeeder
# Populates all Languages
php spark db:seed LanguageSeeder
# Populates all podcasts platforms
php spark db:seed PlatformSeeder
# Populates all Authentication data (roles definition…)
php spark db:seed AuthSeeder
```
3. (optionnal) Populate the database with test data:
- Populate test data (login: admin / password: AGUehL3P)
```bash
php spark db:seed TestSeeder
```
- Populate with fake podcast analytics:
```bash
php spark db:seed FakePodcastsAnalyticsSeeder
```
- Populate with fake website analytics:
```bash
php spark db:seed FakeWebsiteAnalyticsSeeder
```
TestSeeder will add an active superadmin user with the following credentials:
- username: **admin**
- password: **AGUehL3P**
### Useful docker / docker-compose commands
- Monitor the app container:
```bash
docker-compose logs --tail 50 --follow --timestamps app
```
- Interact with redis server using included redis-cli command:
```bash
docker exec -it castopod_redis redis-cli
```
- Monitor the redis container:
```bash
docker-compose logs --tail 50 --follow --timestamps redis
```
- Monitor the mariadb container:
```bash
docker-compose logs --tail 50 --follow --timestamps mariadb
```
- Monitor the phpmyadmin container:
```bash
docker-compose logs --tail 50 --follow --timestamps phpmyadmin
```
- Restart docker containers:
```bash
docker-compose restart
```
- Destroy all containers, opposite of `up` command:
```bash
docker-compose down
```
- Rebuild app container:
```bash
docker-compose build app
```
Check [docker](https://docs.docker.com/engine/reference/commandline/docker/) and
[docker-compose](https://docs.docker.com/compose/reference/) documentations for
more insights.
## Known issues
### Allocation failed - JavaScript heap out of memory
This happens when running `npm install`.
👉 By default, docker might not have access to enough RAM. Allocate more memory
and run `npm install` again.
### (Linux) Files created inside container are attributed to root locally
You may use Linux user namespaces to fix this on your machine:
::: info Note
Replace "username" with your local username
:::
1. Go to `/etc/docker/daemon.json` and add:
```json
{
"userns-remap": "username"
}
```
2. Configure the subordinate uid/guid:
```bash
# in /etc/subuid
username:1000:1
username:100000:65536
```
```bash
# in /etc/subgid
username:1000:1
username:100000:65536
```
3. Restart docker:
```bash
sudo systemctl restart docker
```
4. That's it! Now, the root user in the container will be mapped to the user on
your local machine, no more permission issues! 🎉
You can check
[this great article](https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/)
to know more about how it works.
- nazwa użytkownika: **castopod

View File

@ -1,4 +1,4 @@
{
"label": "Getting Started",
"label": "Zaczynając",
"position": 2
}

View File

@ -1,87 +1,86 @@
---
title: Authentication & Authorization
title: Autoryzacja i Uprawnienia
sidebarDepth: 3
---
# Uwierzytelnianie & Autoryzacja
# Autoryzacja i Uprawnienia
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
Castopod zarządza autoryzacją i uprawnieniami za pomocą `codeigniter/shield` w połączeniu z niestandardowymi regułami. Role i uprawnienia są zdefiniowane na dwóch poziomach:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
1. [W skali instancji](#1-role-i-uprawnienia-w-skali-instancji)
2. [Dla poszczególnych podcastów](#2-role-i-uprawnienia-dla-poszczególnych-podcastów)
## 1. Instance wide roles and permissions
## 1. Role i uprawnienia w skali instancji
### Instance roles
### Role w instancji
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
| rola | opis | uprawnienia |
| ------------ | ----------------------------------------- | ------------------------------------------------------------------------------------------------- |
| Super admin | Ma pełną kontrolę nad Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Zarządzający | Zarządza treścią Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Zwykły użytkownik Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
### Uprawnienia w instancji
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
| uprawnienie | opis |
| ----------------------- | ---------------------------------------------------------------- |
| admin.access | Może uzyskać dostęp do panelu administracyjnego Castopod. |
| admin.settings | Może uzyskać dostęp do ustawień Castopod. |
| users.manage | Może zarządzać użytkownikami Castopod. |
| persons.manage | Może zarządzać osobami. |
| pages.manage | Może zarządzać stronami. |
| podcasts.view | Może przeglądać wszystkie podcasty. |
| podcasts.create | Może tworzyć nowe podcasty. |
| podcasts.import | Może importować podcasty. |
| fediverse.manage-blocks | Może blokować aktorów/domenei federacji od interakcji z Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
## 2. Role i uprawnienia dla poszczególnych podcastów
### Per podcast roles
### Role dla poszczególnych podcastów
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
| rola | opis | uprawnienia |
| -------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Ma pełną kontrolę nad podcastem #{id}. | \* |
| Redaktor | Zarządza treścią i publikacjami podcastu #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Autor | Zarządza treścią podcastu #{id}, ale nie może publikować. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gość | Ogólny współtwórca podcastu #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
### Uprawnienia dla poszczególnych podcastów
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
| uprawnienie | opis |
| --------------------------- | ------------------------------------------------------------------- |
| widzieć | Dostęp do panelu sterowania i analizy podcastu #{id}. |
| edytować | Może edytować podcast #{id}. |
| usunąć | Może usunąć podcast #{id}. |
| zarządzać importami | Może synchronizować zaimportowany podcast #{id}. |
| zarządzać osobami | Może zarządzać subskrypcjami dla podcastu #{id}. |
| zarządzać subskrypcjami | Może zarządzać subskrypcjami dla podcastu #{id}. |
| zarządzać współpracownikami | Może zarządzać współpracownikami podcastu #{id}. |
| zarządzać platformami | Może konfigurować/usuwać linki do platformy na podcast #{id}. |
| zarządzać publikacjami | Może publikować podcast #{id}. |
| zarządzać powiadomieniami | Może przeglądać i oznaczać powiadomienia jako przeczytane dla podcastu #{id}. |
| działać jako | Może działać jako podcast #{id}, aby dodawać, udostępniać lub odpowiadać na wiadomości. |
| episodes.view | Może przeglądać zestawienia i analizy podcastu #{id}. |
| stworzyć odcinki | Może tworzyć odcinki dla podcastu #{id}. |
| edytować odcinki | Może edytować odcinki podcastu #{id}. |
| usunąć odcinki | Może usunąć odcinki podcastu #{id}. |
| episodes.manage-persons | Może zarządzać subskrypcjami dla podcastu #{id}. |
| episodes.manage-clips | Może zarządzać klipami wideo lub dźwiękowymi dla podcastu #{id}. |
| episodes.manage-publications| Może publikować podcast #{id}. |
| episodes.manage-comments | Może tworzyć/usuwać komentarze odcinka podcastu #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -1,35 +1,29 @@
---
title: Official Docker images
title: Oficjalne obrazy Dockera
sidebarDepth: 3
---
# Official Docker images
# Oficjalne obrazy Dockera
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
Podczas procesu automatycznego budowania, Castopod wysyła 3 obrazy Dockera na Docker Hub:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all
in one castopod image using nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): obraz Castopod zintegrowany z nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): zestaw aplikacji zawierający wszystkie zależności Castopod
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): konfiguracja Nginx do Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
Dodatkowo, Castopod wymaga bazy danych zgodnej z MySQL. Baza danych Redis może zostać dodana jako mechanizm cache'owania.
## Supported tags
## Wspierane tagi
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
- `devel` [unstable], najnowszy rozwijany branch
- `beta` [stable], najnowsza wersja beta
- `1.x.x` [stable], konkretne wydanie (od `1.0.0`)
## Example usage
## Przykładowe użycie
1. Install [docker](https://docs.docker.com/get-docker/) and
1. Zainstaluj [dockera](https://docs.docker.com/get-docker/) i
[docker-compose](https://docs.docker.com/compose/install/)
2. Create a `docker-compose.yml` file with the following:
2. Utwórz plik `docker-compose.yml` z następującą zawartością:
```yml
version: "3.7"
@ -87,13 +81,12 @@ can be added as a cache handler.
castopod-db:
```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
Musisz dostosować niektóre zmienne do swoich potrzeb (np. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD`, `CP_ANALYTICS_SALT`).
3. Setup a reverse proxy for TLS (SSL/HTTPS)
3. Skonfiguruj reverse proxy dla TLS (SSL/HTTPS)
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
TLS jest wymagany do działania protokołu ActivityPub. Zadanie to można łatwo zrealizować za pomocą reverse proxy, na przykład za pomocą [Caddy](https://caddyserver.com/):
```
#castopod
@ -102,57 +95,57 @@ can be added as a cache handler.
}
```
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
4. Uruchom `docker-compose up -d`, poczekaj, aż się zainicjalizuje na
`https://castopod.example.com/cp-install`, aby zakończyć konfigurację Castopod!
5. You're all set, start podcasting! 🎙️🚀
5. Jesteś gotowy, zacznij publikować podcasty! 🎙️🚀
## Environment Variables
## Zmienne środowiskowe
- **castopod/castopod** and **castopod/app**
- **castopod/castopod** i **castopod/app**
| Variable name | Type (`default`) | Default |
| ------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Nazwa zmiennej | Typ (`default`) | Domyślnie |
| --------------------------------- | ----------------------- | ---------- |
| **`CP_BASEURL`** | string | `undefined`|
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL`|
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"`|
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined`|
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"`|
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE`|
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER`|
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD`|
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"`|
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"`|
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
- **castopod/web-server**
| Variable name | Type | Default |
| ---------------------- | --------------------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Nazwa zmiennej | Typ | Domyślnie |
| -------------------------- | -------------------- | --------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix)| `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |

View File

@ -1,221 +1,103 @@
---
title: Installation
title: Instalacja
sidebarDepth: 3
---
# How to install Castopod?
# Jak zainstalować Castopod?
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
Castopod został stworzony tak, aby instalacja była łatwa. Niezależnie od tego,
czy korzystasz z hostingu dedykowanego czy współdzielonego, możesz zainstalować
go na większości serwerów internetowych obsługujących PHP-MySQL.
::: tip Note
::: tip Wskazówka
We've released official Docker images for Castopod!
Opracowaliśmy oficjalne obrazy Docker dla Castopoda!
If you prefer using Docker, you may skip this and go straight to the
[docker documentation](./docker.md) for Castopod.
Jeśli wolisz używać Dockera, możesz pominąć ten krok i przejść bezpośrednio do [dokumentacji Dockera](./docker.md) dla Castopoda.
:::
## Requirements
## Wymagania wstępne
- PHP v8.1 only
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
- PHP w wersji 8.1
- Wersja MySQL 5.7 lub nowsza lub wersja MariaDB 10.2 lub nowsza
- Wsparcie dla HTTPS
- [Zsynchronizowany zegar](https://wiki.debian.org/NTP) dla walidacji przychodzących żądań federacji
### PHP v8.1 only
### PHP w wersji 8.1
PHP version 8.1 is required, with the following extensions installed:
Wymagana jest wersja 8.1 PHP z zainstalowanymi następującymi rozszerzeniami:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
**PNG** and **WEBP** libraries.
- [exif](https://www.php.net/manual/en/exif.installation.php)
- [intl](https://www.php.net/manual/pl/intl.requirements.php)
- [libcurl](https://www.php.net/manual/pl/curl.requirements.php)
- [mbstring](https://www.php.net/manual/pl/mbstring.installation.php)
- [gd](https://www.php.net/manual/pl/image.installation.php) z **JPEG**,
**PNG** i bibliotekami **WEBP**.
- [exif](https://www.php.net/manual/pl/exif.installation.php)
Additionally, make sure that the following extensions are enabled in your PHP:
Upewnij się również, że następujące rozszerzenia są włączone w Twoim PHP:
- json (enabled by default - don't turn it off)
- xml (enabled by default - don't turn it off)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
- json (włączone domyślnie - nie wyłączaj go)
- xml (włączone domyślnie - nie wyłączaj go)
- [mysqlnd](https://www.php.net/manual/pl/mysqlnd.install.php)
### MySQL compatible database
### Kompatybilna baza danych MySQL
> We recommend using [MariaDB](https://mariadb.org).
> Zalecamy korzystanie z [MariaDB](https://mariadb.org).
::: warning Warning
::: warning Uwaga
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
Castopod działa tylko z bazą danych MySQL w wersji 5.7 lub nowszej. Wersje
5.6 (które przestały być obsługiwane 5 lutego 2021 r.) lub wcześniejsze nie
będą działać.
:::
You will need the server hostname, database name, username and password to
complete the installation process. If you do not have these, please contact your
server administrator.
Aby zakończyć proces instalacji, będziesz potrzebować nazwy hosta serwera, nazwy
bazy danych, nazwy użytkownika i hasła. Jeśli nie posiadasz tych informacji,
skontaktuj się z administratorem.
#### Privileges
#### Uprawnienia dostępu
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
`REFERENCES`, `CREATE VIEW`.
Użytkownik musi mieć co najmniej następujące uprawnienia dostępu do bazy danych, aby Castopod działał: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`,
`INDEX`,`INSERT`, `SELECT`, `UPDATE`,`REFERENCES`, `CREATE VIEW`.
### (Optional) FFmpeg v4.1.8 or higher for Video Clips
### (Opcjonalnie) FFmpeg w wersji 4.1.8 lub nowszej do generowania klipów wideo
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required if you
want to generate Video Clips. The following extensions must be installed:
Jeśli chcesz generować klipy wideo, wymagana jest wersja FFmpeg 4.1.8 lub nowsza.
Następujące rozszerzenia muszą być zainstalowane:
- **FreeType 2** library for
[gd](https://www.php.net/manual/en/image.installation.php).
- biblioteka **FreeType 2** dla [gd](https://www.php.net/manual/pl/image.installation.php).
### (Optional) Other recommendations
### (Opcjonalnie) Inne zalecenia
- Redis for better cache performances.
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
- Redis dla lepszej wydajności pamięci podręcznej.
- CDN dla pamięci podręcznej statycznych plików i lepszej wydajności.
- Brama e-mail dla przypomnienia hasła.
## Install instructions
## Instrukcje instalacji
### Pre-requisites
### Przygotowanie
0. Get a Web Server with [requirements](#requirements) installed
1. Create a MySQL database for Castopod with a user having access and
modification privileges (for more info, see
[MySQL compatible database](#mysql-compatible-database)).
2. Activate HTTPS on your domain with an _SSL certificate_.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
the web server if you havent already.
- ⚠️ Set the web server document root to the `public/` sub-folder within the
`castopod` folder.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
0. Ożywienie serwera WWW zainstalowanymi [wymaganiami](#wymagania-wstępne)
1. Utwórz bazę danych MySQL dla Castopoda z użytkownikiem mającym odpowiednie uprawnienia i uprawnienia do modyfikacji (więcej informacji znajdziesz w dziale [Kompatybilna baza danych MySQL](#kompatybilna-baza-danych-mysql))
2. Włącz obsługę protokołu HTTPS dla swojej domeny z wykorzystaniem _certyfikatu SSL_.
3. Pobierz i rozpakuj najnowszy [pakiet Castopod](https://castopod.org/) na serwerze WWW, jeśli tego jeszcze nie zrobiłeś.
- ⚠️ Ustaw miejsce docelowe serwera WWW na podkatalog `public/` w katalogu `castopod`.
4. Dodaj **zadania cronowe** na swoim serwerze WWW dla różnych procesów w tle (dopasuj ścieżki odpowiednio):
```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1
```
**Note** - If you do not add this cron task, the following Castopod features
will not work:
**Uwaga** - Jeśli nie dodasz tego zadania cron, następujące funkcje Castopoda nie będą działać:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
[WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
- Importowanie podcastu z istniejącego kanału RSS
- Nadawanie aktywności społecznościowych obserwującym w federacji
- Rozgłaszanie odcinków do otwartych węzłów przy użyciu [WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generowanie klipów wideo - [wymagane jest FFmpeg](#opcjonalnie-ffmpeg-w-wersji-418-lub-wyższej-do-generacji-klipów-wideo)
### (recommended) Install Wizard
### (Zalecana metoda) Kreator instalacji
1. Run the Castopod install script by going to the install wizard page
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
2. Follow the instructions on your screen.
3. Start podcasting!
::: info Note
The install script writes a `.env` file in the package root. If you cannot go
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
:::
### Email/SMTP setup
Email configuration is required for some features to work properly (eg.
retrieving your forgotten password, sending instructions to premium subscribers,
…)
You may add your email configuration in your instance's `.env` like so:
```ini
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
```
#### Email config options
| Variable name | Type | Default |
| ---------------- | -------------------- | ------------ |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined` |
| **`SMTPPass`** | string | `undefined` |
| **`SMTPPort`** | number | `25` |
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
### Media storage
By default, files are saved to the `public/media` folder using the file system.
If you need to relocate the `media` folder to a different location, you can
specify it in your `.env` file as shown below:
```ini
# […]
media.root="media"
media.storage="/mnt/storage"
```
In this example, the files will be saved to the /mnt/storage/media folder. Make
sure to also update your web server configuration to reflect this change.
### S3
If you prefer storing your media files on an S3 compatible storage, you may
specify it in your `.env`:
```ini
# […]
media.fileManager="s3"
media.s3.endpoint="your_s3_host"
media.s3.key="your_s3_key"
media.s3.secret="your_s3_secret"
media.s3.region="your_s3_region"
```
#### S3 config options
| Variable name | Type | Default |
| ----------------------- | ------- | ----------- |
| **`endpoint`** | string | `undefined` |
| **`key`** | string | `undefined` |
| **`secret`** | string | `undefined` |
| **`region`** | string | `undefined` |
| **`bucket`** | string | `castopod` |
| **`protocol`** | number | `undefined` |
| **`pathStyleEndpoint`** | boolean | `false` |
| **`keyPrefix`** | string | `undefined` |
## Community packages
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
### Install with YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github
Repo</a>
</div>
1. Uruchom skrypt instalacyjny Castopoda, przechodząc do strony kreatora instalacji (`https://nazwa_twojej_domeny.com/cp-install`) w swojej ulubionej przeglądarce internetowej.
2. Postępuj zgod

View File

@ -1,23 +1,18 @@
---
title: Security
title: Bezpieczeństwo
---
# Security concerns
# Pytania dotyczące bezpieczeństwa
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP
framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
Castopod jest rozwijany na podstawie [CodeIgniter4](https://codeigniter.com/), frameworka PHP, który promuje [dobre praktyki z zakresu bezpieczeństwa](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
Aby zapewnić jak najlepsze zabezpieczenia dla Twojej instancji i uniknąć złośliwych ataków, zalecamy aktualizowanie uprawnień plików Castopoda po każdej instalacji i aktualizacji (oraz unikanie błędów dotyczących dostępu do plików):
- `writable/` folder must be **readable** and **writable**.
- `public/media/` folder must be **readable** and **writable**.
- any other file must be set to **readonly**.
- Folder `writable/` powinien być dostępny w trybie **odczytu i zapisu**.
- Folder `public/media/` powinien być dostępny w trybie **odczytu i zapisu**.
- Wszystkie inne pliki powinny być dostępne w trybie **tylko do odczytu**.
For instance, if you are using Apache or NGINX with Ubuntu you may do the
following:
Na przykład, jeśli korzystasz z Apache lub NGINX z systemem Ubuntu, możesz użyć następujących poleceń:
```bash
sudo chown -R root:root /path/to/castopod

View File

@ -1,109 +1,97 @@
---
title: Update
title: Aktualizacja
sidebarDepth: 3
---
# How to update Castopod?
# Jak zaktualizować Castopod?
Po zainstalowaniu Castopod, możesz zaktualizować swoją instancję do najnowszej wersji, aby skorzystać z najnowszych funkcji ✨, poprawek błędów 🐛 i usprawnień wydajności ⚡.
After installing Castopod, you may want to update your instance to the latest
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
## Instrukcje aktualizacji
## Update instructions
0. ⚠️ Przed przeprowadzeniem aktualizacji zalecamy wykonanie kopii zapasowej plików Castopod oraz bazy danych.
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
- patrz
[Czy powinienem wykonać kopię zapasową przed aktualizacją?](#czy-powinienem-wykonać-kopię-zapasową-przed-aktualizacją)
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
1. Przejdź do strony
[releases page](https://code.castopod.org/adaures/castopod/-/releases) i
sprawdź, czy twoja instancja jest zgodna z najnowszą wersją Castopod.
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
- patrz
[Gdzie mogę znaleźć wersję Castopod?](#gdzie-mogę-znaleźć-wersję-castopod)
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
2. Pobierz najnowszy pakiet wydania o nazwie `Castopod Package`, możesz wybrać
między archiwami `zip` lub `tar.gz`.
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
- ⚠️ Upewnij się, że pobierasz Pakiet Castopod, a **NIE** Kod źródłowy.
- Zauważ, że najnowszy pakiet możesz również pobrać z
[castopod.org](https://castopod.org/).
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
3. Na swoim serwerze:
3. On your server:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
- Usuń wszystkie pliki, oprócz `.env` i `public/media`.
- Skopiuj nowe pliki z pobranego pakietu na swój serwer.
::: info Note
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
Być może będziesz musiał ponownie ustawić uprawnienia plików tak, jak to
zrobiłeś podczas procesu instalacji. Sprawdź
[Security Concerns](./security.md).
:::
4. Update your database schema from your `Castopod Admin` > `About` page or by
running:
4. Zaktualizuj schemat bazy danych ze strony `Castopod Admin` > `About` lub
wykonaj polecenie:
```bash
php spark castopod:database-update
```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
5. Wyczyść pamięć podręczną ze strony `Castopod Admin` > `Settings` > `general` >
`Housekeeping`.
6. ✨Ciesz się swoją nową instancją, skończyłeś!
::: info Note
Releases may come with additional update instructions (see
[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
Wersje mogą być dostarczane z dodatkowymi instrukcjami aktualizacji (patrz
[releases notes page](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
- patrz
[Nie aktualizowałem mojej instancji od dłuższego czasu... Co powinienem zrobić?](#nie-aktualizowałem-mojej-instancji-od-dłuższego-czasu-co-powinienem-zrobić)
:::
## Fully Automated updates
## Całkowicie zautomatyzowane aktualizacje
> Coming soon... 👀
## Frequently asked questions (FAQ)
## Najczęściej Zadawane Pytania (FAQ)
### Where can I find my Castopod version?
### Gdzie mogę znaleźć wersję Castopod?
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
Przejdź do panelu administracyjnego Castopod, wersja wyświetli się na dole po lewej stronie.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
Możesz również znaleźć wersję w aplikacji
`> Konfiguracja > Constantes.php` folderu.
### [I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
### Nie aktualizowałem mojej instancji od dłuższego czasu... Co powinienem zrobić?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
Nie ma problemu! Po prostu uzyskaj najnowszą wersję, opisaną powyżej. Podczas wykonywania instrukcji aktualizacji (4) wykonuj je sekwencyjnie, od najstarszej do najnowszej.
> You may want to backup your instance depending on how long you haven't updated
> Castopod.
> Powinieneś wykonać kopię zapasową instancji zgodnie z datą Twojej ostatniej aktualizacji Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
`v1.0.0-beta.1`:
Na przykład, jeśli posiadasz wersję `v1.0.0-alpha.42` i chcesz zaktualizować do `v1.0.0-beta.1`:
0. (highly recommended) Make a backup of your files and database.
0. (silnie zalecane) Zrób kopię zapasową swoich plików i bazy danych.
1. Download the latest release, overwrite your files whilst keeping `.env` and
`public/media`.
1. Pobierz najnowszą wersję, zastępując swoje pliki, ale zachowaj `.env` i `public/media`.
2. Go through each release update instructions sequentially (from oldest to
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
2. Wykonuj instrukcje aktualizacji po kolei (od najstarszej do najnowszej).
3. ✨ Enjoy your fresh instance, you're all done!
3. ✨ Twoja nowa instancja jest gotowa!
### Should I make a backup before updating?
### Czy powinienem wykonać kopię zapasową przed aktualizacją?
We advise you do, so you don't lose everything if anything goes wrong!
Radzimy tak zrobić, żeby w razie czego nie stracić wszystkiego!
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…
Generalnie zalecamy regularne tworzenie kopii zapasowych plików Castopod i bazy danych, aby uniknąć utraty wszystkiego...

View File

@ -2,173 +2,134 @@
sidebarDepth: 2
---
# Welcome 👋
# Witaj 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod is a free & open-source hosting platform made for podcasters who want
engage and interact with their audience.
Castopod to bezpłatna i open source'owa platforma hostingowa dla twórców podcastów, którzy chcą się angażować i komunikować się ze swoją publicznością.
Castopod is easy to install and was built on top of
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
Castopod jest łatwy w instalacji i został zaprojektowany przy użyciu [CodeIgniter4](https://codeigniter.com/), potężnego i bardzo małego frameworka PHP.
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
<a href="/pl/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Instalacja<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Features
## Funkcje
- 🌱 &nbsp;Free & open-source (AGPL v3 License)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics
belong to you, and&nbsp;you&nbsp;only
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding,
chapters, location, persons, soundbites, …
- 💬 &nbsp;Built-in social network:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes
- 📈 &nbsp;Built-in analytics:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant
- 🪙 &nbsp;Standard IABv2 audience measurement
- 🏡 &nbsp;On-premises analytics, no third party involved
- 📢 &nbsp;Built-in marketing tools:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: install as a standalone app
- 🎨 &nbsp;Customizable theme colors
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes
- 🔉 &nbsp;Generate soundbites
- ▶️ &nbsp;Embeddable player, embed your episodes on any website
- 💸 &nbsp;Monetization:
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🌱 &nbsp;Wolne, darmowe i open-source (Licencja AGPL v3)
- 🔐 &nbsp;Skupione na świadczeniu usług suwerenności danych: Twoje treści, Twoja
publiczność i Twoje statystyki należą tylko do Ciebie
- 🪄&nbsp;Funkcje Podcasting 2.0: GUID, blokada,
transkrypcje, finansowanie, rozdziały, geolokalizacja, goście,
wycinki dźwiękowe, ...
- 💬 &nbsp;Wbudowane media społecznościowe:
- 🚀 &nbsp;Castopod jest częścią Fediversum, zdecentralizowanej sieci społecznościowej
- ❤&nbsp;Tworzenie postów, udostępnianie, dodawanie do ulubionych i komentowanie
odcinków
- 📈 &nbsp;Wbudowane statystyki:
- ⚖️ &nbsp;Zgodne z RODO / CCPA / LGPD
- 🪙&nbsp;Pomiar widowni IABv2
- 🏡 &nbsp;Wbudowane statystyki, brak pośredniczących stron trzecich
- 📢 &nbsp;Wbudowane narzędzia marketingowe:
- ✅ &nbsp;Gotowe do SEO (meta-tagi open-graph, JSON-LD...)
- 📱 &nbsp;PWA: zainstaluj jako odrębną aplikację
- 🎨 &nbsp;Dostosowywalne kolory motywu
- 🎬 &nbsp;Wygeneruj gotowe udostępnianie wideo z odcinków
- 🔉 &nbsp;Generuj wycinki dźwiękowe
- ▶️ &nbsp;Wbuduj swoje odcinki w dowolną stronę internetową
- 💸 &nbsp;Monetyzacja:
- 🔗 &nbsp;Linki do finansowania
- 📲 &nbsp;reklama "listen-to-click”
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod
- 📤 &nbsp;Move your podcast out of Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want
- 👥 &nbsp;Multi-user: add contributors and set roles
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
- 💎 &nbsp;Płatne podcasty
- 📡&nbsp;Opublikuj swoje odcinki wszędzie za pomocą RSS:
- 📱 &nbsp;Na wszystkich indeksach i w aplikacjach: Podcast Index,
Podcasty Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend...
- ⚡&nbsp;Natychmiastowe rozpowszechnianie Twoich odcinków za pomocą WebSub
- 📥 &nbsp;Importowanie podcastu: przenieś istniejący podcast do Castopod
- 📤 &nbsp;Przenieś swój podcast do innego dostawcy
- 🔀 &nbsp;Wielojednostkowe: hostuj tyle podcastów, ile chcesz
- 👥 &nbsp;Wielu użytkowników: dodawaj współtwórców i definiuj ich role
- 🌎 &nbsp;Obsługa i18n: tłumaczenie na angielski, francuski, polski, niemiecki,
portugalski, portugalski (brazylijski), hiszpański... i
[w przyszłości więcej](https://translate.castopod.org)!
## Motivation
## Dlaczego Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
Ekosystem podcastingu jest z natury zdecentralizowany: możesz stworzyć swój podcast
jako plik RSS, opublikować go w sieci i udostępnić go wszędzie online.
It is in fact one of the only media to have stayed this way for a long time.
W rzeczywistości jest to jedno z nielicznych mediów, które pozostało takim przez długi czas.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
W miarę rozwoju sposobów korzystania z podcastingu, coraz więcej osób zaczyna słuchać podcastów: czy
to twórcy, którzy poszukują nowych sposobów dzielenia się swoimi pomysłami, czy słuchacze, którzy szukają
lepszego contentu.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
Podcasty zaczynają być coraz bardziej popularne, więc niektóre firmy próbują przesunąć je w kierunku bardziej kontrolowanej i scentralizowanej platformy.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
Castopod został stworzony jako otwarta i zrównoważona alternatywa dla hostingu Twoich podcastów, promując zdecentralizowane podejście, aby twórczość podcasterów mogła się wyrazić.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
Ten projekt jest kierowany przez społeczność open-source, a konkretnie przez Ruch Fediverse i Podcasting 2.0.
## Comparison with other solutions
## Porównanie z innymi rozwiązaniami
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for&nbsp;you.
Wierzymy, że pewne rozwiązania nie są odpowiednie dla każdego, to zależy od Twoich potrzeb. Poniżej przedstawiamy porównanie z innymi narzędziami, które pomogą Ci ocenić, czy Castopod jest odpowiedni dla Ciebie.
### Castopod vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running&nbsp;it.
Castopod nazywany jest „Wordpressem dla podcastów” ze względu na podobieństwo do tych dwóch platform. W pewnym sensie to prawda. Rzeczywiście, Castopod został zainspirowany ekosystemem Wordpressa, obserwując łatwość korzystania z niego przez społeczność i liczbę działających na nim stron internetowych.
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
Podobnie jak Wordpress, Castopod jest darmowy i open source oraz oparty na PHP z bazą danych MySQL, a także zaprojektowany w taki sposób, aby łatwo można go było zainstalować na większości serwerów internetowych.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
Wordpress to świetny sposób na stworzenie i rozszerzenie swojej strony internetowej za pomocą wtyczek, które pozwolą Ci na dostosowanie witryny dokładnie do Twoich potrzeb. Jest to zaawansowany system CMS, który pomoże Ci stworzyć dowolnego rodzaju stronę internetową.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting&nbsp;journey.
Z drugiej jednak strony, Castopod ma na celu skoncentrowanie się na potrzebach twórców podcastów, skupienie się na podcastingu i niczym więcej. Nie potrzebujesz żadnych wtyczek, aby rozpocząć swoją przygodę z podcastingiem.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
To pozwala na zoptymalizowanie procesów specyficznych dla podcastingu: od tworzenia podcastów i publikowania nowych odcinków po transmisję, marketing i analizy.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
W zależności od Twoich potrzeb, Wordpress i Castopod mogą istnieć obok siebie, ponieważ mają takie same wymagania!
### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
Funkwhale to samo-hostingowy, nowoczesny, wolny i open-source serwer muzyczny. Podobnie jak Castopod, Funkwhale jest w fediverse, zdecentralizowanej sieci społecznościowej, która umożliwia interoperacyjność między tymi dwoma platformami.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
Funkwhale został początkowo zbudowany wokół muzyki. Później, w miarę rozwoju projektu, wprowadzono możliwość hostowania podcastów.
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
W przeciwieństwie do Funkwhale, Castopod został zaprojektowany i zbudowany wyłącznie wokół podcastingu. Dzięki temu możemy łatwo rozwijać funkcje związane z ekosystemem podcastingu, takie jak funkcje podcastingu 2.0 (transkrypcje, rozdziały, lokalizacje, osoby, ...).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
Dlatego jeśli chcesz hostować swoją muzykę, powinieneś raczej użyć Funkwhale, a jeśli chcesz hostować swoje podcasty, powinieneś używać Castopod.
### Castopod vs other podcast hosts
### Castopod vs inne hostingi podcastów
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Istnieje wiele rozwiązań, dzięki którym możesz hostować swoje podcasty, niektóre z nich są naprawdę świetne, a [wiele z nich](https://podcastindex.org/apps) dołącza do ruchu Podcasting 2.0, podobnie jak Castopod!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
Każde z tych rozwiązań różni się od siebie, możesz porównać je na podstawie [listy funkcji](#funkcje).
That being said, there are two main differences with other podcasting solutions:
W każdym razie istnieją dwie główne różnice między innymi rozwiązaniami podcastowymi:
- Castopod can be self-hosted and is the only solution that allows you to keep
full control over what you produce. Also, as it is open-source, you can even
customize it as you wish.
- Castopod można samodzielnie hostować i to jedyny sposób, który umożliwia pełną kontrolę nad tym, co produkujesz. Ponadto, jako oprogramowanie open-source, masz możliwość modyfikacji go tak, jak chcesz.
- Castopod is the only solution that currently integrates both a decentralized
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
- Castopod jest jedynym rozwiązaniem, które integruje dzisiaj zarówno zdecentralizowaną sieć społecznościową opartą na ActivityPub, jak i funkcje "Podcasting 2.0", zmniejszając tym samym dystans między nimi.
## Contributing
## Wpływaj
Love Castopod and would like to help? Take a look at the following documentation
to get you&nbsp;started.
Podoba Ci się Castopod i chciałbyś pomóc? Zapoznaj się z dokumentacją, aby rozpocząć.
### Code of conduct
### Kodeks postępowania
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be&nbsp;tolerated.
Castopod przyjął Kodeks postępowania, którego oczekujemy, że uczestnicy projektu będą przestrzegać. Proszę przeczytać
[Instrukcje CODE_OF_CONDUCT](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md), aby dowiedzieć się, jakie działania będą tolerowane, a jakie nie.
### Contributing guide
### Przewodnik dla blogerów
Read our [contributing guide](./contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
Przeczytaj nasz [przewodnik dla współpracowników](./contributing/guidelines.md), aby dowiedzieć się więcej o naszym procesie rozwoju, jak zgłaszać poprawki i udoskonalać Castopod oraz jak tworzyć i testować zmiany w Castopod.
## Contributors
## Współpracownicy ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Podziękowania dla tych wspaniałych ludzi
([klucz emoji](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- ALL-CONTRIBUTORS-LIST:START - Nie usuwaj ani nie modyfikuj tej sekcji -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
@ -177,67 +138,9 @@ Thanks goes to these wonderful people
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Romain de Laage"/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Lyonel Bernard"/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt="Christopher Lagonick-Weitzel"/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ernesto Acosta"/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">🐛</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt="Bastien Luneteau"/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Cécile Ricordeau"/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Miś"/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt="Marcin Lewandowski"/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">🐛</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sebastian Janik"/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Karczmarczyk"/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="denis d"/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">🐛</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt="Douglas Kastle"/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">🐛</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="cExplorer"/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="ImaCrea"/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">🐛</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Jonas S"/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt="LEFEBVRE Yann"/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt="Sebastian Späth"/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">🐛</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="rocky III"/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt="Hermann Josef Eckl"/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Delhaye Cyrille"/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">🐛</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt="João Leandro"/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Angelos Chouvardas"/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt="Eivind"/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt="Ewen"/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt="forght"/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt="glottis0q"/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100" width="100px;" alt="ButterflyOfFire"/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt="Lucian I. Last"/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt="LuuzViir"/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt="CTHTC"/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt="Russian Retro"/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt="Marek L'ach"/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt="GunChleoc"/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt="GabiSnow"/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt="bendaha"/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt="Samuel Roland"/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Dimitri Regnier"/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100" width="100px;" alt="irithys"/><br /><sub><b>irithys</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sergi"/><br /><sub><b>Sergi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt="ghose (XoseM)"/><br /><sub><b>ghose (XoseM)</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/basen1982"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Andreas Olsson"/><br /><sub><b>Andreas Olsson</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/leonfrom"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="leonfrom"/><br /><sub><b>leonfrom</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/agentcobra57"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="agentcobra"/><br /><sub><b>agentcobra</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/alephoto85"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100" width="100px;" alt="Alessandro"/><br /><sub><b>Alessandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/liimee"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="liimee"/><br /><sub><b>liimee</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ahmedsabouni"><img src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100" width="100px;" alt="Ahmed Sabouni"/><br /><sub><b>Ahmed Sabouni</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KrzysztofDomanczyk"><img src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100" width="100px;" alt="KrzysztofDomanczyk"/><br /><sub><b>KrzysztofDomanczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/manueladdo"><img src="https://castopod.org/assets/img/ma.png" width="100px;" alt="Romain de Laage"/><br /><sub><b>Manuel Addo</b><br />(French Translation)</sub></a><br /><a href="https://code.castopod.org/adaures/castopod/merge_requests/9" title="Reviewed Pull Requests">👀</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Cpavcka"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Paweł Mrówczyński"/><br /><sub><b>Paweł Mrówczyński</b><br />(Polish Translation)</sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Adaures"><img src="https://secure.gravatar.com/avatar?d=mm&s=80" width="100px;" alt="Adaures"/><br /><sub><b>Adaures</b><br />(Project Manager)</sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=adaures" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-adaures" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-adaures" title="Project Management">📆</a></td>
</tr>
</tbody>
</table>
@ -247,53 +150,22 @@ Thanks goes to these wonderful people
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## Contact
You may reach us for help or ask any question you have on:
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for
feature requests & bug reports)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponsors
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
Ten projekt realizowany jest dzięki wsparciu sponsorów. Jeśli chcesz pomóc, rozważ [sponsorowanie rozwoju Castopod](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Logo Ad Aures" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="Logo NLnet" class="h-16" /></a>
</div>
## License
## Licencja
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md
[contributions]: https://code.castopod.org/adaures/castopod/-/issues
[semantic-release]: https://github.com/semantic-release/semantic-release
[discord]: https://castopod.org/discord
[stars]: https://github.com/ad-aures/castopod/stargazers
[crowdin]: https://translate.castopod.org/project/castopod
Prawa autorskie © 2020obecnie, [Ad Aures](https://adaures.com/).
https://img.shields.io/github/v/release/catladyintech/castopod?color=brightgreen&label=release&style=for-the-badge
https://img.shields.io/github/license/ad-aures/castopod?color=blue&style=for-the-badge
https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=for-the-badge
https://img.shields.io/badge/%20%20%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge
https://img.shields.io/badge/discord-join%20us-7289da.svg?logo=discord&logoColor=fff&style=for-the-badge
https://img.shields.io/github/stars/ad-aures/castopod?style=social&style=for-the-badge
https://img.shields.io/crowdin/v/castopod?color=brightgreen&style=for-the-badge

View File

@ -1,4 +1,4 @@
{
"label": "Contributing",
"label": "Contribuição",
"position": 3
}

View File

@ -1,154 +1,111 @@
---
title: Guidelines
title: Orientações
---
# Contributing to Castopod
# Contribuir para o Castopod
Love Castopod and want to help? Thanks so much, there's something to do for
everybody!
Ama o Castopod e quer ajudar? Muito obrigado, há algo para fazer para todos!
Please take a moment to review this document in order to make the contribution
process easy and effective for everyone involved.
Por favor, reserve um momento para ler este documento com o objetivo de tornar o processo de contribuição fácil e eficiente para todos os envolvidos.
Following these guidelines helps to communicate that you respect the time of the
developers managing and developing this open source project. In return, they
should reciprocate that respect in addressing your issue or assessing patches
and features.
Seguir essas orientações ajuda a comunicar que você respeita o tempo dos desenvolvedores que gerenciam e desenvolvem este projeto de código aberto. Em troca, eles devem retribuir esse respeito ao lidar com o seu problema ou avaliar correções e recursos.
::: info Note
::: info Nota
**Any** contribution made on a repository other than
[the original repository](https://code.castopod.org/adaures/castopod) will not
be accepted.
**Qualquer** contribuição feita em um repositório diferente do
[repositório original](https://code.castopod.org/adaures/castopod) não será aceita.
:::
## Using the issue tracker
## Utilizando o rastreador de problemas
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
O [rastreador de problemas](https://code.castopod.org/adaures/castopod/-/issues) é o canal preferido para [relatar bugs](#relatar-bugs), [solicitar recursos](#solicitar-recursos) e [enviar solicitações de mesclagem](#solicitações-de-mesclagem).
## ⚠️ Security issues and vulnerabilities
## ⚠️ Problemas de segurança e vulnerabilidades
If you encounter any security issue or vulnerability in the Castopod source,
please contact us directly by email at
[security@castopod.org](mailto:security@castopod.org)
Se encontrar algum problema de segurança ou vulnerabilidade no código-fonte do Castopod, entre em contato diretamente por e-mail em [security@castopod.org](mailto:security@castopod.org)
## Bug reports
## Relatar bugs
A bug is a _demonstrable problem_ that is caused by the code in the repository.
Good bug reports are extremely helpful - thank you!
Um bug é um _problema demonstrável_ causado pelo código no repositório. Relatórios de bugs detalhados são extremamente úteis - obrigado!
Guidelines for bug reports:
Orientações para relatórios de bugs:
1. **Use the issue search** &mdash; check if the issue has already been
reported.
1. **Utilize a busca de problemas** &mdash; verifique se o problema já foi relatado.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the
latest `main` branch in the repository.
2. **Verifique se o problema foi corrigido** &mdash; tente reproduzi-lo usando o branch `main` mais recente no repositório.
3. **Isolate the problem** &mdash; ideally create a
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
3. **Isolar o problema** &mdash; idealmente, crie um [caso de teste reduzido](https://css-tricks.com/reduced-test-cases/) e um exemplo ao vivo.
A good bug report shouldn't leave others needing to chase you up for more
information. Please try to be as detailed as possible in your report. What is
your environment? What steps will reproduce the issue? What browser(s) and OS
experience the problem? What would you expect to be the outcome? All these
details will help people to fix any potential bugs.
Um bom relatório de bug não deve deixar que outros precisem pedir mais informações. Por favor, tente ser o mais detalhado possível em seu relatório. Qual é o seu ambiente? Quais etapas reproduzem o problema? Quais navegadores e sistemas operacionais apresentam o problema? O que você espera que seja o resultado final? Todos esses detalhes ajudarão as pessoas a corrigir eventuais bugs.
> [Issue templates](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates)
> have been created for this project. You may use them to help you follow those
> guidelines.
> [Modelos de problemas](https://docs.gitlab.com/ee/user/project/description_templates.html#using-the-templates) foram criados para este projeto. Você pode usá-los para ajudá-lo a seguir essas orientações.
## Feature requests
## Solicitar recursos
Feature requests are welcome. But take a moment to find out whether your idea
fits with the scope and aims of the project. It's up to _you_ to make a strong
case to convince the project's developers of the merits of this feature. Please
provide as much detail and context as possible.
Solicitações de recursos são bem-vindas. Mas tire um momento para descobrir se sua ideia se encaixa no escopo e nos objetivos do projeto. Cabe a **você** apresentar um forte argumento para convencer os desenvolvedores do projeto dos méritos deste recurso. Por favor, forneça o máximo de detalhes e contexto possível.
## Pull requests
## Solicitações de mesclagem
Good pull requests - patches, improvements, new features - are a fantastic help.
They should remain focused in scope and avoid containing unrelated commits.
Solicitações de mesclagem são de grande ajuda. Elas devem permanecer focadas no escopo e evitar a inclusão de commits não relacionados.
**Please ask first** before embarking on any significant pull request (e.g.
implementing features, refactoring code, porting to a different language),
otherwise you risk spending a lot of time working on something that the
project's developers might not want to merge into the project.
**Por favor, pergunte primeiro** antes de começar qualquer solicitação de mesclagem significativa (por exemplo, implementar recursos, refatorar código, portar para uma linguagem diferente), caso contrário, você corre o risco de gastar muito tempo trabalhando em algo que os desenvolvedores do projeto não queiram mesclar.
Please adhere to the coding conventions used throughout a project (indentation,
accurate comments, etc.) and any other requirements (such as test coverage).
Por favor, adira às convenções de codificação utilizadas em todo o projeto (indentação, comentários precisos, etc.) e a quaisquer outros requisitos (como cobertura de testes).
Adhering to the following process is the best way to get your work included in
the project:
Seguir o processo a seguir é a melhor maneira de incluir seu trabalho no projeto:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the
project, clone your fork, and configure the remotes:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) o
projeto, clone seu fork e configure os remotos:
```bash
# Clone your fork of the repo into the current directory
git clone https://code.castopod.org/<your-username>/castopod.git
# Clone o fork do repositório para o diretório atual
git clone https://code.castopod.org/<seu-nome-de-usuário>/castopod.git
# Navigate to the newly cloned directory
# Navegue até o diretório recém-clonado
cd castopod
# Assign the original repo to a remote called "upstream"
# Atribua o repositório original a um remoto chamado "upstream"
git remote add upstream https://code.castopod.org/adaures/castopod.git
```
2. If you cloned a while ago, get the latest changes from upstream:
2. Se você clonou há algum tempo, obtenha as alterações mais recentes do repositório original:
```bash
git checkout main
git pull upstream main
```
3. Create a new topic branch (off the `main` branch) to contain your feature,
change, or fix:
3. Crie um novo branch de tópico (a partir do branch `main`) para conter sua alteração, mudança ou correção:
```bash
git checkout -b <topic-branch-name>
git checkout -b <nome-do-branch-de-tópico>
```
4. Commit your changes in logical chunks. Please adhere to these
[git commit message guidelines](https://conventionalcommits.org/) or your
code is unlikely be merged into the main project. Use Git's
[interactive rebase](https://help.github.com/articles/about-git-rebase/)
feature to tidy up your commits before making them public.
4. Comite suas alterações em pedaços lógicos. Por favor, siga estas [orientações de mensagem de commit do Git](https://conventionalcommits.org/) ou seu código provavelmente não será mesclado no projeto principal. Use o recurso de [rebase interativo do Git](https://help.github.com/articles/about-git-rebase/) para organizar seus commits antes de torná-los públicos.
5. Locally merge (or rebase) the upstream dev branch into your topic branch:
5. Una localmente (ou rebase) o branch de desenvolvimento original no seu branch de tópico:
```bash
git pull [--rebase] upstream main
```
6. Push your topic branch up to your fork:
6. Faça push do seu branch de tópico para o seu fork:
```bash
git push origin <topic-branch-name>
git push origin <nome-do-branch-de-tópico>
```
7. [Open a Pull Request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
with a clear title and description.
7. [Abra uma solicitação de mesclagem](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#new-merge-request-from-a-fork)
com um título e descrição claros.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to
license your work under the terms of the
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
**IMPORTANTE**: Ao enviar uma correção, você concorda em permitir que os proprietários do projeto licenciem seu trabalho nos termos da [GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
## Collaborating guidelines
## Orientações de colaboração
There are few basic rules to ensure high quality of the project:
Existem algumas regras básicas para garantir a alta qualidade do projeto:
- Before merging, a PR requires at least two approvals from the collaborators
unless it's an architectural change, a large feature, etc. If it is, then at
least 50% of the core team have to agree to merge it, with every team member
having a full veto right. (i.e. every single one can block any PR)
- A PR should remain open for at least two days before merging (does not apply
for trivial contributions like fixing a typo). This way everyone has enough
time to look into it.
- Antes de efetuar a mesclagem, um PR requer pelo menos duas aprovações dos colaboradores, a menos que seja uma mudança arquitetônica, um recurso grande, etc. Se for, pelo menos 50% da equipe principal deve concordar em mesclá-la, com cada membro da equipe tendo direito a um veto completo. (ou seja, cada um pode bloquear qualquer PR)
- Um PR deve permanecer aberto por pelo menos dois dias antes de ser mesclado (não se aplica a contribuições triviais, como corrigir um erro de digitação). Dessa forma, todos têm tempo suficiente para examiná-lo.
You are always welcome to discuss and propose improvements to this guideline.
Você é sempre bem-vindo para discutir e propor melhorias a estas orientações.

View File

@ -1,45 +1,40 @@
---
title: Development setup
title: Configuração do ambiente de desenvolvimento
sidebarDepth: 3
---
# Setup your development environment
# Configurar o seu ambiente de desenvolvimento
## Introduction
## Introdução
Castopod is a web app based on the `php` framework
[CodeIgniter 4](https://codeigniter.com).
O Castopod é um aplicativo da web baseado no framework `php` [CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
Usamos o [Docker](https://www.docker.com/) para configurar rapidamente um ambiente de desenvolvimento. Um arquivo `docker-compose.yml` e um `Dockerfile` estão incluídos na pasta raiz do projeto para ajudar você a iniciar sua contribuição.
> You don't need any prior knowledge of Docker to follow the next steps.
> However, if you wish to use your own environment, feel free to do so!
> Você não precisa de nenhum conhecimento prévio sobre o Docker para seguir as próximas etapas. No entanto, se você preferir usar seu próprio ambiente, fique à vontade!
## Setup instructions
## Instruções para configuração
### 1. Pre-requisites
### 1. Pré-requisitos
0. Install [docker](https://docs.docker.com/get-docker).
0. Instale o [docker](https://docs.docker.com/get-docker).
1. Clone Castopod project by running:
1. Clone o projeto Castopod executando o seguinte comando:
```bash
git clone https://code.castopod.org/adaures/castopod.git
```
2. Create a `.env` file with the minimum required config to connect the app to
the database and use redis as a cache handler:
2. Crie um arquivo `.env` com a configuração mínima necessária para conectar o aplicativo ao banco de dados e usar o Redis como manipulador de cache:
```ini
CI_ENVIRONMENT="development"
# If set to development, you must run `npm run dev` to start the static assets server
# Se definido como development, você deve executar `npm run dev` para iniciar o servidor de ativos estáticos
vite.environment="development"
# By default, this is set to true in the app config.
# For development, this must be set to false as it is
# on a local environment
# Por padrão, isso é definido como true no arquivo de configuração do aplicativo.
# Para desenvolvimento, isso deve ser definido como false, pois é
# em um ambiente local
app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/"
@ -56,368 +51,93 @@ to help you kickstart your contribution.
cache.handler="redis"
cache.redis.host = "redis"
# You may not want to use redis as your cache handler
# Comment/remove the two lines above and uncomment
# the next line for file caching.
#cache.handler="file"
# Talvez você não queira usar o Redis como manipulador de cache.
# Comente/remova as duas linhas acima e descomente
# a próxima linha para cache de arquivo.
# cache.handler="file"
```
> _NB._ You can tweak your environment by setting more environment variables
> in your custom `.env` file. See the `env` for examples or the
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
> for more info.
> _NB._ Você pode ajustar seu ambiente definindo mais variáveis de ambiente em seu arquivo `.env` personalizado. Consulte o arquivo `env` para exemplos ou o [Guia do Usuário do CodeIgniter4](https://codeigniter.com/user_guide/index.html) para obter mais informações.
3. (for docker desktop) Add the repository you've cloned to docker desktop's
`Settings` > `Resources` > `File Sharing`
3. (para desktop Docker) Adicione o repositório clonado a `Configurações` > `Recursos` > `Compartilhamento de Arquivos` do Docker Desktop
### 2. (recommended) Develop inside the app Container with VSCode
### 2. (recomendado) Desenvolver dentro do contêiner do aplicativo com o VSCode
If you're working in VSCode, you can take advantage of the `.devcontainer/`
folder. It defines a development environment (dev container) with preinstalled
requirements and VSCode extensions so you don't have to worry about them. All
required services will be loaded automagically! 🪄
Se você estiver trabalhando no VSCode, pode aproveitar a pasta `.devcontainer/`. Ela define um ambiente de desenvolvimento (contêiner de desenvolvimento) com requisitos e extensões pré-instalados do VSCode para que você não precise se preocupar com eles. Todos os serviços necessários serão carregados automaticamente! 🪄
1. Install the VSCode extension
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
1. Instale a extensão do VSCode [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Open in container`
> The VSCode window will reload inside the dev container. Expect several
> minutes during first load as it is building all necessary services.
> A janela do VSCode será recarregada dentro do contêiner de desenvolvimento. Aguarde vários minutos durante a primeira carga, pois todos os serviços necessários estão sendo construídos.
**Note**: The dev container will start by running Castopod's php server.
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
**Observação**: O contêiner de desenvolvimento será iniciado executando o servidor php do Castopod. Durante o desenvolvimento, você precisará iniciar o servidor de desenvolvimento do [Vite](https://vitejs.dev) para compilar o código TypeScript e os estilos:
```bash
# run Vite dev server
# execute o servidor de desenvolvimento do Vite
npm run dev
```
If there is any issue with the php server not running, you can restart them
using the following commands:
Se houver algum problema com o servidor php não sendo executado, você pode reiniciá-lo usando os comandos a seguir:
```bash
# run Castopod server
# execute o servidor Castopod
php spark serve - 0.0.0.0
```
3. You're all set! 🎉
3. Está tudo pronto! 🎉
You're now **inside the dev container**, you may use the VSCode console
(`Terminal` > `New Terminal`) to run any command:
Agora você está **dentro do contêiner de desenvolvimento** e pode usar o console do VSCode (`Terminal` > `Novo Terminal`) para executar qualquer comando:
```bash
# PHP is installed
# O PHP está instalado
php -v
# Composer is installed
# O Composer está instalado
composer -V
# npm is installed
# O npm está instalado
npm -v
# git is installed
# O git está instalado
git version
```
For more info, see
[VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
Para mais informações, consulte [VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
### 3. Start hacking
### 3. Começando a desenvolver
You're all set! Start working your magic by updating the project's files! Help
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
Está tudo pronto! Comece a trabalhar atualizando os arquivos do projeto! Consulte o [Guia do Usuário do CodeIgniter4](https://codeigniter.com/user_guide/index.html) para obter mais informações.
To see your changes, go to:
Para ver suas alterações, acesse:
- `http://localhost:8080/` for the Castopod app
- `http://localhost:8888/` for the phpmyadmin interface:
- `http://localhost:8080/` para o aplicativo Castopod
- `http://localhost:8888/` para a interface phpmyadmin:
- username: **castopod**
- password: **castopod**
- nome de usuário: **castopod**
- senha: **castopod**
### 2-alt. Develop outside the app container
### 2-alt. Desenvolver fora do contêiner do aplicativo
You do not wish to use the VSCode devcontainer? No problem!
Você não deseja usar o contêiner de desenvolvimento do VSCode? Sem problemas!
1. Start docker containers manually:
1. Inicie manualmente os contêineres do Docker:
Go to project's root folder and run:
Vá para a pasta raiz do projeto e execute o seguinte comando:
```bash
# starts all services declared in docker-compose.yml file
# -d option starts the containers in the background
# inicie todos os serviços declarados no arquivo docker-compose.yml
# a opção -d inicia os contêineres em segundo plano
docker-compose up -d
# See all running processes (you should see 3 processes running)
# Veja todos os processos em execução (você deve ver 3 processos em execução)
docker-compose ps
# Alternatively, you can check all docker processes
# Alternativamente, você pode verificar todos os processos do Docker em execução
docker ps -a
```
> The `docker-compose up -d` command will boot 4 containers in the
> background:
> O comando `docker-compose up -d` inicializará os 4 contêineres em segundo plano:
>
> - `castopod_app`: a php based container with Castopod requirements
> installed
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries
> and pages caching
> - `castopod_mariadb`: a [mariadb](https://mariadb.org/) server for
> persistent data
> - `castopod_phpmyadmin`: a phpmyadmin server to visualize the mariadb
> database.
> - `castopod_app`: um contêiner baseado em PHP com os requisitos do Castopod instalados
2. Run any command inside the containers by prefixing them with
`docker-compose run --rm app`:
```bash
# use PHP
docker-compose run --rm app php -v
# use Composer
docker-compose run --rm app composer -V
# use npm
docker-compose run --rm app npm -v
# use git
docker-compose run --rm app git version
```
---
## Going Further
### Install Castopod's dependencies
1. Install php dependencies with [Composer](https://getcomposer.org/)
```bash
composer install
```
::: info Note
The php dependencies aren't included in the repository. Composer will check
the `composer.json` and `composer.lock` files to download the packages with
the right versions. The dependencies will live under the `vendor/` folder.
For more info, check out the
[Composer documentation](https://getcomposer.org/doc/).
:::
2. Install javascript dependencies with [npm](https://www.npmjs.com/)
```bash
npm install
```
::: info Note
The javascript dependencies aren't included in the repository. Npm will check
the `package.json` and `package.lock` files to download the packages with the
right versions. The dependencies will live under the `node_module` folder.
For more info, check out the [NPM documentation](https://docs.npmjs.com/).
:::
3. Generate static assets:
```bash
# build all static assets at once
npm run build:static
# build specific assets
npm run build:icons
npm run build:svg
```
::: info Note
The static assets generated live under the `public/assets` folder, it
includes javascript, styles, images, fonts, icons and svg files.
:::
### Initialize and populate database
::: tip Tip
You may skip this section if you go through the install wizard (go to
`/cp-install`).
:::
1. Build the database with the migrate command:
```bash
# loads the database schema during first migration
php spark migrate -all
```
You may need to undo the migration (rollback):
```bash
# rolls back database schema (deletes all tables and their content)
php spark migrate:rollback
```
2. Populate the database with the required data:
```bash
# Populates all required data
php spark db:seed AppSeeder
```
You may choose to add data separately:
```bash
# Populates all categories
php spark db:seed CategorySeeder
# Populates all Languages
php spark db:seed LanguageSeeder
# Populates all podcasts platforms
php spark db:seed PlatformSeeder
# Populates all Authentication data (roles definition…)
php spark db:seed AuthSeeder
```
3. (optionnal) Populate the database with test data:
- Populate test data (login: admin / password: AGUehL3P)
```bash
php spark db:seed TestSeeder
```
- Populate with fake podcast analytics:
```bash
php spark db:seed FakePodcastsAnalyticsSeeder
```
- Populate with fake website analytics:
```bash
php spark db:seed FakeWebsiteAnalyticsSeeder
```
TestSeeder will add an active superadmin user with the following credentials:
- username: **admin**
- password: **AGUehL3P**
### Useful docker / docker-compose commands
- Monitor the app container:
```bash
docker-compose logs --tail 50 --follow --timestamps app
```
- Interact with redis server using included redis-cli command:
```bash
docker exec -it castopod_redis redis-cli
```
- Monitor the redis container:
```bash
docker-compose logs --tail 50 --follow --timestamps redis
```
- Monitor the mariadb container:
```bash
docker-compose logs --tail 50 --follow --timestamps mariadb
```
- Monitor the phpmyadmin container:
```bash
docker-compose logs --tail 50 --follow --timestamps phpmyadmin
```
- Restart docker containers:
```bash
docker-compose restart
```
- Destroy all containers, opposite of `up` command:
```bash
docker-compose down
```
- Rebuild app container:
```bash
docker-compose build app
```
Check [docker](https://docs.docker.com/engine/reference/commandline/docker/) and
[docker-compose](https://docs.docker.com/compose/reference/) documentations for
more insights.
## Known issues
### Allocation failed - JavaScript heap out of memory
This happens when running `npm install`.
👉 By default, docker might not have access to enough RAM. Allocate more memory
and run `npm install` again.
### (Linux) Files created inside container are attributed to root locally
You may use Linux user namespaces to fix this on your machine:
::: info Note
Replace "username" with your local username
:::
1. Go to `/etc/docker/daemon.json` and add:
```json
{
"userns-remap": "username"
}
```
2. Configure the subordinate uid/guid:
```bash
# in /etc/subuid
username:1000:1
username:100000:65536
```
```bash
# in /etc/subgid
username:1000:1
username:100000:65536
```
3. Restart docker:
```bash
sudo systemctl restart docker
```
4. That's it! Now, the root user in the container will be mapped to the user on
your local machine, no more permission issues! 🎉
You can check
[this great article](https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/)
to know more about how it works.

View File

@ -1,4 +1,4 @@
{
"label": "Getting Started",
"label": "Começando",
"position": 2
}

View File

@ -1,87 +1,87 @@
---
title: Authentication & Authorization
title: Autenticação e Autorização
sidebarDepth: 3
---
# Authentication & Authorization
# Autenticação e Autorização
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
O Castopod gerencia autenticação e autorização usando o `codeigniter/shield` em conjunto com regras personalizadas. As funções e permissões são definidas em dois níveis:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
1. [Em nível de instância](#1-funções-e-permissões-em-nível-de-instância)
2. [Por podcast](#2-funções-e-permissões-por-podcast)
## 1. Instance wide roles and permissions
## 1. Funções e permissões em nível de instância
### Instance roles
### Funções na instância
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
| função | descrição | permissões |
| ------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| Super admin | Tem controle total sobre o Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Gerente | Gerencia o conteúdo do Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Usuários gerais do Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
### Permissões na instância
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
| permissão | descrição |
| ----------------------- | ------------------------------------------------------------------------------- |
| admin.access | Pode acessar a área administrativa do Castopod. |
| admin.settings | Pode acessar as configurações do Castopod. |
| users.manage | Pode gerenciar os usuários do Castopod. |
| persons.manage | Pode gerenciar pessoas. |
| pages.manage | Pode gerenciar páginas. |
| podcasts.view | Pode visualizar todos os podcasts. |
| podcasts.create | Pode criar novos podcasts. |
| podcasts.import | Pode importar podcasts. |
| fediverse.manage-blocks | Pode bloquear atores/domínios fediverse de interagir com o Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
## 2. Funções e permissões por podcast
### Per podcast roles
### Funções por podcast
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
| função | descrição | permissões |
| --------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Tem controle total sobre o podcast #{id}. | \* |
| Editor | Gerencia o conteúdo e publicações do podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Autor | Gerencia o conteúdo do podcast #{id}, sem publicar. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Convidado | Contribuidor geral do podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
### Permissões por podcast
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
| permissão | descrição |
| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| view | Pode visualizar o painel e análise do podcast #{id}. |
| edit | Pode editar o podcast #{id}. |
| delete | Pode excluir o podcast #{id}. |
| manage-imports | Pode sincronizar o podcast importado #{id}. |
| manage-persons | Pode gerenciar inscritos no podcast #{id}. |
| manage-subscriptions | Pode gerenciar inscrições no podcast #{id}. |
| manage-contributors | Pode gerenciar os contribuidores do podcast #{id}. |
| manage-platforms | Pode configurar/remover links para plataformas no podcast #{id}. |
| manage-publications | Pode publicar o podcast #{id}. |
| manage-notifications | Pode visualizar e marcar notificações como lidas para o podcast #{id}. |
| interact-as | Pode interagir como o podcast #{id} para adicionar, compartilhar ou responder mensagens. |
| episodes.view | Pode visualizar o painel e análise do podcast #{id}. |
| episodes.create | Pode criar episódios para o podcast #{id}. |
| episodes.edit | Pode editar o podcast #{id}. |
| episodes.delete | Pode excluir o podcast #{id}. |
| episodes.manage-persons | Pode gerenciar inscritos no podcast #{id}. |
| episodes.manage-clips | Pode gerenciar clipes de vídeo ou trechos de áudio no podcast #{id}. |
| episodes.manage-publications | Pode publicar o podcast #{id}. |
| episodes.manage-comments | Pode criar/excluir comentários no episódio do podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -1,158 +1,148 @@
---
title: Official Docker images
title: Imagens Oficiais Docker
sidebarDepth: 3
---
# Official Docker images
# Imagens Oficiais Docker
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
O Castopod envia 3 imagens Docker para o Hub Docker como parte de seu processo de construção automatizada:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all
in one castopod image using nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): uma imagem all in one do Castopod usando o nginx unit
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): o pacote de aplicação com todas as dependências do Castopod
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): uma configuração do Nginx para o Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
Além disso, o Castopod requer um banco de dados compatível com o MySQL. Um banco de dados Redis pode ser adicionado como gerenciador de cache.
## Supported tags
## Tags Suportadas
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
- `develop` [unstable], a versão mais recente do branch de desenvolvimento
- `beta` [stable], última versão beta
- `1.x.x` [stable], versão específica (a partir da `1.0.0`)
## Example usage
## Exemplo de Uso
1. Install [docker](https://docs.docker.com/get-docker/) and
[docker-compose](https://docs.docker.com/compose/install/)
2. Create a `docker-compose.yml` file with the following:
1. Instale o [docker](https://docs.docker.com/get-docker/) e o [docker-compose](https://docs.docker.com/compose/install/)
2. Crie um arquivo `docker-compose.yml` com o seguinte conteúdo:
```yml
version: "3.7"
```yml
version: "3.7"
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
services:
app:
image: castopod/castopod:latest
container_name: "castopod-app"
volumes:
- castopod-media:/var/www/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
CP_BASEURL: "https://castopod.example.com"
CP_ANALYTICS_SALT: changeme
CP_CACHE_HANDLER: redis
CP_REDIS_HOST: redis
networks:
- castopod-app
- castopod-db
ports:
- 8000:8000
restart: unless-stopped
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
mariadb:
image: mariadb:10.5
container_name: "castopod-mariadb"
networks:
- castopod-db
volumes:
- castopod-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
restart: unless-stopped
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
volumes:
- castopod-cache:/data
networks:
- castopod-app
redis:
image: redis:7.0-alpine
container_name: "castopod-redis"
volumes:
- castopod-cache:/data
networks:
- castopod-app
volumes:
castopod-media:
castopod-db:
castopod-cache:
volumes:
castopod-media:
castopod-db:
castopod-cache:
networks:
castopod-app:
castopod-db:
```
networks:
castopod-app:
castopod-db:
```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
Você precisará ajustar algumas variáveis de acordo com suas necessidades (ex: `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` e `CP_ANALYTICS_SALT`).
3. Setup a reverse proxy for TLS (SSL/HTTPS)
3. Configure um proxy reverso para TLS (SSL/HTTPS)
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
O TLS é obrigatório para o ActivityPub funcionar. Essa tarefa pode ser facilmente resolvida com um proxy reverso, por exemplo usando o [Caddy](https://caddyserver.com/):
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
4. Execute `docker-compose up -d`, espere que esteja pronto em `https://castopod.example.com/cp-install` para finalizar a configuração do Castopod!
5. You're all set, start podcasting! 🎙️🚀
5. Está tudo pronto, comece a podcastar! 🎙️🚀
## Environment Variables
## Variáveis de Ambiente
- **castopod/castopod** and **castopod/app**
- **castopod/castopod** e **castopod/app**
| Variable name | Type (`default`) | Default |
| ------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Nome da Variável | Tipo (`default`) | Valor Padrão |
| ------------------------------------ | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` ou `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` ou `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`**| ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` ou `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
- **castopod/web-server**
| Variable name | Type | Default |
| ---------------------- | --------------------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
| Nome da Variável | Tipo | Valor Padrão |
| ------------------------ | --------------------- | ------------ |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |

View File

@ -1,223 +1,123 @@
---
title: Installation
title: Instalação
sidebarDepth: 3
---
# How to install Castopod?
# Como instalar o Castopod
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
O Castopod foi projetado para ser fácil de instalar. Se você estiver usando um
hospedagem dedicada ou compartilhada, você pode instalá-lo na maioria dos
servidores web compatíveis com PHP-MySQL.
::: tip Note
::: tip Nota
We've released official Docker images for Castopod!
Publicamos imagens oficiais do Docker para o Castopod!
If you prefer using Docker, you may skip this and go straight to the
[docker documentation](./docker.md) for Castopod.
Se você preferir usar o Docker, você pode pular esta parte e ir diretamente para a [documentação Docker](./docker.md) para o Castopod.
:::
## Requirements
## Pré-requisitos
- PHP v8.1 only
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
- PHP v8.1
- MySQL versão 5.7 ou superior ou MariaDB versão 10.2 ou superior
- Suporte HTTPS
- Um [ntp-synced clock](https://wiki.debian.org/NTP) para validar as solicitações de federação
### PHP v8.1 only
### PHP v8.1
PHP version 8.1 is required, with the following extensions installed:
A versão 8.1 do PHP é necessária, com as seguintes extensões instaladas:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
**PNG** and **WEBP** libraries.
- [exif](https://www.php.net/manual/en/exif.installation.php)
- [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) com bibliotecas **JPEG**, **PNG** e **WEBP**.
- [exif](https://www.php.net/manual/fr/exif.installation.php)
Additionally, make sure that the following extensions are enabled in your PHP:
Além disso, verifique se as seguintes extensões estão habilitadas no seu PHP:
- json (enabled by default - don't turn it off)
- xml (enabled by default - don't turn it off)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
- json (habilitado por padrão - não desabilite)
- xml (habilitado por padrão - não desabilite)
- [mysqlnd](https://www.php.net/manual/fr/mysqlnd.install.php)
### MySQL compatible database
### Banco de dados compatível com o MySQL
> We recommend using [MariaDB](https://mariadb.org).
> Recomendamos o uso do [MariaDB](https://mariadb.org).
::: warning Warning
::: warning Atenção
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
O Castopod só funciona com bancos de dados do MySQL versão 5.7 ou superior. As versões 5.6 (que tiveram suporte encerrado em 5 de fevereiro de 2021) ou anteriores do MySQL não funcionarão.
:::
You will need the server hostname, database name, username and password to
complete the installation process. If you do not have these, please contact your
server administrator.
Você precisará do nome do host do servidor, nome do banco de dados, nome de usuário e senha para concluir o processo de instalação. Se você não tiver essas informações, entre em contato com seu administrador.
#### Privileges
### (Opcional) FFmpeg v4.1.8 ou superior para clipes de vídeo
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
`REFERENCES`, `CREATE VIEW`.
O [FFmpeg](https://www.ffmpeg.org/) versão 4.1.8 ou superior é necessário se você deseja gerar clipes de vídeo. As seguintes extensões devem estar instaladas:
### (Optional) FFmpeg v4.1.8 or higher for Video Clips
- biblioteca **FreeType 2** para [gd](https://www.php.net/manual/en/image.installation.php).
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required if you
want to generate Video Clips. The following extensions must be installed:
### (Opcional) Outras recomendações
- **FreeType 2** library for
[gd](https://www.php.net/manual/en/image.installation.php).
- Redis para melhor desempenho em cache.
- CDN para cache de arquivos estáticos e melhor desempenho.
- Gateway de e-mail para senhas perdidas.
### (Optional) Other recommendations
## Instruções de instalação
- Redis for better cache performances.
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
### Pré-requisitos
## Install instructions
### Pre-requisites
0. Get a Web Server with [requirements](#requirements) installed
1. Create a MySQL database for Castopod with a user having access and
modification privileges (for more info, see
[MySQL compatible database](#mysql-compatible-database)).
2. Activate HTTPS on your domain with an _SSL certificate_.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
the web server if you havent already.
- ⚠️ Set the web server document root to the `public/` sub-folder within the
`castopod` folder.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
0. Obtenha um servidor web com [os pré-requisitos](#pré-requisitos) instalados.
1. Crie um banco de dados MySQL para o Castopod com um usuário com as permissões necessárias (para mais informações, consulte [Banco de dados compatível com o MySQL](#banco-de-dados-compatível-com-o-mysql)).
2. Ative o HTTPS em seu domínio com um _certificado SSL_.
3. Baixe e descompacte o pacote mais recente do [Castopod](https://castopod.org/) no servidor web, se ainda não o tiver feito.
- ⚠️ Certifique-se de apontar a raiz do documento do servidor da web para a subpasta `public/` da pasta `castopod`.
4. Adicione **tarefas cron** no seu servidor web para vários processos em segundo plano (substitua os caminhos conforme necessário):
```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1
* * * * * /caminho/para/php /caminho/para/castopod/spark tasks:run >> /dev/null 2>&1
```
**Note** - If you do not add this cron task, the following Castopod features
will not work:
**Observação** - Se você não adicionar essa tarefa cron, os seguintes recursos do Castopod não funcionarão:
- Importing a podcast from an existing RSS feed
- Broadcasting social activities to your followers in the fediverse
- Broadcasting episodes to open hubs using
[WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
- Importar um podcast de um feed RSS existente
- Transmitir atividades sociais para seus seguidores no Fediverso
- Transmitir episódios para hubs abertos usando o [WebSub](https://en.wikipedia.org/wiki/WebSub)
- Gerar clipes de vídeo - [requer FFmpeg](#opcional-ffmpeg-v418-ou-superior-para-clipes-de-vídeo)
### (recommended) Install Wizard
### (Método recomendado) Assistente de instalação
1. Run the Castopod install script by going to the install wizard page
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
2. Follow the instructions on your screen.
3. Start podcasting!
1. Execute o script de instalação do Castopod acessando a página do assistente de instalação (`https://seu_nome_de_domínio.com/cp-install`) em seu navegador da web favorito.
2. Siga as instruções exibidas.
3. Comece a podcastar!
::: info Note
:::info Nota
The install script writes a `.env` file in the package root. If you cannot go
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
O script de instalação criará um arquivo `.env` na raiz do pacote. Se você não conseguir usar o assistente de instalação, poderá criar e editar o arquivo `.env` manualmente, com base no arquivo `.env.example`.
:::
### Email/SMTP setup
### Configuração de e-mail/SMTP
Email configuration is required for some features to work properly (eg.
retrieving your forgotten password, sending instructions to premium subscribers,
…)
A configuração de e-mail é necessária para que alguns recursos funcionem corretamente (por exemplo, recuperar sua senha esquecida, enviar instruções para assinantes premium, ...)
You may add your email configuration in your instance's `.env` like so:
Você pode adicionar a configuração de e-mail no arquivo `.env` de sua instância da seguinte maneira:
```ini
# []
# [...]
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
email.fromEmail="seu_endereço_de_email"
email.SMTPHost="seu_host_smtp"
email.SMTPUser="seu_usuario_smtp"
email.SMTPPass="sua_senha_smtp"
```
#### Email config options
#### Opções de configuração de e-mail
| Variable name | Type | Default |
| ---------------- | -------------------- | ------------ |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined` |
| **`SMTPPass`** | string | `undefined` |
| **`SMTPPort`** | number | `25` |
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
### Media storage
By default, files are saved to the `public/media` folder using the file system.
If you need to relocate the `media` folder to a different location, you can
specify it in your `.env` file as shown below:
```ini
# […]
media.root="media"
media.storage="/mnt/storage"
```
In this example, the files will be saved to the /mnt/storage/media folder. Make
sure to also update your web server configuration to reflect this change.
### S3
If you prefer storing your media files on an S3 compatible storage, you may
specify it in your `.env`:
```ini
# […]
media.fileManager="s3"
media.s3.endpoint="your_s3_host"
media.s3.key="your_s3_key"
media.s3.secret="your_s3_secret"
media.s3.region="your_s3_region"
```
#### S3 config options
| Variable name | Type | Default |
| ----------------------- | ------- | ----------- |
| **`endpoint`** | string | `undefined` |
| **`key`** | string | `undefined` |
| **`secret`** | string | `undefined` |
| **`region`** | string | `undefined` |
| **`bucket`** | string | `castopod` |
| **`protocol`** | number | `undefined` |
| **`pathStyleEndpoint`** | boolean | `false` |
| **`keyPrefix`** | string | `undefined` |
## Community packages
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
### Install with YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em"
class="text-xl"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2A10 10 0 0 0 2 12a10 10 0 0 0 6.84 9.49c.5.09.69-.21.69-.48l-.02-1.86c-2.51.46-3.16-.61-3.36-1.18-.11-.28-.6-1.17-1.02-1.4-.35-.2-.85-.66-.02-.67.79-.01 1.35.72 1.54 1.02.9 1.52 2.34 1.1 2.91.83a2.1 2.1 0 0 1 .64-1.34c-2.22-.25-4.55-1.11-4.55-4.94A3.9 3.9 0 0 1 6.68 8.8a3.6 3.6 0 0 1 .1-2.65s.83-.27 2.75 1.02a9.28 9.28 0 0 1 2.5-.34c.85 0 1.7.12 2.5.34 1.9-1.3 2.75-1.02 2.75-1.02.54 1.37.2 2.4.1 2.65.63.7 1.02 1.58 1.02 2.68 0 3.84-2.34 4.7-4.56 4.94.36.31.67.91.67 1.85l-.01 2.75c0 .26.19.58.69.48A10.02 10.02 0 0 0 22 12 10 10 0 0 0 12 2z"/></svg>Github
Repo</a>
</div>
| Nome da variável | Tipo | Valor padrão |
| ---------------- | -------------------- | -------------- |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined`

View File

@ -1,26 +1,22 @@
---
title: Security
title: Segurança
---
# Security concerns
# Perguntas de segurança
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP
framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
O Castopod é desenvolvido no [CodeIgniter4](https://codeigniter.com/), um framework PHP que incentiva as
[boas práticas de segurança](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
Para garantir a melhor segurança possível para sua instância e evitar ataques maliciosos, recomendamos que você atualize as permissões dos arquivos do Castopod após a instalação e cada atualização (e evite erros de acesso aos arquivos):
- `writable/` folder must be **readable** and **writable**.
- `public/media/` folder must be **readable** and **writable**.
- any other file must be set to **readonly**.
- A pasta `writable/` deve ter permissão de **leitura** e **escrita**.
- A pasta `public/media/` deve ter permissão de **leitura** e **escrita**.
- Todos os outros arquivos devem ter permissão de **leitura apenas**.
For instance, if you are using Apache or NGINX with Ubuntu you may do the
following:
Por exemplo, se você estiver usando o Apache ou o NGINX com o Ubuntu, você pode executar os seguintes comandos:
```bash
sudo chown -R root:root /path/to/castopod
sudo chown -R www-data:www-data /path/to/castopod/writable
sudo chown -R www-data:www-data /path/to/castopod/public/media
sudo chown -R root:root /caminho/para/castopod
sudo chown -R www-data:www-data /caminho/para/castopod/writable
sudo chown -R www-data:www-data /caminho/para/castopod/public/media
```

View File

@ -1,109 +1,97 @@
---
title: Update
title: Atualização
sidebarDepth: 3
---
# How to update Castopod?
# Como instalar o Castopod?
After installing Castopod, you may want to update your instance to the latest
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
Depois de instalar o Castopod, você pode atualizar sua instância para a versão mais recente e aproveitar os recursos mais recentes ✨, correções de bugs 🐛 e melhorias de desempenho ⚡.
## Update instructions
## Instruções de atualização
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
0. ⚠️ Antes de atualizar, recomendamos fortemente que você faça backup de seus arquivos Castopod e do banco de dados.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
[Devo fazer backup antes de atualizar?](#devo-fazer-backup-antes-de-atualizar)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
1. Vá para a
[página de versões](https://code.castopod.org/adaures/castopod/-/releases) e
veja se sua instância está atualizada com a versão mais recente do Castopod
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
[Onde posso encontrar a versão do meu Castopod?](#onde-posso-encontrar-a-versão-do-meu-castopod)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
2. Baixe o pacote de atualização mais recente chamado `Pacote Castopod`, você pode escolher entre os arquivos `zip` ou `tar.gz`
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
- ⚠️ Certifique-se de baixar o Pacote Castopod e **NÃO** o Código Fonte
- Observe que você também pode baixar o pacote mais recente em
[castopod.org](https://castopod.org/)
3. On your server:
3. Em seu servidor:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
- Apague todos os arquivos, exceto `.env` e `public/media`
- Copie os novos arquivos do pacote baixado para o seu servidor
::: info Note
::: info Nota
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
Você pode precisar redefinir as permissões de arquivo, como no processo de instalação. Consulte
[Preocupações de segurança](./security.md).
:::
4. Update your database schema from your `Castopod Admin` > `About` page or by
running:
4. Atualize o esquema do banco de dados a partir da página `Castopod Admin` > `Sobre` ou executando:
```bash
php spark castopod:database-update
```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
5. Limpe seu cache a partir da página `Castopod Admin` > `Configurações` > `geral` >
`Manutenção`
6. ✨ Aproveite sua nova instância, você terminou!
::: info Note
::: info Nota
Releases may come with additional update instructions (see
[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
Versões podem ter instruções de atualização adicionais (consulte a
[página de notas de versão](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
[Eu não atualizei minha instância por um longo tempo... O que devo fazer?](#eu-não-atualizei-minha-instância-por-um-longo-tempo-o-que-devo-fazer)
:::
## Fully Automated updates
## Atualizações totalmente automatizadas
> Coming soon... 👀
> Em breve... 👀
## Frequently asked questions (FAQ)
## Perguntas Frequentes (FAQ)
### Where can I find my Castopod version?
### Onde posso encontrar a versão do Castopod?
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
Vá para o painel de administração do Castopod, a versão será exibida no canto inferior esquerdo.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
Você também pode encontrar a versão no aplicativo
`> Configuração > Constantes.php` pasta.
### I haven't updated my instance in a long time… What should I do?
### Eu não atualizei minha instância por um longo tempo... O que devo fazer?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
Sem problemas! Basta obter a versão mais recente como descrito acima. Quando você executar as instruções de atualização (4), execute-as sequencialmente, da mais antiga para a mais recente.
> You may want to backup your instance depending on how long you haven't updated
> Castopod.
> Você deve fazer backup de sua instância de acordo com a data da sua última atualização do Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
`v1.0.0-beta.1`:
Por exemplo, se você está na versão `v1.0.0-alpha.42` e deseja atualizar para
a versão `v1.0.0-beta.1`:
0. (highly recommended) Make a backup of your files and database.
0. (altamente recomendado) Faça backup de seus arquivos e banco de dados.
1. Download the latest release, overwrite your files whilst keeping `.env` and
`public/media`.
1. Baixe a versão mais recente, substitua seus arquivos mantendo
`.env` e `public/media`.
2. Go through each release update instructions sequentially (from oldest to
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
2. Execute as instruções de atualização uma a uma (das mais antigas para as mais recentes).
3. ✨ Enjoy your fresh instance, you're all done!
3. ✨ Sua nova instância está pronta!
### Should I make a backup before updating?
### Devo fazer backup antes de atualizar?
We advise you do, so you don't lose everything if anything goes wrong!
Recomendamos que você faça isso para não perder nada se algo der errado!
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…
Em geral, recomendamos fazer backups regulares de seus arquivos Castopod e banco de dados para evitar qualquer perda...

View File

@ -2,298 +2,162 @@
sidebarDepth: 2
---
# Welcome 👋
# Bem-vindo 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod is a free & open-source hosting platform made for podcasters who want
engage and interact with their audience.
O Castopod é uma plataforma gratuita e de código aberto desenvolvida para
podcasters que desejam se conectar e interagir com seu público.
Castopod is easy to install and was built on top of
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
O Castopod é fácil de instalar e foi desenvolvido com
[CodeIgniter4](https://codeigniter.com/), um poderoso framework PHP muito
compacto.
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
<a href="/pt/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Instalar<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Features
## Características
- 🌱 &nbsp;Free & open-source (AGPL v3 License)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics
belong to you, and&nbsp;you&nbsp;only
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding,
chapters, location, persons, soundbites, …
- 💬 &nbsp;Built-in social network:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes
- 📈 &nbsp;Built-in analytics:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant
- 🪙 &nbsp;Standard IABv2 audience measurement
- 🏡 &nbsp;On-premises analytics, no third party involved
- 📢 &nbsp;Built-in marketing tools:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: install as a standalone app
- 🎨 &nbsp;Customizable theme colors
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes
- 🔉 &nbsp;Generate soundbites
- ▶️ &nbsp;Embeddable player, embed your episodes on any website
- 💸 &nbsp;Monetization:
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🌱 &nbsp;Livres, gratuitos e de código aberto (Licença AGPL v3)
- 🔐 &nbsp;Focado na soberania de dados: seu conteúdo, seu público e suas estatísticas pertencem apenas a você
- 🪄&nbsp;Recursos do Podcasting 2.0: GUID, travamento,
transcrições, financiamento, capítulos, geolocalização, participantes,
trechos de áudio, ...
- 💬 &nbsp;Rede social integrada:
- 🚀 &nbsp;O Castopod faz parte do Fediverso, uma rede social descentralizada
- ❤️ &nbsp;Crie publicações, compartilhe, favorite e comente episódios
- 📈 &nbsp;Estatísticas integradas:
- ⚖️ &nbsp;Compatível com GDPR / CCPA / LGPD
- 🪙&nbsp;Medição de audiência IABv2
- 🏡 &nbsp;Estatísticas integradas, sem intermediários de terceiros
- 📢 &nbsp;Ferramentas de marketing integradas:
- ✅ &nbsp;Preparado para SEO (meta-tags open-graph, JSON-LD...)
- 📱 &nbsp;PWA: instale como um aplicativo independente
- 🎨 &nbsp;Personalize as cores do tema
- 🎬 &nbsp;Crie clipes de vídeo para compartilhar a partir de episódios
- 🔉 &nbsp;Crie trechos de áudio
- ▶️ &nbsp;Incorpore seus episódios em qualquer site
- 💸 &nbsp;Monetização:
- 🔗 &nbsp;Links para financiamento
- 📲 &nbsp;Publicidade "listen-to-click"
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod
- 📤 &nbsp;Move your podcast out of Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want
- 👥 &nbsp;Multi-user: add contributors and set roles
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
- 💎 &nbsp;Podcasts premium
- 📡&nbsp;Publique seus episódios em qualquer lugar com RSS:
- 📱 &nbsp;Em todos os diretórios e aplicativos: Podcast Index,
Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend...
- ⚡&nbsp;Transmita seus episódios instantaneamente com o WebSub
- 📥 &nbsp;Importe seu Podcast: migre seu podcast existente para o Castopod
- 📤 &nbsp;Mova seu podcast para outro provedor de hospedagem
- 🔀 &nbsp;Multi-inquilino: hospede quantos podcasts você quiser
- 👥 &nbsp;Multiusuário: adicione colaboradores e defina suas funções
- 🌎 &nbsp;suporte de i18n: traduzido para inglês, francês, polonês, alemão,
português, brasileiro e espanhol... e
[mais no futuro](https://translate.castopod.org)!
## Motivation
## Por que usar o Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
O ecossistema de podcast é descentralizado por natureza: você pode criar seu podcast
como um arquivo RSS, publicá-lo na web e compartilhá-lo em qualquer lugar online.
It is in fact one of the only media to have stayed this way for a long time.
De fato, é um dos poucos meios de comunicação que permaneceu assim por muito tempo.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
À medida que os hábitos evoluem, cada vez mais pessoas estão se interessando por podcasts: sejam
criadores buscando novas maneiras de compartilhar suas ideias, ou ouvintes em busca
de um conteúdo melhor.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
Com o uso crescente de podcasts, algumas empresas estão tentando centralizar e controlar
essa mídia.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
O Castopod foi criado com o objetivo de fornecer uma alternativa aberta e sustentável
para hospedar seus podcasts, promovendo a descentralização para garantir que a criatividade dos podcasters possa se expressar.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
Este projeto é impulsionado pela comunidade de código aberto, e especificamente pelos movimentos
[Fediverse](https://fediverse.party/en/fediverse/) e
[Podcasting 2.0](https://podcastindex.org/).
## Comparison with other solutions
## Comparação com outras soluções
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for&nbsp;you.
Acreditamos que uma solução não é necessariamente a melhor para todos, depende muito das suas necessidades. Portanto, aqui estão algumas comparações com outras ferramentas para ajudar você a avaliar se o Castopod é a escolha certa para você.
### Castopod vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running&nbsp;it.
O Castopod é frequentemente chamado de "o Wordpress para podcasts" por causa das semelhanças entre os dois. De certa forma, isso é verdade. De fato, o Castopod foi muito inspirado pelo ecossistema do Wordpress, vendo a facilidade de adoção pela comunidade e o número de sites que o estão executando.
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
Assim como o Wordpress, o Castopod é gratuito e de código aberto, desenvolvido em PHP com um banco de dados MySQL e é empacotado de uma maneira que você pode facilmente instalá-lo na maioria dos servidores web.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
O Wordpress é uma ótima maneira de criar seu site e estendê-lo com plugins para obter o que você deseja. É um CMS completo que ajuda você a colocar qualquer tipo de site online.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting&nbsp;journey.
Por outro lado, o Castopod visa atender às necessidades dos podcasters especificamente, focando no podcasting e nada mais. Você não precisa de nenhum plugin para começar sua jornada de podcast.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
Isso permite otimizar os processos específicos do podcasting: desde a criação dos seus podcasts e a publicação de novos episódios até a transmissão, marketing e análise.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
Finalmente, dependendo das suas necessidades, o Wordpress e o Castopod podem até conviver lado a lado, pois compartilham os mesmos requisitos!
### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
O Funkwhale é um servidor de música auto-hospedado, moderno, gratuito e de código aberto. Assim como o Castopod, o Funkwhale está no fediverso, uma rede social descentralizada que permite a interoperabilidade entre os dois.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
O Funkwhale foi inicialmente construído em torno da música. Mais tarde, à medida que o projeto evoluía, a capacidade de hospedar podcasts foi introduzida.
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
Ao contrário do Funkwhale, o Castopod foi projetado e construído exclusivamente em torno do podcasting. Isso permite uma implementação mais fácil de recursos relacionados ao ecossistema de podcasting, como os recursos de podcasting 2.0 (transcrições, capítulos, locais, pessoas, ...).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
Portanto, use o Funkwhale se você deseja hospedar sua música e use o Castopod se você deseja hospedar seus podcasts.
### Castopod vs other podcast hosts
### Castopod vs outros hosts de podcasts
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Existem muitas soluções disponíveis para hospedar seus podcasts, algumas das quais são realmente ótimas e [muitas](https://podcastindex.org/apps) estão aderindo ao movimento Podcasting 2.0, assim como o Castopod!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
Cada uma dessas soluções é diferente das outras, você pode compará-las com a [lista de recursos](#características).
That being said, there are two main differences with other podcasting solutions:
Dito isso, há duas diferenças principais em relação a outras soluções de podcasting:
- Castopod can be self-hosted and is the only solution that allows you to keep
full control over what you produce. Also, as it is open-source, you can even
customize it as you wish.
- O Castopod pode ser auto-hospedado e é a única solução que permite que você tenha controle total sobre o que você produz. Além disso, como é de código aberto, você tem o poder de modificá-lo como quiser.
- Castopod is the only solution that currently integrates both a decentralized
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
- O Castopod é a única solução que atualmente integra tanto uma rede social descentralizada com ActivityPub quanto recursos de "Podcasting 2.0", reduzindo a lacuna entre os dois.
## Contributing
## Contribuindo
Love Castopod and would like to help? Take a look at the following documentation
to get you&nbsp;started.
Gostou do Castopod e gostaria de ajudar? Consulte a documentação a seguir para começar a contribuir.
### Code of conduct
### Código de conduta
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be&nbsp;tolerated.
O Castopod adotou um Código de Conduta ao qual esperamos que os participantes do projeto adiram. Leia o [manual do CÓDIGO DE CONDUTA](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md) para entender quais ações serão ou não toleradas.
### Contributing guide
### Guia de contribuição
Read our [contributing guide](./contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
Leia o nosso [guia de contribuição (em inglês)](./contributing/guidelines.md) para saber mais sobre nosso processo de desenvolvimento, como propor correções de bugs e melhorias, e como compilar e testar suas alterações no Castopod.
## Contributors ✨
## Contribuidores ✨
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Agradecimentos a essas pessoas maravilhosas ([legenda de emojis](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- ALL-CONTRIBUTORS-LIST:START - Não remova ou modifique esta seção -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt="Yassine Doghri"/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt="Benjamin Bellamy"/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ola Hneini"/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Romain de Laage"/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Lyonel Bernard"/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt="Christopher Lagonick-Weitzel"/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Ernesto Acosta"/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">🐛</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/erichstark"><img src="https://avatars.githubusercontent.com/u/24607083?v=4" width="100px;" alt="Erich Stark"/><br /><sub><b>Erich Stark</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=ErichStark" title="Bug reports">🐛</a> <a href="#question-ErichStark" title="Answering Questions">💬</a> <a href="#infra-ErichStark" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-ErichStark" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ridog"><img src="https://avatars.githubusercontent.com/u/17442050?v=4" width="100px;" alt="ridog"/><br /><sub><b>ridog</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ridog" title="Bug reports">🐛</a> <a href="#ideas-ridog" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/gerardogc2378"><img src="https://avatars.githubusercontent.com/u/26679209?v=4" width="100px;" alt="Gerardo Gutierrez"/><br /><sub><b>Gerardo Gutierrez</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=gerardogc2378" title="Bug reports">🐛</a> <a href="#ideas-gerardogc2378" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt="Bastien Luneteau"/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Cécile Ricordeau"/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Miś"/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt="Marcin Lewandowski"/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">🐛</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sebastian Janik"/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Patryk Karczmarczyk"/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="denis d"/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">🐛</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/acheaito"><img src="https://avatars.githubusercontent.com/u/5085188?v=4" width="100px;" alt="acheaito"/><br /><sub><b>acheaito</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=acheaito" title="Bug reports">🐛</a> <a href="#content-acheaito" title="Content">🖋</a> <a href="#design-acheaito" title="Design">🎨</a> <a href="#ideas-acheaito" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arunahuja94"><img src="https://avatars.githubusercontent.com/u/16198330?v=4" width="100px;" alt="Arun Ahuja"/><br /><sub><b>Arun Ahuja</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=arunahuja94" title="Bug reports">🐛</a> <a href="#content-arunahuja94" title="Content">🖋</a> <a href="#ideas-arunahuja94" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/BurakDD"><img src="https://avatars.githubusercontent.com/u/53722029?v=4" width="100px;" alt="Burak Digdem"/><br /><sub><b>Burak Digdem</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=BurakDD" title="Bug reports">🐛</a> <a href="#question-BurakDD" title="Answering Questions">💬</a> <a href="#ideas-BurakDD" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://podlibre.social/@castopod"><img src="https://castopod.org/images/sponsors/podlibre.png" width="100px;" alt="PodLibre mastodon account"/><br /><sub><b>PodLibre mastodon account</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://aramarajendra.wordpress.com/"><img src="https://avatars.githubusercontent.com/u/22822365?v=4" width="100px;" alt="Aram Adhikari"/><br /><sub><b>Aram Adhikari</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=adhmhd" title="Bug reports">🐛</a> <a href="#question-adhmhd" title="Answering Questions">💬</a> <a href="#ideas-adhmhd" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-adhmhd" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://assert.typeartisan.com/"><img src="https://avatars.githubusercontent.com/u/4955613?v=4" width="100px;" alt="Allan Tipsword"/><br /><sub><b>Allan Tipsword</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=typeartisan" title="Bug reports">🐛</a> <a href="#infra-typeartisan" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-typeartisan" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt="Douglas Kastle"/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">🐛</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="cExplorer"/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="ImaCrea"/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">🐛</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Jonas S"/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt="LEFEBVRE Yann"/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt="Sebastian Späth"/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">🐛</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="rocky III"/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🐛</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt="Hermann Josef Eckl"/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Delhaye Cyrille"/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">🐛</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt="João Leandro"/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Angelos Chouvardas"/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt="Eivind"/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt="Ewen"/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt="forght"/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt="glottis0q"/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png?s=100" width="100px;" alt="ButterflyOfFire"/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt="Lucian I. Last"/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt="LuuzViir"/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt="CTHTC"/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt="Russian Retro"/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt="Marek L'ach"/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt="GunChleoc"/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt="GabiSnow"/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt="bendaha"/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt="Samuel Roland"/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Dimitri Regnier"/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png?s=100" width="100px;" alt="irithys"/><br /><sub><b>irithys</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Sergi"/><br /><sub><b>Sergi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt="ghose (XoseM)"/><br /><sub><b>ghose (XoseM)</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/basen1982"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="Andreas Olsson"/><br /><sub><b>Andreas Olsson</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/leonfrom"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="leonfrom"/><br /><sub><b>leonfrom</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/agentcobra57"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="agentcobra"/><br /><sub><b>agentcobra</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/alephoto85"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg?s=100" width="100px;" alt="Alessandro"/><br /><sub><b>Alessandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://crowdin.com/profile/liimee"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt="liimee"/><br /><sub><b>liimee</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ahmedsabouni"><img src="https://avatars.githubusercontent.com/u/74497842?v=4?s=100" width="100px;" alt="Ahmed Sabouni"/><br /><sub><b>Ahmed Sabouni</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KrzysztofDomanczyk"><img src="https://avatars.githubusercontent.com/u/75178474?v=4?s=100" width="100px;" alt="KrzysztofDomanczyk"/><br /><sub><b>KrzysztofDomanczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## Contact
You may reach us for help or ask any question you have on:
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for
feature requests & bug reports)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponsors
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
</div>
## License
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md
[contributions]: https://code.castopod.org/adaures/castopod/-/issues
[semantic-release]: https://github.com/semantic-release/semantic-release
[discord]: https://castopod.org/discord
[stars]: https://github.com/ad-aures/castopod/stargazers
[crowdin]: https://translate.castopod.org/project/castopod
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Deuchnord"><img src="https://avatars.githubusercontent.com/u/16842659?v=4" width="100px;" alt="Charles Gueunet"/><br /><sub><b>Charles Gueunet</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Deuchnord" title="Bug reports">🐛</a> <a href="#content-Deuchnord" title="Content">🖋</a> <a href="#ideas-Deuchnord" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/avilarenata"><img src="https://avatars.githubusercontent.com/u/14462151?v=4" width="100px;" alt="Renata Ávila"/><br /><sub><b>Renata Ávila</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=avilarenata" title="Bug reports">🐛</a> <a href="#ideas-avilarenata" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/poortegoed"><img src="https://avatars.githubusercontent.com/u/560321?v=4" width="100px;" alt="poortegoed"/><br /><sub><b>poortegoed</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=poortegoed" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/timstruthoff"><img src="https://avatars.githubusercontent.com/u/7837910?v=4" width="100px;" alt="Tim Struthoff"/><br /><sub><b>Tim Struthoff</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=timstruthoff" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mbauhardt"><img src="https://avatars.githubusercontent.com/u/18307660?v=4" width="100px;" alt="Markus Bauhardt"/><br /><sub><b>Markus Bauhardt</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mbauhardt" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Qgix"><img src="https://avatars.githubusercontent.com/u/26180645?v=4" width="100px;" alt="Michael Beck"/><br /><sub><b>Michael Beck</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Qgix" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a

Some files were not shown because too many files have changed in this diff Show More