chore: new Crowdin updates
This commit is contained in:
parent
37f086075e
commit
c4a07c29f1
|
@ -35,7 +35,7 @@ return [
|
|||
}',
|
||||
'like' => 'Muiañ-karet',
|
||||
'reply' => 'Respont',
|
||||
'view_replies' => 'Gwelout an evezhiadennoù ({numberOfReplies})',
|
||||
'view_replies' => 'Gwelet an evezhiadennoù ({numberOfReplies})',
|
||||
'block_actor' => 'Stankañ an implijer·ez @{actorUsername}',
|
||||
'block_domain' => 'Stankañ @{actorDomain}',
|
||||
'delete' => 'Dilemel an evezhiadenn',
|
||||
|
|
|
@ -15,7 +15,7 @@ return [
|
|||
'optional' => 'Diret',
|
||||
'close' => 'Serriñ',
|
||||
'home' => 'Degemer',
|
||||
'explicit' => 'Endalc\'had evit an oadourien',
|
||||
'explicit' => 'Danvez evit an oadourien',
|
||||
'powered_by' => 'Lusket gant {castopod}',
|
||||
'go_back' => 'Mont war-gil',
|
||||
'play_episode_button' => [
|
||||
|
@ -24,7 +24,7 @@ return [
|
|||
],
|
||||
'read_more' => 'Lenn muioc\'h',
|
||||
'read_less' => 'Lenn nebeutoc\'h',
|
||||
'see_more' => 'Gwelout muioc\'h',
|
||||
'see_less' => 'Gwelout nebeutoc\'h',
|
||||
'legal_notice' => 'Legal notice',
|
||||
'see_more' => 'Gwelet muioc\'h',
|
||||
'see_less' => 'Gwelet nebeutoc\'h',
|
||||
'legal_notice' => 'Evezhiadennoù a-fet lezenn',
|
||||
];
|
||||
|
|
|
@ -114,7 +114,7 @@ return [
|
|||
'first_published_at' => 'Embannet eo bet ar rann gentañ d\'ar/d\'an {0, date, medium}',
|
||||
],
|
||||
'sponsor' => 'Harpit',
|
||||
'funding_links' => 'Liammoù evit arc\'hantaouiñ {podcastTitle}',
|
||||
'funding_links' => 'Ereoù evit arc\'hantaouiñ {podcastTitle}',
|
||||
'find_on' => 'Kavit {podcastTitle} war',
|
||||
'listen_on' => 'Selaouit war',
|
||||
'persons' => '{personsCount, plural,
|
||||
|
|
|
@ -26,5 +26,5 @@ return [
|
|||
'read_less' => 'Leer menos',
|
||||
'see_more' => 'Ver más',
|
||||
'see_less' => 'Ver menos',
|
||||
'legal_notice' => 'Legal notice',
|
||||
'legal_notice' => 'Aviso legal',
|
||||
];
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2020 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
return [
|
||||
'title' => "Comentario de {actorDisplayName} en {episodeTitle}",
|
||||
'back_to_comments' => 'Volver a comentarios',
|
||||
'form' => [
|
||||
'episode_message_placeholder' => 'Escribir un comentario…',
|
||||
'reply_to_placeholder' => 'Responder a @{actorUsername}',
|
||||
'submit' => 'Enviar',
|
||||
'submit_reply' => 'Responder',
|
||||
],
|
||||
'likes' => '{numberOfLikes, plural,
|
||||
one {# like}
|
||||
other {# likes}
|
||||
}',
|
||||
'replies' => '{numberOfReplies, plural,
|
||||
one {# resposta}
|
||||
other {# respostas}
|
||||
}',
|
||||
'like' => 'Agrádame',
|
||||
'reply' => 'Responder',
|
||||
'view_replies' => 'Ver respostas ({numberOfReplies})',
|
||||
'block_actor' => 'Bloquear usuaria @{actorUsername}',
|
||||
'block_domain' => 'Bloquear dominio @{actorDomain}',
|
||||
'delete' => 'Eliminar comentario',
|
||||
];
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2020 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
return [
|
||||
'yes' => 'Si',
|
||||
'no' => 'Non',
|
||||
'cancel' => 'Cancelar',
|
||||
'optional' => 'Optativo',
|
||||
'close' => 'Pechar',
|
||||
'home' => 'Inicio',
|
||||
'explicit' => 'Explícito',
|
||||
'powered_by' => 'Grazas a {castopod}',
|
||||
'go_back' => 'Volver',
|
||||
'play_episode_button' => [
|
||||
'play' => 'Reproducir',
|
||||
'playing' => 'Reproducindo',
|
||||
],
|
||||
'read_more' => 'Ler máis',
|
||||
'read_less' => 'Ler menos',
|
||||
'see_more' => 'Ver máis',
|
||||
'see_less' => 'Ver menos',
|
||||
'legal_notice' => 'Aviso legal',
|
||||
];
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2020 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
return [
|
||||
'season' => 'Tempada {seasonNumber}',
|
||||
'season_abbr' => 'S{seasonNumber}',
|
||||
'number' => 'Episodio {episodeNumber}',
|
||||
'number_abbr' => 'Ep. {episodeNumber}',
|
||||
'season_episode' => 'Tempada {seasonNumber} episodio {episodeNumber}',
|
||||
'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}',
|
||||
'persons' => '{personsCount, plural,
|
||||
one {# persoa}
|
||||
other {# persoas}
|
||||
}',
|
||||
'persons_list' => 'Persoas',
|
||||
'back_to_episodes' => 'Volver aos episodios de {podcast}',
|
||||
'comments' => 'Comentarios',
|
||||
'activity' => 'Actividade',
|
||||
'description' => 'Descrición do episodio',
|
||||
'number_of_comments' => '{numberOfComments, plural,
|
||||
one {# comentario}
|
||||
other {# comentarios}
|
||||
}',
|
||||
'all_podcast_episodes' => 'Tódolos episodios do podcast',
|
||||
'back_to_podcast' => 'Volver ao podcast',
|
||||
];
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2021 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
return [
|
||||
'your_handle' => 'O teu alcume',
|
||||
'your_handle_hint' => 'Escribe o @usuaria@dominio desde onde queres actuar.',
|
||||
'follow' => [
|
||||
'label' => 'Seguir',
|
||||
'title' => 'Seguir a {actorDisplayName}',
|
||||
'subtitle' => 'Vas seguir a:',
|
||||
'accountNotFound' => 'Non se atopou a conta.',
|
||||
'remoteFollowNotAllowed' => 'Semella que o servidor da conta non permite o seguimento remoto…',
|
||||
'submit' => 'Realizar seguimento',
|
||||
],
|
||||
'favourite' => [
|
||||
'title' => "Dar a favorito na publicación de {actorDisplayName}",
|
||||
'subtitle' => 'Vas mostrar agrado por:',
|
||||
'submit' => 'Darlle a favorito',
|
||||
],
|
||||
'reblog' => [
|
||||
'title' => "Compartir a publicación de {actorDisplayName}",
|
||||
'subtitle' => 'Vas compartir:',
|
||||
'submit' => 'Fai a compartición',
|
||||
],
|
||||
'reply' => [
|
||||
'title' => "Responder á publicación de {actorDisplayName}",
|
||||
'subtitle' => 'Vas responder a:',
|
||||
'submit' => 'Responde',
|
||||
],
|
||||
];
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2020 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
return [
|
||||
'all_podcasts' => 'Tódolos podcast',
|
||||
'sort_by' => 'Orde por',
|
||||
'sort_options' => [
|
||||
'activity' => 'Actividade recente',
|
||||
'created_desc' => 'Primeiro o máis recente',
|
||||
'created_asc' => 'Máis antigos primeiro',
|
||||
],
|
||||
'no_podcast' => 'Non se atopan podcast',
|
||||
];
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2020 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
return [
|
||||
'back_to_home' => 'Volver ao inicio',
|
||||
'map' => [
|
||||
'title' => 'Mapa',
|
||||
'description' => 'Descobre episodios de podcast en {siteName} situados nun mapa! Viaxa a través do mapa e escoita episodios que falan de lugares concretos.',
|
||||
],
|
||||
];
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2020 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
return [
|
||||
'feed' => 'Fonte RSS do Podcast',
|
||||
'season' => 'Tempada {seasonNumber}',
|
||||
'list_of_episodes_year' => 'Episodios en {year} ({episodeCount})',
|
||||
'list_of_episodes_season' =>
|
||||
'Episodios da tempada {seasonNumber} ({episodeCount})',
|
||||
'no_episode' => 'Non se atoparon episodios!',
|
||||
'follow' => 'Seguir',
|
||||
'followTitle' => 'Segue a {actorDisplayName} no fediverso!',
|
||||
'followers' => '{numberOfFollowers, plural,
|
||||
one {# seguidora}
|
||||
other {# seguidoras}
|
||||
}',
|
||||
'posts' => '{numberOfPosts, plural,
|
||||
one {# publicación}
|
||||
other {# publicacións}
|
||||
}',
|
||||
'activity' => 'Actividade',
|
||||
'episodes' => 'Episodios',
|
||||
'episodes_title' => 'Episodios de {podcastTitle}',
|
||||
'about' => 'Acerca de',
|
||||
'stats' => [
|
||||
'title' => 'Estatísticas',
|
||||
'number_of_seasons' => '{0, plural,
|
||||
one {# tempada}
|
||||
other {# tempadas}
|
||||
}',
|
||||
'number_of_episodes' => '{0, plural,
|
||||
one {# episodio}
|
||||
other {# episodios}
|
||||
}',
|
||||
'first_published_at' => 'Primeiro episodio publicado o {0, date, medium}',
|
||||
],
|
||||
'sponsor' => 'Apoiar',
|
||||
'funding_links' => 'Ligazóns para apoiar a {podcastTitle}',
|
||||
'find_on' => 'Atopa a {podcastTitle} en',
|
||||
'listen_on' => 'Escoita en',
|
||||
'persons' => '{personsCount, plural,
|
||||
one {# persoa}
|
||||
other {# persoas}
|
||||
}',
|
||||
'persons_list' => 'Persoas',
|
||||
];
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2020 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
return [
|
||||
'title' => "Publicación de {actorDisplayName}",
|
||||
'back_to_actor_posts' => 'Volver ás publicacións de {actor}',
|
||||
'actor_shared' => '{actor} compartiu',
|
||||
'reply_to' => 'Responder a @{actorUsername}',
|
||||
'form' => [
|
||||
'message_placeholder' => 'Escribir unha mensaxe…',
|
||||
'episode_message_placeholder' => 'Escribe unha mensaxe para o episodio…',
|
||||
'episode_url_placeholder' => 'URL do episodio',
|
||||
'reply_to_placeholder' => 'Responder a @{actorUsername}',
|
||||
'submit' => 'Enviar',
|
||||
'submit_reply' => 'Responder',
|
||||
],
|
||||
'favourites' => '{numberOfFavourites, plural,
|
||||
one {# favorito}
|
||||
other {# favoritos}
|
||||
}',
|
||||
'reblogs' => '{numberOfReblogs, plural,
|
||||
one {# compartición}
|
||||
other {# comparticións}
|
||||
}',
|
||||
'replies' => '{numberOfReplies, plural,
|
||||
one {# resposta}
|
||||
other {# respostas}
|
||||
}',
|
||||
'expand' => 'Despregar publicación',
|
||||
'block_actor' => 'Bloquear usuaria @{actorUsername}',
|
||||
'block_domain' => 'Bloquear dominio @{actorDomain}',
|
||||
'delete' => 'Eliminar publicación',
|
||||
];
|
|
@ -26,5 +26,5 @@ return [
|
|||
'read_less' => 'Скрыть подробности',
|
||||
'see_more' => 'Показать больше',
|
||||
'see_less' => 'Показать меньше',
|
||||
'legal_notice' => 'Legal notice',
|
||||
'legal_notice' => 'Правовая информация',
|
||||
];
|
||||
|
|
|
@ -9,26 +9,30 @@ declare(strict_types=1);
|
|||
*/
|
||||
|
||||
return [
|
||||
'title' => "{actorDisplayName}'s comment for {episodeTitle}",
|
||||
'title' => "Komentár používateľa {actorDisplayName} pre epizódu {episodeTitle}",
|
||||
'back_to_comments' => 'Späť na komentáre',
|
||||
'form' => [
|
||||
'episode_message_placeholder' => 'Napísať komentár…',
|
||||
'reply_to_placeholder' => 'Reply to @{actorUsername}',
|
||||
'reply_to_placeholder' => 'Odpovedať používateľovi @{actorUsername}',
|
||||
'submit' => 'Poslať',
|
||||
'submit_reply' => 'Odpovedať',
|
||||
],
|
||||
'likes' => '{numberOfLikes, plural,
|
||||
one {# like}
|
||||
other {# likes}
|
||||
one {# si obľúbil}
|
||||
few {# si obľúbili}
|
||||
many {# si obľúbilo}
|
||||
other {# si obľúbili}
|
||||
}',
|
||||
'replies' => '{numberOfReplies, plural,
|
||||
one {# reply}
|
||||
other {# replies}
|
||||
one {# odpoveď}
|
||||
few {# odpovede}
|
||||
many {# odpovedí}
|
||||
other {# odpovedí}
|
||||
}',
|
||||
'like' => 'Obľúbené',
|
||||
'reply' => 'Odpovedať',
|
||||
'view_replies' => 'Ukázať odpoved/e ({numberOfReplies})',
|
||||
'block_actor' => 'Blokovať užívateľa @{actorUsername}',
|
||||
'block_actor' => 'Blokovať používateľa @{actorUsername}',
|
||||
'block_domain' => 'Blokovať doménu @{actorDomain}',
|
||||
'delete' => 'Vymazať komentár',
|
||||
];
|
||||
|
|
|
@ -26,5 +26,5 @@ return [
|
|||
'read_less' => 'Zobraziť menej',
|
||||
'see_more' => 'Pozrieť viac',
|
||||
'see_less' => 'Pozrieť menej',
|
||||
'legal_notice' => 'Legal notice',
|
||||
'legal_notice' => 'Právne informácie',
|
||||
];
|
||||
|
|
|
@ -16,17 +16,21 @@ return [
|
|||
'season_episode' => 'Sezóna {seasonNumber} epizóda {episodeNumber}',
|
||||
'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}',
|
||||
'persons' => '{personsCount, plural,
|
||||
one {# person}
|
||||
other {# persons}
|
||||
one {# osobnosť}
|
||||
few {# osobnosti}
|
||||
many {# osobností}
|
||||
other {# osobností}
|
||||
}',
|
||||
'persons_list' => 'Persons',
|
||||
'persons_list' => 'Osobnosti',
|
||||
'back_to_episodes' => 'Späť k epizódam {podcast}',
|
||||
'comments' => 'Komentáre',
|
||||
'activity' => 'Aktivita',
|
||||
'description' => 'Popis epizódy',
|
||||
'number_of_comments' => '{numberOfComments, plural,
|
||||
one {# comment}
|
||||
other {# comments}
|
||||
one {# komentár}
|
||||
few {# komentáre}
|
||||
many {# komentárov}
|
||||
other {# komentárov}
|
||||
}',
|
||||
'all_podcast_episodes' => 'Všetky epizódy podcastu',
|
||||
'back_to_podcast' => 'Späť na podcast',
|
||||
|
|
|
@ -10,13 +10,13 @@ declare(strict_types=1);
|
|||
|
||||
return [
|
||||
'your_handle' => 'Vaša prezývka',
|
||||
'your_handle_hint' => 'Enter the @username@domain you want to act from.',
|
||||
'your_handle_hint' => 'Vložte identifikátor v tvare @meno@doména, s ktorým si želáte vystupovať.',
|
||||
'follow' => [
|
||||
'label' => 'Nasledovať',
|
||||
'title' => 'Nasledovať {actorDisplayName}',
|
||||
'subtitle' => 'Budete nasledovať:',
|
||||
'accountNotFound' => 'Účet nemožno nájsť.',
|
||||
'remoteFollowNotAllowed' => 'Seems like the account server does not allow remote follows…',
|
||||
'remoteFollowNotAllowed' => 'Zdá sa, že server podľa zadaného identifikátora nepodporuje vzdialené sledovanie…',
|
||||
'submit' => 'Pokračovať k nasledovaniu',
|
||||
],
|
||||
'favourite' => [
|
||||
|
|
|
@ -12,6 +12,6 @@ return [
|
|||
'back_to_home' => 'Späť na úvod',
|
||||
'map' => [
|
||||
'title' => 'Mapa',
|
||||
'description' => 'Discover podcast episodes on {siteName} that are placed on a map! Travel through the map and listen to episodes that talk about specific locations.',
|
||||
'description' => 'Objavujte epizódy podcastov zo stránky {siteName} umiestnené na mape! Cestujte zobrazenými oblasťami a vypočujte si epizódy, ktoré sa o týchto oblastiach zmieňujú.',
|
||||
],
|
||||
];
|
||||
|
|
|
@ -18,12 +18,16 @@ return [
|
|||
'follow' => 'Nasledovať',
|
||||
'followTitle' => 'Nasledovať {actorDisplayName} na fediverse!',
|
||||
'followers' => '{numberOfFollowers, plural,
|
||||
one {# follower}
|
||||
other {# followers}
|
||||
one {# sledujúci}
|
||||
few {# sledujúci}
|
||||
many {# sledujúcich}
|
||||
other {# sledujúcich}
|
||||
}',
|
||||
'posts' => '{numberOfPosts, plural,
|
||||
one {# post}
|
||||
other {# posts}
|
||||
one {# príspevok}
|
||||
few {# príspevky}
|
||||
many {# príspevkov}
|
||||
other {# príspevkov}
|
||||
}',
|
||||
'activity' => 'Aktivita',
|
||||
'episodes' => 'Epizódy',
|
||||
|
@ -32,22 +36,28 @@ return [
|
|||
'stats' => [
|
||||
'title' => 'Štatistiky',
|
||||
'number_of_seasons' => '{0, plural,
|
||||
one {# season}
|
||||
other {# seasons}
|
||||
one {# séria}
|
||||
few {# série}
|
||||
many {# sérií}
|
||||
other {# sérií}
|
||||
}',
|
||||
'number_of_episodes' => '{0, plural,
|
||||
one {# episode}
|
||||
other {# episodes}
|
||||
one {# epizóda}
|
||||
few {# epizódy}
|
||||
many {# epizód}
|
||||
other {# epizód}
|
||||
}',
|
||||
'first_published_at' => 'First episode published on {0, date, medium}',
|
||||
'first_published_at' => 'Prvá epizóda publikovaná {0, date, medium}',
|
||||
],
|
||||
'sponsor' => 'Sponzor',
|
||||
'funding_links' => 'Funding links for {podcastTitle}',
|
||||
'find_on' => 'Find {podcastTitle} on',
|
||||
'funding_links' => 'Odkazy na financovanie podcastu {podcastTitle}',
|
||||
'find_on' => 'Nájsť podcast {podcastTitle} na',
|
||||
'listen_on' => 'Počúvajte na',
|
||||
'persons' => '{personsCount, plural,
|
||||
one {# person}
|
||||
other {# persons}
|
||||
one {# osobnosť}
|
||||
few {# osobnosti}
|
||||
many {# osobností}
|
||||
other {# osobností}
|
||||
}',
|
||||
'persons_list' => 'Persons',
|
||||
'persons_list' => 'Osobnosti',
|
||||
];
|
||||
|
|
|
@ -9,32 +9,38 @@ declare(strict_types=1);
|
|||
*/
|
||||
|
||||
return [
|
||||
'title' => "{actorDisplayName}'s post",
|
||||
'back_to_actor_posts' => 'Back to {actor} posts',
|
||||
'actor_shared' => '{actor} shared',
|
||||
'reply_to' => 'Reply to @{actorUsername}',
|
||||
'title' => "Príspevok používateľa {actorDisplayName}",
|
||||
'back_to_actor_posts' => 'Späť na príspevky používateľa {actor}',
|
||||
'actor_shared' => '{actor} zdieľal',
|
||||
'reply_to' => 'Odpoveď používateľovi @{actorUsername}',
|
||||
'form' => [
|
||||
'message_placeholder' => 'Write a message…',
|
||||
'episode_message_placeholder' => 'Write a message for the episode…',
|
||||
'episode_url_placeholder' => 'Episode URL',
|
||||
'reply_to_placeholder' => 'Reply to @{actorUsername}',
|
||||
'submit' => 'Send',
|
||||
'submit_reply' => 'Reply',
|
||||
'message_placeholder' => 'Napíšte správu…',
|
||||
'episode_message_placeholder' => 'Napíšte správu pre túto epizódu…',
|
||||
'episode_url_placeholder' => 'Adresa URL epizódy',
|
||||
'reply_to_placeholder' => 'Odpoveď používateľovi @{actorUsername}',
|
||||
'submit' => 'Odoslať',
|
||||
'submit_reply' => 'Odpovedať',
|
||||
],
|
||||
'favourites' => '{numberOfFavourites, plural,
|
||||
one {# favourite}
|
||||
other {# favourites}
|
||||
one {# si obľúbil}
|
||||
few {# si obľúbili}
|
||||
many {# si obľúbilo}
|
||||
other {# si obľúbilo}
|
||||
}',
|
||||
'reblogs' => '{numberOfReblogs, plural,
|
||||
one {# share}
|
||||
other {# shares}
|
||||
one {# zdieľanie}
|
||||
few {# zdieľania}
|
||||
many {# zdieľaní}
|
||||
other {# zdieľaní}
|
||||
}',
|
||||
'replies' => '{numberOfReplies, plural,
|
||||
one {# reply}
|
||||
other {# replies}
|
||||
one {# odpoveď}
|
||||
few {# odpovede}
|
||||
many {# odpovedí}
|
||||
other {# odpovedí}
|
||||
}',
|
||||
'expand' => 'Expand post',
|
||||
'block_actor' => 'Block user @{actorUsername}',
|
||||
'block_domain' => 'Block domain @{actorDomain}',
|
||||
'expand' => 'Rozbaliť príspevok',
|
||||
'block_actor' => 'Zablokovať používateľa @{actorUsername}',
|
||||
'block_domain' => 'Zablokovať doménu @{actorDomain}',
|
||||
'delete' => 'Vymazať príspevok',
|
||||
];
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -1,18 +1,19 @@
|
|||
---
|
||||
title: Installation
|
||||
title: Staliañ
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# How to install Castopod?
|
||||
# Penaos staliañ Castopod?
|
||||
|
||||
Castopod was thought-out to be easy to install. Whether using dedicated or
|
||||
shared hosting, you can install it on most PHP-MySQL compatible web servers.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -219,7 +219,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -217,7 +217,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,144 @@
|
|||
---
|
||||
title: Imágenes oficiales de Docker
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Imágenes oficiales de Docker
|
||||
|
||||
Castopod lanza 2 imágenes Docker al Docker Hub durante su proceso de
|
||||
construcción automatizada:
|
||||
|
||||
- [**`castopod/aplicación`**](https://hub.docker.com/r/castopod/app): el paquete
|
||||
de aplicación
|
||||
- [**`castopod/servidor-web`**](https://hub.docker.com/r/castopod/web-server):
|
||||
una configuración Nginx para Castopod
|
||||
|
||||
Adicionalmente, Castopod requiere una base de datos compatible con MySQL. Una
|
||||
base de datos Redis puede ser añadida como gestor de caché.
|
||||
|
||||
## Etiquetas admitidas
|
||||
|
||||
- `desarrollo` [unstable], última rama de desarrollo construida
|
||||
|
||||
// más etiquetas por llegar!
|
||||
|
||||
## Ejemplo de uso
|
||||
|
||||
1. Instalar [docker](https://docs.docker.com/get-docker/) y
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Crear un archivo `docker-compose.yml` con lo siguiente:
|
||||
|
||||
```yml
|
||||
versión: "3.7"
|
||||
|
||||
servicios:
|
||||
applicación:
|
||||
imagen: castopod/app:develop
|
||||
nombre_contenedor: "castopod-app"
|
||||
volúmenes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
ambiente:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: cámbiame
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: cámbiame
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
redes:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
reiniciar: unless-stopped
|
||||
|
||||
servidor-web:
|
||||
imagen: castopod/web-server:develop
|
||||
nombre_contenedor: "castopod-web-server"
|
||||
volúmenes:
|
||||
- castopod-media:/var/www/html/media
|
||||
redes:
|
||||
- castopod-app
|
||||
puertos:
|
||||
- 8080:80
|
||||
reiniciar: unless-stopped
|
||||
|
||||
mariadb:
|
||||
imagen: mariadb:10.5
|
||||
nombre_contenedor: "castopod-mariadb"
|
||||
redes:
|
||||
- castopod-db
|
||||
volúmenes:
|
||||
- castopod-db:/var/lib/mysql
|
||||
ambiente:
|
||||
MYSQL_ROOT_PASSWORD: cámbiame
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: cámbiame
|
||||
reiniciar: unless-stopped
|
||||
|
||||
redis:
|
||||
imagen: redis:7.0-alpine
|
||||
nombre_contenedor: "castopod-redis"
|
||||
volúmenes:
|
||||
- castopod-cache:/data
|
||||
redes:
|
||||
- castopod-app
|
||||
|
||||
volúmenes:
|
||||
castopod-media:
|
||||
castopod-db:
|
||||
castopod-cache:
|
||||
|
||||
redes:
|
||||
castopod-app:
|
||||
castopod-db:
|
||||
```
|
||||
|
||||
Debes adaptar algunas variables a tus necesidades (ej. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Configura un proxy inverso para TLS (SSL/HTTPS)
|
||||
|
||||
TLS es obligatorio para que ActivityPub funcione. Este trabajo puede ser
|
||||
fácilmente manejado por un proxy inverso, por ejemplo con
|
||||
[Caddy](https://caddyserver.com/):
|
||||
|
||||
```
|
||||
#castopod
|
||||
castopod.example.com {
|
||||
reverse_proxy localhost:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Ejecuta `docker-compose -d`, espera a que se inicie y ve a
|
||||
`https://castopod.example.com/cp-install` para terminar de configurar
|
||||
Castopod!
|
||||
|
||||
5. Todo listo, empieza a podcastear! 🎙️🚀
|
||||
|
||||
## Variables del Entorno
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Nombre de la Variable | Escribe (`predeterminado`) |
|
||||
| ----------------------------- | ----------------------------------- |
|
||||
| **`CP_URLBASE`** | string (`indefinido`) |
|
||||
| **`CP_MEDIA_URLBASE`** | ?string (`(vacío)`) |
|
||||
| **`CP_PUERTA_ADMINISTRADOR`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_PUERTA`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALÍTICAS_SALT`** | string (`indefinido`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -9,11 +9,12 @@ Castopod está pensado para ser fácil de instalar. Ya sea usando un alojamiento
|
|||
dedicado o compartido, puedes instalarlo en la mayoría de servidores web
|
||||
compatibles con PHP-MySQL.
|
||||
|
||||
::: Nota informativa
|
||||
::: tip Note
|
||||
|
||||
Esta sección de la documentación te ayudará a configurar Castopod para la
|
||||
producción. Si estás buscando participar en el desarrollo de Castopod, debes
|
||||
pasar a la sección de contribuciones.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -25,8 +26,7 @@ pasar a la sección de contribuciones.
|
|||
|
||||
### PHP v8.0 o superior
|
||||
|
||||
Se requiere PHP versión 8.0 o superior con las siguientes extensiones
|
||||
instaladas:
|
||||
PHP version 8.0 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)
|
||||
|
@ -35,8 +35,7 @@ instaladas:
|
|||
**JPEG**, **PNG** y **WEBP**.
|
||||
- [exif](https://www.php.net/manual/en/exif.installation.php)
|
||||
|
||||
Adicionalmente, asegúrate que las siguientes extensiones están habilitadas en tu
|
||||
PHP:
|
||||
Additionally, make sure that the following extensions are enabled in your PHP:
|
||||
|
||||
- json (habilitada por defecto - no la desactives)
|
||||
- xml (habilitada por defecto - no la desactives)
|
||||
|
@ -46,28 +45,27 @@ PHP:
|
|||
|
||||
> Recomendamos usar [MariaDB](https://mariadb.org).
|
||||
|
||||
::: aviso Aviso
|
||||
::: warning Warning
|
||||
|
||||
Castopod solo funciona con base de datos compatible con MySQL 5.7 o superior. Se
|
||||
romperá con la version previa MySQL v5.6 por ejemplo, ya que su vida terminó el
|
||||
5 de febrero de 2021.
|
||||
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
|
||||
will break with the previous MySQL v5.6 for example as its end of life was on
|
||||
February 5, 2021.
|
||||
|
||||
:::
|
||||
|
||||
Necesitarás el nombre del anfitrión del servidor, nombre de la base de datos,
|
||||
usuario y contraseña para completar el proceso de instalación. Si no los tienes,
|
||||
por favor, contacta al administrador del servidor.
|
||||
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.
|
||||
|
||||
#### Privilegios
|
||||
|
||||
Los usuarios deben tener al menos estos privilegios en la base de datos para que
|
||||
Castopod funcione: `CREAR`, `ALTERAR`, `BORRAR`, `EJECUTAR`, `INDICE`,
|
||||
`INSERTAR`, `SELECCIONAR`, `ACTUALIZAR`.
|
||||
User must have at least these privileges on the database for Castopod to work:
|
||||
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`.
|
||||
|
||||
### (Opcional) FFmpeg v4.1.8 o superior para clips de video
|
||||
|
||||
Se requiere [FFmpeg](https://www.ffmpeg.org/) versión 4.1.8 o superior si
|
||||
quieres general clips de video. Se debe instalar las siguientes extensiones:
|
||||
[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:
|
||||
|
||||
- Librería **FreeType 2** para
|
||||
[gd](https://www.php.net/manual/en/image.installation.php).
|
||||
|
@ -127,24 +125,24 @@ quieres general clips de video. Se debe instalar las siguientes extensiones:
|
|||
2. Sigue las instrucciones de la pantalla.
|
||||
3. ¡Empieza a crear podcasting!
|
||||
|
||||
::: Nota informativa
|
||||
::: info Note
|
||||
|
||||
El script de instalación escribe un archivo `.env` en la raiz de paquete. Si no
|
||||
puedes completar la instalación de wizard, puedes
|
||||
[crear y actualizar el archivo `.env` manualmente](#alternative-manual-configuration).
|
||||
The install script writes a `.env` file in the package root. If you cannot go
|
||||
through the install wizard, you can
|
||||
[create and update the `.env` file manually](#alternative-manual-configuration).
|
||||
|
||||
:::
|
||||
|
||||
## Paquetes de la comunidad
|
||||
|
||||
Si no quieres molestarte en instalar Castopod manualmente, puedes usar uno de
|
||||
los paquetes creados y mantenidos por la comunidad de código abierto.
|
||||
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.
|
||||
|
||||
### Instalar con YunoHost
|
||||
|
||||
[YunoHost](https://yunohost.org/) es una distribuidora basada en Debian
|
||||
GNU/Linux compuesta por paquetes de software libres y de código abierto. It
|
||||
manages the hardships of self-hosting for you.
|
||||
[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">
|
||||
|
||||
|
@ -158,19 +156,3 @@ manages the hardships of self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Instalar con Docker
|
||||
|
||||
Si desea utilizar Docker para instalar Castopod, ¡es posible gracias a
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Instalar
|
||||
con
|
||||
Docker<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>
|
||||
|
||||
::: Nota de información
|
||||
|
||||
Dada la alta demanda de docker, planeamos mantener una imagen oficial del Docker
|
||||
de Castopod directamente en el repositorio de Castopod.
|
||||
|
||||
:::
|
||||
|
|
|
@ -219,7 +219,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -1,32 +1,32 @@
|
|||
---
|
||||
title: Images Docker officielles
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Images Docker officielles
|
||||
# Official Docker images
|
||||
|
||||
Castopod publie 2 images Docker sur Docker Hub grâce à l'automatisation de la
|
||||
construction des images par la chaîne d'intégration GitLab :
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): l'application
|
||||
avec toutes les dépendances de Castopod
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): un
|
||||
serveur Nginx avec une configuration adaptée à Castopod
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
De plus, Castopod nécessite une base de donnée compatible avec MySQL. Une base
|
||||
de donnée Redis peut être utilisée pour gérer le cache.
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Tags disponibles
|
||||
## Supported tags
|
||||
|
||||
- `develop` [instable], dernière version de développement de Castopod
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// d'autres tags sont à venir !
|
||||
// more tags to come!
|
||||
|
||||
## Exemple d'utilisation
|
||||
## Example usage
|
||||
|
||||
1. Installez [docker](https://docs.docker.com/get-docker/) et
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Créez un fichier `docker-compose.yml` contenant :
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
@ -93,33 +93,31 @@ de donnée Redis peut être utilisée pour gérer le cache.
|
|||
castopod-db:
|
||||
```
|
||||
|
||||
Vous devez adapter la configuration à vos besoins (e.g. `CP_BASEURL`,
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Mettre en place un reverse proxy pour gérer TLS (SSL/HTTPS)
|
||||
3. Setup a reverse proxy for TLS (SSL/HTTPS)
|
||||
|
||||
TLS est obligatoire pour faire fonctionner ActivityPub. Cette tâche peut
|
||||
facilement être déléguée à un reverse proxy, par exemple avec
|
||||
[Caddy](https://caddyserver.com/):
|
||||
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:8080
|
||||
reverse_proxy localhost:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Lancez la commande `docker-compose up -d`, attendez l'initialisation et
|
||||
rendez-vous sur `https://castopod.example.com/cp-install` pour finir
|
||||
l'installation de Castopod !
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. Tout est bon à présent, à vos podcasts ! 🎙️🚀
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Variables d'environnement
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Nom de le variable | Type (`default`) |
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
|
@ -139,6 +137,6 @@ de donnée Redis peut être utilisée pour gérer le cache.
|
|||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Nom de la variable | Type (`default`) |
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
||||
|
|
|
@ -9,11 +9,12 @@ Castopod a été pensé pour être facile à installer. Que vous utilisiez un
|
|||
hébergement dédié ou mutualisé, vous pouvez l'installer sur la plupart des
|
||||
serveurs web compatibles avec PHP-MySQL.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -155,19 +156,3 @@ self-hosting for you.
|
|||
Github</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Installer avec Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Installer
|
||||
avec
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -223,7 +223,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -0,0 +1,155 @@
|
|||
---
|
||||
title: Installation
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# How to install Castopod?
|
||||
|
||||
Castopod was thought-out to be easy to install. Whether using dedicated or
|
||||
shared hosting, you can install it on most PHP-MySQL compatible web servers.
|
||||
|
||||
::: tip Note
|
||||
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
## Requirements
|
||||
|
||||
- PHP v8.0 or higher
|
||||
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
|
||||
- HTTPS support
|
||||
|
||||
### PHP v8.0 or higher
|
||||
|
||||
PHP version 8.0 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).
|
||||
|
||||
::: warning Warning
|
||||
|
||||
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
|
||||
will break with the previous MySQL v5.6 for example as its end of life was on
|
||||
February 5, 2021.
|
||||
|
||||
:::
|
||||
|
||||
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`.
|
||||
|
||||
### (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 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):
|
||||
|
||||
- For social features to work properly, this task is used to broadcast social
|
||||
activities to your followers on the fediverse:
|
||||
|
||||
```bash
|
||||
* * * * * /path/to/php /path/to/castopod/public/index.php scheduled-activities
|
||||
```
|
||||
|
||||
- For having your episodes be broadcasted on open hubs upon publication using
|
||||
[WebSub](https://en.wikipedia.org/wiki/WebSub):
|
||||
|
||||
```bash
|
||||
* * * * * /usr/local/bin/php /castopod/public/index.php scheduled-websub-publish
|
||||
```
|
||||
|
||||
- For Video Clips to be created (see
|
||||
[FFmpeg requirements](#ffmpeg-v418-or-higher-for-video-clips)):
|
||||
|
||||
```bash
|
||||
* * * * * /path/to/php /path/to/castopod/public/index.php scheduled-video-clips
|
||||
```
|
||||
|
||||
> These tasks run **every minute**. You may set the frequency depending on
|
||||
> your needs: every 5, 10 minutes or more.
|
||||
|
||||
### (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 update the `.env` file manually](#alternative-manual-configuration).
|
||||
|
||||
:::
|
||||
|
||||
## 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>
|
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
title: Security
|
||||
---
|
||||
|
||||
# Security concerns
|
||||
|
||||
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP
|
||||
framework that encourages
|
||||
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
|
||||
|
||||
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):
|
||||
|
||||
- `writable/` folder must be **readable** and **writable**.
|
||||
- `public/media/` folder must be **readable** and **writable**.
|
||||
- any other file must be set to **readonly**.
|
||||
|
||||
For instance, if you are using Apache or NGINX with Ubuntu you may do the
|
||||
following:
|
||||
|
||||
```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
|
||||
```
|
|
@ -0,0 +1,93 @@
|
|||
---
|
||||
title: Update
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# How to update Castopod?
|
||||
|
||||
After installing Castopod, you may want to update your instance to the latest
|
||||
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
|
||||
improvements ⚡.
|
||||
|
||||
## Automatic update instructions
|
||||
|
||||
> Coming soon... 👀
|
||||
|
||||
## Manual update instructions
|
||||
|
||||
1. Go to the
|
||||
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
|
||||
see if your instance is up to date with the latest Castopod version
|
||||
|
||||
- cf.
|
||||
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
|
||||
|
||||
2. Download the latest release package named `Castopod Package`, you may choose
|
||||
between the `zip` or `tar.gz` archives
|
||||
|
||||
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
|
||||
|
||||
3. On your server:
|
||||
|
||||
- Remove all files except `.env` and `public/media`
|
||||
- Copy the new files from the downloaded package into your server
|
||||
|
||||
::: info Note
|
||||
|
||||
You may need to reset files permissions as during the install process.
|
||||
Check [Security Concerns](./security.md).
|
||||
|
||||
:::
|
||||
|
||||
4. Releases may come with additional update instructions (see
|
||||
[releases page](https://code.castopod.org/adaures/castopod/-/releases)). They
|
||||
are usually database migration scripts in `.sql` format to update your
|
||||
database schema.
|
||||
|
||||
- 👉 Make sure you run the scripts on your phpmyadmin panel or using command
|
||||
line to update the database along with the package files!
|
||||
- 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)
|
||||
|
||||
5. If you are using redis, clear your cache.
|
||||
6. ✨ Enjoy your fresh instance, you're all done!
|
||||
|
||||
## Frequently asked questions (FAQ)
|
||||
|
||||
### Where can I find my Castopod version?
|
||||
|
||||
Go to your Castopod admin panel, the version is displayed on the bottom left
|
||||
corner.
|
||||
|
||||
Alternatively, you can find the version in the `app > Config > Constants.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
|
||||
to the newest.
|
||||
|
||||
> You may want to backup your instance depending on how long you haven't updated
|
||||
> Castopod.
|
||||
|
||||
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
|
||||
`v1.0.0-beta.1`:
|
||||
|
||||
0. (highly recommended) Make a backup of your files and database.
|
||||
|
||||
1. Download the latest release, overwrite your files whilst keeping `.env` and
|
||||
`public/media`.
|
||||
|
||||
2. Go through each release update instructions sequentially (from oldest to
|
||||
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
|
||||
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
|
||||
|
||||
3. ✨ Enjoy your fresh instance, you're all done!
|
||||
|
||||
### 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…
|
|
@ -0,0 +1,289 @@
|
|||
---
|
||||
sidebarDepth: 2
|
||||
---
|
||||
|
||||
# Welcome 👋
|
||||
|
||||
[![release-badge]][release] [![license-badge]][license] [![contributions-badge]][contributions] [![semantic-release-badge]][semantic-release] [![crowdin-badge]][crowdin] [![discord-badge]][discord] [![stars-badge]][stars]
|
||||
|
||||
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.
|
||||
|
||||
::: info Status
|
||||
|
||||
Castopod is currently in **beta** but already quite stable and used by
|
||||
podcasters around the world!
|
||||
|
||||
:::
|
||||
|
||||
<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>
|
||||
</div>
|
||||
|
||||
## 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
|
||||
- 📡 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… with
|
||||
[more to come](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.
|
||||
|
||||
## 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>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt=""/><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"><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=""/><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"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt=""/><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"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt=""/><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"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt=""/><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"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><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=""/><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"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><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"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt=""/><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"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><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"><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=""/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><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"><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=""/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
</tr>
|
||||
</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
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -104,7 +104,7 @@ can be added as a cache handler.
|
|||
```
|
||||
#castopod
|
||||
castopod.example.com {
|
||||
reverse_proxy localhost:8080
|
||||
reverse_proxy localhost:8080
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -9,11 +9,12 @@ Det er meininga at Castopod skal vera lett å installera. Uansett om du bruker
|
|||
eige eller delt vevhotell, kan du installera på dei fleste maskiner som har PHP
|
||||
og MySQL.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -151,19 +152,3 @@ self-hosting for you.
|
|||
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-arkiv</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Installer med Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Installer
|
||||
med
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -217,7 +217,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -104,7 +104,7 @@ can be added as a cache handler.
|
|||
```
|
||||
#castopod
|
||||
castopod.example.com {
|
||||
reverse_proxy localhost:8080
|
||||
reverse_proxy localhost:8080
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -9,11 +9,12 @@ Castopod foi pensado para ser fácil de instalar. Seja usando hospedagem dedicad
|
|||
ou compartilhada, você pode instalá-lo na maioria dos servidores web compatíveis
|
||||
com PHP-MySQL.
|
||||
|
||||
::: info Nota
|
||||
::: dica Nota
|
||||
|
||||
Esta seção da documentação o ajudará a configurar o Castopod para produção. Se
|
||||
você deseja participar do desenvolvimento do Castopod, pode pular para a seção
|
||||
de contribuição.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -25,7 +26,7 @@ de contribuição.
|
|||
|
||||
### PHP v8.0 ou superior
|
||||
|
||||
É necessário PHP versão 8.0 ou superior, com as seguintes extensões instaladas:
|
||||
PHP version 8.0 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)
|
||||
|
@ -34,8 +35,7 @@ de contribuição.
|
|||
**PNG** e bibliotecas **WEBP**.
|
||||
- [exif](https://www.php.net/manual/en/exif.installation.php)
|
||||
|
||||
Além disso, certifique-se de que as seguintes extensões estejam habilitadas em
|
||||
seu PHP:
|
||||
Additionally, make sure that the following extensions are enabled in your PHP:
|
||||
|
||||
- json (habilitado por padrão - não desativar)
|
||||
- xml (habilitado por padrão - não desativar)
|
||||
|
@ -45,28 +45,27 @@ seu PHP:
|
|||
|
||||
> Recomendamos usar o [MariaDB](https://mariadb.org).
|
||||
|
||||
::: warning Aviso
|
||||
::: warning Warning
|
||||
|
||||
Castopod só funciona com bancos de dados MySQL 5.7 ou superior compatíveis. Vai
|
||||
quebrar com a versão anterior MySQL v5.6, por exemplo, pois foi encerrada em 5
|
||||
de fevereiro de 2021.
|
||||
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
|
||||
will break with the previous MySQL v5.6 for example as its end of life was on
|
||||
February 5, 2021.
|
||||
|
||||
:::
|
||||
|
||||
Você vai precisar do hostname do servidor, nome do banco de dados, nome do
|
||||
usuário e senha para concluir o processo de instalação. Se você não os tem,
|
||||
entre em contato com o administrador do servidor.
|
||||
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.
|
||||
|
||||
#### Privilégios
|
||||
|
||||
O usuário deve ter pelo menos esses privilégios no banco de dados do Castopod
|
||||
para funcionar: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`,
|
||||
`SELECT`, `UPDATE`.
|
||||
User must have at least these privileges on the database for Castopod to work:
|
||||
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`.
|
||||
|
||||
### (Opcional) FFmpeg v4.1.8 ou superior para Clipes de Vídeo
|
||||
|
||||
[FFmpeg](https://www.ffmpeg.org/) versão 4.1.8 ou superior é necessário se você
|
||||
deseja gerar Video Clips. As seguintes extensões devem ser instaladas:
|
||||
[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:
|
||||
|
||||
- Biblioteca **FreeType 2** para
|
||||
[gd](https://www.php.net/manual/en/image.installation.php).
|
||||
|
@ -125,24 +124,24 @@ deseja gerar Video Clips. As seguintes extensões devem ser instaladas:
|
|||
2. Siga as instruções na sua tela.
|
||||
3. Comece o podcast!
|
||||
|
||||
::: info Nota
|
||||
::: info Note
|
||||
|
||||
O script de instalação grava um arquivo `.env` na raiz do pacote. Se você não
|
||||
puder passar pelo assistente de instalação, você pode
|
||||
[criar e atualizar o arquivo `.env` manualmente](#alternative-manual-configuration).
|
||||
The install script writes a `.env` file in the package root. If you cannot go
|
||||
through the install wizard, you can
|
||||
[create and update the `.env` file manually](#alternative-manual-configuration).
|
||||
|
||||
:::
|
||||
|
||||
## Pacotes comunitários
|
||||
|
||||
Se você não quiser se preocupar em instalar o Castopod manualmente, você pode
|
||||
usar um dos pacotes criados e mantidos pela comunidade de código aberto.
|
||||
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.
|
||||
|
||||
### Instalar com YunoHost
|
||||
|
||||
[YunoHost](https://yunohost.org/) é uma distribuição baseada no Debian GNU/Linux
|
||||
composto por pacotes de software livre e de código aberto. Ele gerencia as
|
||||
dificuldades de auto-hospedagem para você.
|
||||
[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">
|
||||
|
||||
|
@ -156,19 +155,3 @@ dificuldades de auto-hospedagem para você.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Instalar com o Docker
|
||||
|
||||
Se você deseja usar o Docker para instalar o Castopod, é possível graças a
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Instalar
|
||||
com o
|
||||
Docker<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>
|
||||
|
||||
::: info Nota
|
||||
|
||||
Dado o alto nível de demanda por docker, planejamos manter uma imagem oficial do
|
||||
Castopod Docker diretamente no repositório do Castopod.
|
||||
|
||||
:::
|
||||
|
|
|
@ -219,7 +219,7 @@ Agradecimento vai para essas pessoas maravilhosas
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
---
|
||||
title: Official Docker images
|
||||
sidebarDepth: 3
|
||||
---
|
||||
|
||||
# Official Docker images
|
||||
|
||||
Castopod pushes 2 Docker images to the Docker Hub during its automated build
|
||||
process:
|
||||
|
||||
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
|
||||
with all of Castopod dependencies
|
||||
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
|
||||
Nginx configuration for Castopod
|
||||
|
||||
Additionally, Castopod requires a MySQL-compatible database. A Redis database
|
||||
can be added as a cache handler.
|
||||
|
||||
## Supported tags
|
||||
|
||||
- `develop` [unstable], latest development branch build
|
||||
|
||||
// more tags to come!
|
||||
|
||||
## Example usage
|
||||
|
||||
1. Install [docker](https://docs.docker.com/get-docker/) and
|
||||
[docker-compose](https://docs.docker.com/compose/install/)
|
||||
2. Create a `docker-compose.yml` file with the following:
|
||||
|
||||
```yml
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: castopod/app:develop
|
||||
container_name: "castopod-app"
|
||||
volumes:
|
||||
- castopod-media:/opt/castopod/public/media
|
||||
environment:
|
||||
MYSQL_DATABASE: castopod
|
||||
MYSQL_USER: castopod
|
||||
MYSQL_PASSWORD: changeme
|
||||
CP_BASEURL: "http://castopod.example.com"
|
||||
CP_ANALYTICS_SALT: changeme
|
||||
CP_CACHE_HANDLER: redis
|
||||
CP_REDIS_HOST: redis
|
||||
networks:
|
||||
- castopod-app
|
||||
- castopod-db
|
||||
restart: unless-stopped
|
||||
|
||||
web-server:
|
||||
image: castopod/web-server:develop
|
||||
container_name: "castopod-web-server"
|
||||
volumes:
|
||||
- castopod-media:/var/www/html/media
|
||||
networks:
|
||||
- castopod-app
|
||||
ports:
|
||||
- 8080:80
|
||||
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:
|
||||
```
|
||||
|
||||
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
|
||||
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
|
||||
|
||||
3. Setup a reverse proxy for 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:8080
|
||||
}
|
||||
```
|
||||
|
||||
4. Run `docker-compose up -d`, wait for it to initialize and head on to
|
||||
`https://castopod.example.com/cp-install` to finish setting up Castopod!
|
||||
|
||||
5. You're all set, start podcasting! 🎙️🚀
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- **castopod/app**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| -------------------------- | ----------------------------------- |
|
||||
| **`CP_BASEURL`** | string (`undefined`) |
|
||||
| **`CP_MEDIA_BASEURL`** | ?string (`(empty)`) |
|
||||
| **`CP_ADMIN_GATEWAY`** | ?string (`"cp-admin"`) |
|
||||
| **`CP_AUTH_GATEWAY`** | ?string (`"cp-auth"`) |
|
||||
| **`CP_ANALYTICS_SALT`** | string (`undefined`) |
|
||||
| **`CP_DATABASE_HOSTNAME`** | ?string (`"mariadb"`) |
|
||||
| **`CP_DATABASE_NAME`** | string (`MYSQL_DATABASE`) |
|
||||
| **`CP_DATABASE_USERNAME`** | string (`MYSQL_USER`) |
|
||||
| **`CP_DATABASE_PASSWORD`** | string (`MYSQL_PASSWORD`) |
|
||||
| **`CP_DATABASE_PREFIX`** | ?string (`"cp_"`) |
|
||||
| **`CP_CACHE_HANDLER`** | ?[`"file"` or `"redis"`] (`"file"`) |
|
||||
| **`CP_REDIS_HOST`** | ?string (`"localhost"`) |
|
||||
| **`CP_REDIS_PASSWORD`** | ?string (`null`) |
|
||||
| **`CP_REDIS_PORT`** | ?number (`6379`) |
|
||||
| **`CP_REDIS_DATABASE`** | ?number (`0`) |
|
||||
|
||||
- **castopod/web-server**
|
||||
|
||||
| Variable name | Type (`default`) |
|
||||
| --------------------- | ----------------- |
|
||||
| **`CP_APP_HOSTNAME`** | ?string (`"app"`) |
|
|
@ -8,11 +8,12 @@ sidebarDepth: 3
|
|||
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.
|
||||
|
||||
::: info Note
|
||||
::: tip Note
|
||||
|
||||
This section of the documentation will help you set up Castopod for production.
|
||||
If you are looking to partake in the development of Castopod, you may skip to
|
||||
the contributing section.
|
||||
We've released official Docker images for Castopod!
|
||||
|
||||
If you prefer using Docker, you may skip this and go straight to the
|
||||
[docker documentation](./docker.md) for Castopod.
|
||||
|
||||
:::
|
||||
|
||||
|
@ -152,19 +153,3 @@ self-hosting for you.
|
|||
Repo</a>
|
||||
|
||||
</div>
|
||||
|
||||
### Install with Docker
|
||||
|
||||
If you wish to use Docker to install Castopod, it is possible thanks to
|
||||
[Romain de Laage](https://mamot.fr/@rdelaage)!
|
||||
|
||||
<a href="https://gitlab.utc.fr/picasoft/projets/services/castopod" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-md shadow gap-x-1 bg-[#1282d7] hover:no-underline hover:bg-[#0f6eb5]">Install
|
||||
with
|
||||
Docker<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>
|
||||
|
||||
::: info Note
|
||||
|
||||
Given high demand for docker, we plan on maintaining an official Castopod Docker
|
||||
image directly into the Castopod repository.
|
||||
|
||||
:::
|
||||
|
|
|
@ -216,7 +216,7 @@ Thanks goes to these wonderful people
|
|||
</tr>
|
||||
<tr>
|
||||
<td align="center"><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=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/302a5777aff9f244.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
<td align="center"><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=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
|
||||
|
|
|
@ -45,4 +45,5 @@ return [
|
|||
'soundbites' => 'soundbites',
|
||||
'video-clips' => 'video clips',
|
||||
'embed' => 'embeddable player',
|
||||
'notifications' => 'notifications',
|
||||
];
|
||||
|
|
|
@ -46,6 +46,6 @@ return [
|
|||
'playing' => 'Playing',
|
||||
],
|
||||
'size_limit' => 'Size limit: {0}.',
|
||||
'choose_interact' => 'اختر أسلوب التفاعل',
|
||||
'choose_interact' => 'Choose how to interact',
|
||||
'view' => 'View',
|
||||
];
|
||||
|
|
|
@ -9,8 +9,8 @@ declare(strict_types=1);
|
|||
*/
|
||||
|
||||
return [
|
||||
'home' => 'لوحة التحكم الإدارية',
|
||||
'welcome_message' => 'أهلًا بك في المنطقة الإدارية!',
|
||||
'home' => 'Admin dashboard',
|
||||
'welcome_message' => 'Welcome to the admin area!',
|
||||
'podcasts' => [
|
||||
'title' => 'Podcasts',
|
||||
'not_found' => 'No published podcast',
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2020 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
return [
|
||||
'title' => 'Notifications',
|
||||
'reply' => '{actor_username} replied to your post',
|
||||
'favourite' => '{actor_username} favourited your post',
|
||||
'reblog' => '{actor_username} shared your post',
|
||||
'follow' => '{actor_username} started following {target_actor_username}',
|
||||
'no_notifications' => 'No notifications',
|
||||
'mark_all_as_read' => 'Mark all as read',
|
||||
];
|
|
@ -45,4 +45,5 @@ return [
|
|||
'soundbites' => 'tennadoù son',
|
||||
'video-clips' => 'tennadoù video',
|
||||
'embed' => 'lenner enkorfet',
|
||||
'notifications' => 'notifications',
|
||||
];
|
||||
|
|
|
@ -35,6 +35,6 @@ return [
|
|||
'by_weekday' => 'Dre zeiz ar sizhun (e-pad an 60 devezh diwezhañ)',
|
||||
'by_hour' => 'Dre eur an devezh (e-pad an 60 devezh diwezhañ)',
|
||||
'podcast_by_bandwidth' => 'Lec\'hed bann implijet bemdez (e MB)',
|
||||
'total_storage_by_month' => 'Monthly storage (in MB)',
|
||||
'total_bandwidth_by_month' => 'Monthly used bandwidth (in MB)',
|
||||
'total_storage_by_month' => 'Kadaviñ bep miz (e MB)',
|
||||
'total_bandwidth_by_month' => 'Lec\'hed bann implijet bep miz (e MB)',
|
||||
];
|
||||
|
|
|
@ -20,7 +20,7 @@ return [
|
|||
'copy' => 'Eilañ',
|
||||
'copied' => 'Eilet!',
|
||||
'home' => 'Degemer',
|
||||
'explicit' => 'Endalc\'had evit an oadourien',
|
||||
'explicit' => 'Danvez evit an oadourien',
|
||||
'powered_by' => 'Lusket gant {castopod}',
|
||||
'actions' => 'Obererezhioù',
|
||||
'pageInfo' => 'Pajenn {currentPage} diwar {pageCount}',
|
||||
|
@ -46,6 +46,6 @@ return [
|
|||
'playing' => 'O lenn',
|
||||
],
|
||||
'size_limit' => 'Bevenn ar vent: {0}.',
|
||||
'choose_interact' => 'Dibabit penaos interaktiñ',
|
||||
'view' => 'View',
|
||||
'choose_interact' => 'Dibabit penaos bezañ e darempred',
|
||||
'view' => 'Gwelet',
|
||||
];
|
||||
|
|
|
@ -9,8 +9,8 @@ declare(strict_types=1);
|
|||
*/
|
||||
|
||||
return [
|
||||
'home' => 'Taolenn-stur',
|
||||
'welcome_message' => 'Degemer mat en daolenn-stur!',
|
||||
'home' => 'Admin dashboard',
|
||||
'welcome_message' => 'Welcome to the admin area!',
|
||||
'podcasts' => [
|
||||
'title' => 'Podcasts',
|
||||
'not_found' => 'No published podcast',
|
||||
|
|
|
@ -31,25 +31,26 @@ return [
|
|||
'publish_cancel_error' => 'Embannet eo bet ar rann dija.',
|
||||
'unpublish_error' => 'N\'eo ket bet embannet ar rann.',
|
||||
'delete' => 'Dilemel',
|
||||
'go_to_page' => 'Gwelout ar bajenn',
|
||||
'go_to_page' => 'Gwelet ar bajenn',
|
||||
'create' => 'Ouzhpennañ ur rann',
|
||||
'publication_status' => [
|
||||
'published' => 'Embannet',
|
||||
'with_podcast' => 'Published',
|
||||
'with_podcast' => 'Embannet',
|
||||
'scheduled' => 'Steuñvet',
|
||||
'not_published' => 'Diembann',
|
||||
],
|
||||
'with_podcast_hint' => 'To be published at the same time as the podcast',
|
||||
'with_podcast_hint' => 'Embannet e vo war un dro gant ar podkast',
|
||||
'list' => [
|
||||
'search' => [
|
||||
'placeholder' => 'Search for an episode',
|
||||
'clear' => 'Clear search',
|
||||
'submit' => 'Search',
|
||||
'placeholder' => 'Klask ur rann',
|
||||
'clear' => 'Diverkañ an enklask',
|
||||
'submit' => 'Klask',
|
||||
],
|
||||
'number_of_episodes' => '{numberOfEpisodes, plural,
|
||||
one {# episode}
|
||||
other {# episodes}
|
||||
}',
|
||||
0 {rann ebet}
|
||||
one {# rann}
|
||||
other {# rann}
|
||||
}',
|
||||
'episode' => 'Rann',
|
||||
'visibility' => 'Gwelusted',
|
||||
'comments' => 'Evezhiadennoù',
|
||||
|
@ -59,30 +60,30 @@ return [
|
|||
'createSuccess' => 'Krouet eo bet ar rann gant berzh!',
|
||||
'editSuccess' => 'Hizivaet eo bet ar rann gant berzh!',
|
||||
'publishSuccess' => '{publication_status, select,
|
||||
published {Episode successfully published!}
|
||||
scheduled {Episode publication successfully scheduled!}
|
||||
with_podcast {This episode will be published at the same time as the podcast.}
|
||||
other {This episode is not published.}
|
||||
published {Embannet eo bet ar rann gant berzh!}
|
||||
scheduled {Raktreset eo bet embannadur ar rann gant berzh!}
|
||||
with_podcast {Ar rann-mañ a vo embannet war un dro gant ar podkast.}
|
||||
other {N\'eo ket bet embannet ar rann-mañ.}
|
||||
}',
|
||||
'publishCancelSuccess' => 'Nullet eo bet embannadur ar rann gant berzh!',
|
||||
'unpublishBeforeDeleteTip' => 'Ret eo deoc\'h diembannañ ar rann a-raok dilemel anezhi.',
|
||||
'scheduleDateError' => 'Schedule date must be set!',
|
||||
'scheduleDateError' => 'Ret eo lakaat un deiziad evit an embannadur!',
|
||||
'deletePublishedEpisodeError' => 'Diembannit ar rann a-raok dilemel anezhi mar plij.',
|
||||
'deleteSuccess' => 'Dilamet eo bet ar rann gant berzh!',
|
||||
'deleteError' => 'Failed to delete episode {type, select,
|
||||
transcript {transcript}
|
||||
chapters {chapters}
|
||||
image {cover}
|
||||
audio {audio}
|
||||
'deleteError' => 'C\'hwitadenn war dilemel {type, select,
|
||||
transcript {treuzskrivadur}
|
||||
chapters {chabistroù}
|
||||
image {golo}
|
||||
audio {aodio}
|
||||
other {media}
|
||||
}.',
|
||||
'deleteFileError' => 'Failed to delete {type, select,
|
||||
transcript {transcript}
|
||||
chapters {chapters}
|
||||
image {cover}
|
||||
audio {audio}
|
||||
other {media}
|
||||
} file {file_path}. You may manually remove it from your disk.',
|
||||
} ar rann.',
|
||||
'deleteFileError' => 'C\'hwitadenn war dilemel restr {type, select,
|
||||
transcript {an treuzskrivadur}
|
||||
chapters {ar chabistroù}
|
||||
image {ar golo}
|
||||
audio {an aodio}
|
||||
other {ar media}
|
||||
} ({file_path}). Gallout a rit lemel kuit ar restr-mañ diouzh ar gantenn dre zorn.',
|
||||
'sameSlugError' => 'Bez ez eus eus ur rann gant ar berradur-mañ (slug) dija.',
|
||||
],
|
||||
'form' => [
|
||||
|
@ -94,11 +95,11 @@ return [
|
|||
'cover' => 'Golo ar rann',
|
||||
'cover_hint' =>
|
||||
'Ma n\'ho peus ket kaset ur golo e vo implijet hini ar podkast en e blas.',
|
||||
'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.',
|
||||
'cover_size_hint' => 'Ar golo a rankfe bezañ ur c\'harrez ha 1400px e vent da nebeutañ.',
|
||||
'title' => 'Titl',
|
||||
'title_hint' =>
|
||||
'Dleout a rafe anv ar rann, sklaer ha berr. Arabat lakaat niverenn ar rann pe ar c\'houlzad amañ.',
|
||||
'permalink' => 'Peurliamm',
|
||||
'permalink' => 'Ere peurzalc\'hus',
|
||||
'season_number' => 'Koulzad',
|
||||
'episode_number' => 'Rann',
|
||||
'type' => [
|
||||
|
@ -112,10 +113,10 @@ return [
|
|||
],
|
||||
'parental_advisory' => [
|
||||
'label' => 'Kemenn evit ar gerent',
|
||||
'hint' => 'Hag ar rann-mañ a zo endalc\'had ha ne zlefe ket gwelet gant bugale?',
|
||||
'hint' => 'Hag ar rann-mañ a zo danvez ha ne zlefe ket gwelet gant bugale?',
|
||||
'undefined' => 'andermenet',
|
||||
'clean' => 'Dereat',
|
||||
'explicit' => 'Endalc\'had evit an oadourien',
|
||||
'explicit' => 'Danvez evit an oadourien',
|
||||
],
|
||||
'show_notes_section_title' => 'Notennoù ar rann',
|
||||
'show_notes_section_subtitle' =>
|
||||
|
@ -123,7 +124,7 @@ return [
|
|||
'description' => 'Deskrivadur',
|
||||
'description_footer' => 'Traoñ an deskrivadur',
|
||||
'description_footer_hint' =>
|
||||
'Emañ ouzhpennet an destenn-mañ e dibenn an holl rannoù. Ul lec\'h mat eo evit lakaat liammoù ho rouedadoù sokial da skouer.',
|
||||
'Emañ ouzhpennet an destenn-mañ e dibenn an holl rannoù. Ul lec\'h mat eo evit lakaat ereoù ho rouedadoù sokial da skouer.',
|
||||
'additional_files_section_title' => 'Restroù ouzhpenn',
|
||||
'additional_files_section_subtitle' =>
|
||||
'Ar restroù-mañ a c\'hell bezañ implijet gant savennoù all evit aesaat an traoù d\'ho selaouerien·ezed. Sellit ouzh {podcastNamespaceLink} evit muioc\'h a ditouroù.',
|
||||
|
@ -148,9 +149,9 @@ return [
|
|||
'M\'ho peus ezhomm eus balizennoù RSS ha n\'eus ket anezho e Castopod e c\'hellit o lakaat amañ.',
|
||||
'custom_rss' => 'Balizennoù RSS personelaet evit ar rann',
|
||||
'custom_rss_hint' => 'An dra-se a vo ouzhpennet e-barzh ar valizenn ❬item❭.',
|
||||
'block' => 'Episode should be hidden from public catalogues',
|
||||
'block' => 'Ar rann-se a rankfe bezañ kuzhet diouzh ar rolladoù publik',
|
||||
'block_hint' =>
|
||||
'The episode show or hide status: toggling this on prevents the episode from appearing in Apple Podcasts, Google Podcasts, and any third party apps that pull shows from these directories. (Not guaranteed)',
|
||||
'Diskouez pe kuzhat ar rann: trec\'haoliñ an afell-mañ a viro ar rann-mañ ouzh bezañ diskouezet war Apple Podcasts, Google Podcasts pe savennoù all hag a implij ar renabloù-se. (N\'eus gwarant ebet)',
|
||||
'submit_create' => 'Krouiñ ar rann',
|
||||
'submit_edit' => 'Enrollañ ar rann',
|
||||
],
|
||||
|
@ -164,7 +165,7 @@ return [
|
|||
'publication_method' => [
|
||||
'now' => 'Bremañ',
|
||||
'schedule' => 'Steuñviñ',
|
||||
'with_podcast' => 'Publish alongside podcast',
|
||||
'with_podcast' => 'Embann asambles gant ar podkast',
|
||||
],
|
||||
'scheduled_publication_date' => 'Deiziad embannadur steuñvet',
|
||||
'scheduled_publication_date_clear' => 'Skarzhañ deiziad embannadur',
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright 2020 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
return [
|
||||
'title' => 'Notifications',
|
||||
'reply' => '{actor_username} replied to your post',
|
||||
'favourite' => '{actor_username} favourited your post',
|
||||
'reblog' => '{actor_username} shared your post',
|
||||
'follow' => '{actor_username} started following {target_actor_username}',
|
||||
'no_notifications' => 'No notifications',
|
||||
'mark_all_as_read' => 'Mark all as read',
|
||||
];
|
|
@ -18,7 +18,7 @@ return [
|
|||
'delete' => 'Dilemel ar bajenn',
|
||||
'form' => [
|
||||
'title' => 'Titl',
|
||||
'permalink' => 'Peurliamm',
|
||||
'permalink' => 'Ere peurzalc\'hus',
|
||||
'content' => 'Danvez',
|
||||
'submit_create' => 'Krouiñ ar bajenn',
|
||||
'submit_edit' => 'Enrollañ',
|
||||
|
|
|
@ -24,42 +24,42 @@ return [
|
|||
'form' => [
|
||||
'avatar' => 'Avatar',
|
||||
'avatar_size_hint' =>
|
||||
'Avatar must be squared and at least 400px wide and tall.',
|
||||
'full_name' => 'Full name',
|
||||
'full_name_hint' => 'This is the full name or alias of the person.',
|
||||
'unique_name' => 'Unique name',
|
||||
'unique_name_hint' => 'Used for URLs',
|
||||
'information_url' => 'Information URL',
|
||||
'An avatar a rankfe bezañ ur c\'harrez ha 400px e vent da nebeutañ.',
|
||||
'full_name' => 'Anv klok',
|
||||
'full_name_hint' => 'Anv klok pe lesanv an emeller·ez.',
|
||||
'unique_name' => 'Anv unel',
|
||||
'unique_name_hint' => 'Implijet evit an URLioù',
|
||||
'information_url' => 'URL an titouroù',
|
||||
'information_url_hint' =>
|
||||
'Url to a relevant resource of information about the person, such as a homepage or third-party profile platform.',
|
||||
'submit_create' => 'Create person',
|
||||
'submit_edit' => 'Save person',
|
||||
'Un URL a gas betek titouroù an emeller·ez, evel ur bajenn bersonel pe un aelad war ur savenn all.',
|
||||
'submit_create' => 'Krouiñ an emeller·ez',
|
||||
'submit_edit' => 'Enrollañ an emeller·ez',
|
||||
],
|
||||
'podcast_form' => [
|
||||
'title' => 'Manage persons',
|
||||
'add_section_title' => 'Add persons to this podcast',
|
||||
'add_section_subtitle' => 'You may pick several persons and roles.',
|
||||
'persons' => 'Persons',
|
||||
'title' => 'Merañ an emellerien·ezed',
|
||||
'add_section_title' => 'Ouzhpennañ emellerien·ezed d\'ar podkast-mañ',
|
||||
'add_section_subtitle' => 'Gallout a rit dibab meur a emeller·ez ha meur a roll.',
|
||||
'persons' => 'Emellerien·ezed',
|
||||
'persons_hint' =>
|
||||
'You may select one or several persons with the same roles. You need to create the persons first.',
|
||||
'roles' => 'Roles',
|
||||
'Gallout a rit dibab un emeller·ez pe meur a hini gant ar memes roll. Rankout a reoc\'h krouiñ an emellerien·ezed a-raok avat.',
|
||||
'roles' => 'Rolloù',
|
||||
'roles_hint' =>
|
||||
'You may select none, one or several roles for a person.',
|
||||
'submit_add' => 'Add person(s)',
|
||||
'remove' => 'Remove',
|
||||
'Gallout a rit dibab roll ebet, unan pe meur hini evit pep emeller·ez.',
|
||||
'submit_add' => 'Ouzhpennañ emellerien·ezed',
|
||||
'remove' => 'Lemel',
|
||||
],
|
||||
'episode_form' => [
|
||||
'title' => 'Manage persons',
|
||||
'add_section_title' => 'Add persons to this episode',
|
||||
'add_section_subtitle' => 'You may pick several persons and roles.',
|
||||
'persons' => 'Persons',
|
||||
'title' => 'Merañ an emellerien·ezed',
|
||||
'add_section_title' => 'Ouzhpennañ emellerien·ezed d\'ar rann-mañ',
|
||||
'add_section_subtitle' => 'Gallout a rit dibab meur a emeller·ez ha meur a roll.',
|
||||
'persons' => 'Emellerien·ezed',
|
||||
'persons_hint' =>
|
||||
'You may select one or several persons with the same roles. You need to create the persons first.',
|
||||
'roles' => 'Roles',
|
||||
'Gallout a rit dibab un emeller·ez pe meur a hini gant ar memes roll. Rankout a reoc\'h krouiñ an emellerien·ezed a-raok avat.',
|
||||
'roles' => 'Rolloù',
|
||||
'roles_hint' =>
|
||||
'You may select none, one or several roles for a person.',
|
||||
'submit_add' => 'Add person(s)',
|
||||
'remove' => 'Remove',
|
||||
'Gallout a rit dibab roll ebet, unan pe meur hini evit pep emeller·ez.',
|
||||
'submit_add' => 'Ouzhpennañ emellerien·ezed',
|
||||
'remove' => 'Lemel',
|
||||
],
|
||||
'credits' => 'Credits',
|
||||
'credits' => 'Perzhidi',
|
||||
];
|
||||
|
|
|
@ -9,22 +9,22 @@ declare(strict_types=1);
|
|||
*/
|
||||
|
||||
return [
|
||||
'title' => 'Platforms',
|
||||
'home_url' => 'Go to {platformName} website',
|
||||
'submit_url' => 'Submit your podcast on {platformName}',
|
||||
'visible' => 'Display in podcast homepage?',
|
||||
'on_embed' => 'Display on embeddable player?',
|
||||
'remove' => 'Remove {platformName}',
|
||||
'submit' => 'Save',
|
||||
'title' => 'Savennoù',
|
||||
'home_url' => 'Mont da lec\'hienn {platformName}',
|
||||
'submit_url' => 'Kasit ho podkast war {platformName}',
|
||||
'visible' => 'Diskouez e pajenn ar podkast?',
|
||||
'on_embed' => 'Diskouez el lenner enkorfet?',
|
||||
'remove' => 'Dilemel {platformName}',
|
||||
'submit' => 'Enrollañ',
|
||||
'messages' => [
|
||||
'updateSuccess' => 'Platform links have been successfully updated!',
|
||||
'removeLinkSuccess' => 'The platform link has been removed.',
|
||||
'updateSuccess' => 'Hizivaet eo bet ereoù ar savennoù gant berzh!',
|
||||
'removeLinkSuccess' => 'Dilamet eo bet ere ar savenn.',
|
||||
'removeLinkError' =>
|
||||
'The platform link could not be removed. Try again.',
|
||||
'N\'eo ket bet dilamet ere ar savenn. Klaskit en-dro.',
|
||||
],
|
||||
'description' => [
|
||||
'podcasting' => 'The podcast ID on this platform',
|
||||
'social' => 'The podcast account ID on this platform',
|
||||
'funding' => 'Call to action message',
|
||||
'podcasting' => 'ID ar podkast war ar savenn-mañ',
|
||||
'social' => 'ID kont ar podkast war ar savenn-mañ',
|
||||
'funding' => 'Kemennadenn evit broudañ',
|
||||
],
|
||||
];
|
||||
|
|
|
@ -14,53 +14,56 @@ return [
|
|||
'create' => 'Krouiñ ur podkast',
|
||||
'import' => 'Enporzhiañ ur podkast',
|
||||
'new_episode' => 'Rann nevez',
|
||||
'view' => 'View podcast',
|
||||
'view' => 'Gwelet ar podkast',
|
||||
'edit' => 'Kemmañ ar podkast',
|
||||
'publish' => 'Publish podcast',
|
||||
'publish_edit' => 'Edit publication',
|
||||
'publish' => 'Embann ar podkast',
|
||||
'publish_edit' => 'Kemmañ an embannadur',
|
||||
'delete' => 'Dilemel ar podkast',
|
||||
'see_episodes' => 'See episodes',
|
||||
'see_contributors' => 'See contributors',
|
||||
'go_to_page' => 'Gwelout ar bajenn',
|
||||
'see_episodes' => 'Gwelet ar rannoù',
|
||||
'see_contributors' => 'Gwelet ar berzhidi, ar perzhiadezed',
|
||||
'go_to_page' => 'Gwelet ar bajenn',
|
||||
'latest_episodes' => 'Rannoù diwezhañ',
|
||||
'see_all_episodes' => 'Gwelout an holl rannoù',
|
||||
'draft' => 'Draft',
|
||||
'see_all_episodes' => 'Gwelet an holl rannoù',
|
||||
'draft' => 'Brouilhed',
|
||||
'messages' => [
|
||||
'createSuccess' => 'Podcast successfully created!',
|
||||
'createSuccess' => 'Krouet eo bet ar podkast gant berzh!',
|
||||
'editSuccess' => 'Hizivaet eo bet ar podkast gant berzh!',
|
||||
'importSuccess' => 'Enporzhet eo bet ar podkast gant berzh!',
|
||||
'deleteSuccess' => 'Dilamet eo bet ar podkast @{podcast_handle} gant berzh!',
|
||||
'deletePodcastMediaError' => 'Failed to delete podcast {type, select,
|
||||
cover {cover}
|
||||
banner {banner}
|
||||
'deletePodcastMediaError' => 'C\'hwitadenn war dilemel {type, select,
|
||||
cover {golo}
|
||||
banner {giton}
|
||||
other {media}
|
||||
}.',
|
||||
'deleteEpisodeMediaError' => 'Failed to delete podcast episode {episode_slug} {type, select,
|
||||
transcript {transcript}
|
||||
chapters {chapters}
|
||||
image {cover}
|
||||
audio {audio}
|
||||
} ar podkast.',
|
||||
'deleteEpisodeMediaError' => 'C\'hwitadenn war dilemel {type, select,
|
||||
transcript {treuzskrivadur}
|
||||
chapters {chabistroù}
|
||||
image {golo}
|
||||
audio {aodio}
|
||||
other {media}
|
||||
}.',
|
||||
'deletePodcastMediaFolderError' => 'Failed to delete podcast media folder {folder_path}. You may manually remove it from your disk.',
|
||||
'podcastFeedUpdateSuccess' => 'Successful update: {number_of_new_episodes, plural,
|
||||
one {# episode was}
|
||||
other {# episodes were}
|
||||
} added to the podcast!',
|
||||
'podcastFeedUpToDate' => 'Podcast is already up to date.',
|
||||
'podcastNotImported' => 'Podcast could not be updated as it was not imported.',
|
||||
'publishError' => 'This podcast is either already published or scheduled for publication.',
|
||||
'publishEditError' => 'This podcast is not scheduled for publication.',
|
||||
'publishCancelSuccess' => 'Podcast publication successfully cancelled!',
|
||||
'scheduleDateError' => 'Schedule date must be set!',
|
||||
} ar rann {episode_slug}.',
|
||||
'deletePodcastMediaFolderError' => 'C\'hwitadenn war dilemel teuliad ar mediaioù {folder_path}. Gallout a rit lemel an teuliad-mañ diouzh ar gantenn dre zorn.',
|
||||
'podcastFeedUpdateSuccess' => 'Hizivadenn: {number_of_new_episodes, plural,
|
||||
one {# rann}
|
||||
two {# rann}
|
||||
few {# rann}
|
||||
many {# rann}
|
||||
other {# rann}
|
||||
} a zo bet ouzhpennet d\'ar podkast gant berzh!',
|
||||
'podcastFeedUpToDate' => 'Hizivaet eo bet ar podkast dija.',
|
||||
'podcastNotImported' => 'C\'hwitadenn war hizivadenn ar podkast peogwir n\'eo ket bet enporzhiet.',
|
||||
'publishError' => 'Ar podkast-mañ a zo bet embannet dija pe steuñvet eo e embannadur.',
|
||||
'publishEditError' => 'N\'eo ket steuñvet embannadur ar podkast-mañ.',
|
||||
'publishCancelSuccess' => 'Nullet eo bet embannadur ar podkast gant berzh!',
|
||||
'scheduleDateError' => 'Ret eo lakaat un deiziad evit an embannadur!',
|
||||
],
|
||||
'form' => [
|
||||
'identity_section_title' => 'Titouroù diwar-benn ar podkast',
|
||||
'identity_section_subtitle' => 'Ar maeziennoù a laka ac\'hanoc\'h da vezañ remerket.',
|
||||
'cover' => 'Golo ar podkast',
|
||||
'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.',
|
||||
'cover_size_hint' => 'Ar golo a rankfe bezañ ur c\'harrez ha 1400px e vent da nebeutañ.',
|
||||
'banner' => 'Giton ar podkast',
|
||||
'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.',
|
||||
'banner_size_hint' => 'Ar giton a rankfe bezañ 3:1 e feur led/sav ha bezañ 1500px e led d\'an nebeutañ.',
|
||||
'banner_delete' => 'Dilemel giton ar podkast',
|
||||
'title' => 'Titl',
|
||||
'handle' => 'Anv ar podkast (handle)',
|
||||
|
@ -68,176 +71,176 @@ return [
|
|||
'Implijet evit anavezout ar podkast. Lizherennoù bras pe munut, niveroù hag islinenn (_) degemeret.',
|
||||
'type' => [
|
||||
'label' => 'Doare',
|
||||
'episodic' => 'Episodic',
|
||||
'episodic_hint' => 'If episodes are intended to be consumed without any specific order. Newest episodes will be presented first.',
|
||||
'serial' => 'Serial',
|
||||
'serial_hint' => 'If episodes are intended to be consumed in sequential order. The oldest episodes will be presented first.',
|
||||
'episodic' => 'Bep ur mare',
|
||||
'episodic_hint' => 'M\'eo ar rannoù da vezañ selaouet hep urzh resis. Ar rannoù nevesoc’h a vo kinniget da gentañ.',
|
||||
'serial' => 'Heuliad',
|
||||
'serial_hint' => 'M\'eo ar rannoù da vezañ selaouet gant un urzh resis. Ar rannoù koshoc\'h a vo kinniget da gentañ.',
|
||||
],
|
||||
'description' => 'Deskrivadur',
|
||||
'classification_section_title' => 'Rummatadur',
|
||||
'classification_section_subtitle' =>
|
||||
'These fields will impact your audience and competition.',
|
||||
'Ar maeziennoù-mañ o do ul levezon war an niver a selaouerien·ezed hag ho kevezerezh.',
|
||||
'language' => 'Yezh',
|
||||
'category' => 'Category',
|
||||
'category_placeholder' => 'Select a category…',
|
||||
'other_categories' => 'Other categories',
|
||||
'category' => 'Rummad',
|
||||
'category_placeholder' => 'Dibab ur rummad…',
|
||||
'other_categories' => 'Rummadoù all',
|
||||
'parental_advisory' => [
|
||||
'label' => 'Kemenn evit ar gerent',
|
||||
'hint' => 'Does it contain explicit content?',
|
||||
'hint' => 'Hag an dra-se a zo danvez ha ne zlefe ket gwelet gant bugale?',
|
||||
'undefined' => 'andermenet',
|
||||
'clean' => 'Clean',
|
||||
'explicit' => 'Explicit',
|
||||
'clean' => 'Dereat',
|
||||
'explicit' => 'Danvez evit an oadourien',
|
||||
],
|
||||
'author_section_title' => 'Author',
|
||||
'author_section_subtitle' => 'Who is managing the podcast?',
|
||||
'owner_name' => 'Owner name',
|
||||
'author_section_title' => 'Aozer·ez',
|
||||
'author_section_subtitle' => 'Piv zo o verañ ar podkast?',
|
||||
'owner_name' => 'Anv ar perc\'henn',
|
||||
'owner_name_hint' =>
|
||||
'For administrative use only. Visible in the public RSS feed.',
|
||||
'owner_email' => 'Owner email',
|
||||
'Evit a sell ouzh ar mererezh. War al lanv RSS publik e vo.',
|
||||
'owner_email' => 'Chomlec\'h postel ar perc\'henn',
|
||||
'owner_email_hint' =>
|
||||
'Will be used by most platforms to verify the podcast ownership. Visible in the public RSS feed.',
|
||||
'publisher' => 'Publisher',
|
||||
'Implijet e vo gant an darn vrasañ eus ar savennoù evit gwiriañ perc\'hentiezh ar podkast. War al lanv RSS publik e vo.',
|
||||
'publisher' => 'Embanner·ez',
|
||||
'publisher_hint' =>
|
||||
'The group responsible for creating the show. Often refers to the parent company or network of a podcast. This field is sometimes labeled as ’Author’.',
|
||||
'copyright' => 'Copyright',
|
||||
'location_section_title' => 'Location',
|
||||
'location_section_subtitle' => 'What place is this podcast about?',
|
||||
'location_name' => 'Location name or address',
|
||||
'location_name_hint' => 'This can be a real place or fictional',
|
||||
'monetization_section_title' => 'Monetization',
|
||||
'Ar strollad kiriek eus sevel ar podkast. Alies eo embregerezh pe rouedad ar podkast. A-wechoù e vez anvet ar vaezienn-mañ "Aozer·ez".',
|
||||
'copyright' => 'Gwirioù an aozer·ez',
|
||||
'location_section_title' => 'Lec\'h',
|
||||
'location_section_subtitle' => 'Eus peseurt lec\'h ez eus kaoz er podkast-mañ?',
|
||||
'location_name' => 'Anv pe chomlec\'h al lec\'h',
|
||||
'location_name_hint' => 'Gallout a ra bezañ gwir pe faltaziek',
|
||||
'monetization_section_title' => 'Moneisaat',
|
||||
'monetization_section_subtitle' =>
|
||||
'Earn money thanks to your audience.',
|
||||
'payment_pointer' => 'Payment Pointer for Web Monetization',
|
||||
'Dastum arc\'hant a-drugarez d\'ho selaouerien·ezed.',
|
||||
'payment_pointer' => 'Chomlec\'h paeañ (Payment Poienter) evit Web Monetization',
|
||||
'payment_pointer_hint' =>
|
||||
'This is your where you will receive money thanks to Web Monetization',
|
||||
'advanced_section_title' => 'Advanced Parameters',
|
||||
'Ar chomlec\'h ma vo dastumet an arc\'hant ganeoc\'h a-drugarez da Web Monetization',
|
||||
'advanced_section_title' => 'Arventennoù kempleshoc\'h',
|
||||
'advanced_section_subtitle' =>
|
||||
'If you need RSS tags that Castopod does not handle, set them here.',
|
||||
'custom_rss' => 'Custom RSS tags for the podcast',
|
||||
'custom_rss_hint' => 'This will be injected within the ❬channel❭ tag.',
|
||||
'new_feed_url' => 'New feed URL',
|
||||
'new_feed_url_hint' => 'Use this field when you move to another domain or podcast hosting platform. By default, the value is set to the current RSS URL if the podcast is imported.',
|
||||
'old_feed_url' => 'Old feed URL',
|
||||
'update_feed' => 'Update feed',
|
||||
'update_feed_tip' => 'Import this podcast\'s latest episodes',
|
||||
'partnership' => 'Partnership',
|
||||
'M\'ho peus ezhomm eus balizennoù RSS ha n\'eus ket anezho e Castopod e c\'hellit o lakaat amañ.',
|
||||
'custom_rss' => 'Balizennoù RSS personelaet evit ar podkast',
|
||||
'custom_rss_hint' => 'An dra-se a vo ouzhpennet e-barzh ar valizenn ❬channel❭.',
|
||||
'new_feed_url' => 'URL nevez al lanv',
|
||||
'new_feed_url_hint' => 'Implijit ar vaezienn-mañ pa cheñchit anv domani pe savenn herberc\'hiañ ho podkast. M\'eo enporzhiet ar podkast e vez lakaet enni URL a-vremañ al lanv dre ziouer.',
|
||||
'old_feed_url' => 'URL kozh al lanv',
|
||||
'update_feed' => 'Hizivaat al lanv',
|
||||
'update_feed_tip' => 'Enporzhiañ rannoù diwezhañ ar podkast-mañ',
|
||||
'partnership' => 'Kevelerezh',
|
||||
'partner_id' => 'ID',
|
||||
'partner_link_url' => 'Link URL',
|
||||
'partner_image_url' => 'Image URL',
|
||||
'partner_id_hint' => 'Your own partner ID',
|
||||
'partner_link_url_hint' => 'The generic partner link address',
|
||||
'partner_image_url_hint' => 'The generic partner image address',
|
||||
'status_section_title' => 'Status',
|
||||
'block' => 'Podcast should be hidden from public catalogues',
|
||||
'partner_link_url' => 'Ere URL',
|
||||
'partner_image_url' => 'URL ar skeudenn',
|
||||
'partner_id_hint' => 'Hoc’h ID deoc\'h-c\'hwi e ti ar c\'heveler',
|
||||
'partner_link_url_hint' => 'Chomlec\'h generek an ereoù gant ar c\'heveler',
|
||||
'partner_image_url_hint' => 'Chomlec\'h generek ar skeudennoù gant ar c\'heveler',
|
||||
'status_section_title' => 'Statud',
|
||||
'block' => 'Ar podkast a rankfe bezañ kuzhet diouzh ar rolladoù publik',
|
||||
'block_hint' =>
|
||||
'The podcast show or hide status: toggling this on prevents the entire podcast from appearing in Apple Podcasts, Google Podcasts, and any third party apps that pull shows from these directories. (Not guaranteed)',
|
||||
'complete' => 'Podcast will not be having new episodes',
|
||||
'lock' => 'Prevent podcast from being copied',
|
||||
'Diskouez pe kuzhat ar podkast: trec\'haoliñ an afell-mañ a viro ar podkast a-bezh ouzh bezañ diskouezet war Apple Podcasts, Google Podcasts pe savennoù all hag a implij ar renabloù-se. (N\'eus gwarant ebet)',
|
||||
'complete' => 'Ne vo mui rannoù nevez gant ar podkast',
|
||||
'lock' => 'Mirout ar podkast ouzh bezañ eilet',
|
||||
'lock_hint' =>
|
||||
'The purpose is to tell other podcast platforms whether they are allowed to import this feed. A value of yes means that any attempt to import this feed into a new platform should be rejected.',
|
||||
'submit_create' => 'Create podcast',
|
||||
'submit_edit' => 'Save podcast',
|
||||
'Ar pal eo lavaret d\'ar savennoù all hag aotreet int da enporzhiañ al lanv-mañ pe get. "Ya" a dalv eo nac\'het an holl c\'houlennoù enporzhiañ.',
|
||||
'submit_create' => 'Krouiñ ar podkast',
|
||||
'submit_edit' => 'Enrollañ ar podkast',
|
||||
],
|
||||
'category_options' => [
|
||||
'uncategorized' => 'uncategorized',
|
||||
'arts' => 'Arts',
|
||||
'business' => 'Business',
|
||||
'comedy' => 'Comedy',
|
||||
'education' => 'Education',
|
||||
'fiction' => 'Fiction',
|
||||
'government' => 'Government',
|
||||
'health_and_fitness' => 'Health & Fitness',
|
||||
'history' => 'History',
|
||||
'kids_and_family' => 'Kids & Family',
|
||||
'leisure' => 'Leisure',
|
||||
'music' => 'Music',
|
||||
'news' => 'News',
|
||||
'religion_and_spirituality' => 'Religion & Spirituality',
|
||||
'science' => 'Science',
|
||||
'society_and_culture' => 'Society & Culture',
|
||||
'sports' => 'Sports',
|
||||
'technology' => 'Technology',
|
||||
'true_crime' => 'True Crime',
|
||||
'tv_and_film' => 'TV & Film',
|
||||
'books' => 'Books',
|
||||
'design' => 'Design',
|
||||
'fashion_and_beauty' => 'Fashion & Beauty',
|
||||
'food' => 'Food',
|
||||
'performing_arts' => 'Performing Arts',
|
||||
'visual_arts' => 'Visual Arts',
|
||||
'careers' => 'Careers',
|
||||
'entrepreneurship' => 'Entrepreneurship',
|
||||
'investing' => 'Investing',
|
||||
'management' => 'Management',
|
||||
'uncategorized' => 'hep rummad',
|
||||
'arts' => 'Arzoù',
|
||||
'business' => 'Embregerezh',
|
||||
'comedy' => 'Fentc\'hoari',
|
||||
'education' => 'Deskadurezh',
|
||||
'fiction' => 'Faltazi',
|
||||
'government' => 'Gouarnamant',
|
||||
'health_and_fitness' => 'Yec\'hed ha fitness',
|
||||
'history' => 'Istor',
|
||||
'kids_and_family' => 'Bugale ha familh',
|
||||
'leisure' => 'Dudi',
|
||||
'music' => 'Sonerezh',
|
||||
'news' => 'Keleier',
|
||||
'religion_and_spirituality' => 'Relijion ha speredelezh',
|
||||
'science' => 'Skiant',
|
||||
'society_and_culture' => 'Kevredigezh ha sevenadur',
|
||||
'sports' => 'Sportoù',
|
||||
'technology' => 'Teknologiezh',
|
||||
'true_crime' => 'Teulioù an torfed',
|
||||
'tv_and_film' => 'Skinwel ha filmoù',
|
||||
'books' => 'Levrioù',
|
||||
'design' => 'Ergrafañ',
|
||||
'fashion_and_beauty' => 'Giz ha kened',
|
||||
'food' => 'Boued',
|
||||
'performing_arts' => 'Arzoù an arvest',
|
||||
'visual_arts' => 'Arzoù ar gweled',
|
||||
'careers' => 'Respetoù',
|
||||
'entrepreneurship' => 'Antreprenerezh',
|
||||
'investing' => 'Postadur',
|
||||
'management' => 'Mererezh',
|
||||
'marketing' => 'Marketing',
|
||||
'non_profit' => 'Non-Profit',
|
||||
'comedy_interviews' => 'Comedy Interviews',
|
||||
'improv' => 'Improv',
|
||||
'stand_up' => 'Stand-Up',
|
||||
'courses' => 'Courses',
|
||||
'how_to' => 'How To',
|
||||
'language_learning' => 'Language Learning',
|
||||
'self_improvement' => 'Self-Improvement',
|
||||
'comedy_fiction' => 'Comedy Fiction',
|
||||
'non_profit' => 'Hep pal kenwerzhel',
|
||||
'comedy_interviews' => 'Atersadennoù fentus',
|
||||
'improv' => 'Primaozañ',
|
||||
'stand_up' => 'Stand up',
|
||||
'courses' => 'Kentelioù',
|
||||
'how_to' => 'Tutorial',
|
||||
'language_learning' => 'Deskiñ yezhoù',
|
||||
'self_improvement' => 'Diorren hiniennel',
|
||||
'comedy_fiction' => 'Fentc\'hoari faltaziek',
|
||||
'drama' => 'Drama',
|
||||
'science_fiction' => 'Science Fiction',
|
||||
'alternative_health' => 'Alternative Health',
|
||||
'science_fiction' => 'Skiant-faltazi',
|
||||
'alternative_health' => 'Yec\'hed all',
|
||||
'fitness' => 'Fitness',
|
||||
'medicine' => 'Medicine',
|
||||
'mental_health' => 'Mental Health',
|
||||
'nutrition' => 'Nutrition',
|
||||
'sexuality' => 'Sexuality',
|
||||
'education_for_kids' => 'Education for Kids',
|
||||
'parenting' => 'Parenting',
|
||||
'pets_and_animals' => 'Pets & Animals',
|
||||
'stories_for_kids' => 'Stories for Kids',
|
||||
'animation_and_manga' => 'Animation & Manga',
|
||||
'automotive' => 'Automotive',
|
||||
'aviation' => 'Aviation',
|
||||
'crafts' => 'Crafts',
|
||||
'games' => 'Games',
|
||||
'hobbies' => 'Hobbies',
|
||||
'home_and_garden' => 'Home & Garden',
|
||||
'video_games' => 'Video Games',
|
||||
'music_commentary' => 'Music Commentary',
|
||||
'music_history' => 'Music History',
|
||||
'music_interviews' => 'Music Interviews',
|
||||
'business_news' => 'Business News',
|
||||
'daily_news' => 'Daily News',
|
||||
'entertainment_news' => 'Entertainment News',
|
||||
'news_commentary' => 'News Commentary',
|
||||
'politics' => 'Politics',
|
||||
'sports_news' => 'Sports News',
|
||||
'tech_news' => 'Tech News',
|
||||
'buddhism' => 'Buddhism',
|
||||
'christianity' => 'Christianity',
|
||||
'hinduism' => 'Hinduism',
|
||||
'medicine' => 'Medisinerezh',
|
||||
'mental_health' => 'Yec\'hed-spered',
|
||||
'nutrition' => 'Magadurezh',
|
||||
'sexuality' => 'Seksualegezh',
|
||||
'education_for_kids' => 'Deskadurezh evit ar vugale',
|
||||
'parenting' => 'Kerentelezh',
|
||||
'pets_and_animals' => 'Loened-ti ha loened',
|
||||
'stories_for_kids' => 'Marvailhoù evit ar vugale',
|
||||
'animation_and_manga' => 'Tresadennoù bev ha Manga',
|
||||
'automotive' => 'Kirri-tan',
|
||||
'aviation' => 'Kirri-nij',
|
||||
'crafts' => 'Artizanerezh',
|
||||
'games' => 'C\'hoarioù',
|
||||
'hobbies' => 'Dudioù',
|
||||
'home_and_garden' => 'Ti ha jardin',
|
||||
'video_games' => 'C\'hoarioù video',
|
||||
'music_commentary' => 'Evezhiadenn sonerezh',
|
||||
'music_history' => 'Istor ar sonerezh',
|
||||
'music_interviews' => 'Atersadennoù sonerezh',
|
||||
'business_news' => 'Keleier ekonomikel',
|
||||
'daily_news' => 'Keleier pemdeziek',
|
||||
'entertainment_news' => 'Keleier an diduamant',
|
||||
'news_commentary' => 'Evezhiadenn ar c\'heleier',
|
||||
'politics' => 'Politikerezh',
|
||||
'sports_news' => 'Keleier sport',
|
||||
'tech_news' => 'Keleier teknologiezh',
|
||||
'buddhism' => 'Boudaegezh',
|
||||
'christianity' => 'Kristeniezh',
|
||||
'hinduism' => 'Hindouegezh',
|
||||
'islam' => 'Islam',
|
||||
'judaism' => 'Judaism',
|
||||
'religion' => 'Religion',
|
||||
'spirituality' => 'Spirituality',
|
||||
'astronomy' => 'Astronomy',
|
||||
'chemistry' => 'Chemistry',
|
||||
'earth_sciences' => 'Earth Sciences',
|
||||
'life_sciences' => 'Life Sciences',
|
||||
'mathematics' => 'Mathematics',
|
||||
'natural_sciences' => 'Natural Sciences',
|
||||
'nature' => 'Nature',
|
||||
'physics' => 'Physics',
|
||||
'social_sciences' => 'Social Sciences',
|
||||
'documentary' => 'Documentary',
|
||||
'personal_journals' => 'Personal Journals',
|
||||
'philosophy' => 'Philosophy',
|
||||
'places_and_travel' => 'Places & Travel',
|
||||
'relationships' => 'Relationships',
|
||||
'judaism' => 'Yuzevegezh',
|
||||
'religion' => 'Relijion',
|
||||
'spirituality' => 'Speredelezh',
|
||||
'astronomy' => 'Steredoniezh',
|
||||
'chemistry' => 'Kimiezh',
|
||||
'earth_sciences' => 'Skiantoù an douar',
|
||||
'life_sciences' => 'Bevoniezh',
|
||||
'mathematics' => 'Matematikoù',
|
||||
'natural_sciences' => 'Skiantoù an natur',
|
||||
'nature' => 'Natur',
|
||||
'physics' => 'Fizik',
|
||||
'social_sciences' => 'Skiantoù sokial',
|
||||
'documentary' => 'Teulioù',
|
||||
'personal_journals' => 'Deizlevr hiniennel',
|
||||
'philosophy' => 'Prederouriezh',
|
||||
'places_and_travel' => 'Lec\'hioù ha beajoù',
|
||||
'relationships' => 'Darempredoù',
|
||||
'baseball' => 'Baseball',
|
||||
'basketball' => 'Basketball',
|
||||
'cricket' => 'Cricket',
|
||||
'fantasy_sports' => 'Fantasy Sports',
|
||||
'football' => 'Football',
|
||||
'basketball' => 'Basket-ball',
|
||||
'cricket' => 'Kriked',
|
||||
'fantasy_sports' => 'Sportoù faltaziek',
|
||||
'football' => 'Mell-droad',
|
||||
'golf' => 'Golf',
|
||||
'hockey' => 'Hockey',
|
||||
'rugby' => 'Rugby',
|
||||
'rugby' => 'Rugbi',
|
||||
'running' => 'Running',
|
||||
'soccer' => 'Soccer',
|
||||
'swimming' => 'Swimming',
|
||||
|
@ -303,5 +306,5 @@ return [
|
|||
'sponsor' => 'Sponsor',
|
||||
'funding_links' => 'Funding links for {podcastTitle}',
|
||||
'find_on' => 'Find {podcastTitle} on',
|
||||
'listen_on' => 'Listen on',
|
||||
'listen_on' => 'Selaouit war',
|
||||
];
|
||||
|
|
|
@ -14,10 +14,10 @@ return [
|
|||
'old_podcast_section_title' => 'The podcast to import',
|
||||
'old_podcast_section_subtitle' =>
|
||||
'Make sure you own the rights for this podcast before importing it. Copying and broadcasting a podcast without the proper rights is piracy and is liable to prosecution.',
|
||||
'imported_feed_url' => 'Feed URL',
|
||||
'imported_feed_url' => 'URL al lanv',
|
||||
'imported_feed_url_hint' => 'The feed must be in xml or rss format.',
|
||||
'new_podcast_section_title' => 'The new podcast',
|
||||
'advanced_params_section_title' => 'Advanced parameters',
|
||||
'new_podcast_section_title' => 'Ar podkast nevez',
|
||||
'advanced_params_section_title' => 'Arventennoù kempleshoc\'h',
|
||||
'advanced_params_section_subtitle' =>
|
||||
'Keep the default values if you have no idea of what the fields are for.',
|
||||
'slug_field' => 'Field to be used to calculate episode slug',
|
||||
|
@ -26,12 +26,12 @@ return [
|
|||
'force_renumber' => 'Force episodes renumbering',
|
||||
'force_renumber_hint' =>
|
||||
'Use this if your podcast does not have episode numbers but wish to set them during import.',
|
||||
'season_number' => 'Season number',
|
||||
'season_number' => 'Niverenn ar c\'houlzad',
|
||||
'season_number_hint' =>
|
||||
'Use this if your podcast does not have a season number but wish to set one during import. Leave blank otherwise.',
|
||||
'max_episodes' => 'Maximum number of episodes to import',
|
||||
'max_episodes_hint' => 'Leave blank to import all episodes',
|
||||
'lock_import' =>
|
||||
'This feed is protected. You cannot import it. If you are the owner, unprotect it on the origin platform.',
|
||||
'submit' => 'Import podcast',
|
||||
'submit' => 'Enporzhiañ ar podkast',
|
||||
];
|
||||
|
|
|
@ -9,27 +9,27 @@ declare(strict_types=1);
|
|||
*/
|
||||
|
||||
return [
|
||||
'go_to_page' => 'Go to podcast page',
|
||||
'dashboard' => 'Podcast dashboard',
|
||||
'podcast-view' => 'Home',
|
||||
'podcast-edit' => 'Edit podcast',
|
||||
'podcast-persons-manage' => 'Manage persons',
|
||||
'episodes' => 'Episodes',
|
||||
'episode-list' => 'All episodes',
|
||||
'episode-create' => 'New episode',
|
||||
'analytics' => 'Analytics',
|
||||
'go_to_page' => 'Mont da pajenn ar podkast',
|
||||
'dashboard' => 'Taolenn-stur ar podkast',
|
||||
'podcast-view' => 'Degemer',
|
||||
'podcast-edit' => 'Kemmañ ar podkast',
|
||||
'podcast-persons-manage' => 'Merañ an emellerien·ezed',
|
||||
'episodes' => 'Rannoù',
|
||||
'episode-list' => 'An holl rannoù',
|
||||
'episode-create' => 'Rann nevez',
|
||||
'analytics' => 'Muzulioù heklev',
|
||||
'podcast-analytics' => 'Audience overview',
|
||||
'podcast-analytics-webpages' => 'Web pages visits',
|
||||
'podcast-analytics-locations' => 'Locations',
|
||||
'podcast-analytics-unique-listeners' => 'Unique listeners',
|
||||
'podcast-analytics-players' => 'Players',
|
||||
'podcast-analytics-listening-time' => 'Listening time',
|
||||
'podcast-analytics-time-periods' => 'Time periods',
|
||||
'contributors' => 'Contributors',
|
||||
'contributor-list' => 'All contributors',
|
||||
'contributor-add' => 'Add contributor',
|
||||
'platforms' => 'External platforms',
|
||||
'platforms-podcasting' => 'Podcasting',
|
||||
'platforms-social' => 'Social networks',
|
||||
'platforms-funding' => 'Funding',
|
||||
'podcast-analytics-locations' => 'Lec\'hioù',
|
||||
'podcast-analytics-unique-listeners' => 'Selaouerien·ezed unel',
|
||||
'podcast-analytics-players' => 'Lennerioù',
|
||||
'podcast-analytics-listening-time' => 'Padelezh ar selaou',
|
||||
'podcast-analytics-time-periods' => 'Mareoù ar selaou',
|
||||
'contributors' => 'Perzhidi, perzhiadezed',
|
||||
'contributor-list' => 'An holl berzhidi ha perzhiadezed',
|
||||
'contributor-add' => 'Ouzhpennañ ur perzhiad pe ur berzhiadez',
|
||||
'platforms' => 'Savennoù diavaez',
|
||||
'platforms-podcasting' => 'Podkast',
|
||||
'platforms-social' => 'Rouedadoù sokial',
|
||||
'platforms-funding' => 'Arc\'hantaouiñ',
|
||||
];
|
||||
|
|
|
@ -9,21 +9,21 @@ declare(strict_types=1);
|
|||
*/
|
||||
|
||||
return [
|
||||
'title' => 'General settings',
|
||||
'title' => 'Arventennoù hollek',
|
||||
'instance' => [
|
||||
'title' => 'Instance',
|
||||
'site_icon' => 'Site icon',
|
||||
'site_icon_delete' => 'Delete site icon',
|
||||
'title' => 'Istañs',
|
||||
'site_icon' => 'Arlun al lec\'hienn',
|
||||
'site_icon_delete' => 'Dilemel arlun al lec\'hienn',
|
||||
'site_icon_hint' => 'Site icons are what you see on your browser tabs, bookmarks bar, and when you add a website as a shortcut on mobile devices.',
|
||||
'site_icon_helper' => 'Icon must be squared and at least 512px wide and tall.',
|
||||
'site_name' => 'Site name',
|
||||
'site_description' => 'Site description',
|
||||
'submit' => 'Save',
|
||||
'site_icon_helper' => 'An arlun a rankfe bezañ ur c\'harrez ha 512px e vent da nebeutañ.',
|
||||
'site_name' => 'Titl al lec\'hienn',
|
||||
'site_description' => 'Deskrivadur al lec\'hienn',
|
||||
'submit' => 'Enrollañ',
|
||||
'editSuccess' => 'Instance has been updated successfully!',
|
||||
'deleteIconSuccess' => 'Site icon has been remove successfully!',
|
||||
],
|
||||
'images' => [
|
||||
'title' => 'Images',
|
||||
'title' => 'Skeudennoù',
|
||||
'subtitle' => 'Here you can regenerate all images based on the originals that were uploaded. To be used if you find that some images are missing. This task may take a while.',
|
||||
'regenerate' => 'Regenerate images',
|
||||
'regenerationSuccess' => 'All images have been regenerated successfully!',
|
||||
|
@ -41,8 +41,8 @@ return [
|
|||
'runSuccess' => 'Housekeeping has been run successfully!',
|
||||
],
|
||||
'theme' => [
|
||||
'title' => 'Theme',
|
||||
'accent_section_title' => 'Accent color',
|
||||
'title' => 'Neuz',
|
||||
'accent_section_title' => 'Liv kentañ',
|
||||
'accent_section_subtitle' => 'Choose the color to determine the look and feel of all public pages.',
|
||||
'pine' => 'Pine',
|
||||
'crimson' => 'Crimson',
|
||||
|
@ -50,7 +50,7 @@ return [
|
|||
'lake' => 'Lake',
|
||||
'jacaranda' => 'Jacaranda',
|
||||
'onyx' => 'Onyx',
|
||||
'submit' => 'Save',
|
||||
'setInstanceThemeSuccess' => 'Theme has been updated successfully!',
|
||||
'submit' => 'Enrollañ',
|
||||
'setInstanceThemeSuccess' => 'Cheñchet eo bet an neuz gant berzh!',
|
||||
],
|
||||
];
|
||||
|
|
|
@ -10,22 +10,22 @@ declare(strict_types=1);
|
|||
|
||||
return [
|
||||
'list' => [
|
||||
'title' => 'Soundbites',
|
||||
'soundbite' => 'Soundbite',
|
||||
'title' => 'Tennadoù son',
|
||||
'soundbite' => 'Tennad son',
|
||||
],
|
||||
'messages' => [
|
||||
'createSuccess' => 'Soundbite has been successfully created!',
|
||||
'deleteSuccess' => 'Soundbite has been successfully removed!',
|
||||
'createSuccess' => 'Krouet eo bet an tennad son gant berzh!',
|
||||
'deleteSuccess' => 'Dilamet eo bet an tennad son gant berzh!',
|
||||
],
|
||||
'form' => [
|
||||
'title' => 'New soundbite',
|
||||
'soundbite_title' => 'Soundbite title',
|
||||
'start_time' => 'Start at',
|
||||
'duration' => 'Duration',
|
||||
'submit' => 'Create soundbite',
|
||||
'title' => 'Tennad son nevez',
|
||||
'soundbite_title' => 'Titl an tennad son',
|
||||
'start_time' => 'Kregiñ da',
|
||||
'duration' => 'Padelezh',
|
||||
'submit' => 'Krouiñ an tennad son',
|
||||
],
|
||||
'play' => 'Play soundbite',
|
||||
'stop' => 'Stop soundbite',
|
||||
'create' => 'New soundbite',
|
||||
'delete' => 'Delete soundbite',
|
||||
'play' => 'Lenn an tennad son',
|
||||
'stop' => 'Paouez an tennad son',
|
||||
'create' => 'Tennad son nevez',
|
||||
'delete' => 'Dilemel an tennad son',
|
||||
];
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue