Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • adaures/castopod
  • mkljczk/castopod-host
  • spaetz/castopod-host
  • PatrykMis/castopod
  • jonas/castopod
  • ajeremias/castopod
  • misuzu/castopod
  • KrzysztofDomanczyk/castopod
  • Behel/castopod
  • nebulon/castopod
  • ewen/castopod
  • NeoluxConsulting/castopod
  • nateritter/castopod-og
  • prcutler/castopod
14 results
Show changes
Showing
with 1328 additions and 127 deletions
---
title: Welcome 👋
---
import { LinkCard } from "@astrojs/starlight/components";
Castopod is a free & open-source hosting platform made for podcasters who want
engage and interact with their audience.
Castopod is easy to install and was built on top of
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
<LinkCard title="Install" href="./getting-started/install" />
## Features
- 🌱 Free & open-source (AGPL v3 License)
- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
to you, and you only
- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
- 📈 Built-in analytics:
- ⚖️ GDPR / CCPA / LGPD compliant
- 🪙 Standard IABv2 audience measurement
- 🏡 On-premises analytics, no third party involved
- 📢 Built-in marketing tools:
- ✅ SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 PWA: install as a standalone app
- 🎨 Customizable theme colors
- 🎬 Generate ready-to-share Video clips from episodes
- 🔉 Generate soundbites
- ▶️ Embeddable player, embed your episodes on any website
- 💸 Monetization:
- 🔗 Funding links
- 📲 listen-to-click ads
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
It is in fact one of the only media to have stayed this way for a long time.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
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 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 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 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 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 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.
## 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).
[![Ad Aures Logo](../../../assets/images/sponsors/adaures.svg)](https://adaures.com/)
[![NLnet Logo](../../../assets/images/sponsors/nlnet.svg)](https://nlnet.nl/)
## License
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
---
title: Verifikacija i Odobravanje
sidebarDepth: 3
---
# Verifikacija i Odobravanje
Castopod upravlja verifikacijom i odobravanjem koristeći `codeigniter/shield` u
paru sa prilagođenim pravilima. Uloge i dozvole su definisane na dva nivoa:
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [po nalogu](#1-instance-wide-roles-and-permissions)
2. [po podkastu](#2-per-podcast-roles-and-permissions)
## 1. Uloge i dozvole po nalogu
## 1. Instance wide roles and permissions
### Uloge po nalogu
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
| uloga | opis | dozvola |
| ------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------ |
| Super administrator | Ima kompletnu kontrolu nad Castopod nalogom. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Menadžer | Upravlja sadržajem na Castopod-u. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podkaster | Opšti korisnici Castopod-a. | admin.access |
| role | description | permissions |
| ------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| Super administrator | Ima kompletnu kontrolu nad Castopod-om. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Menadžer | Upravlja sadržajem na Castopod-u. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podkaster | Opšti korisnici Castopod-a. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Dozvole po nalogu
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| dozvola | opis |
| ----------------------- | --------------------------------------------------------------- |
| admin.access | Može pristupiti administratorskom delu Castopod-a. |
| admin.settings | Može pristupiti podešavanjima Castopod-a. |
| users.manage | Može upravljati korisnicima Castopod-a. |
| persons.manage | Može upravljati osobama. |
| pages.manage | Može upravljati stranicama. |
| podcasts.view | Može videti sve podkaste. |
| podcasts.create | Može napraviti nove podkaste. |
| podcasts.import | Može uvesti nove podkaste. |
| fediverse.manage-blocks | Može blokirati interakciju Castopoda i fediverse naloga/domena. |
| permission | description |
| ----------------------- | -------------------------------------------------------------- |
| admin.access | Može pristupiti administratorskom delu Castopod-a. |
| admin.settings | Može pristupiti podešavanjima Castopod-a. |
| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Može upravljati korisnicima Castopod-a. |
| persons.manage | Može upravljati osobama. |
| pages.manage | Može upravljati stranicama. |
| podcasts.view | Može videti sve podkaste. |
| podcasts.create | Može napraviti nove podkaste. |
| podcasts.import | Može uvesti nove podkaste. |
| fediverse.manage-blocks | Može blokirati interakciju Castopoda i fedivers naloga/domena. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Uloge i dozvole po podkastu
## 2. Per podcast roles and permissions
### Uloge po podkastu
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| uloga | opis | dozvola |
| ------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Administrator | Ima kompletnu kontrolu nad podkastom #{id}. | \* |
| Urednik | Upravlja sadržajem i objavama podkasta #{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 | Upravlja sadržajem podkasta #{id} ali ne može da ga objavi. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gost | Saradnik na podkastu #{id}. | view, episodes.view |
| role | description | permissions |
| ------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Administrator | Ima kompletnu kontrolu nad podkastom #\{id\}. | \* |
| Urednik | Upravlja sadržajem i objavama podkasta #\{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 | Upravlja sadržajem podkasta #\{id\} ali ne može da ga objavi. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gost | Saradnik na podkastu #\{id\}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
{/* AUTH-PODCAST-ROLES-LIST:END */}
### Dozvole po podkastu
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| dozvola | opis |
| ---------------------------- | -------------------------------------------------------------------------------------- |
| view | Može videti upravljačku tablu i analitiku podkasta #{id}. |
| edit | Može uređivati podkast #{id}. |
| delete | Može obrisati podkast #{id}. |
| manage-import | Može upravljati uvozom podkasta #{id}. |
| manage-persons | Može upravljati osobama na podkastu #{id}. |
| manage-subscriptions | Može upravljati pretplatama na podkast #{id}. |
| manage-contributors | Može upravljati saradnicima na podkastu #{id}. |
| manage-platforms | Može ubaciti/izbaciti veze ka platformama podkasta #{id}. |
| manage-publications | Može objaviti podkast #{id}. |
| manage-notifications | Može videti obaveštenja i označiti ih kao pročitana za podkast #{id}. |
| interact-as | Može da komunicira kao podkast #{id} i deli, odgovara na i stavlja u omiljene postove. |
| episodes.view | Može videti upravljačku tablu i analitiku podkasta #{id}. |
| episodes.create | Može napraviti epizodu podkasta #{id}. |
| episodes.edit | Može uređivati epizodu podkasta #{id}. |
| episodes.delete | Može obrisati epizodu podkasta #{id}. |
| episodes.manage-persons | Može upravljati pretplatama na podkast #{id}. |
| episodes.manage-clips | Može upravljati video klipovima i zvučnim isečcima podkasta #{id}. |
| episodes.manage-publications | Može objaviti podkast #{id}. |
| episodes.manage-comments | Može dodati/obrisati komentar na epizodi podkasta #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->
{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | ---------------------------------------------------------------------------------------- |
| view | Može videti upravljačku tablu i analitiku podkasta #\{id\}. |
| edit | Može uređivati podkast #\{id\}. |
| delete | Može obrisati podkast #\{id\}. |
| manage-import | Može sinhronizovati uvezen podkast #\{id\}. |
| manage-persons | Može upravljati pretplatama na podkast #\{id\}. |
| manage-subscriptions | Može upravljati pretplatama na podkast #\{id\}. |
| manage-contributors | Može upravljati saradnicima na podkastu #\{id\}. |
| manage-platforms | Može ubaciti/izbaciti veze ka platformama podkasta #\{id\}. |
| manage-publications | Može objaviti podkast #\{id\}. |
| manage-notifications | Može videti obaveštenja i označiti ih kao pročitana za podkast #\{id\}. |
| interact-as | Može da komunicira kao podkast #\{id\} i deli, odgovara na i stavlja u omiljene postove. |
| episodes.view | Može videti upravljačku tablu i analitiku epizoda podkasta #\{id\}. |
| episodes.create | Može napraviti epizode podkasta #\{id\}. |
| episodes.edit | Može uređivati epizode podkasta #\{id\}. |
| episodes.delete | Može obrisati epizode podkasta #\{id\}. |
| episodes.manage-persons | Može upravljati osobama na epizodama podkasta #\{id\}. |
| episodes.manage-clips | Može upravljati video klipovima i zvučnim isečcima podkasta #\{id\}. |
| episodes.manage-publications | Može da objavi/poništi objavljivanje epizoda i postova podkasta #\{id\}. |
| episodes.manage-comments | Može dodati/obrisati komentar na epizodi podkasta #\{id\}. |
{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
---
title: Zvanične Docker slike
---
Castopod gura 3 Docker slike u Docker Hub tokom njegovog automatizovanog procesa
izrade:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): sve u
jednoj castopod slici koristeći ngink jedinicu
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): paket aplikacija
sa svim Castopod zavisnostima
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server):
Nginx konfiguracija za Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
## Podržani tagovi
- `develop` [nestabilno], najnoviji razvojni ogranak
- `beta` [stabilno], poslednja beta verzija
- `latest` [stabilno], poslednja verzija
- `1.x.x` [stabilno], specifična verzija (od `1.0.0`)
## Primer upotrebe
1. Instalirajte [docker](https://docs.docker.com/get-docker/) i
[docker-compose](https://docs.docker.com/compose/install/)
2. Napravite `docker-compose.yml` datoteku sa sledećim:
```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
CP_REDIS_PASSWORD: changeme
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"
command: --requirepass changeme
volumes:
- castopod-cache:/data
networks:
- castopod-app
volumes:
castopod-media:
castopod-db:
castopod-cache:
networks:
castopod-app:
castopod-db:
```
Morate prilagoditi neke varijable svojim potrebama (npr. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
3. Podesite obrnuti proksi za TLS (SSL/HTTPS)
TLS is mandatory for ActivityPub to work. This job can easily be handled by a
reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
4. Pokrenite `docker-compose up -d`, sačekajte da se pokrene i idite na
`https://castopod.example.com/cp-install` da biste završili instalaciju
Castopod-a!
5. You're all set, start podcasting! 🎙️🚀
## Promenljive okruženja
- **castopod/castopod** i **castopod/app**
| Naziv promenljive | Vrsta (`uobičajeno`) | Podrazumevano |
| ------------------------------------- | ---------------------------- | ---------------- |
| **`CP_BASEURL`** | string | `nedefinisano` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `nedefinisano` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"datoteka"` ili `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
| **`CP_REDIS_DATABASE`** | ?number | `0` |
| **`CP_EMAIL_SMTP_HOST`** | ?string | `nedefinisano` |
| **`CP_EMAIL_FROM`** | ?string | `nedefinisano` |
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` ili `"ssl"`] | `"tls"` |
| **`CP_ENABLE_2FA`** | ?boolean | `nedefinisano` |
| **`CP_MEDIA_FILE_MANAGER`** | ?string | `nedefinisano` |
| **`CP_MEDIA_S3_ENDPOINT`** | ?string | `nedefinisano` |
| **`CP_MEDIA_S3_KEY`** | ?string | `nedefinisano` |
| **`CP_MEDIA_S3_SECRET`** | ?string | `nedefinisano` |
| **`CP_MEDIA_S3_REGION`** | ?string | `nedefinisano` |
| **`CP_MEDIA_S3_BUCKET`** | ?string | `nedefinisano` |
| **`CP_MEDIA_S3_PROTOCOL`** | ?number | `nedefinisano` |
| **`CP_MEDIA_S3_PATH_STYLE_ENDPOINT`** | ?boolean | `nedefinisano` |
| **`CP_MEDIA_S3_KEY_PREFIX`** | ?string | `nedefinisano` |
| **`CP_DISABLE_HTTPS`** | ?[`0` ili `1`] | `nedefinisano` |
| **`CP_MAX_BODY_SIZE`** | ?number (sa sufiksom) | `512M` |
| **`CP_PHP_MEMORY_LIMIT`** | ?number (sa sufiksom) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
- **castopod/veb server**
| Naziv promenljive | Vrsta | Podrazumevano |
| ---------------------- | --------------------- | ------------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |
| **`CP_MAX_BODY_SIZE`** | ?number (sa sufiksom) | `512M` |
| **`CP_TIMEOUT`** | ?number | `900` |
---
title: Kako Instalirati Castopod?
---
import { Aside } from "@astrojs/starlight/components";
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
- PHP v8.4 or higher
- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
### PHP v8.4 or higher
PHP version 8.4 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
**PNG** and **WEBP** libraries.
- [exif](https://www.php.net/manual/en/exif.installation.php)
Additionally, make sure that the following extensions are enabled in your PHP:
- json (enabled by default - don't turn it off)
- xml (enabled by default - don't turn it off)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
### MySQL compatible database
> We recommend using [MariaDB](https://mariadb.org).
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.
## Privilegije
### 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 haven’t 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. **FreeType 2** biblioteka za
[gd](https://www.php.net/manual/en/image.installation.php).
2. Follow the instructions on your screen.
3. Start podcasting!
<Aside>
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.
</Aside>
### Preduslovi
1. Nabavite veb server sa instaliranim [preduslovima](#requirements)
2. Napravite MySQL bazu podataka za Castopod sa korisnikom koji ima pristup i
privilegije da modifikuje (za više informacija, pogledajte
[MySQL kompatibilna baza podataka](#mysql-compatible-database)).
```sh
php spark install:init-database
```
3. Aktivirajte HTTPS na vašem domenu sa _SSL sertifikatom_.
```sh
php spark install:create-superadmin
```
4. Preuzmite i otpakujte najnoviji [Castopod Paket](https://castopod.org/) na
veb server ako to već niste uradili.
### (preporučeno) Čarobnjak za instalaciju
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"
```
#### Multimedijalno skladište
| 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>
---
title: Bezbednost
title: Bezbednosni interesi
---
# Bezbednosni interesi
Castopod je napravljen na [CodeIgniter4](https://codeigniter.com/), PHP okviru
koji podstiče
[dobre bezbednosne prakse](https://codeigniter.com/user_guide/concepts/security.html).
......
---
title: Ažuriranje
sidebarDepth: 3
title: Kako da ažurirate Castopod?
---
# Kako da ažurirate Castopod?
import { Aside } from "@astrojs/starlight/components";
Nakon instalacije Castopod-a, možete poželeti da ažurirate svoju instancu na
najnoviju verziju kako bi ste uživali u najnovijim opcijama ✨, sređenim
......@@ -36,12 +35,12 @@ bagovima 🐛 i unapređenim performansama ⚡.
- Uklonite sve datoteke sem `.env` i `public/media`
- Kopirajte nove datoteke iz preuzetog paketa na vaš server
::: info Napomena
<Aside>
Možda ćete morati da resetujete dozvole za datoteke kao tokom procesa
instalacije. Proverite [Bezbednosne interese](./security.md).
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
:::
</Aside>
4. Ažurirajte svoju šemu baze podataka iz vaše `Castopod Admin` > `About`
stranice ili tako što ćete pokrenuti:
......@@ -51,21 +50,22 @@ bagovima 🐛 i unapređenim performansama ⚡.
```
5. Očistite keš iz `Castopod Admin` > `Settings` > `general` > `Housekeeping`
6. ✨ Uživajte u svežoj instanci, završili ste!
::: info Napomena
<Aside>
Izdanja mogu doći sa dodatnim uputstvima za ažuriranje (pogledajte
[stranicu izdanja](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[Nisam ažurirao/la svoju instancu jako dugo… Šta treba da uradim?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
[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)
:::
</Aside>
## Potpuno automatsko ažuriranje
> Stiže uskoro... 👀
> Coming soon... 👀
## Često postavljana pitanja (česta pitanja)
......@@ -76,11 +76,11 @@ donjem levom uglu.
Alternativno, verziju možete pronaći u `app > Config > Constants.php` datoteci.
### Nisam ažurirao/la svoju instancu veoma dugo… Šta treba da uradim?
### I haven't updated my instance in a long time… What should I do?
Nema problema! Samo preuzmite poslednju verziju na način opisan iznad. Samo,
kada idete kroz uputstva izdanja (4), izvodite ih jedno za drugim, od
najstarijih do najnovijih.
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
> Možda ćete želeti da napravite rezervnu kopiju instance u zavisnosti od toga
> koliko dugo niste ažurirali Castopod.
......
---
title: Dobrodošli 👋
---
import { LinkCard } from "@astrojs/starlight/components";
Castopod je besplatna platforma otvorenog koda napravljena za podkastere koji
žele interakciju sa svojom publikom.
Castopod se lako instalira i napravljen je na
[CodeIgniter4](https://codeigniter.com/), moćnom PHP okviru sa jako malim
otiskom (footprint).
<LinkCard title="Instaliraj" href="./getting-started/install" />
## Funkcionalnosti
- 🌱 Besplatan i otvorenog koda (AGPL v3 License)
- 🔐 Fokusiran an suverenitet podataka: vaš sadržaj, publika i analitika pripada
vama i samo vama
- 🪄 Podkasting 2.0 funkcionalnosti: GUID, zaključan, transkripti, podrška,
poglavlja, lokacija, posobe, zvučni isečci, …
- 💬 Ugrađena društvena mreža:
- 🚀 Castopod je deo Fediversa, decentralizovane društvene mreže
- ❤️ Napravite objave, delite, dodajte u omiljene i komentarišite epizode
- 📈 Ugrađena analitika:
- ⚖️ U skladu sa GDPR / CCPA / LGPD
- 🪙 Merenje publike putem IABv2 standarda
- 🏡 Analitika na licu mesta, bez uključenosti trećih strana
- 📢 Ugrađeni marketinški alati:
- ✅ SEO spremno (open-graph meta-tags, JSON-LD, …)
- 📱 PWA: instalirajte kao samostojeću aplikaciju
- 🎨 Prilagodljive boje teme
- 🎬 Napravite video isečke iz epizoda koji su spremni za deljenje
- 🔉 Napravite audio isečke
- ▶️ Plejer koji možete koristiti na svom sajtu (embed)
- 💸 Monetizacija:
- 🔗 Linkovi za podršku publike
- 📲 Slušaj i klikni reklame
- 🤝 value4value / Veb Monetizacija
- 💎 Premijum podkasti
- 📡 Objavite svoje epizode svugde uz RSS:
- 📱 Na svim agregatorima i aplikacijama: Podcast Index, Apple Podcasts,
Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Emitujte svoje epizode instant uz WebSub
- 📥 Uvoz podkasta: prebacite svoj postojeći podkast na Castopod
- 📤 Prebacite svoj podkast sa Castopod-a
- 🔀 Mreža: hostujte koliko god želite podkasta
- 👥 Više korisnika: dodajte saradnike i odredite njihove uloge
- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivacija
Ekosistem podcasta je po prirodi decentralizovan: možete kreirati svoj podkast
kao RSS datoteku, objavite je na vebu i deliti svuda na mreži.
To je zapravo jedan od retkih medija koji je ostao decentralizovan ovako dugo.
Kako se upotreba razvija, sve više ljudi ulazi u podkaste: ili kao kreatori koji
pronalaze nove načine da podele svoje ideje ili kao slušaoci u potrazi za boljim
sadržajem.
Kako podkasting postaje sve više korišćen, neke kompanije pokušavaju da ga
promene ka kontrolisanijem i centralizovanijem mediju.
Castopod je stvoren u nastojanju da pruži otvorenu i održivu alternativu za
hostovanje vaših podkasta, promovišući decentralizaciju kako bi se osiguralo da
podkasterska kreativnost može da se izrazi.
Ovaj projekat gura zajednica otvorenog koda, ponajviše
[Fedivers](https://fediverse.party/en/fediverse/) i
[Podcasting 2.0](https://podcastindex.org/) pokreti.
## Poređenje sa drugim rešenjima
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 you.
### Castopod protiv Wordpress-a
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 it.
Isto kao i Wordpress, Castopod je besplatan i otvorenog koda, napravljen
koristeći PHP i MySQL baze podataka i spakovan na način koji vam omogućava
jednostavnu instalaciju na većini veb servera.
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 journey.
Ovo omogućava optimizaciju procesa specifičnih za podcasting: u rasponu od
kreiranja vaših podkasta i objavljivanja novih epizoda sve do emitovanja,
marketinga i analitike.
Konačno, u zavisnosti od vaših potreba, Wordpress i Castopod mogu čak i da
funkcionišu zajedno jer dele iste zahteve!
### Castopod protiv Funkwhale-a
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, …).
Tako da bi ste verovatno trebali da koristite Funkwhale ukoliko želite da
hostujete svoju muziku a Castopod ukoliko želite da hostujete svoje podkaste.
### Castopod protiv drugih podkast hosting-a
Postoji mnogo različitih rešenja za hostovanje vaših podkasta, neka od njih su
stvarno fantastična i [ dosta njih](https://podcastindex.org/apps) se
priključuje Podcasting 2.0 trendu, isto kao i Castopod!
Svako od ovih rešenja se razlikuje jedno od drugog, možete ih uporediti sa
[listom funkcionalnosti](#features).
Imajući to u vidu, postoje dve glavne razlike u odnosu na druga rešenja za
podkasting:
- 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 je jedino rešenje koje trenutno uklapa decentralizovanu društvenu
mrežu sa ActivityPub-om kao i mnoge funkcionalnosti podkasting-a 2.0, nadajući
se da će ih tako približiti.
## Doprinos
Love Castopod and would like to help? Take a look at the following documentation
to get you started.
### Kodeks ponašanja
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 tolerated.
### Vodič za doprinos
Pročitajte naše [uputstvo za doprinos](../contributing/guidelines.md) kako bi
ste bolje razumeli naš proces razvoja, kako da predložite popravke bagova i
unapređenja i kako da napravite i testirate svoje promene na Castopod-u.
## Saradnici ✨
Veliko hvala ovim divnim ljudima
([ključ emotikona](https://allcontributors.org/docs/en/emoji-key)):
- [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).
[![Ad Aures Logo](../../../assets/images/sponsors/adaures.svg)](https://adaures.com/)
[![NLnet Logo](../../../assets/images/sponsors/nlnet.svg)](https://nlnet.nl/)
## License
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
---
title: Authentication & Authorization
---
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| Super administratör | Har fullständig kontroll över Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Hanterare | Hanterar Castopods innehåll. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | Generella användare av Castopod. | admin.access |
{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ----------------------------------------------------------------------------- |
| admin.access | Kan komma åt Castopod admin-området. |
| admin.settings | Kan komma åt Castopod-inställningarna. |
| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Kan hantera Castopod-användare. |
| persons.manage | Kan hantera personer. |
| pages.manage | Kan hantera sidor. |
| podcasts.view | Kan se alla podcasts. |
| podcasts.create | Kan skapa nya podcasts. |
| podcasts.import | Kan importera podcasts. |
| fediverse.manage-blocks | Kan blockera fediverse skådespelare/domäner från att interagera med Castopod. |
{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ---------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Har fullständig kontroll över podcast #\{id\}. | \* |
| Redigerare | Hanterar innehåll och publikationer i 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 |
| Författare | Hanterar innehåll i podcast #\{id\} men kan inte publicera dem. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gäst | Generell bidragsgivare till podcasten #\{id\}. | view, episodes.view |
{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | ---------------------------------------------------------------------------------- |
| view | Kan visa instrumentpanelen och analysen av podcast #\{id\}. |
| edit | Kan redigera podcast #\{id\}. |
| delete | Kan ta bort podcast #\{id\}. |
| manage-import | Kan synkronisera importerad podcast #\{id\}. |
| manage-persons | Kan hantera prenumerationer på podcast #\{id\}. |
| manage-subscriptions | Kan hantera prenumerationer på podcast #\{id\}. |
| manage-contributors | Kan hantera bidragsgivare för podcast #\{id\}. |
| manage-platforms | Kan sätta/ta bort plattformslänkar för podcast #\{id\}. |
| manage-publications | Kan publicera podcast #\{id\}. |
| manage-notifications | Can view and mark notifications as read for podcast #\{id\}. |
| interact-as | Kan interagera som podcasten #\{id\} för att favorita, dela eller svara på inlägg. |
| episodes.view | Kan visa instrumentpaneler och analyser av podcast #\{id\}s avsnitt. |
| episodes.create | Kan skapa avsnitt för podcast #\{id\}. |
| episodes.edit | Kan redigera avsnitt av podcast #\{id\}. |
| episodes.delete | Kan ta bort avsnitt av podcast #\{id\}. |
| episodes.manage-persons | Kan hantera avsnittpersoner i podcast #\{id\}. |
| episodes.manage-clips | Kan hantera videoklipp eller ljudklipp från podcasten #\{id\}. |
| episodes.manage-publications | Kan publicera/avpublicera avsnitt och inlägg i podcast #\{id\}. |
| episodes.manage-comments | Kan skapa/ta bort avsnitt kommentarer från podcasten #\{id\}. |
{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
---
title: Officiella Docker images
sidebarDepth: 3
---
# Officiella Docker images
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
......@@ -15,8 +12,8 @@ process:
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): en
Nginx konfiguration för Castopod
Dessutom kräver Castopod en MySQL-kompatibel databas. En Redis databas kan
läggas till som cachehanterare.
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
## Taggar som stöds
......@@ -27,87 +24,89 @@ läggas till som cachehanterare.
## Exempel på användning
1. Installera [docker](https://docs.docker.com/get-docker/) och
[docker-komponera](https://docs.docker.com/compose/install/)
2. Skapa en `docker-compose.yml` fil med följande:
```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åste anpassa vissa variabler efter dina behov (t.ex. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` och `CP_ANALYTICS_SALT`).
3. Ställ in en omvänd proxy för TLS (SSL/HTTPS)
TLS är obligatoriskt för ActivityPub att arbeta. Detta jobb kan enkelt
hanteras av en omvänd proxy, till exempel med
[Caddy](https://caddyserver.com/):
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
4. Kör `docker-komponera upp -d`, vänta på att den initieras och gå vidare till
`https://castopod.example.com/cp-install` för att slutföra installationen av
Castopod!
5. Ni är alla klara, börja podcasting! 🎙️🚀
1. Installera [docker](https://docs.docker.com/get-docker/) och
[docker-komponera](https://docs.docker.com/compose/install/)
2. Skapa en `docker-compose.yml` fil med följande:
```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
CP_REDIS_PASSWORD: changeme
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"
command: --requirepass changeme
volumes:
- castopod-cache:/data
networks:
- castopod-app
volumes:
castopod-media:
castopod-db:
castopod-cache:
networks:
castopod-app:
castopod-db:
```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
3. Ställ in en omvänd proxy för TLS (SSL/HTTPS)
TLS is mandatory for ActivityPub to work. This job can easily be handled by a
reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
castopod.example.com {
reverse_proxy localhost:8000
}
```
4. Kör `docker-komponera upp -d`, vänta på att den initieras och gå vidare till
`https://castopod.example.com/cp-install` för att slutföra installationen av
Castopod!
5. You're all set, start podcasting! 🎙️🚀
## Miljövariabler
......@@ -115,11 +114,11 @@ läggas till som cachehanterare.
| Variabel namn | Type (`default`) | Standard |
| ------------------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | sträng | `odefinierad` |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?sträng | `"cp-admin"` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `odefinierad` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
......
---
title: Hur man installerar Castopod?
---
import { Aside } from "@astrojs/starlight/components";
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
- PHP v8.4 or higher
- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
### PHP v8.4 or higher
PHP version 8.4 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
**PNG** and **WEBP** libraries.
- [exif](https://www.php.net/manual/en/exif.installation.php)
Additionally, make sure that the following extensions are enabled in your PHP:
- json (enabled by default - don't turn it off)
- xml (enabled by default - don't turn it off)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
### MySQL compatible database
> We recommend using [MariaDB](https://mariadb.org).
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.
## Privilegier
### 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 haven’t 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. **FreeType 2** bibliotek för
[gd](https://www.php.net/manual/en/image.installation.php).
2. Follow the instructions on your screen.
3. Start podcasting!
<Aside>
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.
</Aside>
### Using CLI
1. Create a `.env` file in the package root based on the `.env.example` file.
2. Initialize the database using:
```sh
php spark install:init-database
```
3. Create the superadmin user using:
```sh
php spark install:create-superadmin
```
4. Head on to your admin gateway to start podcasting!
### 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>
---
title: Säkerhet
title: Säkerhetsfrågor
---
# Säkerhetsfrågor
Castopod är byggt ovanpå [CodeIgniter4](https://codeigniter.com/), ett PHP
ramverk som uppmuntrar
[goda säkerhetsmetoder](https://codeigniter.com/user_guide/concepts/security.html).
......
---
title: Uppdatera
sidebarDepth: 3
title: Hur uppdaterar man Castopod?
---
# Hur uppdaterar man Castopod?
import { Aside } from "@astrojs/starlight/components";
Efter att du installerat Castopod, kanske du vill uppdatera din instans till den
senaste -versionen för att njuta av de senaste funktionerna ✨, buggfixar 🐛 och
......@@ -36,12 +35,12 @@ prestanda förbättringar ⚡.
- Ta bort alla filer utom `.env` och `publik/media`
- Kopiera de nya filerna från det nedladdade paketet till din server
::: info Notering
<Aside>
Du kan behöva återställa filrättigheter som under installationsprocessen.
Kontrollera [säkerhetsbekymmer](./security.md).
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
:::
</Aside>
4. Uppdatera ditt databasschema från din `Castopod Admin` > `Om` sida eller kör:
......@@ -51,21 +50,22 @@ prestanda förbättringar ⚡.
5. Rensa din cache från `Castopod Admin` > `Inställningar` > `allmän` >
`Hushållning`
6. ✨ Njut av din färska instans, du är alla klara!
::: info Notering
<Aside>
Utgåvor kan komma med ytterligare uppdateringsinstruktioner (se
[utgåvor sidan](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[Jag har inte uppdaterat min instans på länge… Vad ska jag göra?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
[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)
:::
</Aside>
## Helt automatiserade uppdateringar
> Kommer snart... 👀
> Coming soon... 👀
## Vanliga frågor (FAQ)
......@@ -75,11 +75,11 @@ Gå till din Castopod admin-panel, versionen visas längst ner till vänster hö
Alternativt kan du hitta versionen i `appen > Config > Constants.php` filen.
### Jag har inte uppdaterat min instans på länge… Vad ska jag göra?
### I haven't updated my instance in a long time… What should I do?
Inga problem! Bara få den senaste versionen som beskrivs ovan. Endast när du går
genom utgivningsinstruktionerna (4), utför dem sekventiellt, från de äldsta till
de nyaste.
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
> Du kanske vill säkerhetskopiera din instans beroende på hur länge du inte har
> uppdaterat Castopod.
......@@ -92,8 +92,8 @@ Till exempel, om du är på `v1.0.0-alpha.42` och vill uppgradera till
1. Ladda ner den senaste utgåvan, skriv över dina filer samtidigt som du
behåller `.env` och `public/media`.
2. Gå igenom varje utgåva uppdateringsinstruktioner sekventiellt (från äldsta
till nyaste) börjar med `v1.0.0-alpha. 3`, `v1.0.0-alpha.44`,
2. Go through each release update instructions sequentially (from oldest to
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
3. ✨ Njut av din färska instans, du är alla klara!
......