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 "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 Amoureux de Castopod et souhaitez aider ? Merci beaucoup, il y a quelque chose à faire pour tout le monde !
everybody!
Please take a moment to review this document in order to make the contribution Prenez un moment pour parcourir ce document afin de rendre le processus de contribution facile et efficace pour tous les participants.
process easy and effective for everyone involved.
Following these guidelines helps to communicate that you respect the time of the 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.
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 Note
**Any** contribution made on a repository other than Toute contribution faite sur un dépôt autre que
[the original repository](https://code.castopod.org/adaures/castopod) will not [le dépôt original](https://code.castopod.org/adaures/castopod) ne sera pas acceptée.
be accepted.
::: :::
## Using the issue tracker ## Utilisation du suiveur d'incidents
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the 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).
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
## ⚠️ 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, 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).
please contact us directly by email at
[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. 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 !
Good bug reports are extremely helpful - thank you!
Guidelines for bug reports: Directives pour les rapports de bugs :
1. **Use the issue search** — check if the issue has already been 1. **Utilisez la recherche d'incidents** - vérifiez si le problème a déjà été rapporté.
reported.
2. **Check if the issue has been fixed** — try to reproduce it using the 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.
latest `main` branch in the repository.
3. **Isolate the problem** — ideally create a 3. **Isolez le problème** - idéalement, créez un
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live [cas de test réduit](https://css-tricks.com/reduced-test-cases/) et un exemple en direct.
example.
A good bug report shouldn't leave others needing to chase you up for more 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.
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) > 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.
> have been created for this project. You may use them to help you follow those
> guidelines.
## Feature requests ## Demandes de fonctionnalités
Feature requests are welcome. But take a moment to find out whether your idea 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.
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 ## Demandes d'intégration
Good pull requests - patches, improvements, new features - are a fantastic help. 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.
They should remain focused in scope and avoid containing unrelated commits.
**Please ask first** before embarking on any significant pull request (e.g. **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.
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, 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).
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 Le respect du processus suivant est le meilleur moyen d'intégrer votre travail dans le projet :
the project:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the 1. [Faites un Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) du projet, clonez votre fork et configurez les remotes :
project, clone your fork, and configure the remotes:
```bash ```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 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 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 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 ```bash
git checkout main git checkout main
git pull upstream main git pull upstream main
``` ```
3. Create a new topic branch (off the `main` branch) to contain your feature, 3. Créez une nouvelle branche de sujet (à partir de la branche `main`) pour contenir votre fonctionnalité, votre modification ou votre correction :
change, or fix:
```bash ```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 4. Committez vos modifications en morceaux logiques. Veuillez respecter ces
[git commit message guidelines](https://conventionalcommits.org/) or your [directives de message de commit Git](https://conventionalcommits.org/) ou votre code risque de ne pas être fusionné dans le projet principal. Utilisez la
code is unlikely be merged into the main project. Use Git's fonction [rebase interactif de Git](https://help.github.com/articles/about-git-rebase/) pour nettoyer vos commits avant de les rendre publics.
[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: 5. Fusionnez localement (ou rebase) la branche de développement en amont dans votre branche de sujet :
```bash ```bash
git pull [--rebase] upstream main git pull [--rebase] upstream main
``` ```
6. Push your topic branch up to your fork: 6. Poussez votre branche de sujet vers votre fork :
```bash ```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) 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.
with a clear title and description.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to **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).
license your work under the terms of the
[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 - 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)
unless it's an architectural change, a large feature, etc. If it is, then at - 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.
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. 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 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) eo Castopod, ul laezh web o kinnig
[CodeIgniter 4](https://codeigniter.com). wordpress hag oberlec'hiañ podcasts.
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A Ober a ra neus un envoriamant [Docker](https://www.docker.com/) evit aozadur
`docker-compose.yml` and `Dockerfile` are included in the project's root folder alistri, un `docker-compose.yml` ha `Dockerfile` a zo en an droer gwask a-drugarez da vat-da-ober.
to help you kickstart your contribution.
> You don't need any prior knowledge of Docker to follow the next steps. > Ket ret deoc'h bezañ evidoc'h memestra gant Docker evitañ ober pep stapenn
> However, if you wish to use your own environment, feel free to do so! > 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 ```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 2. Krouiñ ur restr `.env` gant kabell minorel ret evidoc'h stagañ ar roll gant
the database and use redis as a cache handler: an diazired hag ober implij an diazired redis a-drugarez da c'hoarienn ar
roll.
```ini ```ini
CI_ENVIRONMENT="development" 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" vite.environment="development"
# By default, this is set to true in the app config. # Dre verd e veze
# 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.

View File

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

View File

@ -1,87 +1,79 @@
--- # Dilennadur ha Aotreoù
title: Authentication & Authorization
sidebarDepth: 3
---
# 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` 1. [war lec'h an enklask](#1-rolloù-ha-dilennadurioù-war-lec'h-an-enklask)
coupled with custom rules. Roles and permissions are defined at two levels: 2. [diwar-benn ur podcast](#2-rolloù-ha-dilennadurioù-diwar-benn-ur-podcast)
1. [instance wide](#1-instance-wide-roles-and-permissions) ## 1. Rolloù ha dilennadurioù war lec'h an enklask
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 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 --> | rol | deskrivadur | dilennadurioù |
| ------------ | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| role | description | permissions | | 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 |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks | | Podcaster | An implijerien a veva gant Castopod. | admin.access |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END --> <!-- 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 | | dilennadur | deskrivadur |
| ----------------------- | ------------------------------------------------------------------ | | ----------------------- | ----------------------------------------------------------------------------------------------- |
| admin.access | Can access the Castopod admin area. | | admin.access | Kerzhel da zenvel eno adalek kêr maez d'ar mareoù Castopod e vez diskouezhet. |
| admin.settings | Can access the Castopod settings. | | admin.settings | Kerzhel da aked da preferadennoù Castopod. |
| users.manage | Can manage Castopod users. | | users.manage | Kerzhel da monedañ an implijerien e Castopod. |
| persons.manage | Can manage persons. | | persons.manage | Kerzhel da monedañ ar brudennoù. |
| pages.manage | Can manage pages. | | pages.manage | Kerzhel da monedañ ar bajennoù. |
| podcasts.view | Can view all podcasts. | | podcasts.view | Kerzhel da welout an holl podcastoù. |
| podcasts.create | Can create new podcasts. | | podcasts.create | Kerzhel da grouiñ podcastoù nevez. |
| podcasts.import | Can import podcasts. | | podcasts.import | Kerzhel da imporzhiañ podcastoù. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. | | fediverse.manage-blocks | Kerzhel da ostilhoù blokea castorien/tirioù fediverse da gomz diouzh Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END --> <!-- 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 | | rol | deskrivadur | dilennadurioù |
| ------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | --------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* | | Admin | Kontroll gwirouesel ouzh ar 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 | | 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ù,
| 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 | manaj embregiñ embannadurioù, manaj embregiñ commentoù |
| Guest | General contributor of the podcast #{id}. | view, episodes.view | | 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 --> <!-- 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 | | dilennadur | deskrivadur |
| ---------------------------- | ------------------------------------------------------------------------ | | ------------------------------ | ---------------------------------------------------------------------------------------------------- |
| view | Can view dashboard and analytics of podcast #{id}. | | gwelet | Gwelet daspyegelezh ha maez ar podcast #{id}. |
| edit | Can edit podcast #{id}. | | kemm | Kemmañ ar podcast #{id}. |
| delete | Can delete podcast #{id}. | | dilemel | Dilemel ar podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. | | embregiñ treuzkas | Kemmañ ar podcast treuzkaset #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. | | embregiñ urzhiataerien | Gwiriañ/neuzeiañ embregiñ urzhiataerienient eus ar podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. | | embregiñ plaennerion | Gellet kempuniañ/skartañ ereuredoù al lunennañ embregel ar podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. | | embregiñ embannadurioù | Kemmañ ar podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. | | embregiñ niverennadennoù | Gwelet ha selaou treuzkas ar podcast #{id}. |
| manage-publications | Can publish podcast #{id}. | | embregiñ abonadennoù | Gwiriañ/neuzeiañ embregiñ an abonadennou eus ar podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. | | embregiñ embregelourion | Gwiriañ/neuzeiañ embregiñ embregelourion ar podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. | | embregiñ platfomoù | Gellet stlennu/dilemel liammoù etre ar podcast ha platfomoù #{id}. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. | | embregiñ embregeriñ | Gell an embregiñ ar podcast #{id} embregeriñ. |
| episodes.create | Can create episodes for podcast #{id}. | | embregiñ niverennadennoù | Gwiriañ/neuzeiañ embregiñ niverennadennoù eus ar podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. | | embregiñ treuzkredoù | Gwiriañ/neuzeiañ embregiñ treuzkredoù video pe sonenn eus ar podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. | | embregiñ embregelouriezhioù | Gwiriañ/neuzeiañ embregiñ embregelouriezhioù eus ar podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. | | embregiñ commentoù | Kemmañ/Seleiñ an aozerentoù war ur video eus ar 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}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END --> <!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View File

@ -1,35 +1,28 @@
--- ---
title: Official Docker images title: Skoazelloù dreistlennadel Docker
sidebarDepth: 3 sidebarDepth: 3
--- ---
# Official Docker images # Skoazelloù dreistlennadel Docker
Castopod pushes 3 Docker images to the Docker Hub during its automated build En oberiant embann Castopod 3 skoazell dreistlennadel dre ar Restro_dressed Dockeñs :
process:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all - [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): un holl-enn unan-stumm embannadenn Castopod a gousk gant ynji nginx
in one castopod image using nginx unit - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): ar verzhiad mikro
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle gant pep tra zo anezho eus Castopod
with all of Castopod dependencies - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): ur skin eus Nginx evit Castopod
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database Deuit da essayal ez anvioù
can be added as a cache handler.
## 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 ## Ur skouer da achampion
- `beta` [stable], latest beta version build
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage 1. Montit [docker](https://docs.docker.com/get-docker/) ha
1. Install [docker](https://docs.docker.com/get-docker/) and
[docker-compose](https://docs.docker.com/compose/install/) [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 ```yml
version: "3.7" version: "3.7"
@ -87,13 +80,12 @@ can be added as a cache handler.
castopod-db: castopod-db:
``` ```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`, Ret eo deoc'h troidigezañ boutailhoù nemetiñ ouzh ho aotrenioù (ennennoù p. ex.
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). `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 Ret eo mont ul renverssez bregustell evit glotaat gant TLS. Gallout a reomp mont gant an betek [Caddy](https://caddyserver.com/):
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
``` ```
#castopod #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 4. Leit-stur `docker-compose up -d`, kuitit evit ma vehe eno war
`https://castopod.example.com/cp-install` to finish setting up Castopod! `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 | | Anv ar bajenn | Typ (`default`) | Parad pregemper |
| ------------------------------------- | ----------------------- | ---------------- | | ------------------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` | | **`CP_BASEURL`** | chadennell | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` | | **`CP_MEDIA_BASEURL`** | ?chadennell | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` | | **`CP_ADMIN_GATEWAY`** | ?chadennell | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` | | **`CP_AUTH_GATEWAY`** | ?chadennell | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` | | **`CP_ANALYTICS_SALT`** | chadennell | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | | **`CP_DATABASE_HOSTNAME`** | ?chadennell | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | | **`CP_DATABASE_NAME`** | ?chadennell | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | | **`CP_DATABASE_USERNAME`** | ?chadennell | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | | **`CP_DATABASE_PASSWORD`** | ?chadennell | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | | **`CP_DATABASE_PREFIX`** | ?chadennell | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` | | **`CP_CACHE_HANDLER`** | [`"file"` pe `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` | | **`CP_REDIS_HOST`** | ?chadennell | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` | | **`CP_REDIS_PASSWORD`** | ?chadennell | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` | | **`CP_REDIS_PORT`** | ?niverenn | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` | | **`CP_REDIS_DATABASE`** | ?niverenn | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` | | **`CP_EMAIL_SMTP_HOST`** | ?chadennell | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` | | **`CP_EMAIL_FROM`** | ?chadennell | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` | | **`CP_EMAIL_SMTP_USERNAME`** | ?chadennell | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` | | **`CP_EMAIL_SMTP_PASSWORD`** | ?chadennell | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` | | **`CP_EMAIL_SMTP_PORT`** | ?niverenn | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` | | **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` pe `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` | | **`CP_ENABLE_2FA`** | ?boolezenn | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` | | **`CP_MEDIA_FILE_MANAGER`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` | | **`CP_MEDIA_S3_ENDPOINT`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` | | **`CP_MEDIA_S3_KEY`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` | | **`CP_MEDIA_S3_SECRET`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` | | **`CP_MEDIA_S3_REGION`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` | | **`CP_MEDIA_S3_BUCKET`** | ?chadennell | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` | | **`CP_MEDIA_S3_PROTOCOL`** | ?niverenn | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` | | **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolezenn | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` | | **`CP_MEDIA_S3_KEY_PREFIX`** | ?chadennell | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` | | **`CP_DISABLE_HTTPS`** | ?[`0` pe `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` | | **`CP_MAX_BODY_SIZE`** | ?niverenn (gant saozh) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` | | **`CP_PHP_MEMORY_LIMIT`** | ?niverenn (gant saozh) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` | | **`CP_TIMEOUT`** | ?niverenn | `900` |
- **castopod/web-server** - **castopod/web-server**
| Variable name | Type | Default | | Anv ar bajenn | Typ | Parad pregemper |
| ---------------------- | --------------------- | ------- | | ------------------------------ | --------------------- | ---------------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` | | **`CP_APP_HOSTNAME`** | ?chadennell | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` | | **`CP_MAX_BODY_SIZE`** | ?niverenn (gant saozh) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` | | **`CP_TIMEOUT`** | ?niverenn | `900` |

View File

@ -1,221 +1,101 @@
--- ---
title: Staliañ title: Lec'hiadur
sidebarDepth: 3 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 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.
shared hosting, you can install it on most PHP-MySQL compatible web servers.
::: 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 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).
[docker documentation](./docker.md) for Castopod.
::: :::
## Requirements ## Arventennoù
- PHP v8.1 only - PHP v8.1 nemetken
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher - MariaDB version 5.7 pe c'hoazh pe MySQL version 10.2 pe lusiañ
- HTTPS support - Geriañs HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's - Oroerenn horlozh ntp-synced evit gwiriañ displya daoliou Breizh.
incoming requests
### 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) - [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php) - [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php) - [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**, - [gd](https://www.php.net/manual/en/image.installation.php) gant **JPEG**,
**PNG** and **WEBP** libraries. **PNG** ha **WebP** levrioù.
- [exif](https://www.php.net/manual/en/exif.installation.php) - [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) - json (gweredekaet dre ziouar - ne lakaat ket da weredekaat)
- xml (enabled by default - don't turn it off) - xml (gweredekaet dre ziouar - ne lakaat ket da weredekaat)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) - [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 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.
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
::: :::
You will need the server hostname, database name, username and password to Deoc'h eo ret gouzout stummañ an divyezhegezh servijer, anv an diaz, anv ar
complete the installation process. If you do not have these, please contact your geriadur ha ar ger-tremen da gemer perzh er stolidiñ. Mard oc'h ket ganto e usin,
server administrator. galvit soudard ar wirinidigezh.
#### Privileges #### Skoazell alc'hwez
User must have at least these privileges on the database for Castopod to work: 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`,
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`, `GWENOLOU`, `ENASKI', `DIBAB`, `KENASKI`,`KEMMESK`, `KREUZAÑ GWENDEL`.
`REFERENCES`, `CREATE VIEW`.
### (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 Ret eo FFmpeg divyezhezh 4.1.8 pe lusiañ evit kaout kuzhioù video. Setu ar c' estentiens monet :
want to generate Video Clips. The following extensions must be installed:
- **FreeType 2** library for - levrioù **FreeType 2** evit ar [gd](https://www.php.net/manual/en/image.installation.php).
[gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Other recommendations ### (Profetek) Itratelioù all
- Redis for better cache performances. - Redis evit gwirioù gwellañ kuzhioù traoù
- CDN for static files caching and better performances. - CDN evit diflokañ dafar staoteriek ha gwirioù gwellañ kuzhioù traoù
- e-mail gateway for lost passwords. - Dorrestell postel evit ar gerioù-pas goulennet.
## Install instructions ## Lec'hienn staliañ
### Pre-requisites ### Arventennennoù
0. Get a Web Server with [requirements](#requirements) installed 0. Pell eo bet ho serfer web gant ar [arventennoù](#arventennoù) a staliañ.
1. Create a MySQL database for Castopod with a user having access and 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)).
modification privileges (for more info, see 2. Diazeont HTTPS war ho domani gant ur _savadur SSL_ war-raok.
[MySQL compatible database](#mysql-compatible-database)). 3. Prenit ha dezarputit al lazhet [pakad diabarzh] (https://castopod.org/)
2. Activate HTTPS on your domain with an _SSL certificate_. war ar stolidiñ web m'ho peus ket graet dirak.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto - ⚠️ Lakaat ar c'horn zellet ar stolidiñ web d'ober da voud eo _dont davet_
the web server if you havent already. degasvez `public/` horvez e kasfe dantoñ hor genstrivad.
- ⚠️ Set the web server document root to the `public/` sub-folder within the
`castopod` folder. 4. Ouzhañ **daskoù cron** war ho serfer web evit merañ.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
```bash ```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1 * * * * * /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 **Notenn** - Mard oc'h ket o skrivañ an dask paour-mañ, ne vo ket ober a-barzh
will not work: Acastopod ne vo lakaet emgevreulek ar pezh a c'hoarvez:
- Importing a podcast from an existing RSS feed - Enporzhiañ boucleier podkast gant feed RSS diagaset dijaouel
- Broadcasting social activities to your followers in the fediverse - Skignaat evitañ ho c'hemerian e-barzh an aod-delveg gant ar fediverse
- Broadcasting episodes to open hubs using - Skignaat epizoedou da kehentiñ en e avidoù digunghevus en ur ober servij.
[WebSub](https://en.wikipedia.org/wiki/WebSub) [WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips - - Krouiñ kaout filmoù-v [requires FFmpeg]
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips) (#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,26 +1,23 @@
--- ---
title: Security title: Gwiriadiad
--- ---
# Security concerns # Gwestiynau diogelwch
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP Mae Castopod wedi'i ddatblygu ar [CodeIgniter4](https://codeigniter.com/), fframwaith PHP sy'n annog
framework that encourages [arddulliau diogelwch da](https://codeigniter.com/user_guide/concepts/security.html).
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we 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) :
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
- `writable/` folder must be **readable** and **writable**. - Rhaid i'r ffolder `writable/` fod ar gael i **darllen** ac i **ysgrifennu**.
- `public/media/` folder must be **readable** and **writable**. - Rhaid i'r ffolder `public/media/` fod ar gael i **darllen** ac i
- any other file must be set to **readonly**. **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 Er enghraifft, os ydych chi'n defnyddio Apache neu NGINX gyda Ubuntu, gallwch gychwyn y gorchmynion canlynol:
following:
```bash ```bash
sudo chown -R root:root /path/to/castopod 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/writable
sudo chown -R www-data:www-data /path/to/castopod/public/media sudo chown -R www-data:www-data /path/to/castopod/public/media
``` ```

View File

@ -1,109 +1,99 @@
--- ---
title: Update title: Hizivadennoù
sidebarDepth: 3 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 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ù ⚡.
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
## Update instructions ## Hizivadennoù miz eo bet graet
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and 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ù.
database.
- cf. - 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 1. Klikit war ar bajenn
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and [embannadegoù](https://code.castopod.org/adaures/castopod/-/releases) ha
see if your instance is up to date with the latest Castopod version gwelet setu ma vez savet ho stagad gant ar reizhiad nevezwezhañ Castopod
- cf. - 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 2. Prenniwit ar bitteg embannadur nevezwezhañ enoret `Castopod Package`, goude
between the `zip` or `tar.gz` archives e c'hallit dibunañ etre embannadurioù `zip` pe `tar.gz`
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code - ⚠️ Bezit sur oc'h prenañ ar Castopod Package ha **NANN** ar C'hod Anaoudegezh.
- Note that you can also download the latest package from - Abarzh e c'hallit prenañ ar bitteg nevezwezhañ eus
[castopod.org](https://castopod.org/) [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` ::: info Notenn
- Copy the new files from the downloaded package into your server
::: info Note Gallet c'heller reiñ keveradur distrad-se war restr divyezhek warnañ ar
processus anthirdiñ. Gwelloc'h eo
You may need to reset files permissions as during the install process. [Strobellerezh](./security.md).
Check [Security Concerns](./security.md).
::: :::
4. Update your database schema from your `Castopod Admin` > `About` page or by 4. Hizivaet ho tac'henn bazenn eus ho pajenn `Ger-tremen ar c'hastopod` ha `Ober`
running: pe drezañ:
```bash ```bash
php spark castopod:database-update php spark castopod:database-update
``` ```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` > 5. Distrubañ gaelloù dor liveus ho c'hastopod eus ho pajenn `Ger-tremen ar
`Housekeeping` c'hastopod` > `Ardivink` > `Hentrol ar c'hoadoù`.
6. ✨ Enjoy your fresh instance, you're all done! 6. ✨ Kavit ho stagad nevez, pezet eo bet finyeah !
::: info Note ::: info Notenn
Releases may come with additional update instructions (see Gallet c'haller ober gant plijadur da vare ar vosioneoù (cf.
[releases page](https://code.castopod.org/adaures/castopod/-/releases)). [Bladenn kasidañ embannadoù](https://code.castopod.org/adaures/castopod/-/releases)).
- cf. - 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 Klikit war ho c'huzul merdeiñ a vez skrivet e viz kentañ mennet war ho pannel merdeiñ
corner. Castopod, e vez displeget e barzh an douarbenn gwerc'hentañ.
Alternatively, you can find the version in the `app > Config > Constants.php` Gellit kaout ur verzion arall e ruilhenn
file. `Holedoù > Kefluniou > Constants.php`.
### N'ho mont ket da zougañ ho stadur evit ur forzh patromioù-termenet-mañ... Petra e fell deoc'h ober ?
### [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'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.
No problem! Just get the latest release as described above. Only, when going > Bezit sur ho skalpiteiñ ho stadur adalek dater eo ho stadur nevezault Castopod.
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
> You may want to backup your instance depending on how long you haven't updated 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`:
> Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to 0. (hollek anavezet) Savetit ho ficherien ha bañdit ho bazenn roadennoù.
`v1.0.0-beta.1`:
0. (highly recommended) Make a backup of your files and database. 1. Prenit ar verzion diwezhañ, greit mac'het ho ficherien hag e chom-hed ho .env hag ho pub-/media.
1. Download the latest release, overwrite your files whilst keeping `.env` and 2. Stalit ar mivioù da zougañ war ar renk (dispar da diwar kreskiñ).
`public/media`.
2. Go through each release update instructions sequentially (from oldest to 3. ✨ Fellout a ra d'an novigezh ho nechal zo gant.
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
3. ✨ Enjoy your fresh instance, you're all done! ### Ha n'eo ket ret da vont da zougañ a-raok ?
### Should I make a backup before updating? Kas a reomp deoc'h ho kas gantañ evit bezañ sur na gremañ ket ar pezh a c'hallfe bezañ gwisket gantoc'h-se !
We advise you do, so you don't lose everything if anything goes wrong! 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...
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…

View File

@ -2,298 +2,62 @@
sidebarDepth: 2 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] [![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 Kasit ul levraoueg da faotañ. Kevre an testenn.
engage and interact with their audience.
Castopod is easy to install and was built on top of 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.
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint. 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"> <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> </div>
## Features ## Fonksionoù
- 🌱 &nbsp;Free & open-source (AGPL v3 License) - 🌱 &nbsp;Digoust, frank ha digor-sourzh (Darvoudiezh AGPL v3)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics - 🔐 &nbsp;dedennet gant suverenerezh ar roadennoù: ho kontinim, ho dudoc'h hag ho statistikoù a zo deoc'h, hag deoc'h hepken
belong to you, and&nbsp;you&nbsp;only - 🪄 &nbsp;Fonksionoù al Lodkamantoù 2.0 : GUID, diorren, disterrañvioù, sourn, kempennadurioù, lec'h, denierezourien, prezegennoù sonorez…
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding, - 💬 &nbsp;Etrezhek gant ar reozerezh enni :
chapters, location, persons, soundbites, … - 🚀 &nbsp;Castopod zo diwar-benn ar Fédivers, un Embannerezh estren peurunvan
- 💬 &nbsp;Built-in social network: - ❤️ &nbsp;Krouiñ postioù, rannañ, mizkeañ ha komz eus oaudioù
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network - 📈 &nbsp;Statistikoù chomlec'hiet enni :
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes - ⚖️ &nbsp;Ovezhañ GDPR / CCPA / LGPD
- 📈 &nbsp;Built-in analytics: - 🪙 &nbsp;Mens gellet Iveziñ IABv2
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant - 🏡 &nbsp;Meur a statistikoù chomet unan ha na vezont na lod ha na daveont na politikourez anavezet
- 🪙 &nbsp;Standard IABv2 audience measurement - 📢 &nbsp;[Outils de marketing intégrés:
- 🏡 &nbsp;On-premises analytics, no third party involved - ✅ &nbsp;- &nbsp;Pret evit ar SEO (méta-tags open-graph, JSON-LD…)
- 📢 &nbsp;Built-in marketing tools: - 📱 &nbsp;- &nbsp;PWA : stockeziñ evel ur meziant nemetañ
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …) - 🎨 &nbsp;- &nbsp;Urzhioù hiriadur en tu-deoc'h
- 📱 &nbsp;PWA: install as a standalone app - 🎬 &nbsp;- &nbsp;Krouiñ da videoioù erfin dirak epeoù
- 🎨 &nbsp;Customizable theme colors - 🔉 &nbsp;- &nbsp;Krouiñ deoc'h prezegennoù sonorez
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes - ▶️ &nbsp;- &nbsp;Adkrouiñ ho evererezhioù er pros&nbsp;web nevez
- 🔉 &nbsp;Generate soundbites - 💸 &nbsp;Tansevel&nbsp;:
- ▶️ &nbsp;Embeddable player, embed your episodes on any website - 🔗 &nbsp;- &nbsp;Liennoù tansevel
- 💸 &nbsp;Monetization: - 📲 &nbsp;- &nbsp;publomm
- 🔗 &nbsp;Funding links - 🤝 &nbsp;- &nbsp;value4value / WebMonetization
- 📲 &nbsp;listen-to-click ads - 💎 &nbsp;- &nbsp;Ploedadoù prevez
- 🤝 &nbsp;value4value / WebMonetization - 📡 &nbsp;Adpubliañ ho levrer e-barzhstra gant&nbsp;RSS:
- 💎 &nbsp;Premium podcasts - 📱 &nbsp;- &nbsp;d'an holl doareoù peadra da bec'h renerrezhioù Pazenn Kaeoù, Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend…
- 📡 &nbsp;Publish your episodes everywhere with RSS: - ⚡ &nbsp;- &nbsp;Staliñ o sammerezh diraklañ gant WebSub
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, - 📥 &nbsp;[Air importin ho podcast&nbsp;: stleellañ ho podcast dija enrollañ gant Castopod
Google Podcasts, Deezer, Podcast Addict, Podfriend, … - 📤 &nbsp;- &nbsp;Deuset eo e-unan evit mont ho levrer da lodenn all
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub - 🔀 &nbsp;Miltadañ
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod - 👥 &nbsp;- &nbsp;Bevañ e-lec'hiezh a-stroll ho peadra, lakaet rener peiñ ho badeier
- 📤 &nbsp;Move your podcast out of Castopod - 🌎 &nbsp;- &nbsp;souten al lang : latin, galleg, brazilian, poloneg, aodoù math ha saozneg, hag en deiz-ermo…
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want - [bevet all eus un deiz](https://translate.castopod.org)!
- 👥 &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)!
## Motivation ## Perak kasout da implijout Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast 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.
as an RSS file, publish it on the web and have it shared everywhere online.
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 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.
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
With podcasting becoming more widely used, some companies are trying to shift it 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 !
towards a more controlled and centralized medium.
Castopod was created in an effort to provide an open and sustainable alternative 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
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

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

View File

@ -1,35 +1,29 @@
--- ---
title: Imatges Docker oficials title: Imatges oficials de Docker
sidebarDepth: 3 sidebarDepth: 3
--- ---
# Imatges Docker oficials # Imatges oficials de Docker
Castopod pushes 3 Docker images to the Docker Hub during its automated build Castopod envia 3 imatges Docker al Hub de Docker durant el seu procés de construcció automàtica:
process:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all - [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): una imatge de Castopod tot en un utilitzant Nginx Unit
in one castopod image using nginx unit - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el paquet d'aplicació amb totes les dependències de Castopod
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el paquet - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una configuració de Nginx per a Castopod
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
A més, Castopod requereix una base de dades compatible amb MySQL. Es pot afegir 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.
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 - `develop` [inestable], última versió de la branca de desenvolupament
- `beta` [stable], latest beta version build - `beta` [estable], última versió beta
- `latest` [stable], latest version build - `1.x.x` [estable], versió específica (a partir de `1.0.0`)
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Exemple d'ús ## 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/) [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 ```yml
version: "3.7" version: "3.7"
@ -87,15 +81,12 @@ una base de dades Redis com a gestor de memòria cau.
castopod-db: castopod-db:
``` ```
Heu d'adaptar algunes variables a les vostres necessitats (per exemple, Has d'adaptar algunes variables segons les teves necessitats (p. ex., `CP_BASEURL`,
`CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` i `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` i `CP_ANALYTICS_SALT`).
`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 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/):
fàcilment amb un `reverse proxy`, per exemple amb
[Caddy](https://caddyserver.com/):
``` ```
#castopod #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 4. Executa `docker-compose up -d`, espera que s'inicialitzi a
`https://castopod.exemple.com/cp-install` per acabar de configurar Castopod! `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 ## Variables d'entorn
- **castopod/castopod** and **castopod/app** - **castopod/castopod** i **castopod/app**
| Nom de la variable | Tipus (`default`) | Default | | Nom de la variable | Tipus (`default`) | Valor per defecte |
| ------------------------------------- | ----------------------- | ---------------- | | ------------------------------------- | -----------------------| ----------------- |
| **`CP_BASEURL`** | string | `undefined` | | **`CP_BASEURL`** | cadena | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` | | **`CP_MEDIA_BASEURL`** | ?cadena | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` | | **`CP_ADMIN_GATEWAY`** | ?cadena | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` | | **`CP_AUTH_GATEWAY`** | ?cadena | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` | | **`CP_ANALYTICS_SALT`** | cadena | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | | **`CP_DATABASE_HOSTNAME`** | ?cadena | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | | **`CP_DATABASE_NAME`** | ?cadena | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | | **`CP_DATABASE_USERNAME`** | ?cadena | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | | **`CP_DATABASE_PASSWORD`** | ?cadena | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | | **`CP_DATABASE_PREFIX`** | ?cadena | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` | | **`CP_CACHE_HANDLER`** | [`"file"` o `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` | | **`CP_REDIS_HOST`** | ?cadena | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` | | **`CP_REDIS_PASSWORD`** | ?cadena | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` | | **`CP_REDIS_PORT`** | ?nombre | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` | | **`CP_REDIS_DATABASE`** | ?nombre | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` | | **`CP_EMAIL_SMTP_HOST`** | ?cadena | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` | | **`CP_EMAIL_FROM`** | ?cadena | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` | | **`CP_EMAIL_SMTP_USERNAME`** | ?cadena | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` | | **`CP_EMAIL_SMTP_PASSWORD`** | ?cadena | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` | | **`CP_EMAIL_SMTP_PORT`** | ?nombre | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` | | **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` o `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` | | **`CP_ENABLE_2FA`** | ?booleà | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` | | **`CP_MEDIA_FILE_MANAGER`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` | | **`CP_MEDIA_S3_ENDPOINT`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` | | **`CP_MEDIA_S3_KEY`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` | | **`CP_MEDIA_S3_SECRET`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` | | **`CP_MEDIA_S3_REGION`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` | | **`CP_MEDIA_S3_BUCKET`** | ?cadena | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` | | **`CP_MEDIA_S3_PROTOCOL`** | ?nombre | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` | | **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?booleà | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` | | **`CP_MEDIA_S3_KEY_PREFIX`** | ?cadena | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` | | **`CP_DISABLE_HTTPS`** | ?[`0` o `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` | | **`CP_MAX_BODY_SIZE`** | ?nombre (amb sufix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` | | **`CP_PHP_MEMORY_LIMIT`** | ?nombre (amb sufix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` | | **`CP_TIMEOUT`** | ?nombre | `900` |
- **castopod/web-server** - **castopod/web-server**
| Nom de la variable | Type | Default | | Nom de la variable | Tipus | Valor per defecte |
| ---------------------- | --------------------- | ------- | | ----------------------| ----------------------| ----------------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` | | **`CP_APP_HOSTNAME`** | ?cadena | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` | | **`CP_MAX_BODY_SIZE`**| ?nombre (amb sufix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` | | **`CP_TIMEOUT`** | ?nombre | `900` |

View File

@ -5,220 +5,119 @@ sidebarDepth: 3
# Com instal·lar Castopod? # Com instal·lar Castopod?
Castopod va ser pensat per ser fàcil d'instal·lar. Ja sigui utilitzant un Castopod ha estat dissenyat per ser fàcil d'instal·lar. Ja sigui que utilitzis
allotjament dedicat o un compartit, podeu instal·lar-lo a la majoria de un allotjament dedicat o compartit, pots instal·lar-ho en la majoria de servidors
servidors web compatibles amb PHP-MySQL. web compatibles amb PHP-MySQL.
::: tip Nota ::: tip Nota
Hem publicat imatges oficials de Docker per a Castopod! Hem publicat imatges oficials de Docker per a Castopod!
Si preferiu utilitzar Docker, podeu ometre això i anar directament a la Si prefereixes utilitzar Docker, pots saltar aquesta part i anar directament a la
[documentació de Docker](./docker.md) per a Castopod. [documentació sobre Docker](./docker.md) per a Castopod.
::: :::
## Requisits ## Requisits
- PHP v8.1 only - PHP v8.1 només
- MySQL versió 5.7 o superior o MariaDB versió 10.2 o superior - MySQL versió 5.7 o superior o MariaDB versió 10.2 o superior
- Support d'HTTPS - Suport per a HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's - Un [rellotge sincronitzat amb ntp](https://wiki.debian.org/NTP) per validar les
incoming requests 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) - [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php) - [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php) - [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) amb les llibreries - [gd](https://www.php.net/manual/en/image.installation.php) amb **JPEG**,
**JPEG**, **PNG** i **WEBP**. **PNG** i biblioteques **WEBP**.
- [exif](https://www.php.net/manual/en/exif.installation.php) - [exif](https://www.php.net/manual/fr/exif.installation.php)
A més, assegureu-vos que les extensions següents estiguin habilitades al vostre A més, assegura't que les següents extensions estiguin activades en el teu PHP:
PHP:
- json (activat per defecte; no el desactiveu) - json (activat de forma predeterminada - no el desactivis)
- xml (activat per defecte; no el desactiveu) - xml (activat de forma predeterminada - no el desactivis)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) - [mysqlnd](https://www.php.net/manual/fr/mysqlnd.install.php)
### Base de dades compatible amb MySQL ### 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. Castopod només funciona amb bases de dades MySQL 5.7 o versions més recents.
No funcionarà amb l'anterior MySQL v5.6, per exemple, ja que el seu final de Les versions 5.6 (que han deixat de rebre suport el 5 de febrer de 2021) o anteriors
vida va ser el 5 de febrer de 2021. de MySQL no funcionaran.
::: :::
Necessitareu el nom d'amfitrió del servidor (hostname), el nom de la base de Necessitaràs el nom de l'amfitrió del servidor, el nom de la base de dades, el nom
dades, el nom d'usuari i la contrasenya per completar el procés d'instal·lació. d'usuari i la contrasenya per completar el procés d'instal·lació. Si no tens aquesta
Si no els teniu, poseu-vos en contacte amb l'administrador del vostre servidor. 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: L'usuari ha de tenir com a mínim aquests drets d'accés a la base de dades perquè
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`, Castopod funcioni: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`,
`REFERENCES`, `CREATE VIEW`. `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 Es requereix la versió 4.1.8 o superior de [FFmpeg](https://www.ffmpeg.org/) si
o superior. Cal instal·lar les següents extensions: 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). [gd](https://www.php.net/manual/en/image.installation.php).
### (Opcional) Altres recomanacions ### (Opcional) Altres recomanacions
- Redis per a un millor rendiment de la memòria cau. - Redis per a un millor rendiment del memòria cau (cache).
- CDN per a la memòria cau de fitxers estàtics i millors rendiments. - CDN per a la cache de fitxers estàtics i un millor rendiment.
- Passarel·la de correu electrònic per a contrasenyes perdudes. - Passarel·la de correu electrònic per als contrasenyes perdudes.
## Instruccions d'instal·lació ## Instruccions d'instal·lació
### Pre-requisits ### Preparatius
0. Obteniu un servidor web amb els [requisits](#requirements) instal·lats 0. Obtén un servidor web amb [els requisits](#requisits) instal·lats.
1. Creeu una base de dades MySQL per a Castopod amb un usuari amb privilegis 1. Crea una base de dades MySQL per a Castopod amb un usuari amb els permisos d'accés i
d'accés i modificació (per a més informació, vegeu modificació (per a més informació, consulta la secció
[base de dades compatible MySQL](#mysql-compatible-database)). [Base de dades compatible amb MySQL](#base-de-dades-compatible-amb-mysql)).
2. Activeu HTTPS al vostre domini amb un _certificat SSL_. 2. Activa HTTPS al teu domini amb un _certificat SSL_.
3. Baixeu i descomprimiu el darrer [paquet Castopod](https://castopod.org/) al 3. Descarrega i descomprimeix el paquet més recent de [Castopod](https://castopod.org/)
servidor web si encara no ho heu fet. al servidor web si encara no ho has fet.
- ⚠️ Establiu l'arrel del document del servidor web a la subcarpeta - ⚠️ Assegura't que la carpeta arrel del document del servidor web apunti a la subcarpeta
`castopod/public/`. `public/` de la carpeta `castopod`.
4. Add **cron tasks** on your web server for various background processes 4. Afegiu **tasques cron** al teu servidor web per als diversos processos en segon pla
(replace the paths accordingly): (substitueix les rutes segons corresponguin):
```bash ```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 **Nota** - Si no afegeixes aquesta tasca cron, les funcionalitats següents de Castopod
will not work: no funcionaran:
- Importing a podcast from an existing RSS feed - Importar un podcast des d'un aliment RSS existent
- Broadcasting social activities to your followers in the fediverse - Difondre activitats socials als teus seguidors a la federació
- Broadcasting episodes to open hubs using - Difondre episodis a hubs oberts utilitzant
[WebSub](https://en.wikipedia.org/wiki/WebSub) [WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips - - Generació de clips de vídeo -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips) [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 1. Executa l'script d'instal·lació de Castopod accedint a la pàgina de l'assistent
l'assistent d'instal·lació (`https://exemple.com/cp-install`) al vostre d'instal·lació (`https://el-teu-nom-de-domini.com/cp-install`) des del teu navegador
navegador web preferit. web preferit.
2. Seguiu les instruccions a la vostra pantalla. 2. Segueix les instruccions que s'hi mostren.
3. Comenceu a fer podcasts! 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 L'script d'instal·lació crea un fitxer `.env` a la carpeta arrel del paquet. Si no pots
cannot go through the install wizard, you can create and edit the `.env` file utilitzar l'assistent d'
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>

View File

@ -2,25 +2,25 @@
title: Seguretat title: Seguretat
--- ---
# Detalls de seguretat # Qüestions de seguretat
Castopod està fet amb [CodeIgniter4](https://codeigniter.com/), un framework PHP Castopod està desenvolupat amb [CodeIgniter4](https://codeigniter.com/), un
que fomenta les framework PHP que fomenta les
[bones pràctiques de seguretat](https://codeigniter.com/user_guide/concepts/security.html). [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 Per garantir la màxima seguretat de la teva instància i evitar atacs maliciosos,
maliciós, us recomanem que actualitzeu tots els permisos dels fitxers de et recomanem actualitzar els permisos dels fitxers de Castopod després de la
Castopod després de la instal·lació o actualitzacions (per evitar qualsevol instal·lació i després de cada actualització (i evitar errors d'accés als fitxers):
error de permís previ):
- el directori `writable/` ha de ser **llegible** i **escrivible**. - La carpeta `writable/` ha de ser accessible en **lectura** i en **escriptura**.
- el directori `public/media/` ha de ser **llegible** i **escrivible**. - La carpeta `public/media/` ha de ser accessible en **lectura** i en **escriptura**.
- qualsevol altre fitxer ha de ser definit com a **només-lectura**. - 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 ```bash
sudo chown -R root:root /ruta/cap/a/castopod sudo chown -R root:root /ruta/fins/a/castopod
sudo chown -R www-data:www-data /ruta/cap/a/castopod/writable sudo chown -R www-data:www-data /ruta/fins/a/castopod/writable
sudo chown -R www-data:www-data /ruta/cap/a/castopod/public/media 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 sidebarDepth: 3
--- ---
# Com actualitzar Castopod? # Com instal·lar Castopod?
Després d'instal·lar Castopod, és possible que vulgueu actualitzar la vostra Després d'instal·lar Castopod, pots actualitzar la teva instància a la
instància a la darrera versió per gaudir de les últimes funcions ✨, correccions darrera versió per poder gaudir de les últimes funcionalitats ✨, correccions de
d'errors 🐛 i millores de rendiment ⚡. bugs 🐛 i millores de rendiment ⚡.
## Update instructions ## Instruccions d'actualització
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and 0. ⚠️ Abans de realitzar cap actualització, us recomanem encaridament que feu una còpia de seguretat
database. dels vostres fitxers de Castopod i de la base de dades.
- cf. - 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 1. Vés a la
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and [pàgina de versions](https://code.castopod.org/adaures/castopod/-/releases) i
see if your instance is up to date with the latest Castopod version comprova si la teva instància està actualitzada a l'última versió de Castopod.
- cf. - 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 2. Descarrega el paquet de l'última versió anomenat `Paquet de Castopod`, pots triar
between the `zip` or `tar.gz` archives entre els arxius `zip` o `tar.gz`.
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code - ⚠️ Assegura't de descarregar el Paquet de Castopod i **NO** el Codi Font.
- Note that you can also download the latest package from - Tingues en compte que també pots descarregar l'últim paquet des de
[castopod.org](https://castopod.org/) [castopod.org](https://castopod.org/).
3. On your server: 3. Al teu servidor:
- Remove all files except `.env` and `public/media` - Esborra tots els fitxers menys `.env` i `public/media`.
- Copy the new files from the downloaded package into your server - 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. Potser hauràs de configurar de nou els permisos dels fitxers com
Check [Security Concerns](./security.md). 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 4. Actualitza l'esquema de la teva base de dades des de la pàgina `Castopod Admin` > `Sobre l'aplicació` o bé
running: executant:
```bash ```bash
php spark castopod:database-update php spark castopod:database-update
``` ```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` > 5. Netega la memòria cau des de l'opció `Castopod Admin` > `Configuració` > `general` > `Netega`.
`Housekeeping` 6. ✨ Gaudeix de la teva nova instància, has acabat!
6. ✨ Enjoy your fresh instance, you're all done!
::: info Note ::: info Nota
Releases may come with additional update instructions (see Les versions poden tenir instruccions d'actualització adicionals (consulta la
[releases page](https://code.castopod.org/adaures/castopod/-/releases)). [pàgina de les notes de la versió](https://code.castopod.org/adaures/castopod/-/releases)).
- cf. - 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 Ves al teu panell d'administració de Castopod, la versió es mostra a la part inferior esquerra.
corner.
Alternatively, you can find the version in the `app > Config > Constants.php` També pots trobar la versió a l'aplicació
file. `> 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 Cap problema! Només has de seguir els passos per aconseguir l'última versió com s'explica
through the release instructions (4), perform them sequentially, from the oldest anteriorment. Quan executis les instruccions d'actualització (4), executa-les
to the newest. 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 > Hauries de fer una còpia de seguretat de la teva instància segons la data de l'última actualització
> funció del temps que no heu actualitzat Castopod. > de Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to Per exemple, si estàs a la versió `v1.0.0-alpha.42` i vols actualitzar a
`v1.0.0-beta.1`: 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. dades.
1. Baixeu la darrera versió, sobreescriu els vostres fitxers mantenint `.env` i 1. Descarrega l'última versió, sobreescriu els teus fitxers conservant
`public/media`. `.env` i `public/media`.
2. Seguiu les instruccions d'actualització de cada versió seqüencialment (de la 2. Executa les instruccions d'actualització una per una (de més antiga a més recent).
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`.
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 En general, et recomanem que facis còpies de seguretat regulars dels teus fitxers de Castopod i de la teva
database to prevent you from losing it all… base de dades per evitar perdre-ho tot...

View File

@ -2,244 +2,142 @@
sidebarDepth: 2 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] [![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 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.
podcasters que volen involucrar i interactuar amb el seu públic.
Castopod és fàcil d'instal·lar i s'ha creat amb Castopod és fàcil d'instal·lar i ha estat desenvolupat amb [CodeIgniter4](https://codeigniter.com/), un framework PHP potent i molt lleuger.
[CodeIgniter4](https://codeigniter.com/), un marc PHP potent amb una empremta
molt petita.
<div class="flex items-center"> <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> </div>
## Característiques ## Característiques
- 🌱 &nbsp;Gratis i de codi obert (llicència AGPL v3) - 🌱 &nbsp;Lliure, gratuït i de codi obert (Llicència AGPL-3.0)
- 🔐 &nbsp;Centrat en la sobirania de les dades: el vostre contingut, audiència - 🔐 &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
i estadístiques us pertanyen, i només a vosaltres - 🪄 &nbsp;Funcionalitats del Podcasting 2.0 : GUID, bloquejos, transcripcions, finançament, capítols, geolocalització, convidats, fragments sonors, ...
- 🪄 &nbsp;Funcions de podcasting 2.0: GUID, bloqueigos, transcripcions,
finançament, capítols, geo-localització, persones, fragments d'àudio, …
- 💬 &nbsp;Xarxa social integrada: - 💬 &nbsp;Xarxa social integrada:
- 🚀 &nbsp;Castopod forma part de Fediverse, una xarxa social descentralitzada - 🚀 &nbsp;Castopod forma part del Fedivers, una xarxa social descentralitzada
- ❤️ &nbsp;Creeu publicacions, compartiu-les, afegiu-hi com a preferits i - ❤️ &nbsp;Creació de publicacions, compartir, afegir a preferits i comentar episodis
comenteu episodis
- 📈 &nbsp;Estadístiques integrades: - 📈 &nbsp;Estadístiques integrades:
- ⚖️ &nbsp;Complint amb GDPR / CCPA / LGPD - ⚖️ &nbsp;Compliance GDPR / CCPA / LGPD
- 🪙 &nbsp;Mesura d'audiència segons l'estàndard IABv2 - 🪙 &nbsp;Mesura de l'audiència segons IABv2
- 🏡 &nbsp;Estadístiques locals, sense cap tercer implicat - 🏡 &nbsp;Estadístiques integrades, sense intermediaris de terceres parts
- 📢 &nbsp;Eines de màrqueting integrades: - 📢 &nbsp;Eines de màrqueting integrades:
- ✅ &nbsp;Preparada per a SEO (metaetiquetes de gràfics oberts, JSON-LD, …) - ✅ &nbsp;Preparat per a SEO (metaetiquetes Open Graph, JSON-LD...)
- 📱 &nbsp;PWA: instal·lable pels oients com a aplicació autònoma - 📱 &nbsp;PWA: instal·la-ho com una aplicació independent
- 🎨 &nbsp;Colors del tema personalitzables - 🎨 &nbsp;Colors de temes personalitzables
- 🎬 &nbsp;Genereu videoclips d'episodis preparats per compartir - 🎬 &nbsp;Genera clips de vídeo per compartir a partir dels episodis
- 🔉 &nbsp;Genera fragments d'àudio de cada episodi - 🔉 &nbsp;Genera fragments sonors
- ▶️ &nbsp;Reproductor incrustable, per incrustar els episodis a qualsevol - ▶️ &nbsp;Inclou els teus episodis a qualsevol lloc web
lloc web
- 💸 &nbsp;Monetització: - 💸 &nbsp;Monetització:
- 🔗 &nbsp;Enllaços de finançament - 🔗 &nbsp;Enllaços de finançament
- 📲 &nbsp;Anuncis per escoltar-fent-clic - 📲 &nbsp;Publicitat "listen-to-click"
- 🤝 &nbsp;Integració amb value4value i WebMonetization - 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts - 💎 &nbsp;Podcasts de pagament
- 📡 &nbsp;Publiqueu els vostres episodis a tot arreu amb RSS: - 📡 &nbsp;Publica els teus episodis arreu amb RSS:
- 📱 &nbsp;A tots els directoris i aplicacions: Podcast Index, Apple Podcasts, - 📱 &nbsp;A tots els índexs i aplicacions: Podcast Index, Podcasts d'Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend...
Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, … - ⚡ &nbsp;Un consum instantani d'episodis amb WebSub
- ⚡ &nbsp;Emeteu els vostres episodis a l'instant amb WebSub - 📥 &nbsp;Importació de podcasts: trasllada el teu podcast existent a Castopod
- 📥 &nbsp;Importació de podcasts: moveu el vostre podcast existent a Castopod - 📤 &nbsp;Canvia el teu podcast a un altre proveïdor d'hosting
- 📤 &nbsp;Traieu el vostre podcast fora de Castopod - 🔀 &nbsp;Multiinquilí: allotja tants podcasts com vulguis
- 🔀 &nbsp;Multi-podcast: allotgeu tants programes com vulgueu en un mateix lloc - 👥 &nbsp;Multiusuari: afegeix col·laboradors i determina els seus rols
- 👥 &nbsp;Multi-usuari: afegiu col·laboradors i definiu 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)!
- 🌎 &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)!
## Motivació ## Per què Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast 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.
as an RSS file, publish it on the web and have it shared everywhere online.
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 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.
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
With podcasting becoming more widely used, some companies are trying to shift it Amb l'increment de l'ús dels podcasts, algunes empreses intenten traslladar-lo cap a un mitjà més controlat i centralitzat.
towards a more controlled and centralized medium.
Castopod was created in an effort to provide an open and sustainable alternative 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.
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 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/).
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
## Comparació amb altres solucions ## Comparativa amb altres solucions
We believe that a solution is not necessarily right for everyone, it highly 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.
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 vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the 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.
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 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.
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 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.
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 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.
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 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.
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 Finalment, depenent de les teves necessitats, Castopod i WordPress fins i tot poden coexistir, ja que comparteixen els mateixos requisits!
side as they share the same requirements!
### Castopod vs Funkwhale ### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as 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.
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 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.
evolved, the ability to host podcasts was introduced.
Unlike Funkwhale, Castopod has been designed and built around podcasting 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).
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 Per tant, hauries d'utilitzar Funkwhale si vols allotjar la teva música i utilitzar Castopod si vols allotjar els teus podcasts.
Castopod if you want to host your 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 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!
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 Cada una d'aquestes solucions és diferent de les altres; pots comparar-les amb la [llista de característiques](#característiques).
[list of features](#features).
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 - 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.
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 és l'única solució que actualment integra tant una xarxa social - 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.
descentralitzada amb ActivityPub com moltes de les funcions de podcasting 2.0,
amb l'esperança de salvar la bretxa entre les dues.
## Col·laborar ## Contribució
Love Castopod and would like to help? Take a look at the following documentation T'agrada Castopod i vols ajudar? Consulta la documentació següent per començar.
to get you&nbsp;started.
### Codi de conducta ### Codi de conducta
Castopod has adopted a Code of Conduct that we expect project participants to 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.
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.
### Guia de col·laboració ### Guia de contribució
Read our [contributing guide](../contributing/guidelines.md) to learn about our 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.
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## Col·laboradors ✨ ## Contribuïdors ✨
Thanks goes to these wonderful people Volem agrair a aquesta gent fantàstica (clau d'emojis [aquí](https://allcontributors.org/docs/en/emoji-key)):
([emoji key](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 --> <!-- prettier-ignore-start -->
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
<table> <table>
<tbody> <tbody>
<tr> <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/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://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://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> <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>
<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://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/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/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%"></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%"></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> </tr>
</tbody> </tbody>
</table> </table>
@ -249,53 +147,42 @@ Thanks goes to these wonderful people
<!-- ALL-CONTRIBUTORS-LIST:END --> <!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the Aquest projecte segueix l'especificació de
[all-contributors](https://github.com/all-contributors/all-contributors) [all-contributors](https://github.com/all-contributors/all-contributors).
specification. Contributions of any kind welcome! Totes les contribucions són benvingudes!
## Contacte ## 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 - [Discord](https://castopod.org/discord) (per parlar en temps real amb els desenvolupadors i la comunitat)
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)
- [Seguiment d'incidències](https://code.castopod.org/adaures/castopod/-/issues)
(per a sol·licituds de noves funcionalitats i informes d'errors)
Alternatively, you can follow us on social media platforms to get news about Alternativament, també pots seguir-nos a les xarxes socials per obtenir notícies sobre Castopod:
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) - [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod) - [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod) - [Facebook](https://www.facebook.com/castopod)
## Patrocinadors ## Patrocinadors
The ongoing development of Castopod is made possible with the support of its 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).
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"> <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://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="NLnet Logo" 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> </div>
## Llicència ## Llicència
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/) [Llicència pública general Affero GNU 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
Drets d'autor © 2020-present, [Ad Aures](https://adaures.com/).
[release]: https://code.castopod.org/adaures/castopod/-/releases [release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md [license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md
[contributions]: https://code.castopod.org/adaures/castopod/-/issues [contributions]: https://code.castopod.org/adaures/castopod/-/issues
[semantic-release]: https://github.com/semantic-release/semantic-release [semantic-release]: https://github.com/semantic-release/semantic-release
[discord]: https://castopod.org/discord [discord]: https://castopod.org/discord
[stars]: https://github.com/ad-aures/castopod/stargazers [stars]: https://github.com/ad-aures/castopod/stargazers
[crowdin]: https://translate.castopod.org/project/castopod [crowdin]: https://translate.castopod.org/project/castopod

View File

@ -1,4 +1,4 @@
{ {
"label": "Contributing", "label": "Mitwirken",
"position": 3 "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 Liebst du Castopod und möchtest helfen? Vielen Dank, es gibt für jeden etwas zu tun!
everybody!
Please take a moment to review this document in order to make the contribution Bitte nimm dir einen Moment Zeit, um dieses Dokument zu lesen, um den Beitragungsprozess einfach und effektiv für alle Beteiligten zu gestalten.
process easy and effective for everyone involved.
Following these guidelines helps to communicate that you respect the time of the 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.
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 Hinweis
**Any** contribution made on a repository other than **Jeder** Beitrag, der auf einem anderen Repository als dem
[the original repository](https://code.castopod.org/adaures/castopod) will not [Original-Repository](https://code.castopod.org/adaures/castopod) gemacht wird, wird nicht akzeptiert.
be accepted.
::: :::
## Using the issue tracker ## Verwendung des Issue-Trackers
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the 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).
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
## ⚠ Security issues and vulnerabilities ## ⚠ Sicherheitsprobleme und Schwachstellen
If you encounter any security issue or vulnerability in the Castopod source, 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)
please contact us directly by email at
[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. Ein Fehler ist ein _nachweisbares Problem_, das durch den Code im Repository verursacht wird. Gute Fehlerberichte sind äußerst hilfreich - vielen Dank!
Good bug reports are extremely helpful - thank you!
Guidelines for bug reports: Richtlinien für Fehlerberichte:
1. **Use the issue search** &mdash; check if the issue has already been 1. **Verwende die Issue-Suche** &mdash; überprüfe, ob der Fehler bereits gemeldet wurde.
reported.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the 2. **Überprüfe, ob der Fehler behoben wurde** &mdash; Versuche, ihn mit dem neuesten `main`-Zweig im Repository zu reproduzieren.
latest `main` branch in the repository.
3. **Isolate the problem** &mdash; ideally create a 3. **Isoliere das Problem** &mdash; erstelle idealerweise eine
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live [reduzierte Testfall](https://css-tricks.com/reduced-test-cases/) und ein Live-Beispiel.
example.
A good bug report shouldn't leave others needing to chase you up for more 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.
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) > [Vorlagen für Fehlerberichte](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 > wurden für dieses Projekt erstellt. Du kannst sie nutzen, um den Richtlinien zu folgen.
> guidelines.
## Feature requests ## Funktionserweiterungen
Feature requests are welcome. But take a moment to find out whether your idea 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.
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 ## Pull-Requests
Good pull requests - patches, improvements, new features - are a fantastic help. 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.
They should remain focused in scope and avoid containing unrelated commits.
**Please ask first** before embarking on any significant pull request (e.g. **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.
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, 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).
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 Das Befolgen des folgenden Prozesses ist der beste Weg, um deine Arbeit in das Projekt aufzunehmen:
the project:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the 1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) das Projekt, klone deinen Fork und konfiguriere die Remotes:
project, clone your fork, and configure the remotes:
```bash ```bash
# Clone your fork of the repo into the current directory # Klone deinen Fork des Repos in das aktuelle Verzeichnis
git clone https://code.castopod.org/<your-username>/castopod.git git clone https://code.castopod.org/<dein-benutzername>/castopod.git
# Navigate to the newly cloned directory # Navigiere zum neu geklonten Verzeichnis
cd castopod 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 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 ```bash
git checkout main git checkout main
git pull upstream main git pull upstream main
``` ```
3. Create a new topic branch (off the `main` branch) to contain your feature, 3. Erstelle einen neuen Topic-Branch (aus dem `main`-Zweig), um dein Feature, deine Änderung oder Behebung zu enthalten:
change, or fix:
```bash ```bash
git checkout -b <topic-branch-name> git checkout -b <topic-branch-name>
``` ```
4. Commit your changes in logical chunks. Please adhere to these 4. Commite deine Änderungen in logischen Teilen. Bitte halte dich an diese
[git commit message guidelines](https://conventionalcommits.org/) or your [Git Commit Message-Richtlinien](https://conventionalcommits.org/), da dein
code is unlikely be merged into the main project. Use Git's Code sonst wahrscheinlich nicht in das Hauptprojekt integriert wird. Verwende die
[interactive rebase](https://help.github.com/articles/about-git-rebase/) [interaktive Rebase-Funktion von Git](https://help.github.com/articles/about-git-rebase/),
feature to tidy up your commits before making them public. 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 ```bash
git pull [--rebase] upstream main git pull [--rebase] upstream main
``` ```
6. Push your topic branch up to your fork: 6. Pushe deinen Topic-Branch in deinen Fork:
```bash ```bash
git push origin <topic-branch-name> 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) 7. [Öffne einen 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. mit einem klaren Titel und einer Beschreibung.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to **WICHTIG**: Durch das Einreichen eines Patches stimmst du zu, dass die Projektbesitzer dein Werk unter den Bedingungen der
license your work under the terms of the [GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE) lizenzieren.
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE).
## 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 - 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)
unless it's an architectural change, a large feature, etc. If it is, then at - 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.
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. 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 sidebarDepth: 3
--- ---
# Setup your development environment # Richte deine Entwicklungsumgebung ein
## Introduction ## Einführung
Castopod is a web app based on the `php` framework Castopod ist eine Webanwendung, die auf dem `php`-Framework [CodeIgniter 4](https://codeigniter.com) basiert.
[CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A 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.
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
> You don't need any prior knowledge of Docker to follow the next steps. > 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!
> However, if you wish to use your own environment, feel free to do so!
## 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 ```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 2. Erstelle eine `.env` Datei mit der minimalen Konfiguration, um die App mit der Datenbank zu verbinden und Redis als Cache-Handler zu verwenden:
the database and use redis as a cache handler:
```ini ```ini
CI_ENVIRONMENT="development" 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" vite.environment="development"
# By default, this is set to true in the app config. # Standardmäßig ist dies in der App-Konfiguration auf "true" eingestellt.
# For development, this must be set to false as it is # Für die Entwicklung muss dies auf "false" gesetzt werden, da es
# on a local environment # sich um eine lokale Umgebung handelt
app.forceGlobalSecureRequests=false app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/" app.baseURL="http://localhost:8080/"
@ -56,368 +51,88 @@ to help you kickstart your contribution.
cache.handler="redis" cache.handler="redis"
cache.redis.host = "redis" cache.redis.host = "redis"
# You may not want to use redis as your cache handler # Du möchtest möglicherweise Redis nicht als Cache-Handler verwenden
# Comment/remove the two lines above and uncomment # Kommentiere/entferne die beiden Zeilen darüber und kommentiere die
# the next line for file caching. # nächste Zeile für den Datei-Cache.
#cache.handler="file" #cache.handler="file"
``` ```
> _NB._ You can tweak your environment by setting more environment variables > _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.
> 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 3. (für Docker Desktop) Füge das von dir geklonte Repository unter "Settings" > "Resources" > "File Sharing" in Docker Desktop hinzu.
`Settings` > `Resources` > `File Sharing`
### 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/` 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! 🪄
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 1. Installiere die VSCode-Erweiterung [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) 2. `Strg/Cmd + Umschalt + P` > `Im Container öffnen`.
2. `Ctrl/Cmd + Shift + P` > `Open in container`
> The VSCode window will reload inside the dev container. Expect several > Das VSCode-Fenster wird innerhalb des Dev-Containers neu geladen. Erwarte einige Minuten beim ersten Laden, da alle erforderlichen Dienste erstellt werden.
> minutes during first load as it is building all necessary services.
**Note**: The dev container will start by running Castopod's php server. **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:
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
```bash ```bash
# run Vite dev server # Vite Dev-Server starten
npm run dev npm run dev
``` ```
If there is any issue with the php server not running, you can restart them Wenn es Probleme mit dem php-Server gibt, der nicht läuft, kannst du sie mit den folgenden Befehlen neu starten:
using the following commands:
```bash ```bash
# run Castopod server # Castopod-Server starten
php spark serve - 0.0.0.0 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 Du befindest dich nun **im Dev-Container** und kannst die VSCode-Konsole (`Terminal` > `Neues Terminal`) verwenden, um beliebige Befehle auszuführen:
(`Terminal` > `New Terminal`) to run any command:
```bash ```bash
# PHP is installed # PHP ist installiert
php -v php -v
# Composer is installed # Composer ist installiert
composer -V composer -V
# npm is installed # npm ist installiert
npm -v npm -v
# git is installed # git ist installiert
git version git version
``` ```
For more info, see Weitere Informationen findest du unter [VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
[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 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.
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
To see your changes, go to: Um deine Änderungen zu sehen, gehe zu:
- `http://localhost:8080/` for the Castopod app - `http://localhost:8080/` für die Castopod-App
- `http://localhost:8888/` for the phpmyadmin interface: - `http://localhost:8888/` für die phpMyAdmin-Benutzeroberfläche:
- Benutzername: **castopod**
- Passwort: **castopod**
- username: **castopod** ### 2-alt. Entwicklung außerhalb des App-Containers
- password: **castopod**
### 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: Gehe zum Stammordner des Projekts und führe aus:
Go to project's root folder and run:
```bash ```bash
# starts all services declared in docker-compose.yml file # startet alle im docker-compose.yml-Datei deklarierten Dienste
# -d option starts the containers in the background # Die Option -d startet die Container im Hintergrund
docker-compose up -d 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 docker-compose ps
# Alternatively, you can check all docker processes # Du kannst auch alle Docker-Prozesse anzeigen
docker ps -a docker ps -a
``` ```
> The `docker-compose up -d` command will boot 4 containers in the > Der Befehl `docker-compose
> 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": "Erste Schritte",
"position": 2 "position": 2
} }

View File

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

View File

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

View File

@ -5,222 +5,115 @@ sidebarDepth: 3
# Wie installiere ich Castopod? # Wie installiere ich Castopod?
Castopod ist für eine einfache Installation konzipiert. Ob dediziertes oder Castopod wurde entwickelt, um einfach zu installieren zu sein. Es kann auf den meisten PHP-MySQL-kompatiblen Webservern installiert werden, ob dediziert oder shared.
Shared-Hosting, du kannst es auf den meisten PHP-MySQL-kompatiblen Webservern
installieren.
::: 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 Wenn du Docker bevorzugst, kannst du diesen Teil überspringen und zur [Docker-Dokumentation](./docker.md) für Castopod gehen.
direkt zur [Docker-Dokumentation](./docker.md) für Castopod gehen.
::: :::
## Voraussetzungen ## Voraussetzungen
- PHP v8.1 only - PHP v8.1
- MySQL Version 5.7 oder höher oder MariaDB Version 10.2 oder höher - MySQL Version 5.7 oder höher oder MariaDB Version 10.2 oder höher
- HTTPS-Unterstützung - HTTPS-Unterstützung
- Eine [ntp-synchronisierte Uhr](https://wiki.debian.org/NTP) um die eingehenden - Eine [mit NTP synchronisierte Uhr](https://wiki.debian.org/NTP), um eingehende Anfragen der Föderation zu validieren
Anfragen zu überprüfen
### 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) - [intl](https://www.php.net/manual/de/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php) - [libcurl](https://www.php.net/manual/de/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php) - [mbstring](https://www.php.net/manual/de/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) mit **JPEG**, - [gd](https://www.php.net/manual/de/image.installation.php) mit den Bibliotheken **JPEG**, **PNG** und **WEBP**.
**PNG** und **WEBP** Bibliotheken. - [exif](https://www.php.net/manual/de/exif.installation.php)
- [exif](https://www.php.net/manual/en/exif.installation.php)
Stelle außerdem sicher, dass die folgenden Erweiterungen in deinem PHP aktiviert Stelle außerdem sicher, dass die folgenden Erweiterungen in deinem PHP aktiviert sind:
sind:
- json (standardmäßig aktiviert - nicht ausschalten) - json (standardmäßig aktiviert - nicht deaktivieren)
- xml (standardmäßig aktiviert - nicht ausschalten) - xml (standardmäßig aktiviert - nicht deaktivieren)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) - [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 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.
Datenbanken. Es wird zum Beispiel mit dem vorherigen MySQL v5.6 nicht mehr
funktionieren, dessen Lebensende am 5. Februar 2021 war.
::: :::
Du benötigst den Servernamen, den Datenbanknamen, den Benutzernamen und das 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.
Passwort, um den Installationsvorgang abzuschließen. Kontaktiere bitte den
Administrator, falls du keinen Benutzeraccount hast.
#### Berechtigungen #### Zugriffsberechtigungen
Benutzer müssen mindestens diese Berechtigungen in der Datenbank haben, damit 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`.
Castopod funktioniert: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`,
`INSERT`, `SELECT`, `UPDATE`, `REFERENCES`, `CREATE VIEW`.
### (Optional) FFmpeg v4.1.8 oder höher für Videoclips ### (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, [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:
wenn Du Videoclips generieren möchtest. Die folgenden Php-Erweiterungen sind
nicht installiert: %s:
- **FreeType 2** Bibliothek für - Die **FreeType 2**-Bibliothek für [gd](https://www.php.net/manual/de/image.installation.php).
[gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Weitere Empfehlungen ### (Optional) Weitere Empfehlungen
- Redis für bessere Cache-Leistungen. - Redis für bessere Cache-Performance
- CDN für das Caching statischer Dateien und bessere Leistungen. - CDN zur Cache-Speicherung statischer Dateien und für bessere Performance
- E-Mail Server Anbindung für E-Mails zu verlorenen Passwörtern. - E-Mail-Gateway für verlorene Passwörter
## Installationsanleitung ## Installationsanleitung
### Voraussetzungen ### Voraussetzungen
0. Get a Web Server with [requirements](#requirements) installed 0. Beschaffe einen Webserver mit den [Voraussetzungen](#voraussetzungen) installiert
1. Create a MySQL database for Castopod with a user having access and 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)).
modification privileges (for more info, see 2. Aktiviere HTTPS für deine Domain mit einem _SSL-Zertifikat_.
[MySQL compatible database](#mysql-compatible-database)). 3. Lade das neueste [Castopod-Paket](https://castopod.org/) herunter und entpacke es auf deinem Webserver, falls noch nicht geschehen.
2. Activate HTTPS on your domain with an _SSL certificate_. - ⚠️ Setze das Hauptdokument des Webservers auf den Unterordner `public/` des `castopod`-Ordners.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
the web server if you havent already. 4. Füge **Cron-Jobs** auf deinem Webserver für verschiedene Hintergrundprozesse hinzu (ersetze die Pfade entsprechend):
- ⚠️ 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 ```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1 * * * * * /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 **Hinweis** - Wenn du diesen Cron-Job nicht hinzufügst, werden folgende Castopod-Funktionen nicht funktionieren:
will not work:
- Importing a podcast from an existing RSS feed - Importieren eines Podcasts aus einem vorhandenen RSS-Feed
- Broadcasting social activities to your followers in the fediverse - Teilen von sozialen Aktivitäten an deine Follower im Fediverse
- Broadcasting episodes to open hubs using - Veröffentlichen von Episoden an offene Hubs mit Hilfe von [WebSub](https://en.wikipedia.org/wiki/WebSub)
[WebSub](https://en.wikipedia.org/wiki/WebSub) - Generieren von Videoclips - [benötigt FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
- Generating video clips -
[requires 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 1. Rufe das Castopod-Installations-Skript mit deinem bevorzugten Webbrowser auf, indem du die Installationsseite aufrufst (`https://your_domain_name.com/cp-install`).
(`https://your_domain_name.com/cp-install`) in your favorite web browser. 2. Befolge die angezeigten Anweisungen.
2. Follow the instructions on your screen. 3. Fang an zu podcasten!
3. Start podcasting!
::: info Note :::info Hinweis
The install script writes a `.env` file in the package root. If you cannot go 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.
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
::: :::
### Email/SMTP setup ### E-Mail/SMTP-Konfiguration
Email configuration is required for some features to work properly (eg. 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, ...).
retrieving your forgotten password, sending instructions to premium subscribers,
…)
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 ```ini
# […] # […]
# […] email.fromEmail="deine_e-mail_adresse"
email.SMTPHost="dein_smtp_host"
email.fromEmail="your_email_address" email.SMTPUser="dein_smtp_benutzer"
email.SMTPHost="your_smtp_host" email.SMTPPass="dein_smtp_passwort"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
``` ```
#### Email config options #### E
| 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

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

View File

@ -3,107 +3,93 @@ title: Update
sidebarDepth: 3 sidebarDepth: 3
--- ---
# How to update Castopod? # Wie installiere ich Castopod?
After installing Castopod, you may want to update your instance to the latest 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.
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
## Update instructions ## Update-Anweisungen
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and 0. ⚠️ Bevor Sie ein Update durchführen, empfehlen wir Ihnen dringend, Ihre Castopod-Dateien und die Datenbank zu sichern.
database.
- cf. - siehe
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating) [Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
1. Go to the 1. Gehen Sie zur
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and [Releases-Seite](https://code.castopod.org/adaures/castopod/-/releases) und
see if your instance is up to date with the latest Castopod version 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) [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 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.
between the `zip` or `tar.gz` archives
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code - ⚠️ Stellen Sie sicher, dass Sie das Castopod Package herunterladen und **NICHT** den Source Code.
- Note that you can also download the latest package from - Beachten Sie, dass Sie das neueste Paket auch von
[castopod.org](https://castopod.org/) [castopod.org](https://castopod.org/) herunterladen können.
3. On your server: 3. Auf Ihrem Server:
- Remove all files except `.env` and `public/media` - Löschen Sie alle Dateien außer `.env` und `public/media`.
- Copy the new files from the downloaded package into your server - 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. Möglicherweise müssen Sie die Dateiberechtigungen neu festlegen, wie beim Installationsprozess bereits durchgeführt. Siehe
Check [Security Concerns](./security.md). [Sicherheitshinweise](./security.md).
::: :::
4. Update your database schema from your `Castopod Admin` > `About` page or by 4. Aktualisieren Sie das Datenbankschema über die Seite `Castopod Admin` > `About` oder führen Sie folgenden Befehl aus:
running:
```bash ```bash
php spark castopod:database-update php spark castopod:database-update
``` ```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` > 5. Leeren Sie Ihren Cache über `Castopod Admin` > `Settings` > `general` >
`Housekeeping` `Housekeeping`.
6. ✨ Enjoy your fresh instance, you're all done! 6. ✨ Genießen Sie Ihre neue Instanz, Sie sind fertig!
::: info Note ::: info Hinweis
Releases may come with additional update instructions (see Es kann sein, dass den Versionen zusätzliche Update-Anweisungen beigefügt werden (siehe
[releases page](https://code.castopod.org/adaures/castopod/-/releases)). [Releases-Seite](https://code.castopod.org/adaures/castopod/-/releases)).
- cf. - siehe
[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) [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 Gehen Sie zu Ihrem Castopod-Administrationspanel. Die Version wird unten links angezeigt.
corner.
Alternatively, you can find the version in the `app > Config > Constants.php` Sie können die Version auch in der Anwendung unter
file. `> 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 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.
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
> You may want to backup your instance depending on how long you haven't updated > Sie sollten Ihre Instanz entsprechend dem Datum Ihres letzten Castopod-Updates sichern.
> Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to Zum Beispiel, wenn Sie auf `v1.0.0-alpha.42` sind und auf `v1.0.0-beta.1` aktualisieren möchten:
`v1.0.0-beta.1`:
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 1. Laden Sie die neueste Version herunter und ersetzen Sie Ihre Dateien, wobei Sie `.env` und `public/media` beibehalten.
`public/media`.
2. Go through each release update instructions sequentially (from oldest to 2. Führen Sie die Update-Anweisungen einzeln aus (von der ältesten zur neuesten Version).
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
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 Im Allgemeinen empfehlen wir Ihnen, regelmäßig Sicherungen Ihrer Castopod-Dateien und Ihrer Datenbank zu erstellen, um keine Daten zu verlieren...
database to prevent you from losing it all…

View File

@ -1,4 +1,5 @@
--- ---
sidebarDepth: 2 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] [![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 Castopod ist eine kostenlose und Open-Source-Hosting-Plattform, die für Podcaster entwickelt wurde, die mit ihrem Publikum kommunizieren und interagieren möchten.
Publikum einbinden und mit ihnen interagieren möchten.
Castopod ist einfach zu installieren und wurde auf Castopod ist einfach zu installieren und wurde mit [CodeIgniter4](https://codeigniter.com/), einem leistungsstarken PHP-Framework in sehr kleinem Umfang, entwickelt.
[CodeIgniter4](https://codeigniter.com/) aufgebaut, ein mächtiges PHP Framework,
mit einem sehr kleinen Fußabdruck.
<div class="flex items-center"> <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> </div>
## Merkmale ## Eigenschaften
- 🌱 Kostenlos & Open-Source (AGPL v3 Lizenz) - 🌱 &nbsp;Frei, kostenlos und Open-Source (Lizenz AGPL v3)
- 🔐 &nbsp;Fokussiert auf die Datensouveränität: Ihre Inhalte, Ihr Publikum und - 🔐 &nbsp;fokussiert auf Datenhoheit: Dein Inhalt, Deine Zuhörer und Deine Statistiken gehören dir und nur dir
Analysen gehören zu Ihnen, und&nbsp;nur Ihnen&nbsp; - 🪄&nbsp;Podcasting 2.0 Funktionen: GUIDs, Sperren, Transkriptionen, Finanzierung, Kapitel, Geolokalisierung, Teilnehmer, Audio-Extrakte, ...
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding, - 💬 &nbsp;Integriertes soziales Netzwerk:
chapters, location, persons, soundbites, … - 🚀 &nbsp;Castopod ist Teil des Fediverse, ein dezentrales soziales Netzwerk
- 💬 &nbsp;Built-in social network: - ❤️ &nbsp;Erstellen von Beiträgen, Teilen, Favorisieren und Kommentieren von Episoden
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network - 📈 &nbsp;Integrierte Statistiken:
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes - ⚖️ &nbsp;Konform mit GDPR / CCPA / LGPD
- 📈 &nbsp;Built-in analytics: - 🪙&nbsp;IABv2-Zielgruppenmessung
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant - 🏡 &nbsp;Integrierte Statistiken, keine Drittanbieter
- 🪙 &nbsp;Standard IABv2 audience measurement - 📢 &nbsp;Integrierte Marketingtools:
- 🏡 &nbsp;On-premises analytics, no third party involved - ✅ &nbsp;SEO-Bereitstellung (Open-Graph-Metatags, JSON-LD, ...)
- 📢 &nbsp;Built-in marketing tools: - 📱 &nbsp;PWA: Installieren als eigenständige App
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …) - 🎨 &nbsp;Anpassbare Themenfarben
- 📱 &nbsp;PWA: install as a standalone app - 🎬 &nbsp;Erstellen Sie Videoschnipsel, die Sie freigeben können, aus Episoden
- 🎨 &nbsp;Customizable theme colors - 🔉 &nbsp;Erstellen Sie Audio-Extrakte
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes - ▶️ &nbsp;Binden Sie Ihre Episoden in jede Website ein
- 🔉 &nbsp;Generate soundbites - 💸 &nbsp;Monetarisierung:
- ▶️ &nbsp;Embeddable player, embed your episodes on any website - 🔗 &nbsp;Finanzierungslinks
- 💸 &nbsp;Monetization: - 📲 &nbsp;Werbung "listen-to-click"
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🤝 &nbsp;value4value / WebMonetization - 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts - 💎 &nbsp;Premium-Podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS: - 📡&nbsp;Veröffentlichen Sie Ihre Episoden überall mit RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, - 📱 &nbsp;Auf allen Indizes und Apps: Podcast Index, Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend ...
Google Podcasts, Deezer, Podcast Addict, Podfriend, … - ⚡&nbsp;Streamen Sie Ihre Episoden sofort mit WebSub
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub - 📥 &nbsp;Import von Podcasts: Ziehen Sie Ihren vorhandenen Podcast zu Castopod um
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod - 📤 &nbsp;Ziehen Sie Ihren Podcast zu einem anderen Hosting-Dienstleister um
- 📤 &nbsp;Move your podcast out of Castopod - 🔀 &nbsp;Mehrmandantenfähigkeit: Hosten Sie so viele Podcasts, wie Sie möchten
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want - 👥 &nbsp;Mehrbenutzerfähigkeit: Fügen Sie Mitwirkende hinzu und definieren Sie ihre Rollen
- 👥 &nbsp;Multi-user: add contributors and set roles - 🌍 &nbsp;i18n-Unterstützung: Übersetzt in Englisch, Französisch, Polnisch, Deutsch, Portugiesisch, Brasilianisch und Spanisch... und
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German, [mehr in Zukunft](https://translate.castopod.org)!
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
## Motivation ## Warum Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast 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.
as an RSS file, publish it on the web and have it shared everywhere online.
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 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.
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
With podcasting becoming more widely used, some companies are trying to shift it Mit der zunehmenden Verbreitung von Podcasts versuchen einige Unternehmen, ihn in ein kontrollierteres und zentralisiertes Medium zu verwandeln.
towards a more controlled and centralized medium.
Castopod was created in an effort to provide an open and sustainable alternative 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.
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 Dieses Projekt wird von der Open-Source-Community vorangetrieben, insbesondere von der [Fediverse](https://fediverse.party/en/fediverse/)- und Podcasting 2.0-Bewegungen.
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
## Vergleiche mit anderen Lösungen ## Vergleich mit anderen Lösungen
We believe that a solution is not necessarily right for everyone, it highly 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.
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 vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the 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.
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 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.
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 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.
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 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.
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 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.
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 Je nach Bedarf können Wordpress und Castopod sogar nebeneinander existieren, da sie dieselben Anforderungen teilen!
side as they share the same requirements!
### Castopod vs Funkwale ### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as 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.
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 Funkwhale wurde ursprünglich für Musik entwickelt. Später wurde die Möglichkeit, Podcasts zu hosten, eingeführt.
evolved, the ability to host podcasts was introduced.
Unlike Funkwhale, Castopod has been designed and built around podcasting 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, ...).
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 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 if you want to host your podcasts.
### 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 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!
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 Jede dieser Lösungen unterscheidet sich voneinander. Du kannst sie anhand der [Feature-Liste](#-features) vergleichen.
[list of features](#features).
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 - 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.
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 - 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.
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
## Contributing ## Mitwirken
Love Castopod and would like to help? Take a look at the following documentation Liebst du Castopod und möchtest helfen? Schau dir die folgende Dokumentation an, um loszulegen.
to get you&nbsp;started.
### Code of conduct ### Code of Conduct
Castopod has adopted a Code of Conduct that we expect project participants to 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.
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 ### Beitragshinweise
Read our [contributing guide](./contributing/guidelines.md) to learn about our 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.
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## 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)): ([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 "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 Αγαπάς το Castopod και θέλεις να βοηθήσεις; Ευχαριστούμε πολύ, υπάρχει κάτι για να κάνεις!
everybody!
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 [του αρχικού αποθετηρίου](https://code.castopod.org/adaures/castopod) δεν
be accepted. θα γίνεται δεκτή.
::: :::
## Using the issue tracker ## Χρήση του παρακολουθητή θεμάτων
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the Ο [παρακολουθητής θεμάτων](https://code.castopod.org/adaures/castopod/-/issues) είναι
preferred channel for [bug reports](#bug-reports), η προτιμώμενη μέθοδος για [αναφορές σφαλμάτων](#αναφορά-σφαλμάτων),
[features requests](#feature-requests) and [ζητήματα χαρακτηριστικών](#ζητήματα-χαρακτηριστικών) και
[submitting pull requests](#pull-requests). [υποβολή αιτημάτων ενσωμάτωσης](#αίτηματα-ενσωμάτωσης).
## ⚠️ Security issues and vulnerabilities ## ⚠️ Θέματα ασφαλείας και ευπάθειες
If you encounter any security issue or vulnerability in the Castopod source, Εάν αντιμετωπίσετε οποιοδήποτε θέμα ασφαλείας ή ευπάθεια στον πηγαίο κώδικα του Castopod,
please contact us directly by email at παρακαλούμε επικοινωνήστε απευθείας μαζί μας μέσω email στο
[security@castopod.org](mailto:security@castopod.org) [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 1. **Χρησιμοποιήστε την αναζήτηση θεμάτων** &mdash; ελέγξτε εάν έχει ήδη αναφερθεί το θέμα.
reported.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the 2. **Ελέγξτε εάν το θέμα έχει διορθωθεί** &mdash; προσπαθήστε να το αναπαράγετε χρησιμοποιώντας το τελευταίο `main` κλαδί στο αποθετήριο.
latest `main` branch in the repository.
3. **Isolate the problem** &mdash; ideally create a 3. **Προσδιορίστε το πρόβλημα** &mdash; ιδανικά δημιουργήστε ένα
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live [μειωμένο τεστ κέισ](https://css-tricks.com/reduced-test-cases/) και ένα ζωντανό παράδειγμα.
example.
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) > [Δημιουργήθηκαν πρότυπα θεμάτων](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.
## 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 sidebarDepth: 3
--- ---
# Setup your development environment # Ρύθμιση του περιβάλλοντος ανάπτυξής σας
## Introduction ## Εισαγωγή
Castopod is a web app based on the `php` framework Το Castopod είναι μια διαδικτυακή εφαρμογή βασισμένη στο πλαίσιο `php`
[CodeIgniter 4](https://codeigniter.com). [CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A Χρησιμοποιούμε το [Docker](https://www.docker.com/) για γρήγορη δημιουργία περιβάλλοντος ανάπτυξης. Ένα
`docker-compose.yml` and `Dockerfile` are included in the project's root folder `docker-compose.yml` και ένα `Dockerfile` περιλαμβάνονται στον κατάλογο ρίζας του έργου
to help you kickstart your contribution. για να σας βοηθήσουν να ξεκινήσετε τη συνεισφορά σας.
> You don't need any prior knowledge of Docker to follow the next steps. > Δεν χρειάζεστε καμία προηγούμενη γνώση του Docker για να ακολουθήσετε τα επόμενα βήματα.
> However, if you wish to use your own environment, feel free to do so! > Ωστόσο, αν επιθυμείτε να χρησιμοποιήσετε το δικό σας περιβάλλον, μπορείτε να το κάνετε ελεύθερα!
## 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 ```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 2. Δημιουργήστε ένα αρχείο `.env` με τις ελάχιστες απαιτούμενες ρυθμίσεις για να συνδέσετε την εφαρμογή με τη
the database and use redis as a cache handler: βάση δεδομένων και να χρησιμοποιήσετε την Redis ως χειριστή κρυφής κρατήσεως:
```ini ```ini
CI_ENVIRONMENT="development" 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" vite.environment="development"
# By default, this is set to true in the app config. # Από προεπιλογή, αυτό ορίζεται σε true στις ρυθμίσεις της εφαρμογής.
# For development, this must be set to false as it is # Για ανάπτυξη, πρέπει να οριστεί σε false καθώς βρίσκεται
# on a local environment # σε τοπικό περιβάλλον
app.forceGlobalSecureRequests=false app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/" app.baseURL="http://localhost:8080/"
@ -56,368 +56,15 @@ to help you kickstart your contribution.
cache.handler="redis" cache.handler="redis"
cache.redis.host = "redis" cache.redis.host = "redis"
# You may not want to use redis as your cache handler # Μπορεί να μην θέλετε να χρησιμοποιήσετε την Redis ως χειριστή κρυφής κρατήσεως
# Comment/remove the two lines above and uncomment # Σχολιάστε/αφαιρέστε τις δύο παραπάνω γραμμές και ξεχολιάστε
# the next line for file caching. # την επόμενη γραμμή για κρατήσεις σε αρχείο.
#cache.handler="file" #cache.handler="file"
``` ```
> _NB._ You can tweak your environment by setting more environment variables > _NB._ Μπορείτε να ρυθμίσετε περισσότερες μεταβλητές περιβάλλοντος προσαρμόζοντας το αρχείο `.env`. Δείτε το
> in your custom `.env` file. See the `env` for examples or the > παράδειγμα env ή τον
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) > [Οδηγό Χρήστη CodeIgniter4](https://codeigniter.com/user_guide/index.html)
> for more info. > για περισσότερες πληροφορίες.
3. (for docker desktop) Add the repository you've cloned to docker desktop's 3. (για το docker
`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.

View File

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

View File

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

View File

@ -1,35 +1,29 @@
--- ---
title: Official Docker images title: Επίσημες εικόνες Docker
sidebarDepth: 3 sidebarDepth: 3
--- ---
# Official Docker images # Επίσημες εικόνες του Docker
Castopod pushes 3 Docker images to the Docker Hub during its automated build Το Castopod αποστέλλει 3 εικόνες Docker στο Docker Hub κατά τη διάρκεια της αυτοματοποιημένης διαδικασίας κατασκευής:
process:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all - [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): μια εικόνα για το Castopod που περιλαμβάνει όλα τα απαιτούμενα στοιχεία, χρησιμοποιώντας το nginx unit
in one castopod image using nginx unit - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): το πακέτο εφαρμογής με όλες τις εξαρτήσεις του Castopod
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): μια διαμόρφωση του Nginx για το Castopod
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database Επιπλέον, το Castopod απαιτεί μια βάση δεδομένων που είναι συμβατή με το MySQL. Μια βάση δεδομένων Redis μπορεί επίσης να προστεθεί ως διαχειριστής προσωρινής αποθήκευσης.
can be added as a cache handler.
## Supported tags ## Υποστηριζόμενες ετικέτες
- `develop` [unstable], latest development branch build - `develop` [ασταθής], η τελευταία έκδοση του κλαδιού ανάπτυξης
- `beta` [stable], latest beta version build - `beta` [σταθερή], η πιο πρόσφατη έκδοση βήτα
- `latest` [stable], latest version build - `1.x.x` [σταθερή], συγκεκριμένη έκδοση (από το `1.0.0` και μετά)
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage ## Παράδειγμα χρήσης
1. Install [docker](https://docs.docker.com/get-docker/) and 1. Εγκαταστήστε το [docker](https://docs.docker.com/get-docker/) και το
[docker-compose](https://docs.docker.com/compose/install/) [docker-compose](https://docs.docker.com/compose/install/)
2. Create a `docker-compose.yml` file with the following: 2. Δημιουργήστε ένα αρχείο `docker-compose.yml` με τα παρακάτω στοιχεία:
```yml ```yml
version: "3.7" version: "3.7"
@ -87,13 +81,11 @@ can be added as a cache handler.
castopod-db: castopod-db:
``` ```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`, Θα πρέπει να προσαρμόσετε ορισμένες μεταβλητές στις ανάγκες σας (π.χ. `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` και `CP_ANALYTICS_SALT`).
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `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 Το TLS είναι υποχρεωτικό για να λειτουργήσει το ActivityPub. Αυτή η λειτουργία μπορεί να διαχειριστεί εύκολα από ένα αντίστροφο πρόξενο, για παράδειγμα το [Caddy](https://caddyserver.com/):
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
``` ```
#castopod #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 4. Εκτελέστε `docker-compose up -d`, περιμένετε να ολοκληρωθεί η αρχικοποίηση στο
`https://castopod.example.com/cp-install` to finish setting up Castopod! `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 | | Όνομα μεταβλητής | Τύπος (`default`) | Προεπιλογή |
| ------------------------------------- | ----------------------- | ---------------- | | ----------------------------- | -------------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` | | **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` | | **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` | | **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` | | **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` | | **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` | | **`CP_CACHE_HANDLER`** | [`"file"` ή `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` | | **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` | | **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` | | **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` | | **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` | | **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` | | **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` | | **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` | | **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` | | **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` | | **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` ή `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` | | **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` | | **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` | | **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` | | **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` | | **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?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` |

View File

@ -1,221 +1,58 @@
--- ---
title: Installation title: Εγκατάσταση
sidebarDepth: 3 sidebarDepth: 3
--- ---
# How to install Castopod? # Πώς να εγκαταστήσετε το Castopod;
Castopod was thought-out to be easy to install. Whether using dedicated or Το Castopod έχει σχεδιαστεί να είναι εύκολο στην εγκατάσταση. Αν μιλάμε για
shared hosting, you can install it on most PHP-MySQL compatible web servers. αποκλειστική ή κοινή φιλοξενία, μπορείτε να το εγκαταστήσετε σε περισσότερους
ιστοσέλιδους διακομιστές που υποστηρίζονται από 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, μπορείτε να παραλείψετε αυτό το μέρος και να πάτε απευθείας στην αντίστοιχη [τεκμηρίωση Docker](./docker.md) για το Castopod.
[docker documentation](./docker.md) for Castopod.
::: :::
## Requirements ## Προαπαιτήσεις
- PHP v8.1 only - PHP v8.1
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher - Έκδοση MySQL 5.7 ή νεότερη ή Έκδοση MariaDB 10.2 ή νεότερη
- HTTPS support - Υποστήριξη HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's - Ένα [συγχρονισμένο ρολόι](https://wiki.debian.org/NTP) για την επαλήθευση των εισερχομένων αιτημάτων της ένωσης
incoming requests
### 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) - [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php) - [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php) - [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**, - [gd](https://www.php.net/manual/en/image.installation.php) με τις βιβλιοθήκες **JPEG**,
**PNG** and **WEBP** libraries. **PNG** και **WEBP**.
- [exif](https://www.php.net/manual/en/exif.installation.php) - [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) - json (ενεργοποιημένο από προεπιλογή - μην το απενεργοποιείτε)
- xml (enabled by default - don't turn it off) - xml (ενεργοποιημένο από προεπιλογή - μην το απενεργοποιείτε)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) - [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 Το Castopod λειτουργεί μόνο με βάσεις δεδομένων MySQL 5.7 ή νεότερες. Οι έκδοσης 5.6 (η υποστήριξη της οποίας έληξε στις 5 Φεβρουαρίου 2021) ή παλαιότερες του MySQL δεν θα λειτουργήσουν.
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
::: :::
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,26 +1,28 @@
--- ---
title: Security title: Ασφάλεια
--- ---
# Security concerns # Ερωτήσεις Ασφάλειας
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP Το Castopod αναπτύσσεται με χρήση του [CodeIgniter4](https://codeigniter.com/), ένα
framework that encourages framework PHP που προωθεί
[good security practices](https://codeigniter.com/user_guide/concepts/security.html). [καλές πρακτικές ασφάλειας](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**. - Ο φάκελος `writable/` θα πρέπει να είναι προσβάσιμος σε καθεστώς **ανάγνωσης** και **εγγραφής**.
- `public/media/` folder must be **readable** and **writable**. - Ο φάκελος `public/media/` θα πρέπει να είναι προσβάσιμος σε καθεστώς **ανάγνωσης** και
- any other file must be set to **readonly**. **εγγραφής**.
- Όλα τα υπόλοιπα αρχεία θα πρέπει να είναι προσβάσιμα μόνο σε κατάσταση **ανάγνωσης**.
For instance, if you are using Apache or NGINX with Ubuntu you may do the Για παράδειγμα, αν χρησιμοποιείτε τον Apache ή τον NGINX με το Ubuntu, μπορείτε να εκτελέσετε
following: τις παρακάτω εντολές:
```bash ```bash
sudo chown -R root:root /path/to/castopod 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/writable
sudo chown -R www-data:www-data /path/to/castopod/public/media sudo chown -R www-data:www-data /path/to/castopod/public/media
``` ```

View File

@ -1,109 +1,110 @@
--- ---
title: Update title: Ενημέρωση
sidebarDepth: 3 sidebarDepth: 3
--- ---
# How to update Castopod? # Πώς να εγκαταστήσετε το Castopod;
After installing Castopod, you may want to update your instance to the latest Μετά την εγκατάσταση του Castopod, μπορείτε να ενημερώσετε την έκδοσή σας στην
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance πιο πρόσφατη έκδοση για να απολαύσετε τις τελευταίες δυνατότητες ✨, τις
improvements ⚡. διορθώσεις σφαλμάτων 🐛 και τις βελτιώσεις της απόδοσης ⚡.
## Update instructions ## Οδηγίες ενημέρωσης
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and 0. ⚠️ Πριν από κάθε ενημέρωση, συστήνουμε ιδιαίτερα να δημιουργήσετε αντίγραφο
database. ασφαλείας των αρχείων Castopod και της βάσης δεδομένων σας.
- cf. - βλέπε
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating) [Πρέπει να κάνω αντίγραφο ασφαλείας πριν από την ενημέρωση;](#πρέπει-να-κάνω-αντίγραφο-ασφαλείας-πριν-από-την-ενημέρωση)
1. Go to the 1. Μεταβείτε στη
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and [σελίδα κυκλοφορίας](https://code.castopod.org/adaures/castopod/-/releases) και
see if your instance is up to date with the latest Castopod version δείτε αν η έκδοσή σας είναι ενημερωμένη με την πιο πρόσφατη έκδοση του 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 2. Κατεβάστε το πακέτο της τελευταίας έκδοσης με την ονομασία `Castopod Package`,
between the `zip` or `tar.gz` archives μπορείτε να επιλέξετε ανάμεσα στα αρχεία `zip` ή `tar.gz`.
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code - ⚠️ Βεβαιωθείτε ότι κατεβάζετε το Castopod Package και **ΌΧΙ** τον Πηγαίο Κώδικα.
- Note that you can also download the latest package from - Σημειώστε ότι μπορείτε επίσης να κατεβάσετε το πιο πρόσφατο πακέτο από το
[castopod.org](https://castopod.org/) [castopod.org](https://castopod.org/).
3. On your server: 3. Στο δικό σας διακομιστή:
- Remove all files except `.env` and `public/media` - Διαγράψτε όλα τα αρχεία εκτός από το `.env` και το `public/media`
- Copy the new files from the downloaded package into your server - Αντιγράψτε τα νέα αρχεία από το κατεβασμένο πακέτο στον δικό σας διακομιστή
::: 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 4. Ενημερώστε το σχήμα της βάσης δεδομένων σας από τη σελίδα `Castopod Admin` >
running: `Σχετικά` ή εκτελώντας:
```bash ```bash
php spark castopod:database-update php spark castopod:database-update
``` ```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` > 5. Καθαρίστε τη μνήμη cache από τη σελίδα `Castopod Admin` > `Ρυθμίσεις` >
`Housekeeping` `Γενικές` > `Συντήρηση`.
6. ✨ Enjoy your fresh instance, you're all done! 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 Μεταβείτε στον πίνακα διαχείρισης του Castopod, η έκδοση εμφανίζεται στην
corner. κάτω αριστερή γωνία.
Alternatively, you can find the version in the `app > Config > Constants.php` Μπορείτε επίσης να βρείτε την έκδοση στο αρχείο `> Configuration > Constantes.php`.
file.
### 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 παραπάνω. Όταν εκτελείτε τις οδηγίες ενημέρωσης (4), εκκινήστε τις
to the newest. σειριακά, από την παλαιότερη στην πιο πρόσφατη.
> 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-alpha.42` και θέλετε να
`v1.0.0-beta.1`: ενημερώσετε στην `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 1. Κατεβάστε την τελευταία έκδοση, αντικαταστήστε τα αρχεία σας κρατώντας τα
`public/media`. `.env` και `public/media`.
2. Go through each release update instructions sequentially (from oldest to 2. Εκτελέστε τις οδηγίες ενημέρωσης μία-μία (από την παλαιότερη στην
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`, πιο πρόσφατη).
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
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 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] [![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 που Το Castopod είναι μια δωρεάν και ανοιχτού κώδικα πλατφόρμα φιλοξενίας που δημιουργήθηκε για ποδκαστερ που θέλουν να ανταλλάσσουν και να αλληλεπιδρούν με το κοινό τους.
κατασκευάζεται για podcasters που θέλουν να συμμετάσχουν και να αλληλεπιδράσουν
με το κοινό τους.
Το Castopod είναι εύκολο στην εγκατάσταση και χτίστηκε με το Το Castopod είναι εύκολο στην εγκατάσταση και δημιουργήθηκε με το [CodeIgniter4](https://codeigniter.com/), ένα ισχυρό πλαίσιο PHP μικρού μεγέθους.
[CodeIgniter4](https://codeigniter.com/), ένα ισχυρό PHP framework με ένα πολύ
μικρό αποτύπωμα.
<div class="flex items-center"> <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> </div>
## Χαρακτηριστικά ## Λειτουργίες
- 🌱 &nbsp;Δωρεάν & open-source (AGPL v3 License) - 🌱 &nbsp;Ελεύθερο, δωρεάν & ανοιχτού κώδικα (Άδεια AGPL v3)
- 🔐 &nbsp;Εστιάζει στην κυριαρχία των δεδομένων: το περιεχόμενο, το κοινό και - 🔐 &nbsp;Κεντρισμένο στην κυριαρχία των δεδομένων: ο περιεχόμενος σας, οι ακροατές
τα αναλυτικά στοιχεία ανήκουν σε εσάς μόνο σας και οι στατιστικές σας σάς ανήκουν μόνο σας
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding, - 🪄&nbsp;Χαρακτηριστικά του Podcasting 2.0: GUID, κλείδωμα,
chapters, location, persons, soundbites, … μεταφράσεις, χρηματοδότηση, κεφάλαια, γεω-τοποθεσία, εισηγητές,
αποσπάσματα ήχου, …
- 💬 &nbsp;Ενσωματωμένο κοινωνικό δίκτυο: - 💬 &nbsp;Ενσωματωμένο κοινωνικό δίκτυο:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network - 🚀 &nbsp;Το Castopod είναι μέρος του Fediverse, ενός αποκεντρωμένου κοινωνικού δικτύου
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes - ❤️ &nbsp;Δημιουργήστε δημοσιεύσεις, μοιραστείτε, προσθέστε ως αγαπημένα και σχολιάστε
- 📈 &nbsp;Built-in analytics: τα επεισόδια
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant - 📈 &nbsp;Ενσωματωμένες στατιστικές:
- 🪙 &nbsp;Standard IABv2 audience measurement - ⚖️ &nbsp;Συμμορφωμένα με το GDPR/CCPA/LGPD
- 🏡 &nbsp;On-premises analytics, no third party involved - 🪙&nbsp;Μέτρηση κοινής γνώμης IABv2
- 📢 &nbsp;Built-in marketing tools: - 🏡 &nbsp;Ενσωματωμένες στατιστικές, καμία εμπλοκή τρίτων
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …) - 📢 &nbsp;Ενσωματωμένα εργαλεία μάρκετινγκ:
- 📱 &nbsp;PWA: install as a standalone app - ✅ &nbsp;Έτοιμο για το SEO (open-graph μετα-ετικέτες, JSON-LD...)
- 🎨 &nbsp;Customizable theme colors - 📱 &nbsp;PWA: εγκατέστηση ως αυτόνομη εφαρμογή
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes - 🎨 &nbsp;Προσαρμογή χρωμάτων θεμάτων
- 🔉 &nbsp;Generate soundbites - 🎬 &nbsp;Δημιουργία έτοιμων για κοινοποίηση επεισοδίων βίντεο κλιπ
- ▶️ &nbsp;Embeddable player, embed your episodes on any website - 🔉 &nbsp;Δημιουργία επιστροφών ήχου
- 💸 &nbsp;Monetization: - ▶️ &nbsp;Ενσωμάτωση των επεισοδίων σας σε οποιαδήποτε ιστοσελίδα
- 🔗 &nbsp;Funding links - 💸 &nbsp;Διασφάλιση εσόδων:
- 📲 &nbsp;listen-to-click ads - 🔗 &nbsp;Σύνδεσμοι χρηματοδότησης
- 📲 &nbsp;διαφήμιση "ακούστε-κλικ"
- 🤝 &nbsp;value4value / WebMonetization - 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts - 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS: - 📡&nbsp;Δημοσιεύστε τα επεισόδιά σας παντού με RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, - 📱 &nbsp;Σε όλες τις ευρετηριασμένες και όλες τις εφαρμογές: Podcast Index,
Google Podcasts, Deezer, Podcast Addict, Podfriend, … Ποδκαστς Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend…
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub - ⚡&nbsp;Αμέσως streaming των επεισοδίων σας με WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod - 📥 &nbsp;Εισαγωγή Podcast: μετακινήστε το υπάρχον podcast σας σε
- 📤 &nbsp;Move your podcast out of Castopod Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want - 📤 &nbsp;Μεταφέρετε το podcast σας σε έναν άλλο φιλοξενητή
- 👥 &nbsp;Multi-user: add contributors and set roles - 🔀 &nbsp;Πολλαπλές ενοικιαζόμενες θέσεις : φιλοξενήστε τόσα πολλά podcasts όσα θέλετε
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German, - 👥 &nbsp;Πολλαπλοί χρήστες: προσθέστε συντελεστές και ορίστε τους
Brazilian Portuguese & Spanish… with ρόλους τους
[more to come](https://translate.castopod.org)! - 🌎 &nbsp;διαχείριση της i18n: μεταφρασμένο στα αγγλικά, γαλλικά, πολωνικά, γερμανικά,
πορτογαλικά, βραζιλιάνικα & ισπανικά… και
[σε άλλες πολλές γλώσσες](https://translate.castopod.org) στο μέλλον!
## Κίνητρα ## Γιατί το Castopod;
The podcasting ecosystem is decentralized by nature: you can create your podcast Το περιβάλλον του podcasting είναι αποκεντρωμένο κατά φύση: μπορείτε να δημιουργήσετε
as an RSS file, publish it on the web and have it shared everywhere online. το 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 Καθώς οι χρήσεις εξελίσσονται, όλο και περισσότεροι άνθρωποι ασχολούνται με τα podcasts: είτε
it is creators finding new ways to share their ideas, or listeners in the search πρόκειται για δημιουργούς που αναζητούν νέους τρόπους να μοιραστούν τις ιδέες τους, είτε για ακροατές
for better content. που αναζητούν ποιοτικό περιεχόμενο.
With podcasting becoming more widely used, some companies are trying to shift it Με την αυξημένη χρήση των podcasts, ορισμένες εταιρείες προσπαθούν να το προσανατολίσουν προς ένα πιο
towards a more controlled and centralized medium. ελεγχόμενο και κεντρικό μέσο.
Castopod was created in an effort to provide an open and sustainable alternative Το Castopod δημιουργήθηκε με σκοπό να παρέχει μια ανοιχτή και βιώσιμη εναλλακτική λύση για την
to hosting your podcasts, promoting decentralization to ensure that podcasters φιλοξενία των podcasts σας, προωθώντας την αποκεντρωμένη λειτουργία για να εξασφαλιστεί ότι
creativity can express itself. η δημιουργικότητα των δημιουργών ποδκαστ θα εκφράζεται.
This project is pushed by the open-source community, and specifically by the Αυτό το έργο υποστηρίζεται από την κοινότητα του ανοικτού πηγαίου κώδικα και συγκεκριμένα από τη
[Fediverse](https://fediverse.party/en/fediverse/) and [Fediverse](https://fediverse.party/en/fediverse/) και την κίνηση
[Podcasting 2.0](https://podcastindex.org/) movements. [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 Οπότε, εδώ είναι οι συγκρίσεις με άλλα εργαλεία για να σας βοηθήσουν να κρίνετε αν το Castopod
gauge whether Castopod is the right fit for&nbsp;you. σας ταιριάζει&nbsp;ή όχι.
### Castopod vs Wordpress ### Castopod έναντι Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the Το Castopod παραπέμπεται συχνά ως "το Wordpress για τα podcasts" λόγω των ομοιοτήτων μεταξύ τους.
similarities between the two. In some ways this is true. And actually, Castopod Κατά κάποιον τρόπο αυτό είναι αληθές. Και στην πραγματικότητα, το Castopod ήταν έμπνευση από το
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption οικοσύστημα του Wordpress, βλέποντας την ευκολία ένταξης από την κοινότητα και τον αριθμό των
from the community and the number of websites running&nbsp;it. ιστότοπων που το χρησιμοποιούν&nbsp;το.
Just like Wordpress, Castopod is free & open source, built using PHP with a Όπως και το Wordpress, το Castopod είναι δωρεάν και ανοιχτού κώδικα, χτίστηκε με χρήση PHP με
MySQL database and is packaged in a way that you can easily install on most web ένα MySQL Βάση δεδομένων και είναι συσκευασμένο τρόπο έτσι ώστε να μπορείτε εύκολα να το
servers. εγκαταστήσετε σε σχεδόν όλους τους διακομιστές&nbsp;βάσεως τού&nbsp;Ιστού.
Wordpress is a great way to create your website and extend it with plugins to Το Wordpress είναι ένας εξαιρετικός τρόπος να δημιουργήσετε τον δικό σας ιστότοπο και να τον
get what you want. It is a full fledged CMS that helps you get any type of επεκτείνετε χρησιμοποιώντας πρόσθετα για να πάρετε ό,τι θέλετε. Είναι ένα πλήρως εξελιγμένο σύστημα
website online. διαχείρισης περιεχομένου που σας βοηθά να έχετε οποιοδήποτε είδος ιστότοπου online.
On the other hand, Castopod is meant to address the podcasters needs Από την άλλη πλευρά, το Castopod έχει ως στόχο να εξυπηρετήσει αποκλειστικά τις ανάγκες των
specifically, focusing on podcasting, and nothing else. You don't need any ποδκάστερ, επικεντρώνοντας στο podcasting και τίποτα άλλο. Δεν χρειάζεστε επέκταση για να ξεκινήσετε
plugin to get you started on your podcasting&nbsp;journey. το podcasting&nbsp;σας.
This allows optimizing the processes specific to podcasting: ranging from the Αυτό επιτρέπει τη βελτιστοποίηση των διαδικασιών που σχετίζονται με το podcasting: από την
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 Τέλος, ανάλογα με τις ανάγκες σας, το Wordpress και το Castopod μπορούν ακόμα και να
side as they share the same requirements! υπάρχουν δίπλα-δίπλα καθώς έχουν τις ίδιες απαιτήσεις!
### Castopod vs Funkwhale ### Castopod έναντι Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as Το Funkwhale είναι ένα αυτο-φιλοξενούμενο, μοντέρνο δωρεάν και ανοιχτού κώδικα σέρβερ μουσικής.
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing Όπως το Castopod, το Funkwhale βρίσκεται στο Fediverse, ένα αποκεντρωμένο κοινωνικό δίκτυο που
interoperability between the two. επιτρέπει την αλληλεπίδραση μεταξύ των δύο.
Funkwhale was initially built around music. And later on, as the project Το Funkwhale χτίστηκε αρχικά γύρω από τη μουσική. Αργότερα, καθώς εξελίχθηκε το έργο, προστέθηκε
evolved, the ability to host podcasts was introduced. η δυνατότητα φιλοξενίας podcasts.
Unlike Funkwhale, Castopod has been designed and built around podcasting Διαφορετικά από το Funkwhale, το Castopod έχει σχεδιαστεί και χτιστεί αποκλειστικά γύρω από
exclusively. This allows easier implementation for features related to the το podcasting. Αυτό δίνει τη δυνατότητα για ευκολότερη υλοποίηση χαρακτηριστικών που σχετίζονται με
podcasting ecosystem, such as the podcasting 2.0 features (transcripts, το περιβάλλον του podcasting, όπως τα χαρακτηριστικά του podcasting 2.0 (μεταγραφές, κεφάλαια, τοποθεσίες,
chapters, locations, persons, …). πρόσωπα κ.λπ.).
So, you should probably use Funkwhale if you want to host your music, and use Λοιπόν, θα πρέπει πιθανώς να χρησιμοποιείτε το Funkwhale αν θέλετε να φιλοξενήσετε τη μουσική σας
Castopod if you want to host your podcasts. και να χρησιμοποιείτε το Castopod αν θέλετε να φιλοξενήσετε τα podcasts σας.
### Castopod vs other podcast hosts ### Castopod έναντι άλλων παρόχων φιλοξενίας podcasts
There are many solutions for you to host your podcasts, some of which are really Υπάρχουν πολλές λύσεις για τη φιλοξενία των podcasts σας, μερικές από αυτές είναι πραγματικά
great and [a lot of them](https://podcastindex.org/apps) are jumping into the αξιόλογες και [πολλές](https://podcastindex.org/apps) με παίρνουνε στο τρένο του Podcasting&nbsp;2.0
Podcasting 2.0 wagon just like Castopod! ακριβώς όπως το 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 - Το Castopod μπορεί να είναι αυτο-φιλοξενούμενο και είναι η μόνη λύση που σας επιτρέπει
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 - Το Castopod είναι η μόνη λύση που ενσωματώνει ήδη κοινωνικό δίκτυο που βασίζεται στο ActivityPub
social network with ActivityPub as well as many of the podcasting 2.0 και τα χαρακτηριστικά του "Podcasting 2.0", μειώνοντας την κατάσταση της εγκατάλειψης&nbsp;των δύο.
features, hoping to bridge the gap between the two.
## Contributing ## Συνεισφορές
Love Castopod and would like to help? Take a look at the following documentation Αγαπάτε το Castopod και θέλατε να βοηθήσετε; Ρίξτε μια
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

View File

@ -1,4 +1,4 @@
{ {
"label": "Contributing", "label": "Contribución",
"position": 3 "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 ¿Te encanta Castopod y quieres ayudar? ¡Muchas gracias, hay algo para hacer para todos!
everybody!
Please take a moment to review this document in order to make the contribution 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.
process easy and effective for everyone involved.
Following these guidelines helps to communicate that you respect the time of the 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.
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 Nota
**Any** contribution made on a repository other than Cualquier contribución realizada en un repositorio que no sea [el repositorio original](https://code.castopod.org/adaures/castopod) no será aceptada.
[the original repository](https://code.castopod.org/adaures/castopod) will not
be accepted.
::: :::
## Using the issue tracker ## Uso del rastreador de problemas
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the 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).
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
## ⚠️ Security issues and vulnerabilities ## ⚠️ Problemas de seguridad y vulnerabilidades
If you encounter any security issue or vulnerability in the Castopod source, 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).
please contact us directly by email at
[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. 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!
Good bug reports are extremely helpful - thank you!
Guidelines for bug reports: Pautas para los informes de errores:
1. **Use the issue search** &mdash; check if the issue has already been 1. **Utiliza la búsqueda de problemas** &mdash; comprueba si el problema ya ha sido notificado.
reported.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the 2. **Verifica si el problema ha sido solucionado** &mdash; intenta reproducirlo utilizando la última versión de la rama `main` en el repositorio.
latest `main` branch in the repository.
3. **Isolate the problem** &mdash; ideally create a 3. **Aisla el problema** &mdash; idealmente, crea un [caso de prueba reducido](https://css-tricks.com/reduced-test-cases/) y un ejemplo en vivo.
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
A good bug report shouldn't leave others needing to chase you up for more 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.
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) > 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.
> have been created for this project. You may use them to help you follow those
> guidelines.
## Feature requests ## Solicitudes de funciones
Feature requests are welcome. But take a moment to find out whether your idea 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.
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 ## Solicitudes de extracción
Good pull requests - patches, improvements, new features - are a fantastic help. 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.
They should remain focused in scope and avoid containing unrelated commits.
**Please ask first** before embarking on any significant pull request (e.g. **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.
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, 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).
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 Seguir el siguiente proceso es la mejor manera de que tu trabajo se incluya en el proyecto:
the project:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the 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:
project, clone your fork, and configure the remotes:
```bash ```bash
# Clone your fork of the repo into the current directory # Clona tu bifurcación del repositorio en el directorio actual
git clone https://code.castopod.org/<your-username>/castopod.git 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 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 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 ```bash
git checkout main git checkout main
git pull upstream main git pull upstream main
``` ```
3. Create a new topic branch (off the `main` branch) to contain your feature, 3. Crea una nueva rama temática (desde la rama `main`) para contener tu función, cambio o corrección:
change, or fix:
```bash ```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 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.
[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: 5. Fusiona (o rebasea) localmente la rama de desarrollo de `upstream` en tu rama temática:
```bash ```bash
git pull [--rebase] upstream main 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 ```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) 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.
with a clear title and description.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to **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).
license your work under the terms of the
[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 - 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)
unless it's an architectural change, a large feature, etc. If it is, then at - 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.
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. 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 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). [CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A 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.
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
> You don't need any prior knowledge of Docker to follow the next steps. > 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.
> However, if you wish to use your own environment, feel free to do so!
## 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 ```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 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é:
the database and use redis as a cache handler:
```ini ```ini
CI_ENVIRONMENT="development" 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" vite.environment="development"
# By default, this is set to true in the app config. # Por defecto, esto se establece en true en la configuración de la aplicación.
# For development, this must be set to false as it is # Para desarrollo, debe establecerse en false ya que está en un entorno local
# on a local environment
app.forceGlobalSecureRequests=false app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/" app.baseURL="http://localhost:8080/"
@ -56,368 +51,94 @@ to help you kickstart your contribution.
cache.handler="redis" cache.handler="redis"
cache.redis.host = "redis" cache.redis.host = "redis"
# You may not want to use redis as your cache handler # Es posible que no desees utilizar redis como controlador de caché
# Comment/remove the two lines above and uncomment # Comenta/elimina las dos líneas anteriores y descomenta
# the next line for file caching. # la siguiente línea para el almacenamiento en caché de archivos.
#cache.handler="file" #cache.handler="file"
``` ```
> _NB._ You can tweak your environment by setting more environment variables > _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.
> 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 3. (para Docker Desktop) Agrega el repositorio que has clonado a "Settings" > "Resources" > "File Sharing" de Docker Desktop.
`Settings` > `Resources` > `File Sharing`
### 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/` 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! 🪄
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 1. Instala la extensión de VSCode [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Open in container` 2. `Ctrl/Cmd + Shift + P` > `Open in container`
> The VSCode window will reload inside the dev container. Expect several > 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.
> minutes during first load as it is building all necessary services.
**Note**: The dev container will start by running Castopod's php server. **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:
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
```bash ```bash
# run Vite dev server # ejecuta el servidor de desarrollo de Vite
npm run dev npm run dev
``` ```
If there is any issue with the php server not running, you can restart them Si hay algún problema con el servidor php que no se está ejecutando, puedes reiniciarlos utilizando los siguientes comandos:
using the following commands:
```bash ```bash
# run Castopod server # ejecuta el servidor de Castopod
php spark serve - 0.0.0.0 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 Ahora estás **dentro del contenedor de desarrollo**. Puedes usar la consola de VSCode (`Terminal` > `New Terminal`) para ejecutar cualquier comando:
(`Terminal` > `New Terminal`) to run any command:
```bash ```bash
# PHP is installed # PHP está instalado
php -v php -v
# Composer is installed # Composer está instalado
composer -V composer -V
# npm is installed # npm está instalado
npm -v npm -v
# git is installed # git está instalado
git version git version
``` ```
For more info, see Para obtener más información, consulta la documentación de [VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers).
[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 ¡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.
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
To see your changes, go to: Para ver tus cambios, ve a:
- `http://localhost:8080/` for the Castopod app - `http://localhost:8080/` para la aplicación de Castopod
- `http://localhost:8888/` for the phpmyadmin interface: - `http://localhost:8888/` para la interfaz de phpMyAdmin:
- username: **castopod** - nombre de usuario: **castopod**
- password: **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 ```bash
# starts all services declared in docker-compose.yml file # inicia todos los servicios declarados en el archivo docker-compose.yml
# -d option starts the containers in the background # la opción -d inicia los contenedores en segundo plano
docker-compose up -d 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 docker-compose ps
# Alternatively, you can check all docker processes # Alternativamente, puedes verificar todos los procesos de Docker
docker ps -a docker ps -a
``` ```
> The `docker-compose up -d` command will boot 4 containers in the > El comando `docker-compose up -d` iniciará 4 contenedores en segundo plano:
> background:
> >
> - `castopod_app`: a php based container with Castopod requirements > - `castopod_app`: un contenedor basado en php con los requisitos de Castopod instalados
> installed > - `castopod_redis`: una base de datos [redis](https://redis.io/) para manejar consultas
> - `castopod_redis`: a [redis](https://redis.io/) database to handle queries > y almacenamiento en caché de páginas
> and pages caching > - `cast
> - `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": "Comenzando",
"position": 2 "position": 2
} }

View File

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

View File

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

View File

@ -5,221 +5,121 @@ sidebarDepth: 3
# ¿Cómo instalar Castopod? # ¿Cómo instalar Castopod?
Castopod está pensado para ser fácil de instalar. Ya sea usando un alojamiento 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.
dedicado o compartido, puedes instalarlo en la mayoría de servidores web
compatibles con PHP-MySQL.
::: tip Nota ::: tip Nota
¡Hemos publicado imágenes oficiales de Docker para Castopod! ¡Hemos publicado imágenes oficiales de Docker para Castopod!
Si prefieres usar Docker, puedes saltarte esto e ir directamente a la Si prefieres utilizar Docker, puedes omitir esta parte e ir directamente a la [documentación de Docker](./docker.md) para Castopod.
[documentación sobre docker](./docker.md) para Castopod.
::: :::
## Requisitos ## Requisitos previos
- PHP v8.1 only - PHP v8.1 solamente
- MySQL versión 5.7 o superior o MariaDB versión 10.2 o superior - Versión de MySQL 5.7 o superior o versión de MariaDB 10.2 o superior
- Soporte HTTPS - Soporte de HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's - Un [reloj sincronizado con NTP](https://wiki.debian.org/NTP) para validar las solicitudes entrantes de federación
incoming requests
### 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) - [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php) - [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php) - [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) con librerias - [gd](https://www.php.net/manual/en/image.installation.php) con bibliotecas **JPEG**, **PNG** y **WEBP**.
**JPEG**, **PNG** y **WEBP**. - [exif](https://www.php.net/manual/fr/exif.installation.php)
- [exif](https://www.php.net/manual/en/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) - json (activado por defecto - no lo desactives)
- xml (habilitada por defecto - no la desactives) - xml (activado por defecto - no lo desactives)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) - [mysqlnd](https://www.php.net/manual/fr/mysqlnd.install.php)
### Base de datos compatible con MySQL ### 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. 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.
No funcionará por ejemplo con la version previa MySQL v5.6, ya que su vida útil
terminó el 5 de febrero de 2021.
::: :::
Necesitarás la dirección/nombre del servidor (hostname), el nombre de la base de 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.
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.
#### Privilegios #### Permisos de acceso
El usuario debe tener al menos estos privilegios en la base de datos para que 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`.
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 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:
superior si desea generar recorte de vídeos. Se debe instalar las siguientes
extensiones:
- Librería **FreeType 2** para - Biblioteca **FreeType 2** para [gd](https://www.php.net/manual/en/image.installation.php).
[gd](https://www.php.net/manual/en/image.installation.php).
### (Opcional) Otras recomendaciones ### (Opcional) Otras recomendaciones
- Redis para mejores rendimientos de caché. - Redis para un mejor rendimiento del caché.
- CDN para almacenamiento en caché de archivos estáticos y mejores rendimientos. - CDN para la caché de archivos estáticos y un mejor rendimiento.
- Pasarela de correo para recuperación de contraseñas olvidadas. - Pasarela de correo electrónico para contraseñas olvidadas.
## Instrucciones de instalación ## Instrucciones de instalación
### Pre-requisitos ### Requisitos previos
0. Consigue un servidor web que cuente con todos los [requisitos](#requirements) 0. Obtén un servidor web con [los requisitos previos](#requisitos) instalados.
recomendados. 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)).
1. Crea una base de datos MySQL para Castopod con un usuario que tenga acceso y 2. Activa HTTPS en tu dominio con un _certificado SSL_.
privilegios de modificación (para más información, ver 3. Descarga y descomprime el último [paquete de Castopod](https://castopod.org/) en el servidor web si aún no lo has hecho.
[base de datos compatible con MySQL](#mysql-compatible-database)). - ⚠️ Haz que la raíz del documento del servidor web apunte a la subcarpeta `public/` de la carpeta `castopod`.
2. Activa HTTPS en tu dominio web mediante un _certificado SSL_. 4. Agrega **tareas programadas** a tu servidor web para varios procesos en segundo plano (reemplaza las rutas según corresponda):
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):
```bash ```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 **Nota** - Si no añades esta tarea programada, las siguientes características de Castopod no funcionarán:
will not work:
- Importing a podcast from an existing RSS feed - Importar un podcast desde un feed RSS existente
- Broadcasting social activities to your followers in the fediverse - Transmitir actividades sociales a tus seguidores en el federado
- Broadcasting episodes to open hubs using - Transmitir episodios a hubs abiertos utilizando [WebSub](https://en.wikipedia.org/wiki/WebSub)
[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)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (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 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.
esta dirección: `https://tu_nombre_de_dominio.com/cp-install` 2. Sigue las instrucciones que se muestran.
2. Sigue las instrucciones en pantalla. 3. ¡Comienza a hacer podcast!
3. ¡Empieza a hacer podcasting!
::: info Nota :::info Nota
El script de instalación crea un archivo `.env` en la raíz de castopod. If you 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`.
cannot go through the install wizard, you can create and edit the `.env` file
manually based on the `.env.example` file.
::: :::
### 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 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, ...)
características funcionen correctamente (por ejemplo, recuperar su contraseña
olvidada, enviando instrucciones a los suscriptores premium, …)
Puedes añadir tu configuración de correo electrónico en el archivo `.env` de tu Puedes agregar la configuración de correo electrónico en el archivo `.env` de tu instancia de la siguiente manera:
instancia así:
```ini ```ini
# […] # […]
email.fromEmail="your_email_address" email.fromEmail="tu_dirección_de_correo_electrónico"
email.SMTPHost="your_smtp_host" email.SMTPHost="tu_host_smtp"
email.SMTPUser="your_smtp_user" email.SMTPUser="tu_usuario_smtp"
email.SMTPPass="your_smtp_password" email.SMTPPass="tu_contraseña_smtp"
``` ```
#### Opciones de configuración de email
| Nombre de la variable | Tipo | Predeterminado | #### Opciones de configuración de correo electrónico
| --------------------- | -------------------- | -------------- |
| **`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 | Nombre de variable | Tipo | Valor por defecto |
| ----------------- | -------------------- | ----------------- |
By default, files are saved to the `public/media` folder using the file system. | **`fromEmail`** | string | `undefined` |
If you need to relocate the `media` folder to a different location, you can | **`fromName`** | string | `"Castopod"` |
specify it in your `.env` file as shown below: | **`SMTPHost
```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>

View File

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

View File

@ -3,111 +3,96 @@ title: Actualización
sidebarDepth: 3 sidebarDepth: 3
--- ---
# ¿Cómo actualizar Castopod? # ¿Cómo instalar Castopod?
Después de instalar Castopod, es posible que quieras actualizar tu instancia a 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 ⚡.
la última versión para disfrutar de las últimas características ✨, 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 0. ⚠️ Antes de actualizar, te recomendamos encarecidamente que hagas una copia de seguridad de tus archivos de Castopod y de la base de datos.
archivos de Castopod y base de datos.
- cf. - ver
[¿Debería hacer una copia de seguridad antes de actualizar?](#should-i-make-a-backup-before-updating) [¿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 1. Ve a la
[lanzamientos](https://code.castopod.org/adaures/castopod/-/releases) y vea [página de lanzamientos](https://code.castopod.org/adaures/castopod/-/releases) y
si su instancia está actualizada con la última versión de Castopod verifica si tu instancia está actualizada con la última versión de Castopod.
- cf. - ver
[¿Dónde puedo encontrar mi versión de Castopod?](#where-can-i-find-my-castopod-version) [¿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 2. Descarga el paquete de la última versión llamado `Paquete de Castopod`, puedes elegir entre los archivos `zip` o `tar.gz`
elegir entre los archivos `zip` o `tar.gz`
- ⚠️ Asegúrate de descargar el paquete de Castopod y **NO** el código fuente - ⚠️ 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 - Ten en cuenta que también puedes descargar el último paquete desde
[castopod.org](https://castopod.org/) [castopod.org](https://castopod.org/)
3. En tu servidor: 3. En tu servidor:
- Eliminar todos los archivos excepto `.env` y la carpeta `public/media` - Elimina todos los archivos excepto `.env` y `public/media`
- Copie los nuevos archivos del paquete descargado en su servidor - 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 Es posible que debas restablecer los permisos de archivo, como se hizo durante el proceso de instalación. Consulta
proceso de instalación. Compruebe [Consideraciones de seguridad](./security.md).
[preocupaciones de seguridad](./security.md).
::: :::
4. Actualice su esquema de base de datos desde su `Administrador de Castopod` > 4. Actualiza el esquema de tu base de datos desde la página `Castopod Admin` > `About` o ejecutando:
`Acerca de` página o ejecutando:
```bash ```bash
php spark castopod:database-update 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` `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 Es posible que las versiones vengan con instrucciones de actualización adicionales (ver
la página de [página de notas de versión](https://code.castopod.org/adaures/castopod/-/releases)).
[lanzamientos](https://code.castopod.org/adaures/castopod/-/releases)).
- cf. - ver
[No he actualizado mi instancia en mucho tiempo ¿Qué debo hacer?](#no-he-actualizado-mi-instancia-en-mucho-tiempo-¿qué-debo-hacer) [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 Ve a tu panel de administración de Castopod, la versión se muestra en la parte inferior izquierda.
inferior izquierda.
Alternativamente, puedes encontrar la versión en el archivo También puedes encontrar la versión en la aplicación
`app > Config > Constants.php`. `> 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. ¡No hay problema! Simplemente obtén la última versión según se describe
Simplemente cuando vaya a través de las instrucciones de lanzamiento (4), arriba. Cuando ejecutes las instrucciones de actualización (paso 4), ejecútalas
realice la actualización secuencialmente, desde el más antiguo hasta el más secuencialmente, desde la más antigua hasta la más reciente.
reciente.
> Puede que quieras hacer una copia de seguridad de tu instancia dependiendo del > Deberías hacer una copia de seguridad de tu instancia según la fecha de tu última actualización de Castopod.
> tiempo que no hayas actualizado Castopod.
Por ejemplo, si estás en `v1.0.0-alpha.42` y te gustaría actualizar a Por ejemplo, si estás en `v1.0.0-alpha.42` y deseas actualizar a
`v1.0.0-beta.1`: `v1.0.0-beta.1`:
0. (altamente recomendado) Haga una copia de seguridad de sus archivos y base de 0. (altamente recomendado) Haz una copia de seguridad de tus archivos y base de datos.
datos.
1. Descarga la última versión, sobrescribe tus archivos manteniendo `.env` y 1. Descarga la última versión, sobrescribe tus archivos y conserva `.env` y `public/media`.
`public/media`.
2. Repase las instrucciones de actualización de cada versión secuencialmente (de 2. Realiza las instrucciones de actualización una por una (desde la más antigua hasta la más reciente).
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`.
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? ### ¿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 En general, te recomendamos hacer copias de seguridad regularmente de tus archivos de Castopod y de tu base de datos para evitar perderlo todo...
archivos de Castopod y base de datos para evitar que pierdas todo…

View File

@ -2,306 +2,189 @@
sidebarDepth: 2 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] [![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 Castopod es una plataforma de alojamiento gratuita y de código abierto diseñada para los podcasters que quieren interactuar con su público.
hecha para podcasters que quieren involucrar e interactuar más con su audiencia.
Castopod es fácil de instalar y se ha desarrollado sobre Castopod es fácil de instalar y ha sido diseñado con [CodeIgniter4](https://codeigniter.com/), un framework PHP potente y liviano.
[CodeIgniter4](https://codeigniter.com/), un potente y muy ligero framework PHP.
<div class="flex items-center"> <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> </div>
## Características ## Características
- 🌱 &nbsp;Gratis & de código abierto (licencia AGPL v3). - 🌱 &nbsp;Libre, gratuito y de código abierto (Licencia AGPL v3)
- 🔐 &nbsp;Centrado en la soberanía de los datos: tu contenido, tu audiencia, y - 🔐 &nbsp;Enfocado en la soberanía de los datos: tu contenido, tu audiencia y tus estadísticas te pertenecen únicamente a ti
tus estadísticas te pertenecen a ti y solo a ti. - 🪄&nbsp;Funcionalidades de Podcasting 2.0: GUID, cerradura, transcripciones, financiación, capítulos, geolocalización, colaboradores, clips de audio, ...
- 🪄 &nbsp;Funciones de Podcasting 2.0: GUID (interfaz gráfica de usuario), - 💬 &nbsp;Red social integrada:
protección y bloqueo del podcast, transcripciones, monetización, episodios, - 🚀 &nbsp;Castopod forma parte de Fédivers, una red social descentralizada
geo-localización, personas, fragmentos de audio, … - ❤️ &nbsp;Crea publicaciones, comparte, favorita y comenta episodios
- 💬 &nbsp;Integración con redes sociales: - 📈 &nbsp;Estadísticas integradas:
- 🚀 &nbsp;Castopod es parte del Fediverso, una red social descentralizada - ⚖️ &nbsp;Cumple con GDPR / CCPA / LGPD
- ❤️ &nbsp;Se puede crear mensajes, compartir, agregar a favoritos y comentar - 🪙&nbsp;Medición de audiencia IABv2
en episodios - 🏡 &nbsp;Estadísticas integradas, sin intermediarios externos
- 📈 &nbsp;Análisis estadísticos integrados: - 📢 &nbsp;Herramientas de marketing integradas:
- ⚖️ &nbsp;Compatible con GDPR / CCPA / LGPD - ✅ &nbsp;Preparado para SEO (metatags de gráfico abierto, JSON-LD...)
- 🪙 &nbsp;Medida de audiencia con el estándar IABv2 - 📱 &nbsp;PWA: instala como aplicación autónoma
- 🏡 &nbsp;Estadísticas sin terceras partes involucradas - 🎨 &nbsp;Personaliza los colores del tema
- 📢 &nbsp;Herramientas de marketing incorporadas: - 🎬 &nbsp;Genera clips de vídeo listos para compartir desde episodios
- ✅ &nbsp;Listo para SEO (meta-etiquetas de open-graph, JSON-LD, …) - 🔉 &nbsp;Genera clips de audio
- 📱 &nbsp;PWA: instalable como una aplicación independiente - ▶️ &nbsp;Integra tus episodios en cualquier sitio web
- 🎨 &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;Monetización: - 💸 &nbsp;Monetización:
- 🔗 &nbsp;Enlaces de financiación - 🔗 &nbsp;Enlaces de financiación
- 📲 &nbsp;Anuncios publicitarios del tipo click-para-escuchar - 📲 &nbsp;Publicidad "escucha-y-clica"
- 🤝 &nbsp;value4value / WebMonetization (criptomonedas para creadores de - 🤝 &nbsp;Value4value / WebMonetization
contenido). - 💎 &nbsp;Podcasts premium
- 💎 &nbsp;Premium podcasts - 📡&nbsp;Publica tus episodios en todas partes con RSS:
- 📡 &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;En todos los directorios y aplicaciones: Podcast Index, Apple - ⚡&nbsp;Difunde tus episodios instantáneamente con WebSub
Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, … - 📥 &nbsp;Importa tu podcast: mueve tu podcast existente a Castopod
- ⚡ &nbsp;Emite tus episodios al instante con WebSub. - 📤 &nbsp;Mueve tu podcast a otro proveedor de alojamiento
- 📥 &nbsp;Importación de podcasts: mueve tu podcast existente en otro servicio - 🔀 &nbsp;Multiinquilino: aloja tantos podcasts como quieras
a tu servidor Castopod. - 👥 &nbsp;Multiusuario: agrega colaboradores y define sus roles
- 📤 &nbsp;Mueve tu podcast fuera de Castopod. - 🌎 &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)!
- 🔀 &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)!
## Motivación ¿Por qué Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast 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.
as an RSS file, publish it on the web and have it shared everywhere 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 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.
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
With podcasting becoming more widely used, some companies are trying to shift it Con el aumento del uso de los podcasts, algunas empresas están tratando de convertirlo en un medio más controlado y centralizado.
towards a more controlled and centralized medium.
Castopod was created in an effort to provide an open and sustainable alternative 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.
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 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/).
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
## Comparación con otras soluciones ## Comparación con otras soluciones
We believe that a solution is not necessarily right for everyone, it highly 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.
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 vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the 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.
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 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.
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 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.
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 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.
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 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.
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 Finalmente, dependiendo de tus necesidades, ¡Wordpress y Castopod incluso pueden vivir juntos, ya que tienen los mismos requisitos!
side as they share the same requirements!
### Castopod vs. Funkwhale ### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as 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.
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 Funkwhale se construyó inicialmente en torno a la música. Y más adelante, el proyecto se amplió para permitir el alojamiento de podcasts.
evolved, the ability to host podcasts was introduced.
Unlike Funkwhale, Castopod has been designed and built around podcasting 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, ...).
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 Por lo tanto, probablemente deberías usar Funkwhale si quieres alojar tu música, y usar Castopod si quieres alojar tus&nbsp;podcasts.
Castopod if you want to host your 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 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!
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 Cada una de estas soluciones es diferente entre sí, por lo que puedes compararlas con la [lista de funcionalidades](#características).
[list of features](#features).
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 - 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.
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 es la única solución que hasta el momento integra tanto una red - 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.
social descentralizada con ActivityPub así como muchas de las características
del podcasting 2.0, con la esperanza de cerrar la brecha entre ambos.
## Cómo colaborar ## Contribuir
Love Castopod and would like to help? Take a look at the following documentation ¿Te gusta Castopod y te gustaría ayudar? Echa un vistazo a la siguiente documentación para empezar.
to get you&nbsp;started.
### Código de conducta ### Código de conducta
Castopod has adopted a Code of Conduct that we expect project participants to 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.
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.
### Guía para colaborar ### Guía de contribución
Read our [contributing guide](./contributing/guidelines.md) to learn about our 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.
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## Colaboradores ✨ ## Contribuidores ✨
Thanks goes to these wonderful people Agradecimientos a estas maravillosas personas ([leyenda de emoticonos](https://allcontributors.org/docs/es/emoji-key)):
([emoji key](https://allcontributors.org/docs/en/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 --> <!-- prettier-ignore-start -->
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
<table> <table>
<tbody> <tbody><tr>
<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>
<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> <sub><b>Yassine Doghri</b></sub></a><br>
<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> <a href="#code-yassinedoghri" title="Código">💻</a>
<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> <a href="#bug-yassinedoghri" title="Informes de errores">🐛</a>
<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> <a href="#userTesting-yassinedoghri" title="Pruebas de usuario">📓</a>
<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> <a href="#ideas-yassinedoghri" title="Ideas">🤔</a>
<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> <a href="https://translate.castopod.org" title="Traducción">🌍</a>
<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> <a href="#talk-yassinedoghri" title="Charlas">🗣</a></td>
</tr> <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>
<tr> <sub><b>Benjamin Bellamy</b></sub></a><br>
<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> <a href="#good-ideas-benjamin" title="Ideas">🤔</a>
<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> <a href="#design-benjamin" title="Diseño">🎨</a>
<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> <a href="https://translate.castopod.org" title="Traducción">🌍</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://castopod.org/assets/images/castopod-avatar.jpg"><img src="https://castopod.org/assets/images/castopod-avatar.jpg" width="100" alt="Ola Hneini"/><br>
<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> <sub><b>Ola Hneini</b></sub></a><br>
<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> <a href="#ideas-ola-hneini" title="Ideas">🤔</a>
<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> <a href="https://translate.castopod.org" title="Traducción">🌍</a></td>
</tr> <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>
<tr> <sub><b>Romain de Laage</b></sub></a><br>
<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> <a href="#ideas-romain-de-laage" title="Ideas">🤔</a>
<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> <a href="https://translate.castopod.org" title="Traducción">🌍</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://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg" width="100" alt="Lyonel Bernard"/><br>
<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> <sub><b>Lyonel Bernard</b></sub></a><br>
<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> <a href="#ideas-lyonel" title="Ideas">🤔</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://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon" width="100" alt="Christopher Lagonick-Weitzel"/><br>
<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> <sub><b>Christopher Lagonick-Weitzel</b></sub></a><br>
</tr> <a href="#ideas-ctlw83" title="Ideas">🤔</a></td>
<tr> <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>
<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> <sub><b>Ernesto Acosta</b></sub></a><br>
<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> <a href="#ideas-ernestoacosta" title="Ideas">🤔</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> </tr>
<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> </tbody></table>
<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 --> <!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the Este proyecto sigue la especificación de [all-contributors](https://github.com/all-contributors/all-contributors). Se aceptan contribuciones de cualquier tipo.
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## Contacto ## 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 - [Discord](https://castopod.org/discord) (para chatear en tiempo real con los desarrolladores y la comunidad)
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)
- [Seguimiento de incidencias](https://code.castopod.org/adaures/castopod/-/issues)
(para informar de errores y solicitar nuevas funcionalidades)
Alternatively, you can follow us on social media platforms to get news about Alternativamente, puedes seguirnos en las redes sociales para obtener noticias sobre Castopod:
Castopod:
- [podlibre.social](https://podlibre.social/@castopod) (instancia de Mastodon) - [podlibre.social](https://podlibre.social/@Castopod) (Instancia Mastodon)
- [[Twitter](https://twitter.com/castopod)](https://twitter.com/castopod) - [Twitter](https://twitter.com/castopod)
- [[LinkedIn](https://linkedin.com/company/ad-aures)](https://linkedin.com/company/castopod) - [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook (próximamente?)](https://www.facebook.com/castopod) - [Facebook](https://www.facebook.com/castopod)
## Patrocinadores ## Patrocinadores
The ongoing development of Castopod is made possible with the support of its 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).
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"> <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://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://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="Logo de NLnet" class="h-16" /></a>
</div> </div>
## Licencia ## 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/). Derechos de autor © 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
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": "Contribuire",
"position": 3 "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 Ami Castopod e vuoi aiutare? Grazie mille, c'è qualcosa da fare per tutti!
everybody!
Please take a moment to review this document in order to make the contribution 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.
process easy and effective for everyone involved.
Following these guidelines helps to communicate that you respect the time of the 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à.
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 Nota
**Any** contribution made on a repository other than **Qualsiasi** contributo effettuato su un repository diverso dal
[the original repository](https://code.castopod.org/adaures/castopod) will not [repository originale](https://code.castopod.org/adaures/castopod) non verrà
be accepted. accettato.
::: :::
## Using the issue tracker ## Utilizzare lo strumento di tracciamento problemi
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the Lo [strumento di tracciamento problemi](https://code.castopod.org/adaures/castopod/-/issues) è il
preferred channel for [bug reports](#bug-reports), canale preferito per [segnalare bug](#segnalare-bug),
[features requests](#feature-requests) and [richieste di funzionalità](#richieste-di-funzionalit) e
[submitting pull requests](#pull-requests). [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, Se incontri qualsiasi problema di sicurezza o vulnerabilità nel codice sorgente di Castopod,
please contact us directly by email at per favore contattaci direttamente via email a
[security@castopod.org](mailto:security@castopod.org) [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. Un bug è un _problema dimostrabile_ causato dal codice nel repository. Le segnalazioni di bug ben fatte sono estremamente utili: grazie!
Good bug reports are extremely helpful - thank you!
Guidelines for bug reports: Linee guida per le segnalazioni di bug:
1. **Use the issue search** &mdash; check if the issue has already been 1. **Utilizza la ricerca delle issue** controlla se il problema è già stato segnalato.
reported.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the 2. **Controlla se il problema è stato risolto** prova a riprodurlo utilizzando il branch `main` più recente nel repository.
latest `main` branch in the repository.
3. **Isolate the problem** &mdash; ideally create a 3. **Isola il problema** idealmente crea un
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live [ridotto caso di test](https://css-tricks.com/reduced-test-cases/) ed un esempio pratico.
example.
A good bug report shouldn't leave others needing to chase you up for more 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.
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) > 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.
> have been created for this project. You may use them to help you follow those
> guidelines.
## Feature requests ## Richieste di funzionalità
Feature requests are welcome. But take a moment to find out whether your idea 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.
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 ## Richieste pull
Good pull requests - patches, improvements, new features - are a fantastic help. 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.
They should remain focused in scope and avoid containing unrelated commits.
**Please ask first** before embarking on any significant pull request (e.g. **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.
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, 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).
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 Attenersi al seguente processo è il modo migliore per far includere il proprio lavoro nel progetto:
the project:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the 1. [Forka](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) il
project, clone your fork, and configure the remotes: progetto, clona il tuo fork e configura i remoti:
```bash ```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 git clone https://code.castopod.org/<your-username>/castopod.git
# Navigate to the newly cloned directory # Sposta nella directory appena clonata
cd castopod 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 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 ```bash
git checkout main git checkout main
git pull upstream main git pull upstream main
``` ```
3. Create a new topic branch (off the `main` branch) to contain your feature, 3. Crea un nuovo branch di argomento (dal ramo `main`) per contenere la tua funzionalità, modifica o correzione:
change, or fix:
```bash ```bash
git checkout -b <topic-branch-name> git checkout -b <nome-branch-argomento>
``` ```
4. Commit your changes in logical chunks. Please adhere to these 4. Fai il commit delle tue modifiche in blocchi logici. Segui queste
[git commit message guidelines](https://conventionalcommits.org/) or your [linee guida per i messaggi di commit di Git](https://conventionalcommits.org/) o il tuo
code is unlikely be merged into the main project. Use Git's codice difficilmente verrà integrato nel progetto principale. Utilizza la
[interactive rebase](https://help.github.com/articles/about-git-rebase/) funzionalità di [ribase interattivo di Git](https://help.github.com/articles/about-git-rebase/) per sistemare i tuoi commit prima di renderli pubblici.
feature to tidy up your commits before making them public.
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 ```bash
git pull [--rebase] upstream main 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 ```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) 7. [Apri una richiesta pull](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. con un titolo e una descrizione chiari.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to **IMPORTANTE**: Inviando una patch, accetti di concedere ai proprietari del progetto il
license your work under the terms of the diritto di licenziare il tuo lavoro secondo i termini della
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE). [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 - 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).
unless it's an architectural change, a large feature, etc. If it is, then at - 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.
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. 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 sidebarDepth: 3
--- ---
# Setup your development environment # Configurazione dell'ambiente di sviluppo
## Introduction ## Introduzione
Castopod is a web app based on the `php` framework Castopod è un'app web basata sul framework `php` [CodeIgniter 4](https://codeigniter.com).
[CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A 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.
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
> You don't need any prior knowledge of Docker to follow the next steps. > Non è necessaria alcuna conoscenza precedente di Docker per seguire i passaggi successivi. Tuttavia, se desideri utilizzare il tuo ambiente, sentiti libero di farlo!
> However, if you wish to use your own environment, feel free to do so!
## 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 ```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 2. Crea un file `.env` con la configurazione minima richiesta per connettere l'app al database e utilizzare redis come gestore della cache:
the database and use redis as a cache handler:
```ini ```ini
CI_ENVIRONMENT="development" 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" vite.environment="development"
# By default, this is set to true in the app config. # Di default, questo è impostato su true nella configurazione dell'app.
# For development, this must be set to false as it is # Per lo sviluppo, deve essere impostato su false in quanto è
# on a local environment # in un ambiente locale
app.forceGlobalSecureRequests=false app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/" app.baseURL="http://localhost:8080/"
@ -56,368 +51,90 @@ to help you kickstart your contribution.
cache.handler="redis" cache.handler="redis"
cache.redis.host = "redis" cache.redis.host = "redis"
# You may not want to use redis as your cache handler # Potresti non voler utilizzare redis come gestore della cache
# Comment/remove the two lines above and uncomment # Commenta/rimuovi le due righe sopra e decommenta
# the next line for file caching. # la riga successiva per utilizzare la memorizzazione nella cache dei file.
#cache.handler="file" #cache.handler="file"
``` ```
> _NB._ You can tweak your environment by setting more environment variables > _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.
> 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 3. (per Docker Desktop) Aggiungi il repository che hai clonato a "File Sharing" in "Impostazioni" di Docker Desktop
`Settings` > `Resources` > `File Sharing`
### 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/` 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! 🪄
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 1. Installa l'estensione di VSCode [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) 2. `Ctrl/Cmd + Maiusc + P` > `Apri nel contenitore`
2. `Ctrl/Cmd + Shift + P` > `Open in container`
> The VSCode window will reload inside the dev container. Expect several > 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.
> minutes during first load as it is building all necessary services.
**Note**: The dev container will start by running Castopod's php server. **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:
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
```bash ```bash
# run Vite dev server # avvia il server Vite dev
npm run dev npm run dev
``` ```
If there is any issue with the php server not running, you can restart them Se si riscontrano problemi con il server php che non si avvia, è possibile riavviarlo utilizzando i seguenti comandi:
using the following commands:
```bash ```bash
# run Castopod server # avvia il server Castopod
php spark serve - 0.0.0.0 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 Ora sei **all'interno del contenitore di sviluppo**, puoi utilizzare la console di VSCode (`Terminale` > `Nuovo terminale`) per eseguire qualsiasi comando:
(`Terminal` > `New Terminal`) to run any command:
```bash ```bash
# PHP is installed # PHP è installato
php -v php -v
# Composer is installed # Composer è installato
composer -V composer -V
# npm is installed # npm è installato
npm -v npm -v
# git is installed # git è installato
git version git version
``` ```
For more info, see Per ulteriori informazioni, consulta il sito [Remote Containers di VSCode](https://code.visualstudio.com/docs/remote/containers)
[VSCode Remote Containers](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 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.
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
To see your changes, go to: Per visualizzare le tue modifiche, visita:
- `http://localhost:8080/` for the Castopod app - `http://localhost:8080/` per l'app Castopod
- `http://localhost:8888/` for the phpmyadmin interface: - `http://localhost:8888/` per l'interfaccia di phpmyadmin:
- username: **castopod** - nome utente: **castopod**
- password: **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 ```bash
# starts all services declared in docker-compose.yml file # avvia tutti i servizi dichiarati nel file docker-compose.yml
# -d option starts the containers in the background # l'opzione -d avvia i contenitori in background
docker-compose up -d 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 docker-compose ps
# Alternatively, you can check all docker processes # In alternativa, puoi controllare tutti i processi Docker
docker ps -a 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 "position": 2
} }

View File

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

View File

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

View File

@ -1,221 +1,143 @@
--- ---
title: Installation title: Installazione
sidebarDepth: 3 sidebarDepth: 3
--- ---
# How to install Castopod? # Come installare Castopod?
Castopod was thought-out to be easy to install. Whether using dedicated or Castopod è progettato per essere facile da installare. Che tu stia usando un
shared hosting, you can install it on most PHP-MySQL compatible web servers. 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 Se preferisci utilizzare Docker, puoi saltare questa parte e andare
[docker documentation](./docker.md) for Castopod. direttamente alla [documentazione Docker](./docker.md) per Castopod.
::: :::
## Requirements ## Prerequisiti
- PHP v8.1 only - PHP v8.1 solo
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher - Versione MySQL 5.7 o superiore o MariaDB version 10.2 o superiore
- HTTPS support - Supporto HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's - Un [orologio sincronizzato con NTP](https://wiki.debian.org/NTP) per convalidare le richieste in arrivo di federtazione
incoming requests
### 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) - [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php) - [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php) - [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**, - [gd](https://www.php.net/manual/en/image.installation.php) con **JPEG**,
**PNG** and **WEBP** libraries. **PNG** e le librerie **WEBP**.
- [exif](https://www.php.net/manual/en/exif.installation.php) - [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) - json (abilitato per impostazione predefinita: non disabilitarlo)
- xml (enabled by default - don't turn it off) - xml (abilitato per impostazione predefinita: non disabilitarlo)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) - [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 Castopod funziona solo con database MySQL versione 5.7 o successiva.
will break with the previous MySQL v5.6 for example as its end of life was on Le versioni 5.6 (che hanno smesso di ricevere supporto il 5 febbraio 2021) o precedenti di
February 5, 2021. MySQL non funzioneranno.
::: :::
You will need the server hostname, database name, username and password to Avrai bisogno del nome host del server, del nome del database, del nome
complete the installation process. If you do not have these, please contact your utente e della password per completare il processo di installazione. Se non
server administrator. 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: L'utente deve avere almeno questi permessi di accesso al database per far
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`, funzionare Castopod: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`,
`REFERENCES`, `CREATE VIEW`. `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 [FFmpeg](https://www.ffmpeg.org/) versione 4.1.8 o superiore è richiesto se si
want to generate Video Clips. The following extensions must be installed: 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). [gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Other recommendations ### (Facoltativo) Altri consigli
- Redis for better cache performances. - Redis per una migliore performance nella cache.
- CDN for static files caching and better performances. - CDN per la cache dei file statici e una migliore performance.
- e-mail gateway for lost passwords. - Gateway di posta per le password dimenticate.
## Install instructions ## Istruzioni di installazione
### Pre-requisites ### Prerequisiti
0. Get a Web Server with [requirements](#requirements) installed 0. Prendi un server web con i [prerequisiti](#prerequisites) installati
1. Create a MySQL database for Castopod with a user having access and 1. Crea un database MySQL per Castopod con un utente che abbia i
modification privileges (for more info, see permessi di accesso e modifica (per ulteriori informazioni, vedi
[MySQL compatible database](#mysql-compatible-database)). [Database compatibile con MySQL](#mysql-compatible-database)).
2. Activate HTTPS on your domain with an _SSL certificate_. 2. Abilita HTTPS sul tuo dominio con un _certificato SSL_.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto 3. Scarica e decomprimi l'ultimo [pacchetto di Castopod](https://castopod.org/)
the web server if you havent already. sul server web se non l'hai già fatto.
- ⚠️ Set the web server document root to the `public/` sub-folder within the - ⚠️ Assicurati di puntare la radice dei documenti del server web alla sotto-cartella
`castopod` folder. `public/` della cartella `castopod`.
4. Add **cron tasks** on your web server for various background processes 4. Aggiungi **attività cron** al tuo server web per vari processi in background
(replace the paths accordingly): (sostituisci i percorsi di conseguenza):
```bash ```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 **Nota** - Se non aggiungi questo task cron, le seguenti funzionalità di Castopod
will not work: non funzioneranno:
- Importing a podcast from an existing RSS feed - Importazione di un podcast da un feed RSS esistente
- Broadcasting social activities to your followers in the fediverse - Diffusione delle attività sociali ai tuoi seguaci nel fediverso
- Broadcasting episodes to open hubs using - Diffusione di episodi ad hub aperti usando
[WebSub](https://en.wikipedia.org/wiki/WebSub) [WebSub](https://en.wikipedia.org/wiki/WebSub)
- Generating video clips - - Generazione di video clip -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips) [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 1. Esegui lo script di installazione di Castopod andando alla pagina
(`https://your_domain_name.com/cp-install`) in your favorite web browser. dell'installatore (`https://il_tuo_nome_di_dominio.com/cp-install`) nel tuo
2. Follow the instructions on your screen. browser web preferito.
3. Start podcasting! 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 Lo script di installazione crea un file `.env` nella root del pacchetto. Se non
through the install wizard, you can create and edit the `.env` file manually puoi utilizzare l'installatore, puoi creare ed editare manualmente il file `.env` basandoti
based on the `.env.example` file. sul file `.env.example`.
::: :::
### Email/SMTP setup ### Configurazione email/SMTP
Email configuration is required for some features to work properly (eg. La configurazione dell'email è necessaria affinché alcune funzionalità funzionino correttamente (ad es.
retrieving your forgotten password, sending instructions to premium subscribers, 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 ```ini
# […] # […]
email.fromEmail="your_email_address" email.fromEmail="tuo_indirizzo_email"
email.SMTPHost="your_smtp_host" email.SMTPHost="il_tuo_host_smtp"
email.SMTPUser="your_smtp_user" email.SMTPUser="il_tuo_utente_smtp"
email.SMTPPass="your_smtp_password" email.SMTPPass="la_tua_password_smtp"
``` ```
#### Email config options #### Opzioni di configurazione
| 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,26 +1,21 @@
--- ---
title: Security title: Sicurezza
--- ---
# Security concerns # Domande di sicurezza
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP Castopod è sviluppato su [CodeIgniter4](https://codeigniter.com/), un framework PHP che promuove [buone pratiche di sicurezza](https://codeigniter.com/user_guide/concepts/security.html).
framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we 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):
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
- `writable/` folder must be **readable** and **writable**. - La cartella `writable/` deve essere accessibile in **lettura** e **scrittura**.
- `public/media/` folder must be **readable** and **writable**. - La cartella `public/media/` deve essere accessibile in **lettura** e **scrittura**.
- any other file must be set to **readonly**. - Qualsiasi altro file deve essere accessibile in **sola lettura**.
For instance, if you are using Apache or NGINX with Ubuntu you may do the Ad esempio, se stai utilizzando Apache o NGINX con Ubuntu, puoi eseguire i seguenti comandi:
following:
```bash ```bash
sudo chown -R root:root /path/to/castopod sudo chown -R root:root /percorso/di/castopod
sudo chown -R www-data:www-data /path/to/castopod/writable sudo chown -R www-data:www-data /percorso/di/castopod/writable
sudo chown -R www-data:www-data /path/to/castopod/public/media sudo chown -R www-data:www-data /percorso/di/castopod/public/media
``` ```

View File

@ -1,109 +1,102 @@
--- ---
title: Update title: Aggiornamento
sidebarDepth: 3 sidebarDepth: 3
--- ---
# How to update Castopod? # Come installare Castopod?
After installing Castopod, you may want to update your instance to the latest 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 ⚡.
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
## Update instructions ## Istruzioni per l'aggiornamento
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and 0. ⚠️ Prima di effettuare un aggiornamento, ti consigliamo vivamente di fare un backup dei tuoi file Castopod e del tuo database.
database.
- cf. - vedi
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating) [Dovrei fare un backup prima di aggiornare?](#should-i-make-a-backup-before-updating)
1. Go to the 1. Vai alla
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and [pagina delle release](https://code.castopod.org/adaures/castopod/-/releases) e
see if your instance is up to date with the latest Castopod version verifica se la tua istanza è aggiornata all'ultima versione di Castopod.
- cf. - vedi
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version) [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 2. Scarica l'ultima versione denominata `Pacchetto di Castopod`, puoi scegliere tra gli archivi `zip` o `tar.gz`.
between the `zip` or `tar.gz` archives
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code - ⚠️ Assicurati di scaricare il Pacchetto di Castopod e **NON** il codice sorgente
- Note that you can also download the latest package from - Nota che puoi anche scaricare l'ultimo pacchetto da
[castopod.org](https://castopod.org/) [castopod.org](https://castopod.org/)
3. On your server: 3. Sul tuo server:
- Remove all files except `.env` and `public/media` - Elimina tutti i file tranne `.env` e `public/media`
- Copy the new files from the downloaded package into your server - 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. Potrebbe essere necessario reimpostare i permessi dei file come
Check [Security Concerns](./security.md). fatto durante il processo di installazione. Vedi
[Security Concerns](./security.md).
::: :::
4. Update your database schema from your `Castopod Admin` > `About` page or by 4. Aggiorna lo schema del database dalla pagina `Castopod Admin` > `About` o eseguendo:
running:
```bash ```bash
php spark castopod:database-update 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` `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 Le versioni potrebbero essere accompagnate da istruzioni di aggiornamento
[releases page](https://code.castopod.org/adaures/castopod/-/releases)). aggiuntive (vedi la
[page delle release notes](https://code.castopod.org/adaures/castopod/-/releases)).
- cf. - vedi
[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?](#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 Vai al pannello di amministrazione di Castopod, la versione viene visualizzata in
corner. basso a sinistra.
Alternatively, you can find the version in the `app > Config > Constants.php` Puoi anche trovare la versione nell'applicazione
file. `> 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 Nessun problema! Basta ottenere l'ultima versione come descritto
through the release instructions (4), perform them sequentially, from the oldest sopra. Quando esegui le istruzioni per l'aggiornamento (4), eseguile
to the newest. sequenzialmente, dalla versione più vecchia alla più recente.
> You may want to backup your instance depending on how long you haven't updated > Dovresti fare un backup della tua istanza in base alla data dell'ultimo aggiornamento di Castopod.
> 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`: `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 1. Scarica l'ultima versione, sovrascrivi i file mantenendo
`public/media`. `.env` e `public/media`.
2. Go through each release update instructions sequentially (from oldest to 2. Esegui le istruzioni per l'aggiornamento uno dopo l'altro (dal più vecchio al più recente).
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
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 In generale, ti consigliamo di creare regolarmente un backup dei tuoi file Castopod e del tuo database per evitare di perdere tutto...
database to prevent you from losing it all…

View File

@ -2,171 +2,120 @@
sidebarDepth: 2 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] [![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 Castopod è una piattaforma di hosting gratuita e open-source progettata per i podcaster che desiderano interagire con il proprio pubblico.
engage and interact with their audience.
Castopod is easy to install and was built on top of Castopod è facile da installare ed è stato progettato con [CodeIgniter4](https://codeigniter.com/), un framework PHP potente e leggero.
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
<div class="flex items-center"> <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> </div>
## Features ## Caratteristiche
- 🌱 &nbsp;Free & open-source (AGPL v3 License) - 🌱 &nbsp;Libero, gratuito e open-source (Licenza AGPL v3)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics - 🔐 &nbsp;orientato alla sovranità dei dati: il tuo contenuto, la tua audience e le tue statistiche ti appartengono e solo a te
belong to you, and&nbsp;you&nbsp;only - 🪄&nbsp;Funzionalità del Podcasting 2.0: GUID, blocco, trascrizioni, finanziamento, capitoli, geolocalizzazione, ospiti, estratti audio, ...
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding, - 💬 &nbsp;Social network integrato:
chapters, location, persons, soundbites, … - 🚀 &nbsp;Castopod fa parte del Fediverso, una rete sociale decentralizzata
- 💬 &nbsp;Built-in social network: - ❤️ &nbsp;Crea pubblicazioni, condividi, metti in preferiti e commenta gli episodi
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network - 📈 &nbsp;Statistiche integrate:
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes - ⚖️ &nbsp;Conforme GDPR / CCPA / LGPD
- 📈 &nbsp;Built-in analytics: - 🪙&nbsp;Misurazione dell'audience IABv2
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant - 🏡 &nbsp;Statistiche integrate, nessuna terza parte coinvolta
- 🪙 &nbsp;Standard IABv2 audience measurement - 📢 &nbsp;Strumenti di marketing integrati:
- 🏡 &nbsp;On-premises analytics, no third party involved - ✅ &nbsp;Pronto per l'ottimizzazione per i motori di ricerca (metadati open-graph, JSON-LD...)
- 📢 &nbsp;Built-in marketing tools: - 📱 &nbsp;PWA: installa come app standalone
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …) - 🎨 &nbsp;Colori del tema personalizzabili
- 📱 &nbsp;PWA: install as a standalone app - 🎬 &nbsp;Genera clip video pronte per la condivisione dagli episodi
- 🎨 &nbsp;Customizable theme colors - 🔉 &nbsp;Genera estratti audio
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes - ▶️ &nbsp;Incorpora i tuoi episodi in qualsiasi sito web
- 🔉 &nbsp;Generate soundbites - 💸 &nbsp;Monetizzazione:
- ▶️ &nbsp;Embeddable player, embed your episodes on any website - 🔗 &nbsp;Link di finanziamento
- 💸 &nbsp;Monetization: - 📲 &nbsp;pubblicità "listen-to-click"
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🤝 &nbsp;value4value / WebMonetization - 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts - 💎 &nbsp;Podcast premium
- 📡 &nbsp;Publish your episodes everywhere with RSS: - 📡&nbsp;Pubblica i tuoi episodi ovunque con RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, - 📱 &nbsp;Su tutti gli indici e le applicazioni: Podcast Index, Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend...
Google Podcasts, Deezer, Podcast Addict, Podfriend, … - ⚡&nbsp;Trasmetti i tuoi episodi istantaneamente con WebSub
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub - 📥 &nbsp;Importa il tuo podcast: sposta il tuo podcast esistente su Castopod
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod - 📤 &nbsp;Sposta il tuo podcast su un altro servizio di hosting
- 📤 &nbsp;Move your podcast out of Castopod - 🔀 &nbsp;Multi-tenant: ospita quanti podcast desideri
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want - 👥 &nbsp;Multi-utente: aggiungi contributori e assegna i loro ruoli
- 👥 &nbsp;Multi-user: add contributors and set roles - 🌎 &nbsp;supporto i18n: tradotto in inglese, francese, polacco, tedesco, portoghese, brasiliano e spagnolo... e [altro in futuro](https://translate.castopod.org)!
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
## Motivation ## Perché Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast L'ecosistema del podcasting è decentralizzato per natura: puoi creare il tuo podcast come file RSS, pubblicarlo sul web e farlo condividere ovunque online.
as an RSS file, publish it on the web and have it shared everywhere 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 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.
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
With podcasting becoming more widely used, some companies are trying to shift it Con l'aumento dell'uso dei podcast, alcune aziende stanno cercando di trasformarlo in un mezzo più controllato e centralizzato.
towards a more controlled and centralized medium.
Castopod was created in an effort to provide an open and sustainable alternative 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.
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 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/).
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
## Comparison with other solutions ## Confronto con altre soluzioni
We believe that a solution is not necessarily right for everyone, it highly 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.
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 vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the 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.
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 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.
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 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.
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 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.
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 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.
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 Infine, a seconda delle tue esigenze, Wordpress e Castopod possono perfettamente convivere in quanto condividono gli stessi requisiti!
side as they share the same requirements!
### Castopod vs Funkwhale ### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as 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.
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 Funkwhale è stato inizialmente costruito intorno alla musica. E successivamente, con l'evoluzione del progetto, è stata introdotta la possibilità di ospitare podcast.
evolved, the ability to host podcasts was introduced.
Unlike Funkwhale, Castopod has been designed and built around podcasting 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, ...).
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 Quindi, è probabile che tu utilizzi Funkwhale se desideri ospitare la tua musica e utilizzi Castopod se desideri ospitare i tuoi podcast.
Castopod if you want to host your podcasts.
### 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 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!
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 Ogni soluzione ha le sue peculiarità, puoi confrontarle con l'elenco delle caratteristiche.
[list of features](#features).
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 - 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.
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 - 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.
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
## Contributing ## Contribuire
Love Castopod and would like to help? Take a look at the following documentation Ti piace Castopod e vorresti aiutare? Dai un'occhiata alla seguente documentazione per iniziare.
to get you&nbsp;started.
### Code of conduct ### Codice di condotta
Castopod has adopted a Code of Conduct that we expect project participants to 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.
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 ### Guida alla contribuzione
Read our [contributing guide](./contributing/guidelines.md) to learn about our 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.
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## Contributors ## Sostenitori ✨
Thanks goes to these wonderful people Un ringraziamento a queste persone meravigliose ([chiave dei emoji](https://allcontributors.org/docs/en/emoji-key)):
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start --> <!-- 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://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://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://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/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://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://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://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://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://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/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>
<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://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://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://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://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://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>
<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> </tr>
</tbody> </tbody>
</table> </table>
@ -247,43 +144,36 @@ Thanks goes to these wonderful people
<!-- ALL-CONTRIBUTORS-LIST:END --> <!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the Questo progetto segue le specifiche di [all-contributors](https://github.com/all-contributors/all-contributors). Contributi di qualsiasi tipo sono benvenuti!
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
## 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 - [Discord](https://castopod.org/discord) (per chattare in tempo reale con gli sviluppatori e la community)
developers and the community) - [Tracciamento dei problemi](https://code.castopod.org/adaures/castopod/-/issues) (per ogni richiesta di nuova funzionalità o segnalazione di bug)
- [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 In alternativa, puoi seguirci sui social media per rimanere aggiornato sulle novità di Castopod:
Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance) - [podlibre.social](https://podlibre.social/@Castopod) (Mastodon Instance)
- [Twitter](https://twitter.com/castopod) - [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod) - [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod) - [Facebook](https://www.facebook.com/castopod)
## Sponsors ## Sostenitori
The ongoing development of Castopod is made possible with the support of its 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).
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"> <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://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="NLnet Logo" 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> </div>
## License ## Licenza
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/) [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/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/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg https://img.shields.io/badge/contributions-welcome-brightgreen.svg
@ -296,4 +186,4 @@ https://img.shields.io/github/stars/ad-aures/castopod?style=social
[semantic-release]: https://github.com/semantic-release/semantic-release [semantic-release]: https://github.com/semantic-release/semantic-release
[discord]: https://castopod.org/discord [discord]: https://castopod.org/discord
[stars]: https://github.com/ad-aures/castopod/stargazers [stars]: https://github.com/ad-aures/castopod/stargazers
[crowdin]: https://translate.castopod.org/project/castopod [crowdin]: https://translate.castopod.org/project/castopod

View File

@ -1,4 +1,4 @@
{ {
"label": "Contributing", "label": "Bijdragen",
"position": 3 "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 Hou je van Castopod en wil je helpen? Bedankt, er is voor iedereen iets te doen!
everybody!
Please take a moment to review this document in order to make the contribution Neem even de tijd om dit document door te nemen om het bijdrageproces makkelijk en effectief te maken voor alle betrokkenen.
process easy and effective for everyone involved.
Following these guidelines helps to communicate that you respect the time of the 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.
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 Opmerking
**Any** contribution made on a repository other than **Elke** bijdrage op een repository anders dan
[the original repository](https://code.castopod.org/adaures/castopod) will not [de oorspronkelijke repository](https://code.castopod.org/adaures/castopod) zal niet
be accepted. geaccepteerd worden.
::: :::
## Using the issue tracker ## Gebruik van de issue tracker
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the Het [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is het
preferred channel for [bug reports](#bug-reports), voorkeurskanaal voor [bugmeldingen](#bugmeldingen),
[features requests](#feature-requests) and [verzoek om functies](#functieverzoeken) en
[submitting pull requests](#pull-requests). [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, Als je een veiligheidsprobleem of kwetsbaarheid tegenkomt in de Castopod broncode,
please contact us directly by email at neem dan direct contact met ons op via e-mail op
[security@castopod.org](mailto:security@castopod.org) [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. Een bug is een _aantoonbaar probleem_ dat wordt veroorzaakt door de code in de repository.
Good bug reports are extremely helpful - thank you! 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 1. **Gebruik de probleemzoeker** &mdash; controleer of het probleem al
reported. gemeld is.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the 2. **Controleer of het probleem is opgelost** &mdash; probeer het te reproduceren met behulp van de
latest `main` branch in the repository. laatste versie van de `main` branch in de repository.
3. **Isolate the problem** &mdash; ideally create a 3. **Isoleer het probleem** &mdash; creëer idealiter een
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live [gereduceerd testgeval](https://css-tricks.com/reduced-test-cases/) en een live
example. voorbeeld.
A good bug report shouldn't leave others needing to chase you up for more Een goede bugmelding zou anderen niet moeten dwingen om je achterna te gaan voor meer
information. Please try to be as detailed as possible in your report. What is informatie. Probeer alsjeblieft zo gedetailleerd mogelijk te zijn in jouw rapport. Wat is
your environment? What steps will reproduce the issue? What browser(s) and OS jouw omgeving? Welke stappen zullen het probleem reproduceren? Welke browser(s) en besturingssytemen
experience the problem? What would you expect to be the outcome? All these ondervinden het probleem? Wat zou je verwachten als resultaat? Al deze
details will help people to fix any potential bugs. 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) > [Issue sjablonen](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 > zijn gemaakt voor dit project. Je kunt ze gebruiken om je te helpen deze richtlijnen te volgen.
> guidelines.
## Feature requests ## Functieverzoeken
Feature requests are welcome. But take a moment to find out whether your idea Functieverzoeken zijn welkom. Maar neem even de tijd om te controleren of jouw idee
fits with the scope and aims of the project. It's up to _you_ to make a strong past binnen de reikwijdte en doelstellingen van het project. Het is aan _jou_ om een sterke
case to convince the project's developers of the merits of this feature. Please zaak te maken om de ontwikkelaars van het project te overtuigen van de waarde van deze functie. Geef alsjeblieft
provide as much detail and context as possible. zoveel mogelijk details en context.
## Pull requests ## Pull-aanvragen
Good pull requests - patches, improvements, new features - are a fantastic help. Goede pull-aanvragen - patches, verbeteringen, nieuwe functies - zijn fantastisch. Ze moeten gericht blijven en geen ongerelateerde commits bevatten.
They should remain focused in scope and avoid containing unrelated commits.
**Please ask first** before embarking on any significant pull request (e.g. **Vraag alsjeblieft eerst om toestemming** voordat je aan een significante pull-aanvraag begint (bijvoorbeeld
implementing features, refactoring code, porting to a different language), het implementeren van functies, code refactoring, porteren naar een andere taal),
otherwise you risk spending a lot of time working on something that the anders loop je het risico veel tijd te besteden aan iets dat de
project's developers might not want to merge into the project. ontwikkelaars van het project mogelijk niet willen samenvoegen.
Please adhere to the coding conventions used throughout a project (indentation, Houd je alsjeblieft aan de coderingsconventies die door het project worden gebruikt (inspringing,
accurate comments, etc.) and any other requirements (such as test coverage). nauwkeurige opmerkingen, etc.) en aan andere vereisten (zoals testdekking).
Adhering to the following process is the best way to get your work included in Het volgen van het volgende proces is de beste manier om ervoor te zorgen dat jouw werk wordt opgenomen.
the project: in het project:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the 1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) het
project, clone your fork, and configure the remotes: project, kloon je fork en configureer de remotes:
```bash ```bash
# Clone your fork of the repo into the current directory # Kloon je repositoryfork naar de huidige map
git clone https://code.castopod.org/<your-username>/castopod.git git clone https://code.castopod.org/<jouw-gebruikersnaam>/castopod.git
# Navigate to the newly cloned directory # Navigeer naar de nieuw gekloonde map
cd castopod 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 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 ```bash
git checkout main git checkout main
git pull upstream main git pull upstream main
``` ```
3. Create a new topic branch (off the `main` branch) to contain your feature, 3. Maak een nieuwe onderwerp-branch (van de `main` branch) om jouw functie,
change, or fix: wijziging of oplossing in op te nemen:
```bash ```bash
git checkout -b <topic-branch-name> git checkout -b <onderwerp-branch-naam>
``` ```
4. Commit your changes in logical chunks. Please adhere to these 4. Commit jouw wijzigingen in logische delen. Houd je alsjeblieft aan deze
[git commit message guidelines](https://conventionalcommits.org/) or your [richtlijnen voor git commits](https://conventionalcommits.org/) anders zal jouw
code is unlikely be merged into the main project. Use Git's code waarschijnlijk niet worden samengevoegd met het hoofdproject. Gebruik Git's
[interactive rebase](https://help.github.com/articles/about-git-rebase/) [interactieve rebase](https://help.github.com/articles/about-git-rebase/)
feature to tidy up your commits before making them public. 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 ```bash
git pull [--rebase] upstream main git pull [--rebase] upstream main
``` ```
6. Push your topic branch up to your fork: 6. Push jouw onderwerp-branch naar jouw fork:
```bash ```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) 7. [Open een pull-aanvraag](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. met een duidelijke titel en beschrijving.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to **BELANGRIJK**: Door een patch in te dienen, stem je ermee in dat de eigenaren van het project
license your work under the terms of the jouw werk onder de voorwaarden van de
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE). [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 - Voor het samenvoegen van een PR zijn ten minste twee goedkeuringen van de samenwerkers
unless it's an architectural change, a large feature, etc. If it is, then at vereist, tenzij het om een architecturale wijziging, een grote functie, etc. gaat. In dat geval moet
least 50% of the core team have to agree to merge it, with every team member minstens 50% van het kernteam akkoord gaan met het samenvoegen, waarbij elk teamlid
having a full veto right. (i.e. every single one can block any PR) een volledig vetorecht heeft. (d.w.z. dat iedereen elke PR kan blokkeren)
- A PR should remain open for at least two days before merging (does not apply - Een PR moet minstens twee dagen open blijven voordat het wordt samengevoegd (geldt niet
for trivial contributions like fixing a typo). This way everyone has enough voor triviale bijdragen zoals het corrigeren van een typefout). Op deze manier heeft iedereen voldoende
time to look into it. 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 sidebarDepth: 3
--- ---
# Setup your development environment # Stel je ontwikkelomgeving in
## Introduction ## Inleiding
Castopod is a web app based on the `php` framework Castopod is een web-app gebaseerd op het `php` framework [CodeIgniter 4](https://codeigniter.com).
[CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A 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.
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
> You don't need any prior knowledge of Docker to follow the next steps. > 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!
> However, if you wish to use your own environment, feel free to do so!
## 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 ```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 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:
the database and use redis as a cache handler:
```ini ```ini
CI_ENVIRONMENT="development" CI_ENVIRONMENT="development"
@ -62,362 +57,86 @@ to help you kickstart your contribution.
#cache.handler="file" #cache.handler="file"
``` ```
> _NB._ You can tweak your environment by setting more environment variables > _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.
> 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 3. (voor docker desktop) Voeg de repository die je hebt gekloond toe aan `Settings` > `Resources` > `File Sharing` van Docker desktop.
`Settings` > `Resources` > `File Sharing`
### 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/` 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! 🪄
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 1. Installeer de VSCode-extensie [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) 2. `Ctrl/Cmd + Shift + P` > `Openen in container`
2. `Ctrl/Cmd + Shift + P` > `Open in container`
> The VSCode window will reload inside the dev container. Expect several > Het VSCode-venster wordt opnieuw geladen in de development container. Verwacht enkele minuten tijdens de eerste keer laden, omdat alle benodigde services worden opgebouwd.
> minutes during first load as it is building all necessary services.
**Note**: The dev container will start by running Castopod's php server. **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:
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
```bash ```bash
# run Vite dev server # voer Vite dev server uit
npm run dev npm run dev
``` ```
If there is any issue with the php server not running, you can restart them Als er problemen zijn met de php-server die niet wordt uitgevoerd, kun je deze opnieuw starten met de volgende commando's:
using the following commands:
```bash ```bash
# run Castopod server # voer Castopod server uit
php spark serve - 0.0.0.0 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 Je bent nu **binnen de dev container**, je kunt de VSCode-console (`Terminal` > `Nieuwe Terminal`) gebruiken om elk commando uit te voeren:
(`Terminal` > `New Terminal`) to run any command:
```bash ```bash
# PHP is installed # PHP is geïnstalleerd
php -v php -v
# Composer is installed # Composer is geïnstalleerd
composer -V composer -V
# npm is installed # npm is geïnstalleerd
npm -v npm -v
# git is installed # git is geïnstalleerd
git version git version
``` ```
For more info, see Voor meer informatie, zie [VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers).
[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 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.
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
To see your changes, go to: Om je wijzigingen te zien, ga naar:
- `http://localhost:8080/` for the Castopod app - `http://localhost:8080/` voor de Castopod-app
- `http://localhost:8888/` for the phpmyadmin interface: - `http://localhost:8888/` voor de phpmyadmin-interface:
- username: **castopod** - gebruikersnaam: **castopod**
- password: **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 ```bash
# starts all services declared in docker-compose.yml file # start alle services die zijn gedeclareerd in het docker-compose.yml-bestand
# -d option starts the containers in the background # de optie -d start de containers op de achtergrond
docker-compose up -d 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 docker-compose ps
# Alternatively, you can check all docker processes # Als alternatief kun je alle Docker-processen bekijken
docker ps -a docker ps -a
``` ```
> The `docker-compose up -d` command will boot 4 containers in the > Het commando `docker-compose up -d` start 4 containers op de achtergrond:
> background:
> >
> - `castopod_app`: a php based container with Castopod requirements > - `castopod_app`: een op php gebaseerde container met Castopod-vereisten geïnstalleerd
> installed > - `castopod_redis`: een [redis](
> - `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": "Aan de slag",
"position": 2 "position": 2
} }

View File

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

View File

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

View File

@ -1,221 +1,118 @@
--- ---
title: Installation title: Installatie
sidebarDepth: 3 sidebarDepth: 3
--- ---
# How to install Castopod? # Hoe installeer ik Castopod?
Castopod was thought-out to be easy to install. Whether using dedicated or Castopod is ontworpen om eenvoudig te installeren te zijn. Of je nu een
shared hosting, you can install it on most PHP-MySQL compatible web servers. 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 Als je Docker wilt gebruiken, kun je dit gedeelte overslaan en direct naar de [Docker-documentatie](./docker.md) voor Castopod gaan.
[docker documentation](./docker.md) for Castopod.
::: :::
## Requirements ## Vereisten
- PHP v8.1 only - PHP v8.1 only
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher - MySQL versie 5.7 of hoger of MariaDB versie 10.2 of hoger
- HTTPS support - Ondersteuning voor HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's - Een [ntp-gesynchroniseerde klok](https://wiki.debian.org/NTP) om binnenkomende verzoeken van de federatie te valideren
incoming requests
### PHP v8.1 only ### 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) - [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php) - [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php) - [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**, - [gd](https://www.php.net/manual/en/image.installation.php) met **JPEG**,
**PNG** and **WEBP** libraries. **PNG** en **WEBP** bibliotheken.
- [exif](https://www.php.net/manual/en/exif.installation.php) - [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) - json (standaard ingeschakeld - niet uitschakelen)
- xml (enabled by default - don't turn it off) - xml (standaard ingeschakeld - niet uitschakelen)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) - [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 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.
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
::: :::
You will need the server hostname, database name, username and password to 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.
complete the installation process. If you do not have these, please contact your
server administrator.
#### Privileges #### Toegangsrechten
User must have at least these privileges on the database for Castopod to work: De gebruiker moet in ieder geval de volgende toegangsrechten hebben op de database om Castopod te laten werken: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`,
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`, `INDEX`,`INSERT`, `SELECT`, `UPDATE`,`REFERENCES`, `CREATE VIEW`.
`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 [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:
want to generate Video Clips. The following extensions must be installed:
- **FreeType 2** library for - **FreeType 2** bibliotheek voor [gd](https://www.php.net/manual/en/image.installation.php).
[gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Other recommendations ### (Optioneel) Andere aanbevelingen
- Redis for better cache performances. - Redis voor betere cache-prestaties.
- CDN for static files caching and better performances. - CDN voor het cachen van statische bestanden en betere prestaties.
- e-mail gateway for lost passwords. - E-mail gateway voor verloren wachtwoorden.
## Install instructions ## Installatie-instructies
### Pre-requisites ### Vereisten
0. Get a Web Server with [requirements](#requirements) installed 0. Verkrijg een webserver met de geïnstalleerde [vereisten](#vereisten)
1. Create a MySQL database for Castopod with a user having access and 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).
modification privileges (for more info, see 2. Zorg ervoor dat HTTPS is ingeschakeld op je domein met een _SSL-certificaat_.
[MySQL compatible database](#mysql-compatible-database)). 3. Download en unzip het laatste [Castopod-pakket](https://castopod.org/) op de webserver als je dat nog niet hebt gedaan.
2. Activate HTTPS on your domain with an _SSL certificate_. - ⚠️ Zorg ervoor dat de rootmap van het webdocument verwijst naar de `public/` submap van de `castopod` map.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto 4. Voeg **cron-taken** toe aan je webserver voor verschillende achtergrondprocessen (vervang de paden dienovereenkomstig):
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 ```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 **Opmerking** - Als je deze cron-taak niet toevoegt, werken de volgende Castopod-functies niet:
will not work:
- Importing a podcast from an existing RSS feed - Het importeren van een podcast uit een bestaande RSS-feed
- Broadcasting social activities to your followers in the fediverse - Het delen van sociale activiteiten met je volgers in het Fediverse
- Broadcasting episodes to open hubs using - Het uitzenden van afleveringen naar open hubs met behulp van [WebSub](https://en.wikipedia.org/wiki/WebSub)
[WebSub](https://en.wikipedia.org/wiki/WebSub) - Het genereren van videoclips - [vereist FFmpeg](#optioneel-ffmpeg-v418-of-hoger-voor-videoclips)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (recommended) Install Wizard ### (Aanbevolen methode) Installatiewizard
1. Run the Castopod install script by going to the install wizard page 1. Voer het Castopod-installatiescript uit door naar de installatiewizard-pagina (`https://your_domain_name.com/cp-install`) te gaan in je favoriete webbrowser.
(`https://your_domain_name.com/cp-install`) in your favorite web browser. 2. Volg de weergegeven instructies.
2. Follow the instructions on your screen. 3. Begin met podcasten!
3. Start podcasting!
::: info Note :::info Opmerking
The install script writes a `.env` file in the package root. If you cannot go 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.
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
::: :::
### Email/SMTP setup ### E-mail/SMTP-configuratie
Email configuration is required for some features to work properly (eg. 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, ...)
retrieving your forgotten password, sending instructions to premium subscribers,
…)
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 ```ini
# [] # [...]
email.fromEmail="your_email_address" email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host" email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user" email.SM
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,26 +1,22 @@
--- ---
title: Security title: Veiligheid
--- ---
# Security concerns # Veiligheidsvragen
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP Castopod is ontwikkeld op [CodeIgniter4](https://codeigniter.com/), een PHP-framework dat
framework that encourages [goede veiligheidspraktijken](https://codeigniter.com/user_guide/concepts/security.html) aanmoedigt.
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we 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):
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
- `writable/` folder must be **readable** and **writable**. - De map `writable/` moet **leesbaar** en **schrijfbaar** zijn.
- `public/media/` folder must be **readable** and **writable**. - De map `public/media/` moet **leesbaar** en **schrijfbaar** zijn.
- any other file must be set to **readonly**. - Alle andere bestanden moeten alleen **leesbaar** zijn.
For instance, if you are using Apache or NGINX with Ubuntu you may do the Bijvoorbeeld, als u Apache of NGINX gebruikt met Ubuntu, kunt u de volgende commando's uitvoeren:
following:
```bash ```bash
sudo chown -R root:root /path/to/castopod 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/writable
sudo chown -R www-data:www-data /path/to/castopod/public/media sudo chown -R www-data:www-data /path/to/castopod/public/media
``` ```

View File

@ -3,107 +3,93 @@ title: Update
sidebarDepth: 3 sidebarDepth: 3
--- ---
# How to update Castopod? # Hoe Castopod te installeren?
After installing Castopod, you may want to update your instance to the latest 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 ⚡.
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
## Update instructions ## Update-instructies
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and 0. ⚠️ Voordat je een update uitvoert, raden we je ten zeerste aan om een back-up te maken van je Castopod-bestanden en database.
database.
- cf. - Zie
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating) [Moet ik een back-up maken voordat ik update?](#should-i-make-a-backup-before-updating)
1. Go to the 1. Ga naar de
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and [releases-pagina](https://code.castopod.org/adaures/castopod/-/releases) en
see if your instance is up to date with the latest Castopod version controleer of je instantie up-to-date is met de nieuwste Castopod-versie.
- cf. - Zie
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version) [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 2. Download het meest recente release-pakket genaamd `Castopod Package`, je kunt kiezen tussen de `zip` of `tar.gz` archieven.
between the `zip` or `tar.gz` archives
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code - ⚠️ Zorg ervoor dat je het Castopod Package downloadt en **NIET** de broncode.
- Note that you can also download the latest package from - Let op dat je het nieuwste pakket ook kunt downloaden vanaf
[castopod.org](https://castopod.org/) [castopod.org](https://castopod.org/).
3. On your server: 3. Op je server:
- Remove all files except `.env` and `public/media` - Verwijder alle bestanden behalve `.env` en `public/media`.
- Copy the new files from the downloaded package into your server - 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. Mogelijk moet je de bestandsrechten opnieuw instellen, zoals je deed tijdens het installatieproces. Zie
Check [Security Concerns](./security.md). [Beveiligingsproblemen](./security.md).
::: :::
4. Update your database schema from your `Castopod Admin` > `About` page or by 4. Werk je databaseschema bij vanuit je `Castopod Admin` > `About` pagina of door het volgende uit te voeren:
running:
```bash ```bash
php spark castopod:database-update php spark castopod:database-update
``` ```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` > 5. Wis je cache vanuit je `Castopod Admin` > `Settings` > `general` >
`Housekeeping` `Housekeeping`.
6. ✨ Enjoy your fresh instance, you're all done! 6. ✨Geniet van je nieuwe instantie, je bent klaar!
::: info Note ::: info Opmerking
Releases may come with additional update instructions (see Versies kunnen aanvullende update-instructies bevatten (zie
[releases page](https://code.castopod.org/adaures/castopod/-/releases)). [Releases-pagina](https://code.castopod.org/adaures/castopod/-/releases)).
- cf. - Zie
[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) [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 Ga naar je Castopod-beheerderspaneel, de versie wordt weergegeven linksonder.
corner.
Alternatively, you can find the version in the `app > Config > Constants.php` Je kunt de versie ook vinden in de applicatie
file. `> 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 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.
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
> You may want to backup your instance depending on how long you haven't updated > Je moet je instance back-uppen op basis van de datum van je laatste Castopod-update.
> Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to Bijvoorbeeld, als je op `v1.0.0-alpha.42` zit en je wilt updaten naar `v1.0.0-beta.1`:
`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 1. Download de nieuwste versie, overschrijf je bestanden terwijl je `.env` en `public/media` behoudt.
`public/media`.
2. Go through each release update instructions sequentially (from oldest to 2. Voer de update-instructies één voor één uit (van oudste naar nieuwste).
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
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 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...
database to prevent you from losing it all…

View File

@ -2,171 +2,120 @@
sidebarDepth: 2 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] [![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 Castopod is a gratis en open-source hostingplatform die is ontworpen voor podcasters die willen communiceren en interageren met hun publiek.
engage and interact with their audience.
Castopod is easy to install and was built on top of Castopod is eenvoudig te installeren en is gebouwd met [CodeIgniter4](https://codeigniter.com/), een krachtig PHP-framework van zeer kleine omvang.
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
<div class="flex items-center"> <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> </div>
## Features ## Kenmerken
- 🌱 &nbsp;Free & open-source (AGPL v3 License) - 🌱 &nbsp;Gratis, gratis en open-source (Licentie AGPL v3)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics - 🔐 &nbsp;Gefocust op gegevenssoevereiniteit: uw inhoud, uw publiek en uw statistieken zijn van u en alleen van u
belong to you, and&nbsp;you&nbsp;only - 🪄&nbsp;Podcasting 2.0-functies: GUID, vergrendeling, transcripties, financiering, hoofdstukken, geolocatie, deelnemers, geluidsfragmenten, ...
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding, - 💬 &nbsp;Geïntegreerd sociaal netwerk:
chapters, location, persons, soundbites, … - 🚀 &nbsp;Castopod maakt deel uit van Fediverse, een gedecentraliseerd sociaal netwerk
- 💬 &nbsp;Built-in social network: - ❤️ &nbsp;Berichten maken, delen, markeren als favoriet en reageren op afleveringen
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network - 📈 &nbsp;Ingebouwde statistieken:
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes - ⚖️ &nbsp;Compatibel met GDPR / CCPA / LGPD
- 📈 &nbsp;Built-in analytics: - 🪙&nbsp;IABv2 publieksmeting
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant - 🏡 &nbsp;Ingebouwde statistieken, geen tussenpartij
- 🪙 &nbsp;Standard IABv2 audience measurement - 📢 &nbsp;Geïntegreerde marketingtools:
- 🏡 &nbsp;On-premises analytics, no third party involved - ✅ &nbsp;Klaar voor SEO (open-graph metatags, JSON-LD, ...)
- 📢 &nbsp;Built-in marketing tools: - 📱 &nbsp;PWA: installeer als standalone app
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …) - 🎨 &nbsp;Aanpasbare themakleuren
- 📱 &nbsp;PWA: install as a standalone app - 🎬 &nbsp;Genereer deelklare videoclips van afleveringen
- 🎨 &nbsp;Customizable theme colors - 🔉 &nbsp;Genereer geluidsfragmenten
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes - ▶️ &nbsp;Integreer uw afleveringen op elke website
- 🔉 &nbsp;Generate soundbites - 💸 &nbsp;Monetisatie:
- ▶️ &nbsp;Embeddable player, embed your episodes on any website - 🔗 &nbsp;Financieringslink
- 💸 &nbsp;Monetization: - 📲 &nbsp;advertenties "listen-to-click"
- 🔗 &nbsp;Funding links - 🤝 &nbsp;value4value / WebMonetisatie
- 📲 &nbsp;listen-to-click ads
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts - 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS: - 📡 &nbsp;Publiceer uw afleveringen overal met RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, - 📱 &nbsp;Op alle indexen en apps: Podcast Index, Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, ...
Google Podcasts, Deezer, Podcast Addict, Podfriend, … - ⚡&nbsp;Stream uw afleveringen onmiddellijk via WebSub
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub - 📥 &nbsp;Podcast importeren: verplaats uw bestaande podcast naar Castopod
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod - 📤 &nbsp;Verhuis uw podcast naar een andere host
- 📤 &nbsp;Move your podcast out of Castopod - 🔀 &nbsp;Multi-tenant: host zoveel podcasts als je wilt
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want - 👥 &nbsp;Multi-gebruiker: voeg bijdragers toe en definieer hun rollen
- 👥 &nbsp;Multi-user: add contributors and set roles - 🌎 &nbsp;i18n-ondersteuning: vertaald in het Engels, Frans, Pools, Duits, Portugees, Braziliaans & Spaans... en [meer in de toekomst](https://translate.castopod.org)!
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
## Motivation ## Waarom Castopod?
The podcasting ecosystem is decentralized by nature: you can create your podcast 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.
as an RSS file, publish it on the web and have it shared everywhere online.
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 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.
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
With podcasting becoming more widely used, some companies are trying to shift it Met het steeds wijdverspreider gebruik van podcasting proberen sommige bedrijven het te verschuiven naar een meer gecontroleerd en gecentraliseerd medium.
towards a more controlled and centralized medium.
Castopod was created in an effort to provide an open and sustainable alternative 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.
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 Dit project wordt gesteund door de open-source community, en specifiek door de Fediverse- en Podcasting 2.0-bewegingen.
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
## Comparison with other solutions ## Vergelijking met andere oplossingen
We believe that a solution is not necessarily right for everyone, it highly 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.
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 vs. Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the 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;
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 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.
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 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.
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 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.
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 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.
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 Uiteindelijk kunnen Wordpress en Castopod, afhankelijk van uw behoeften, zelfs naast elkaar bestaan omdat ze dezelfde vereisten delen!
side as they share the same requirements!
### Castopod vs Funkwhale ### Castopod vs. Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as 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.
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 Funkwhale is oorspronkelijk gebouwd rond muziek. Later, naarmate het project zich ontwikkelde, werd de mogelijkheid om podcasts te hosten geïntroduceerd.
evolved, the ability to host podcasts was introduced.
Unlike Funkwhale, Castopod has been designed and built around podcasting 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, ...).
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 Je zou Funkwhale moeten gebruiken als je je muziek wilt hosten, en Castopod als je je podcasts wilt hosten.
Castopod if you want to host your podcasts.
### Castopod vs other podcast hosts ### Castopod vs. Andere podcasthosts
There are many solutions for you to host your podcasts, some of which are really 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!
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 Elke oplossing verschilt van elkaar, je kunt vergelijken met de [lijst met functies](#features).
[list of features](#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 - 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.
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 - 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.
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
## Contributing ## Bijdragen
Love Castopod and would like to help? Take a look at the following documentation Hou je van Castopod en wil je helpen? Bekijk de volgende documentatie om je op weg te helpen.
to get you&nbsp;started.
### Code of conduct ### Gedragscode
Castopod has adopted a Code of Conduct that we expect project participants to 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.
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 ### Bijdragengids
Read our [contributing guide](./contributing/guidelines.md) to learn about our 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.
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## Contributors ✨ ## Bijdragers ✨
Thanks goes to these wonderful people Dank aan deze geweldige mensen ([emoji sleutel](https://allcontributors.org/docs/en/emoji-key)):
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start --> <!-- prettier-ignore-start -->
@ -174,126 +123,25 @@ Thanks goes to these wonderful people
<table> <table>
<tbody> <tbody>
<tr> <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&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://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&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://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://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://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://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://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://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://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://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>
<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>
<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://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://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://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://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://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://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://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://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://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://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://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>
<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>
<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://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/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/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://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://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/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/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/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/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://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://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
<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

@ -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 "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 Kochasz Castopod i chcesz pomóc? Bardzo dziękujemy, jest wiele do zrobienia dla każdego!
everybody!
Please take a moment to review this document in order to make the contribution Prosimy o chwilę czasu, aby zapoznać się z tym dokumentem, aby proces współtworzenia był łatwy i skuteczny dla wszystkich zaangażowanych.
process easy and effective for everyone involved.
Following these guidelines helps to communicate that you respect the time of the 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.
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 Notka
**Any** contribution made on a repository other than **Każdy** wkład na repozytorium innym niż [oryginalne repozytorium](https://code.castopod.org/adaures/castopod) nie zostanie przyjęty.
[the original repository](https://code.castopod.org/adaures/castopod) will not
be accepted.
::: :::
## Using the issue tracker ## Korzystanie z systemu śledzenia problemów
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the [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).
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
## ⚠️ Security issues and vulnerabilities ## ⚠️ Problemy dotyczące bezpieczeństwa i luki
If you encounter any security issue or vulnerability in the Castopod source, 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).
please contact us directly by email at
[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. Błąd to _widoczny problem_, który jest spowodowany kodem w repozytorium. Dobre zgłoszenia błędów są niezwykle pomocne - bardzo dziękujemy!
Good bug reports are extremely helpful - thank you!
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 1. **Skorzystaj z wyszukiwarki problemów** &mdash; sprawdź, czy problem został już zgłoszony.
reported.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the 2. **Sprawdź, czy problem został naprawiony** &mdash; spróbuj odtworzyć go korzystając z najnowszej gałęzi `main` w repozytorium.
latest `main` branch in the repository.
3. **Isolate the problem** &mdash; ideally create a 3. **Izoluj problem** &mdash; idealnie stwórz [testową wersję redukowaną](https://css-tricks.com/reduced-test-cases/) i przykład na żywo.
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
A good bug report shouldn't leave others needing to chase you up for more 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.
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) >[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.
> have been created for this project. You may use them to help you follow those
> guidelines.
## Feature requests ## Propozycje funkcji
Feature requests are welcome. But take a moment to find out whether your idea 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.
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 ## Żądania wciągnięcia zmian
Good pull requests - patches, improvements, new features - are a fantastic help. Dobre żądania wciągnięcia zmian &ndash; poprawki, ulepszenia, nowe funkcje, to fantastyczna pomoc. Powinny one pozostać skoncentrowane i unikać zawierania niepowiązanych zmian.
They should remain focused in scope and avoid containing unrelated commits.
**Please ask first** before embarking on any significant pull request (e.g. **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ć.
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, Prosimy o przestrzeganie konwencji kodowania stosowanych w całym projekcie (wcięcia, dokładne komentarze itp.) oraz innych wymagań (takich jak pokrycie testami).
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 Przestrzeganie poniższego procesu to najlepszy sposób na uwzględnienie Twojej pracy w projekcie:
the project:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the 1. [Sforkuj](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) projekt, sklonuj swoje repozytorium (`fork`) i skonfiguruj zdalne repozytoria:
project, clone your fork, and configure the remotes:
```bash ```bash
# Clone your fork of the repo into the current directory # Sklonuj swoje repository (`fork`) do obecnego katalogu
git clone https://code.castopod.org/<your-username>/castopod.git 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 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 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 ```bash
git checkout main git checkout main
git pull upstream main git pull upstream main
``` ```
3. Create a new topic branch (off the `main` branch) to contain your feature, 3. Utwórz nową gałąź tematyczną (od gałęzi `main`), która będzie zawierać Twoją funkcję, zmianę lub poprawkę:
change, or fix:
```bash ```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 4. Zatwierdź swoje zmiany w logicznych częściach. Prosimy przestrzegać tych
[git commit message guidelines](https://conventionalcommits.org/) or your [wytycznych dotyczących zatwierdzania zmian w systemie Git](https://conventionalcommits.org/) lub kod nie zostanie prawdopodobnie scalony z głównym projektem. Skorzystaj z funkcji
code is unlikely be merged into the main project. Use Git's [przerywania interaktywnego w systemie Git](https://help.github.com/articles/about-git-rebase/)
[interactive rebase](https://help.github.com/articles/about-git-rebase/) w celu uporządkowania swoich zmian przed ich ujawnieniem publicznie.
feature to tidy up your commits before making them public.
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 ```bash
git pull [--rebase] upstream main git pull [--rebase] upstream main
``` ```
6. Push your topic branch up to your fork: 6. Wypchnij swoją gałąź tematyczną do swojego repozytorium (`fork`):
```bash ```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) 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)
with a clear title and description. z wyraźnym tytułem i opisem.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to **WAŻNE**: Przesyłając poprawkę, zgadzasz się na udostępnienie jej na licencji
license your work under the terms of the
[GNU AGPLv3](https://code.castopod.org/adaures/castopod/-/blob/main/LICENSE). [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 - 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)
unless it's an architectural change, a large feature, etc. If it is, then at - Żą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ć.
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. 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 sidebarDepth: 3
--- ---
# Setup your development environment # Skonfiguruj swoje środowisko programistyczne
## Introduction ## Wprowadzenie
Castopod is a web app based on the `php` framework Castopod jest aplikacją internetową opartą na frameworku `php` [CodeIgniter 4](https://codeigniter.com).
[CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A 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.
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
> You don't need any prior knowledge of Docker to follow the next steps. > 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ć!
> However, if you wish to use your own environment, feel free to do so!
## 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 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:
the database and use redis as a cache handler:
```ini ```
CI_ENVIRONMENT="development" CI_ENVIRONMENT="development"
# If set to development, you must run `npm run dev` to start the static assets server # Jeśli ustawione na development, należy uruchomić `npm run dev`, aby uruchomić serwer statycznych zasobów
vite.environment="development" vite.environment="development"
# By default, this is set to true in the app config. # Domyślnie jest to ustawione na true w konfiguracji aplikacji.
# For development, this must be set to false as it is # Dla środowiska deweloperskiego należy ustawić to na false, jak na lokalnym środowisku
# on a local environment app.forceGlobalSecureRequests=false
app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/" app.baseURL="http://localhost:8080/"
media.baseURL="http://localhost:8080/" media.baseURL="http://localhost:8080/"
admin.gateway="cp-admin" admin.gateway="cp-admin"
auth.gateway="cp-auth" auth.gateway="cp-auth"
database.default.hostname="mariadb" database.default.hostname="mariadb"
database.default.database="castopod" database.default.database="castopod"
database.default.username="castopod" database.default.username="castopod"
database.default.password="castopod" database.default.password="castopod"
cache.handler="redis" cache.handler="redis"
cache.redis.host = "redis" cache.redis.host = "redis"
# You may not want to use redis as your cache handler # Możesz nie chcieć używać Redis jako obsługi pamięci podręcznej
# Comment/remove the two lines above and uncomment # Wykomentuj/usuń dwie linie powyżej i odkomentuj
# the next line for file caching. # następną linię dla pamięci podręcznej plikowej.
#cache.handler="file" #cache.handler="file"
``` ```
> _NB._ You can tweak your environment by setting more environment variables > _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.
> 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 3. (dla Dockera Desktop) Dodaj sklonowany projekt do `Ustawienia` > `Zasoby` > `Udostępnianie plików` w Docker Desktop.
`Settings` > `Resources` > `File Sharing`
### 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/` 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! 🪄
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 1. Zainstaluj rozszerzenie VSCode [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) 2. `Ctrl/Cmd + Shift + P` > `Otwórz w kontenerze`.
2. `Ctrl/Cmd + Shift + P` > `Open in container`
> The VSCode window will reload inside the dev container. Expect several > Okno VSCode zostanie ponownie załadowane wewnątrz kontenera deweloperskiego. Oczekuj kilku minut podczas pierwszego ładowania, ponieważ budowane są wszystkie wymagane usługi.
> minutes during first load as it is building all necessary services.
**Note**: The dev container will start by running Castopod's php server. **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:
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
```bash ```bash
# run Vite dev server # uruchom serwer deweloperski Vite
npm run dev npm run dev
``` ```
If there is any issue with the php server not running, you can restart them Jeśli wystąpi problem z nieuruchomieniem serwera php, możesz go ponownie uruchomić za pomocą poniższych poleceń:
using the following commands:
```bash ```bash
# run Castopod server # uruchom serwer Castopod
php spark serve - 0.0.0.0 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 Jesteś teraz wewnątrz kontenera deweloperskiego, możesz używać konsoli VSCode (`Terminal` > `Nowy terminal`), aby uruchomić dowolne polecenie:
(`Terminal` > `New Terminal`) to run any command:
```bash ```bash
# PHP is installed # PHP jest zainstalowany
php -v php -v
# Composer is installed # Composer jest zainstalowany
composer -V composer -V
# npm is installed # npm jest zainstalowane
npm -v npm -v
# git is installed # git jest zainstalowany
git version git version
``` ```
For more info, see Więcej informacji znajdziesz w dokumentacji [VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers).
[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 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.
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
To see your changes, go to: Aby zobaczyć swoje zmiany, przejdź do:
- `http://localhost:8080/` for the Castopod app - `http://localhost:8080/` dla aplikacji Castopod
- `http://localhost:8888/` for the phpmyadmin interface: - `http://localhost:8888/` dla interfejsu phpmyadmin:
- username: **castopod** - nazwa użytkownika: **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.

View File

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

View File

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

View File

@ -1,35 +1,29 @@
--- ---
title: Official Docker images title: Oficjalne obrazy Dockera
sidebarDepth: 3 sidebarDepth: 3
--- ---
# Official Docker images # Oficjalne obrazy Dockera
Castopod pushes 3 Docker images to the Docker Hub during its automated build Podczas procesu automatycznego budowania, Castopod wysyła 3 obrazy Dockera na Docker Hub:
process:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all - [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): obraz Castopod zintegrowany z nginx unit
in one castopod image using nginx unit - [**`castopod/app`**](https://hub.docker.com/r/castopod/app): zestaw aplikacji zawierający wszystkie zależności Castopod
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle - [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): konfiguracja Nginx do Castopod
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database Dodatkowo, Castopod wymaga bazy danych zgodnej z MySQL. Baza danych Redis może zostać dodana jako mechanizm cache'owania.
can be added as a cache handler.
## Supported tags ## Wspierane tagi
- `develop` [unstable], latest development branch build - `devel` [unstable], najnowszy rozwijany branch
- `beta` [stable], latest beta version build - `beta` [stable], najnowsza wersja beta
- `latest` [stable], latest version build - `1.x.x` [stable], konkretne wydanie (od `1.0.0`)
- `1.x.x` [stable], specific version build (since `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/) [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 ```yml
version: "3.7" version: "3.7"
@ -87,13 +81,12 @@ can be added as a cache handler.
castopod-db: castopod-db:
``` ```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`, Musisz dostosować niektóre zmienne do swoich potrzeb (np. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`). `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 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/):
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
``` ```
#castopod #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 4. Uruchom `docker-compose up -d`, poczekaj, aż się zainicjalizuje na
`https://castopod.example.com/cp-install` to finish setting up Castopod! `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 | | Nazwa zmiennej | Typ (`default`) | Domyślnie |
| ------------------------------------- | ----------------------- | ---------------- | | --------------------------------- | ----------------------- | ---------- |
| **`CP_BASEURL`** | string | `undefined` | | **`CP_BASEURL`** | string | `undefined`|
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` | | **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL`|
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` | | **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"`|
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` | | **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` | | **`CP_ANALYTICS_SALT`** | string | `undefined`|
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` | | **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"`|
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` | | **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE`|
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` | | **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER`|
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` | | **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD`|
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` | | **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` | | **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` | | **`CP_REDIS_HOST`** | ?string | `"localhost"`|
| **`CP_REDIS_PASSWORD`** | ?string | `null` | | **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` | | **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` | | **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` | | **`CP_EMAIL_SMTP_HOST`** | ?string | `undefined` |
| **`CP_EMAIL_FROM`** | ?string | `undefined` | | **`CP_EMAIL_FROM`** | ?string | `undefined` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` | | **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"`|
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` | | **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` | | **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` | | **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `undefined` | | **`CP_ENABLE_2FA`** | ?boolean | `undefined` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` | | **`CP_MEDIA_FILE_MANAGER`** | ?string | `undefined` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` | | **`CP_MEDIA_S3_ENDPOINT`** | ?string | `undefined` |
| **`CP_MEDIA_S3_KEY`** | ?string | `undefined` | | **`CP_MEDIA_S3_KEY`** | ?string | `undefined` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` | | **`CP_MEDIA_S3_SECRET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_REGION`** | ?string | `undefined` | | **`CP_MEDIA_S3_REGION`** | ?string | `undefined` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` | | **`CP_MEDIA_S3_BUCKET`** | ?string | `undefined` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` | | **`CP_MEDIA_S3_PROTOCOL`** | ?number | `undefined` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` | | **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `undefined` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` | | **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `undefined` |
| **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` | | **`CP_DISABLE_HTTPS`** | ?[`0` or `1`] | `undefined` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` | | **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` | | **`CP_PHP_MEMORY_LIMIT`** | ?number (with suffix) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` | | **`CP_TIMEOUT`** | ?number | `900` |
- **castopod/web-server** - **castopod/web-server**
| Variable name | Type | Default | | Nazwa zmiennej | Typ | Domyślnie |
| ---------------------- | --------------------- | ------- | | -------------------------- | -------------------- | --------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` | | **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (with suffix) | `512M` | | **`CP_MAX_BODY_SIZE`** | ?number (with suffix)| `512M` |
| **`CP_TIMEOUT`** | ?number | `900` | | **`CP_TIMEOUT`** | ?number | `900` |

View File

@ -1,221 +1,103 @@
--- ---
title: Installation title: Instalacja
sidebarDepth: 3 sidebarDepth: 3
--- ---
# How to install Castopod? # Jak zainstalować Castopod?
Castopod was thought-out to be easy to install. Whether using dedicated or Castopod został stworzony tak, aby instalacja była łatwa. Niezależnie od tego,
shared hosting, you can install it on most PHP-MySQL compatible web servers. 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 Jeśli wolisz używać Dockera, możesz pominąć ten krok i przejść bezpośrednio do [dokumentacji Dockera](./docker.md) dla Castopoda.
[docker documentation](./docker.md) for Castopod.
::: :::
## Requirements ## Wymagania wstępne
- PHP v8.1 only - PHP w wersji 8.1
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher - Wersja MySQL 5.7 lub nowsza lub wersja MariaDB 10.2 lub nowsza
- HTTPS support - Wsparcie dla HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's - [Zsynchronizowany zegar](https://wiki.debian.org/NTP) dla walidacji przychodzących żądań federacji
incoming requests
### 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) - [intl](https://www.php.net/manual/pl/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php) - [libcurl](https://www.php.net/manual/pl/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php) - [mbstring](https://www.php.net/manual/pl/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**, - [gd](https://www.php.net/manual/pl/image.installation.php) z **JPEG**,
**PNG** and **WEBP** libraries. **PNG** i bibliotekami **WEBP**.
- [exif](https://www.php.net/manual/en/exif.installation.php) - [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) - json (włączone domyślnie - nie wyłączaj go)
- xml (enabled by default - don't turn it off) - xml (włączone domyślnie - nie wyłączaj go)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) - [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 Castopod działa tylko z bazą danych MySQL w wersji 5.7 lub nowszej. Wersje
will break with the previous MySQL v5.6 for example as its end of life was on 5.6 (które przestały być obsługiwane 5 lutego 2021 r.) lub wcześniejsze nie
February 5, 2021. będą działać.
::: :::
You will need the server hostname, database name, username and password to Aby zakończyć proces instalacji, będziesz potrzebować nazwy hosta serwera, nazwy
complete the installation process. If you do not have these, please contact your bazy danych, nazwy użytkownika i hasła. Jeśli nie posiadasz tych informacji,
server administrator. skontaktuj się z administratorem.
#### Privileges #### Uprawnienia dostępu
User must have at least these privileges on the database for Castopod to work: Użytkownik musi mieć co najmniej następujące uprawnienia dostępu do bazy danych, aby Castopod działał: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`,
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`, `INDEX`,`INSERT`, `SELECT`, `UPDATE`,`REFERENCES`, `CREATE VIEW`.
`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 Jeśli chcesz generować klipy wideo, wymagana jest wersja FFmpeg 4.1.8 lub nowsza.
want to generate Video Clips. The following extensions must be installed: Następujące rozszerzenia muszą być zainstalowane:
- **FreeType 2** library for - biblioteka **FreeType 2** dla [gd](https://www.php.net/manual/pl/image.installation.php).
[gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Other recommendations ### (Opcjonalnie) Inne zalecenia
- Redis for better cache performances. - Redis dla lepszej wydajności pamięci podręcznej.
- CDN for static files caching and better performances. - CDN dla pamięci podręcznej statycznych plików i lepszej wydajności.
- e-mail gateway for lost passwords. - Brama e-mail dla przypomnienia hasła.
## Install instructions ## Instrukcje instalacji
### Pre-requisites ### Przygotowanie
0. Get a Web Server with [requirements](#requirements) installed 0. Ożywienie serwera WWW zainstalowanymi [wymaganiami](#wymagania-wstępne)
1. Create a MySQL database for Castopod with a user having access and 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))
modification privileges (for more info, see 2. Włącz obsługę protokołu HTTPS dla swojej domeny z wykorzystaniem _certyfikatu SSL_.
[MySQL compatible database](#mysql-compatible-database)). 3. Pobierz i rozpakuj najnowszy [pakiet Castopod](https://castopod.org/) na serwerze WWW, jeśli tego jeszcze nie zrobiłeś.
2. Activate HTTPS on your domain with an _SSL certificate_. - ⚠️ Ustaw miejsce docelowe serwera WWW na podkatalog `public/` w katalogu `castopod`.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto 4. Dodaj **zadania cronowe** na swoim serwerze WWW dla różnych procesów w tle (dopasuj ścieżki odpowiednio):
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 ```bash
* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1 * * * * * /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 **Uwaga** - Jeśli nie dodasz tego zadania cron, następujące funkcje Castopoda nie będą działać:
will not work:
- Importing a podcast from an existing RSS feed - Importowanie podcastu z istniejącego kanału RSS
- Broadcasting social activities to your followers in the fediverse - Nadawanie aktywności społecznościowych obserwującym w federacji
- Broadcasting episodes to open hubs using - Rozgłaszanie odcinków do otwartych węzłów przy użyciu [WebSub](https://en.wikipedia.org/wiki/WebSub)
[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)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (recommended) Install Wizard ### (Zalecana metoda) Kreator instalacji
1. Run the Castopod install script by going to the install wizard page 1. Uruchom skrypt instalacyjny Castopoda, przechodząc do strony kreatora instalacji (`https://nazwa_twojej_domeny.com/cp-install`) w swojej ulubionej przeglądarce internetowej.
(`https://your_domain_name.com/cp-install`) in your favorite web browser. 2. Postępuj zgod
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,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 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).
framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we 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):
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
- `writable/` folder must be **readable** and **writable**. - Folder `writable/` powinien być dostępny w trybie **odczytu i zapisu**.
- `public/media/` folder must be **readable** and **writable**. - Folder `public/media/` powinien być dostępny w trybie **odczytu i zapisu**.
- any other file must be set to **readonly**. - 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 Na przykład, jeśli korzystasz z Apache lub NGINX z systemem Ubuntu, możesz użyć następujących poleceń:
following:
```bash ```bash
sudo chown -R root:root /path/to/castopod sudo chown -R root:root /path/to/castopod

View File

@ -1,109 +1,97 @@
--- ---
title: Update title: Aktualizacja
sidebarDepth: 3 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 ## Instrukcje aktualizacji
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
## 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 - patrz
database. [Czy powinienem wykonać kopię zapasową przed aktualizacją?](#czy-powinienem-wykonać-kopię-zapasową-przed-aktualizacją)
- cf. 1. Przejdź do strony
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating) [releases page](https://code.castopod.org/adaures/castopod/-/releases) i
sprawdź, czy twoja instancja jest zgodna z najnowszą wersją Castopod.
1. Go to the - patrz
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and [Gdzie mogę znaleźć wersję Castopod?](#gdzie-mogę-znaleźć-wersję-castopod)
see if your instance is up to date with the latest Castopod version
- cf. 2. Pobierz najnowszy pakiet wydania o nazwie `Castopod Package`, możesz wybrać
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version) między archiwami `zip` lub `tar.gz`.
2. Download the latest release package named `Castopod Package`, you may choose - ⚠️ Upewnij się, że pobierasz Pakiet Castopod, a **NIE** Kod źródłowy.
between the `zip` or `tar.gz` archives - 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 3. Na swoim serwerze:
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
3. On your server: - Usuń wszystkie pliki, oprócz `.env` i `public/media`.
- Skopiuj nowe pliki z pobranego pakietu na swój serwer.
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
::: info Note ::: info Note
You may need to reset files permissions as during the install process. Być może będziesz musiał ponownie ustawić uprawnienia plików tak, jak to
Check [Security Concerns](./security.md). zrobiłeś podczas procesu instalacji. Sprawdź
[Security Concerns](./security.md).
::: :::
4. Update your database schema from your `Castopod Admin` > `About` page or by 4. Zaktualizuj schemat bazy danych ze strony `Castopod Admin` > `About` lub
running: wykonaj polecenie:
```bash ```bash
php spark castopod:database-update php spark castopod:database-update
``` ```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` > 5. Wyczyść pamięć podręczną ze strony `Castopod Admin` > `Settings` > `general` >
`Housekeeping` `Housekeeping`.
6. ✨ Enjoy your fresh instance, you're all done! 6. ✨Ciesz się swoją nową instancją, skończyłeś!
::: info Note ::: info Note
Releases may come with additional update instructions (see Wersje mogą być dostarczane z dodatkowymi instrukcjami aktualizacji (patrz
[releases page](https://code.castopod.org/adaures/castopod/-/releases)). [releases notes page](https://code.castopod.org/adaures/castopod/-/releases)).
- cf. - patrz
[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ć?](#nie-aktualizowałem-mojej-instancji-od-dłuższego-czasu-co-powinienem-zrobić)
::: :::
## Fully Automated updates ## Całkowicie zautomatyzowane aktualizacje
> Coming soon... 👀 > 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 Przejdź do panelu administracyjnego Castopod, wersja wyświetli się na dole po lewej stronie.
corner.
Alternatively, you can find the version in the `app > Config > Constants.php` Możesz również znaleźć wersję w aplikacji
file. `> 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 Nie ma problemu! Po prostu uzyskaj najnowszą wersję, opisaną powyżej. Podczas wykonywania instrukcji aktualizacji (4) wykonuj je sekwencyjnie, od najstarszej do najnowszej.
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
> You may want to backup your instance depending on how long you haven't updated > Powinieneś wykonać kopię zapasową instancji zgodnie z datą Twojej ostatniej aktualizacji Castopod.
> Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to Na przykład, jeśli posiadasz wersję `v1.0.0-alpha.42` i chcesz zaktualizować do `v1.0.0-beta.1`:
`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 1. Pobierz najnowszą wersję, zastępując swoje pliki, ale zachowaj `.env` i `public/media`.
`public/media`.
2. Go through each release update instructions sequentially (from oldest to 2. Wykonuj instrukcje aktualizacji po kolei (od najstarszej do najnowszej).
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
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 Generalnie zalecamy regularne tworzenie kopii zapasowych plików Castopod i bazy danych, aby uniknąć utraty wszystkiego...
database to prevent you from losing it all…

View File

@ -2,173 +2,134 @@
sidebarDepth: 2 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] [![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 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ą.
engage and interact with their audience.
Castopod is easy to install and was built on top of Castopod jest łatwy w instalacji i został zaprojektowany przy użyciu [CodeIgniter4](https://codeigniter.com/), potężnego i bardzo małego frameworka PHP.
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
<div class="flex items-center"> <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> </div>
## Features ## Funkcje
- 🌱 &nbsp;Free & open-source (AGPL v3 License) - 🌱 &nbsp;Wolne, darmowe i open-source (Licencja AGPL v3)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics - 🔐 &nbsp;Skupione na świadczeniu usług suwerenności danych: Twoje treści, Twoja
belong to you, and&nbsp;you&nbsp;only publiczność i Twoje statystyki należą tylko do Ciebie
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding, - 🪄&nbsp;Funkcje Podcasting 2.0: GUID, blokada,
chapters, location, persons, soundbites, … transkrypcje, finansowanie, rozdziały, geolokalizacja, goście,
- 💬 &nbsp;Built-in social network: wycinki dźwiękowe, ...
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network - 💬 &nbsp;Wbudowane media społecznościowe:
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes - 🚀 &nbsp;Castopod jest częścią Fediversum, zdecentralizowanej sieci społecznościowej
- 📈 &nbsp;Built-in analytics: - ❤&nbsp;Tworzenie postów, udostępnianie, dodawanie do ulubionych i komentowanie
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant odcinków
- 🪙 &nbsp;Standard IABv2 audience measurement - 📈 &nbsp;Wbudowane statystyki:
- 🏡 &nbsp;On-premises analytics, no third party involved - ⚖️ &nbsp;Zgodne z RODO / CCPA / LGPD
- 📢 &nbsp;Built-in marketing tools: - 🪙&nbsp;Pomiar widowni IABv2
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …) - 🏡 &nbsp;Wbudowane statystyki, brak pośredniczących stron trzecich
- 📱 &nbsp;PWA: install as a standalone app - 📢 &nbsp;Wbudowane narzędzia marketingowe:
- 🎨 &nbsp;Customizable theme colors - ✅ &nbsp;Gotowe do SEO (meta-tagi open-graph, JSON-LD...)
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes - 📱 &nbsp;PWA: zainstaluj jako odrębną aplikację
- 🔉 &nbsp;Generate soundbites - 🎨 &nbsp;Dostosowywalne kolory motywu
- ▶️ &nbsp;Embeddable player, embed your episodes on any website - 🎬 &nbsp;Wygeneruj gotowe udostępnianie wideo z odcinków
- 💸 &nbsp;Monetization: - 🔉 &nbsp;Generuj wycinki dźwiękowe
- 🔗 &nbsp;Funding links - ▶️ &nbsp;Wbuduj swoje odcinki w dowolną stronę internetową
- 📲 &nbsp;listen-to-click ads - 💸 &nbsp;Monetyzacja:
- 🔗 &nbsp;Linki do finansowania
- 📲 &nbsp;reklama "listen-to-click”
- 🤝 &nbsp;value4value / WebMonetization - 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts - 💎 &nbsp;Płatne podcasty
- 📡 &nbsp;Publish your episodes everywhere with RSS: - 📡&nbsp;Opublikuj swoje odcinki wszędzie za pomocą RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, - 📱 &nbsp;Na wszystkich indeksach i w aplikacjach: Podcast Index,
Google Podcasts, Deezer, Podcast Addict, Podfriend, … Podcasty Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend...
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub - ⚡&nbsp;Natychmiastowe rozpowszechnianie Twoich odcinków za pomocą WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod - 📥 &nbsp;Importowanie podcastu: przenieś istniejący podcast do Castopod
- 📤 &nbsp;Move your podcast out of Castopod - 📤 &nbsp;Przenieś swój podcast do innego dostawcy
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want - 🔀 &nbsp;Wielojednostkowe: hostuj tyle podcastów, ile chcesz
- 👥 &nbsp;Multi-user: add contributors and set roles - 👥 &nbsp;Wielu użytkowników: dodawaj współtwórców i definiuj ich role
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German, - 🌎 &nbsp;Obsługa i18n: tłumaczenie na angielski, francuski, polski, niemiecki,
Brazilian Portuguese & Spanish… with portugalski, portugalski (brazylijski), hiszpański... i
[more to come](https://translate.castopod.org)! [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 Ekosystem podcastingu jest z natury zdecentralizowany: możesz stworzyć swój podcast
as an RSS file, publish it on the web and have it shared everywhere online. 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 W miarę rozwoju sposobów korzystania z podcastingu, coraz więcej osób zaczyna słuchać podcastów: czy
it is creators finding new ways to share their ideas, or listeners in the search to twórcy, którzy poszukują nowych sposobów dzielenia się swoimi pomysłami, czy słuchacze, którzy szukają
for better content. lepszego contentu.
With podcasting becoming more widely used, some companies are trying to shift it Podcasty zaczynają być coraz bardziej popularne, więc niektóre firmy próbują przesunąć je w kierunku bardziej kontrolowanej i scentralizowanej platformy.
towards a more controlled and centralized medium.
Castopod was created in an effort to provide an open and sustainable alternative 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ć.
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 Ten projekt jest kierowany przez społeczność open-source, a konkretnie przez Ruch Fediverse i Podcasting 2.0.
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
## Comparison with other solutions ## Porównanie z innymi rozwiązaniami
We believe that a solution is not necessarily right for everyone, it highly 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.
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 vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the 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.
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 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.
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 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ą.
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 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.
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 To pozwala na zoptymalizowanie procesów specyficznych dla podcastingu: od tworzenia podcastów i publikowania nowych odcinków po transmisję, marketing i analizy.
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 W zależności od Twoich potrzeb, Wordpress i Castopod mogą istnieć obok siebie, ponieważ mają takie same wymagania!
side as they share the same requirements!
### Castopod vs Funkwhale ### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as 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.
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 Funkwhale został początkowo zbudowany wokół muzyki. Później, w miarę rozwoju projektu, wprowadzono możliwość hostowania podcastów.
evolved, the ability to host podcasts was introduced.
Unlike Funkwhale, Castopod has been designed and built around podcasting 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, ...).
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 Dlatego jeśli chcesz hostować swoją muzykę, powinieneś raczej użyć Funkwhale, a jeśli chcesz hostować swoje podcasty, powinieneś używać Castopod.
Castopod if you want to host your podcasts.
### 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 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!
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 Każde z tych rozwiązań różni się od siebie, możesz porównać je na podstawie [listy funkcji](#funkcje).
[list of features](#features).
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 - 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.
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 - 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.
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
## Contributing ## Wpływaj
Love Castopod and would like to help? Take a look at the following documentation Podoba Ci się Castopod i chciałbyś pomóc? Zapoznaj się z dokumentacją, aby rozpocząć.
to get you&nbsp;started.
### Code of conduct ### Kodeks postępowania
Castopod has adopted a Code of Conduct that we expect project participants to Castopod przyjął Kodeks postępowania, którego oczekujemy, że uczestnicy projektu będą przestrzegać. Proszę przeczytać
adhere to. Please read the [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.
[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 ### Przewodnik dla blogerów
Read our [contributing guide](./contributing/guidelines.md) to learn about our 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.
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## Contributors ## Współpracownicy ✨
Thanks goes to these wonderful people Podziękowania dla tych wspaniałych ludzi
([emoji key](https://allcontributors.org/docs/en/emoji-key)): ([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 --> <!-- prettier-ignore-start -->
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
<table> <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://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://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://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/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://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://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://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://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>
<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> </tr>
</tbody> </tbody>
</table> </table>
@ -247,53 +150,22 @@ Thanks goes to these wonderful people
<!-- ALL-CONTRIBUTORS-LIST:END --> <!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the Ten projekt realizowany jest dzięki wsparciu sponsorów. Jeśli chcesz pomóc, rozważ [sponsorowanie rozwoju Castopod](https://opencollective.com/castopod/contribute).
[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"> <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://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="NLnet Logo" 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> </div>
## License ## Licencja
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/) [GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/). Prawa autorskie © 2020obecnie, [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/v/release/catladyintech/castopod?color=brightgreen&label=release&style=for-the-badge
https://img.shields.io/github/license/ad-aures/castopod?color=blue https://img.shields.io/github/license/ad-aures/castopod?color=blue&style=for-the-badge
https://img.shields.io/badge/contributions-welcome-brightgreen.svg https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=for-the-badge
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg https://img.shields.io/badge/%20%20%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge
https://img.shields.io/github/stars/ad-aures/castopod?style=social 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
[release]: https://code.castopod.org/adaures/castopod/-/releases https://img.shields.io/crowdin/v/castopod?color=brightgreen&style=for-the-badge
[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": "Contribuição",
"position": 3 "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 Ama o Castopod e quer ajudar? Muito obrigado, há algo para fazer para todos!
everybody!
Please take a moment to review this document in order to make the contribution 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.
process easy and effective for everyone involved.
Following these guidelines helps to communicate that you respect the time of the 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.
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 Nota
**Any** contribution made on a repository other than **Qualquer** contribuição feita em um repositório diferente do
[the original repository](https://code.castopod.org/adaures/castopod) will not [repositório original](https://code.castopod.org/adaures/castopod) não será aceita.
be accepted.
::: :::
## Using the issue tracker ## Utilizando o rastreador de problemas
The [issue tracker](https://code.castopod.org/adaures/castopod/-/issues) is the 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).
preferred channel for [bug reports](#bug-reports),
[features requests](#feature-requests) and
[submitting pull requests](#pull-requests).
## ⚠️ Security issues and vulnerabilities ## ⚠️ Problemas de segurança e vulnerabilidades
If you encounter any security issue or vulnerability in the Castopod source, 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)
please contact us directly by email at
[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. Um bug é um _problema demonstrável_ causado pelo código no repositório. Relatórios de bugs detalhados são extremamente úteis - obrigado!
Good bug reports are extremely helpful - thank you!
Guidelines for bug reports: Orientações para relatórios de bugs:
1. **Use the issue search** &mdash; check if the issue has already been 1. **Utilize a busca de problemas** &mdash; verifique se o problema já foi relatado.
reported.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the 2. **Verifique se o problema foi corrigido** &mdash; tente reproduzi-lo usando o branch `main` mais recente no repositório.
latest `main` branch in the repository.
3. **Isolate the problem** &mdash; ideally create a 3. **Isolar o problema** &mdash; idealmente, crie um [caso de teste reduzido](https://css-tricks.com/reduced-test-cases/) e um exemplo ao vivo.
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
A good bug report shouldn't leave others needing to chase you up for more 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.
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) > [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.
> have been created for this project. You may use them to help you follow those
> guidelines.
## Feature requests ## Solicitar recursos
Feature requests are welcome. But take a moment to find out whether your idea 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.
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 ## Solicitações de mesclagem
Good pull requests - patches, improvements, new features - are a fantastic help. 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.
They should remain focused in scope and avoid containing unrelated commits.
**Please ask first** before embarking on any significant pull request (e.g. **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.
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, 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).
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 Seguir o processo a seguir é a melhor maneira de incluir seu trabalho no projeto:
the project:
1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the 1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) o
project, clone your fork, and configure the remotes: projeto, clone seu fork e configure os remotos:
```bash ```bash
# Clone your fork of the repo into the current directory # Clone o fork do repositório para o diretório atual
git clone https://code.castopod.org/<your-username>/castopod.git 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 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 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 ```bash
git checkout main git checkout main
git pull upstream main git pull upstream main
``` ```
3. Create a new topic branch (off the `main` branch) to contain your feature, 3. Crie um novo branch de tópico (a partir do branch `main`) para conter sua alteração, mudança ou correção:
change, or fix:
```bash ```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 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.
[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: 5. Una localmente (ou rebase) o branch de desenvolvimento original no seu branch de tópico:
```bash ```bash
git pull [--rebase] upstream main 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 ```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) 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)
with a clear title and description. com um título e descrição claros.
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to **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).
license your work under the terms of the
[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 - 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)
unless it's an architectural change, a large feature, etc. If it is, then at - 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.
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. 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 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 O Castopod é um aplicativo da web baseado no framework `php` [CodeIgniter 4](https://codeigniter.com).
[CodeIgniter 4](https://codeigniter.com).
We use [Docker](https://www.docker.com/) quickly setup a dev environment. A 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.
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
> You don't need any prior knowledge of Docker to follow the next steps. > 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!
> However, if you wish to use your own environment, feel free to do so!
## 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 ```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 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:
the database and use redis as a cache handler:
```ini ```ini
CI_ENVIRONMENT="development" 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" vite.environment="development"
# By default, this is set to true in the app config. # Por padrão, isso é definido como true no arquivo de configuração do aplicativo.
# For development, this must be set to false as it is # Para desenvolvimento, isso deve ser definido como false, pois é
# on a local environment # em um ambiente local
app.forceGlobalSecureRequests=false app.forceGlobalSecureRequests=false
app.baseURL="http://localhost:8080/" app.baseURL="http://localhost:8080/"
@ -56,368 +51,93 @@ to help you kickstart your contribution.
cache.handler="redis" cache.handler="redis"
cache.redis.host = "redis" cache.redis.host = "redis"
# You may not want to use redis as your cache handler # Talvez você não queira usar o Redis como manipulador de cache.
# Comment/remove the two lines above and uncomment # Comente/remova as duas linhas acima e descomente
# the next line for file caching. # a próxima linha para cache de arquivo.
#cache.handler="file" # cache.handler="file"
``` ```
> _NB._ You can tweak your environment by setting more environment variables > _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.
> 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 3. (para desktop Docker) Adicione o repositório clonado a `Configurações` > `Recursos` > `Compartilhamento de Arquivos` do Docker Desktop
`Settings` > `Resources` > `File Sharing`
### 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/` 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! 🪄
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 1. Instale a extensão do VSCode [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
[Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
2. `Ctrl/Cmd + Shift + P` > `Open in container` 2. `Ctrl/Cmd + Shift + P` > `Open in container`
> The VSCode window will reload inside the dev container. Expect several > 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.
> minutes during first load as it is building all necessary services.
**Note**: The dev container will start by running Castopod's php server. **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:
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
```bash ```bash
# run Vite dev server # execute o servidor de desenvolvimento do Vite
npm run dev npm run dev
``` ```
If there is any issue with the php server not running, you can restart them Se houver algum problema com o servidor php não sendo executado, você pode reiniciá-lo usando os comandos a seguir:
using the following commands:
```bash ```bash
# run Castopod server # execute o servidor Castopod
php spark serve - 0.0.0.0 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 Agora você está **dentro do contêiner de desenvolvimento** e pode usar o console do VSCode (`Terminal` > `Novo Terminal`) para executar qualquer comando:
(`Terminal` > `New Terminal`) to run any command:
```bash ```bash
# PHP is installed # O PHP está instalado
php -v php -v
# Composer is installed # O Composer está instalado
composer -V composer -V
# npm is installed # O npm está instalado
npm -v npm -v
# git is installed # O git está instalado
git version git version
``` ```
For more info, see Para mais informações, consulte [VSCode Remote Containers](https://code.visualstudio.com/docs/remote/containers)
[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 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.
yourself to the
[CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html) for
more insights.
To see your changes, go to: Para ver suas alterações, acesse:
- `http://localhost:8080/` for the Castopod app - `http://localhost:8080/` para o aplicativo Castopod
- `http://localhost:8888/` for the phpmyadmin interface: - `http://localhost:8888/` para a interface phpmyadmin:
- username: **castopod** - nome de usuário: **castopod**
- password: **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 ```bash
# starts all services declared in docker-compose.yml file # inicie todos os serviços declarados no arquivo docker-compose.yml
# -d option starts the containers in the background # a opção -d inicia os contêineres em segundo plano
docker-compose up -d 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 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 docker ps -a
``` ```
> The `docker-compose up -d` command will boot 4 containers in the > O comando `docker-compose up -d` inicializará os 4 contêineres em segundo plano:
> background:
> >
> - `castopod_app`: a php based container with Castopod requirements > - `castopod_app`: um contêiner baseado em PHP com os requisitos do Castopod instalados
> 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": "Começando",
"position": 2 "position": 2
} }

View File

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

View File

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

View File

@ -1,223 +1,123 @@
--- ---
title: Installation title: Instalação
sidebarDepth: 3 sidebarDepth: 3
--- ---
# How to install Castopod? # Como instalar o Castopod
Castopod was thought-out to be easy to install. Whether using dedicated or O Castopod foi projetado para ser fácil de instalar. Se você estiver usando um
shared hosting, you can install it on most PHP-MySQL compatible web servers. 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 Se você preferir usar o Docker, você pode pular esta parte e ir diretamente para a [documentação Docker](./docker.md) para o Castopod.
[docker documentation](./docker.md) for Castopod.
::: :::
## Requirements ## Pré-requisitos
- PHP v8.1 only - PHP v8.1
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher - MySQL versão 5.7 ou superior ou MariaDB versão 10.2 ou superior
- HTTPS support - Suporte HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's - Um [ntp-synced clock](https://wiki.debian.org/NTP) para validar as solicitações de federação
incoming requests
### 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) - [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php) - [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php) - [mbstring](https://www.php.net/manual/fr/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**, - [gd](https://www.php.net/manual/en/image.installation.php) com bibliotecas **JPEG**, **PNG** e **WEBP**.
**PNG** and **WEBP** libraries. - [exif](https://www.php.net/manual/fr/exif.installation.php)
- [exif](https://www.php.net/manual/en/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) - json (habilitado por padrão - não desabilite)
- xml (enabled by default - don't turn it off) - xml (habilitado por padrão - não desabilite)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php) - [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 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.
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
::: :::
You will need the server hostname, database name, username and password to 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.
complete the installation process. If you do not have these, please contact your
server administrator.
#### 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: 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:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
`REFERENCES`, `CREATE VIEW`.
### (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 ### (Opcional) Outras recomendações
want to generate Video Clips. The following extensions must be installed:
- **FreeType 2** library for - Redis para melhor desempenho em cache.
[gd](https://www.php.net/manual/en/image.installation.php). - 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. ### Pré-requisitos
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
## Install instructions 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)).
### Pre-requisites 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.
0. Get a Web Server with [requirements](#requirements) installed - ⚠️ Certifique-se de apontar a raiz do documento do servidor da web para a subpasta `public/` da pasta `castopod`.
1. Create a MySQL database for Castopod with a user having access and 4. Adicione **tarefas cron** no seu servidor web para vários processos em segundo plano (substitua os caminhos conforme necessário):
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 ```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 **Observação** - Se você não adicionar essa tarefa cron, os seguintes recursos do Castopod não funcionarão:
will not work:
- Importing a podcast from an existing RSS feed - Importar um podcast de um feed RSS existente
- Broadcasting social activities to your followers in the fediverse - Transmitir atividades sociais para seus seguidores no Fediverso
- Broadcasting episodes to open hubs using - Transmitir episódios para hubs abertos usando o [WebSub](https://en.wikipedia.org/wiki/WebSub)
[WebSub](https://en.wikipedia.org/wiki/WebSub) - Gerar clipes de vídeo - [requer FFmpeg](#opcional-ffmpeg-v418-ou-superior-para-clipes-de-vídeo)
- Generating video clips -
[requires FFmpeg](#optional-ffmpeg-v418-or-higher-for-video-clips)
### (recommended) Install Wizard ### (Método recomendado) Assistente de instalação
1. Run the Castopod install script by going to the install wizard page 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.
(`https://your_domain_name.com/cp-install`) in your favorite web browser. 2. Siga as instruções exibidas.
2. Follow the instructions on your screen. 3. Comece a podcastar!
3. Start podcasting!
::: info Note :::info Nota
The install script writes a `.env` file in the package root. If you cannot go 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`.
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
::: :::
### Email/SMTP setup ### Configuração de e-mail/SMTP
Email configuration is required for some features to work properly (eg. 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, ...)
retrieving your forgotten password, sending instructions to premium subscribers,
…)
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 ```ini
# [] # [...]
# […] email.fromEmail="seu_endereço_de_email"
email.SMTPHost="seu_host_smtp"
email.fromEmail="your_email_address" email.SMTPUser="seu_usuario_smtp"
email.SMTPHost="your_smtp_host" email.SMTPPass="sua_senha_smtp"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
``` ```
#### Email config options #### Opções de configuração de e-mail
| Variable name | Type | Default | | Nome da variável | Tipo | Valor padrão |
| ---------------- | -------------------- | ------------ | | ---------------- | -------------------- | -------------- |
| **`fromEmail`** | string | `undefined` | | **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` | | **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` | | **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | 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,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 O Castopod é desenvolvido no [CodeIgniter4](https://codeigniter.com/), um framework PHP que incentiva as
framework that encourages [boas práticas de segurança](https://codeigniter.com/user_guide/concepts/security.html).
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we 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):
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
- `writable/` folder must be **readable** and **writable**. - A pasta `writable/` deve ter permissão de **leitura** e **escrita**.
- `public/media/` folder must be **readable** and **writable**. - A pasta `public/media/` deve ter permissão de **leitura** e **escrita**.
- any other file must be set to **readonly**. - 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 Por exemplo, se você estiver usando o Apache ou o NGINX com o Ubuntu, você pode executar os seguintes comandos:
following:
```bash ```bash
sudo chown -R root:root /path/to/castopod sudo chown -R root:root /caminho/para/castopod
sudo chown -R www-data:www-data /path/to/castopod/writable sudo chown -R www-data:www-data /caminho/para/castopod/writable
sudo chown -R www-data:www-data /path/to/castopod/public/media 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 sidebarDepth: 3
--- ---
# How to update Castopod? # Como instalar o Castopod?
After installing Castopod, you may want to update your instance to the latest 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 ⚡.
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
## Update instructions ## Instruções de atualização
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and 0. ⚠️ Antes de atualizar, recomendamos fortemente que você faça backup de seus arquivos Castopod e do banco de dados.
database.
- cf. - 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 1. Vá para a
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and [página de versões](https://code.castopod.org/adaures/castopod/-/releases) e
see if your instance is up to date with the latest Castopod version veja se sua instância está atualizada com a versão mais recente do Castopod
- cf. - 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 2. Baixe o pacote de atualização mais recente chamado `Pacote Castopod`, você pode escolher entre os arquivos `zip` ou `tar.gz`
between the `zip` or `tar.gz` archives
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code - ⚠️ Certifique-se de baixar o Pacote Castopod e **NÃO** o Código Fonte
- Note that you can also download the latest package from - Observe que você também pode baixar o pacote mais recente em
[castopod.org](https://castopod.org/) [castopod.org](https://castopod.org/)
3. On your server: 3. Em seu servidor:
- Remove all files except `.env` and `public/media` - Apague todos os arquivos, exceto `.env` e `public/media`
- Copy the new files from the downloaded package into your server - 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. Você pode precisar redefinir as permissões de arquivo, como no processo de instalação. Consulte
Check [Security Concerns](./security.md). [Preocupações de segurança](./security.md).
::: :::
4. Update your database schema from your `Castopod Admin` > `About` page or by 4. Atualize o esquema do banco de dados a partir da página `Castopod Admin` > `Sobre` ou executando:
running:
```bash ```bash
php spark castopod:database-update php spark castopod:database-update
``` ```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` > 5. Limpe seu cache a partir da página `Castopod Admin` > `Configurações` > `geral` >
`Housekeeping` `Manutenção`
6. ✨ Enjoy your fresh instance, you're all done! 6. ✨ Aproveite sua nova instância, você terminou!
::: info Note ::: info Nota
Releases may come with additional update instructions (see Versões podem ter instruções de atualização adicionais (consulte a
[releases page](https://code.castopod.org/adaures/castopod/-/releases)). [página de notas de versão](https://code.castopod.org/adaures/castopod/-/releases)).
- cf. - 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 Vá para o painel de administração do Castopod, a versão será exibida no canto inferior esquerdo.
corner.
Alternatively, you can find the version in the `app > Config > Constants.php` Você também pode encontrar a versão no aplicativo
file. `> 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 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.
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
> You may want to backup your instance depending on how long you haven't updated > Você deve fazer backup de sua instância de acordo com a data da sua última atualização do Castopod.
> Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to Por exemplo, se você está na versão `v1.0.0-alpha.42` e deseja atualizar para
`v1.0.0-beta.1`: 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 1. Baixe a versão mais recente, substitua seus arquivos mantendo
`public/media`. `.env` e `public/media`.
2. Go through each release update instructions sequentially (from oldest to 2. Execute as instruções de atualização uma a uma (das mais antigas para as mais recentes).
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
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 Em geral, recomendamos fazer backups regulares de seus arquivos Castopod e banco de dados para evitar qualquer perda...
database to prevent you from losing it all…

View File

@ -2,298 +2,162 @@
sidebarDepth: 2 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] [![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 O Castopod é uma plataforma gratuita e de código aberto desenvolvida para
engage and interact with their audience. podcasters que desejam se conectar e interagir com seu público.
Castopod is easy to install and was built on top of O Castopod é fácil de instalar e foi desenvolvido com
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very [CodeIgniter4](https://codeigniter.com/), um poderoso framework PHP muito
small footprint. compacto.
<div class="flex items-center"> <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> </div>
## Features ## Características
- 🌱 &nbsp;Free & open-source (AGPL v3 License) - 🌱 &nbsp;Livres, gratuitos e de código aberto (Licença AGPL v3)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics - 🔐 &nbsp;Focado na soberania de dados: seu conteúdo, seu público e suas estatísticas pertencem apenas a você
belong to you, and&nbsp;you&nbsp;only - 🪄&nbsp;Recursos do Podcasting 2.0: GUID, travamento,
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding, transcrições, financiamento, capítulos, geolocalização, participantes,
chapters, location, persons, soundbites, … trechos de áudio, ...
- 💬 &nbsp;Built-in social network: - 💬 &nbsp;Rede social integrada:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network - 🚀 &nbsp;O Castopod faz parte do Fediverso, uma rede social descentralizada
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes - ❤️ &nbsp;Crie publicações, compartilhe, favorite e comente episódios
- 📈 &nbsp;Built-in analytics: - 📈 &nbsp;Estatísticas integradas:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant - ⚖️ &nbsp;Compatível com GDPR / CCPA / LGPD
- 🪙 &nbsp;Standard IABv2 audience measurement - 🪙&nbsp;Medição de audiência IABv2
- 🏡 &nbsp;On-premises analytics, no third party involved - 🏡 &nbsp;Estatísticas integradas, sem intermediários de terceiros
- 📢 &nbsp;Built-in marketing tools: - 📢 &nbsp;Ferramentas de marketing integradas:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …) - ✅ &nbsp;Preparado para SEO (meta-tags open-graph, JSON-LD...)
- 📱 &nbsp;PWA: install as a standalone app - 📱 &nbsp;PWA: instale como um aplicativo independente
- 🎨 &nbsp;Customizable theme colors - 🎨 &nbsp;Personalize as cores do tema
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes - 🎬 &nbsp;Crie clipes de vídeo para compartilhar a partir de episódios
- 🔉 &nbsp;Generate soundbites - 🔉 &nbsp;Crie trechos de áudio
- ▶️ &nbsp;Embeddable player, embed your episodes on any website - ▶️ &nbsp;Incorpore seus episódios em qualquer site
- 💸 &nbsp;Monetization: - 💸 &nbsp;Monetização:
- 🔗 &nbsp;Funding links - 🔗 &nbsp;Links para financiamento
- 📲 &nbsp;listen-to-click ads - 📲 &nbsp;Publicidade "listen-to-click"
- 🤝 &nbsp;value4value / WebMonetization - 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts - 💎 &nbsp;Podcasts premium
- 📡 &nbsp;Publish your episodes everywhere with RSS: - 📡&nbsp;Publique seus episódios em qualquer lugar com RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, - 📱 &nbsp;Em todos os diretórios e aplicativos: Podcast Index,
Google Podcasts, Deezer, Podcast Addict, Podfriend, … Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend...
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub - ⚡&nbsp;Transmita seus episódios instantaneamente com o WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod - 📥 &nbsp;Importe seu Podcast: migre seu podcast existente para o Castopod
- 📤 &nbsp;Move your podcast out of Castopod - 📤 &nbsp;Mova seu podcast para outro provedor de hospedagem
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want - 🔀 &nbsp;Multi-inquilino: hospede quantos podcasts você quiser
- 👥 &nbsp;Multi-user: add contributors and set roles - 👥 &nbsp;Multiusuário: adicione colaboradores e defina suas funções
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German, - 🌎 &nbsp;suporte de i18n: traduzido para inglês, francês, polonês, alemão,
Brazilian Portuguese & Spanish… with português, brasileiro e espanhol... e
[more to come](https://translate.castopod.org)! [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 O ecossistema de podcast é descentralizado por natureza: você pode criar seu podcast
as an RSS file, publish it on the web and have it shared everywhere online. 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 À medida que os hábitos evoluem, cada vez mais pessoas estão se interessando por podcasts: sejam
it is creators finding new ways to share their ideas, or listeners in the search criadores buscando novas maneiras de compartilhar suas ideias, ou ouvintes em busca
for better content. de um conteúdo melhor.
With podcasting becoming more widely used, some companies are trying to shift it Com o uso crescente de podcasts, algumas empresas estão tentando centralizar e controlar
towards a more controlled and centralized medium. essa mídia.
Castopod was created in an effort to provide an open and sustainable alternative O Castopod foi criado com o objetivo de fornecer uma alternativa aberta e sustentável
to hosting your podcasts, promoting decentralization to ensure that podcasters para hospedar seus podcasts, promovendo a descentralização para garantir que a criatividade dos podcasters possa se expressar.
creativity can express itself.
This project is pushed by the open-source community, and specifically by the Este projeto é impulsionado pela comunidade de código aberto, e especificamente pelos movimentos
[Fediverse](https://fediverse.party/en/fediverse/) and [Fediverse](https://fediverse.party/en/fediverse/) e
[Podcasting 2.0](https://podcastindex.org/) movements. [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 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ê.
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 vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the 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.
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 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.
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 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.
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 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.
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 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.
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 Finalmente, dependendo das suas necessidades, o Wordpress e o Castopod podem até conviver lado a lado, pois compartilham os mesmos requisitos!
side as they share the same requirements!
### Castopod vs Funkwhale ### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as 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.
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 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.
evolved, the ability to host podcasts was introduced.
Unlike Funkwhale, Castopod has been designed and built around podcasting 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, ...).
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 Portanto, use o Funkwhale se você deseja hospedar sua música e use o Castopod se você deseja hospedar seus podcasts.
Castopod if you want to host your 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 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!
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 Cada uma dessas soluções é diferente das outras, você pode compará-las com a [lista de recursos](#características).
[list of features](#features).
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 - 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.
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 - 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.
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
## Contributing ## Contribuindo
Love Castopod and would like to help? Take a look at the following documentation Gostou do Castopod e gostaria de ajudar? Consulte a documentação a seguir para começar a contribuir.
to get you&nbsp;started.
### Code of conduct ### Código de conduta
Castopod has adopted a Code of Conduct that we expect project participants to 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.
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 ### Guia de contribuição
Read our [contributing guide](./contributing/guidelines.md) to learn about our 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.
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
## Contributors ✨ ## Contribuidores ✨
Thanks goes to these wonderful people Agradecimentos a essas pessoas maravilhosas ([legenda de emojis](https://allcontributors.org/docs/en/emoji-key)):
([emoji key](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 --> <!-- prettier-ignore-start -->
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
<table> <table>
<tbody> <tbody>
<tr> <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://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://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/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://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://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://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://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>
<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>
<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://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://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://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://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://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://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://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://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://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://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://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>
<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>
<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://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://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://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://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://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://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://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://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://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://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://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 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> <td align="center" valign="top" width="14.28%"><a
</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

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