[{"data":1,"prerenderedAt":970},["ShallowReactive",2],{"docs-nav":3,"/docs/administration/configuration":60},[4],{"title":5,"path":6,"stem":7,"children":8,"page":59},"Docs","/docs","docs",[9,27,45],{"title":10,"path":11,"stem":12,"children":13,"page":-1},"Premiers pas","/docs/getting-started","docs/1.getting-started/index",[14,15,19,23],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},"Introduction","/docs/getting-started/introduction","docs/1.getting-started/1.introduction",{"title":20,"path":21,"stem":22},"Claim, Adopt, Fork","/docs/getting-started/concepts","docs/1.getting-started/2.concepts",{"title":24,"path":25,"stem":26},"Architecture","/docs/getting-started/architecture","docs/1.getting-started/3.architecture",{"title":28,"path":29,"stem":30,"children":31,"page":-1},"Installation","/docs/installation","docs/2.installation/index",[32,33,37,41],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Déploiement Docker","/docs/installation/docker","docs/2.installation/1.docker",{"title":38,"path":39,"stem":40},"Déploiement VPS","/docs/installation/vps","docs/2.installation/2.vps",{"title":42,"path":43,"stem":44},"Déploiement Alwaysdata","/docs/installation/alwaysdata","docs/2.installation/3.alwaysdata",{"title":46,"path":47,"stem":48,"children":49,"page":-1},"Administration","/docs/administration","docs/3.administration/index",[50,51,55],{"title":46,"path":47,"stem":48},{"title":52,"path":53,"stem":54},"Configuration","/docs/administration/configuration","docs/3.administration/1.configuration",{"title":56,"path":57,"stem":58},"Maintenance","/docs/administration/maintenance","docs/3.administration/2.maintenance",false,{"id":61,"title":52,"body":62,"description":965,"extension":966,"meta":967,"navigation":683,"path":53,"seo":968,"stem":54,"__hash__":969},"docs/docs/3.administration/1.configuration.md",{"type":63,"value":64,"toc":950},"minimark",[65,69,83,88,154,161,167,193,197,202,232,275,279,321,337,341,422,426,515,519,611,618,625,782,794,798,801,860,863,867,870,883,913,922,934,938,946],[66,67,52],"h1",{"id":68},"configuration",[70,71,72,73,77,78,82],"p",{},"Toute la configuration se fait via des ",[74,75,76],"strong",{},"variables d'environnement"," (fichier ",[79,80,81],"code",{},".env"," ou variables système).",[84,85,87],"h2",{"id":86},"variables-requises","Variables requises",[89,90,91,107],"table",{},[92,93,94],"thead",{},[95,96,97,101,104],"tr",{},[98,99,100],"th",{},"Variable",[98,102,103],{},"Description",[98,105,106],{},"Exemple",[108,109,110,124,139],"tbody",{},[95,111,112,118,121],{},[113,114,115],"td",{},[79,116,117],{},"SECRET_KEY",[113,119,120],{},"Clé secrète Django (64+ caractères)",[113,122,123],{},"voir ci-dessous",[95,125,126,131,134],{},[113,127,128],{},[79,129,130],{},"DOMAIN",[113,132,133],{},"Domaine de l'instance",[113,135,136],{},[79,137,138],{},"then.suddenly.social",[95,140,141,146,149],{},[113,142,143],{},[79,144,145],{},"DATABASE_URL",[113,147,148],{},"URL de connexion PostgreSQL",[113,150,151],{},[79,152,153],{},"postgres://user:pass@host:5432/db",[70,155,156,157,160],{},"En production, ces trois variables sont ",[74,158,159],{},"obligatoires"," : leur absence fait échouer le démarrage.",[70,162,163,164,166],{},"Générer une ",[79,165,117],{}," :",[168,169,174],"pre",{"className":170,"code":171,"language":172,"meta":173,"style":173},"language-bash shiki shiki-themes github-light github-dark","python -c \"from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())\"\n","bash","",[79,175,176],{"__ignoreMap":173},[177,178,181,185,189],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"sScJk","python",[177,186,188],{"class":187},"sj4cs"," -c",[177,190,192],{"class":191},"sZZnC"," \"from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())\"\n",[84,194,196],{"id":195},"variables-optionnelles","Variables optionnelles",[198,199,201],"h3",{"id":200},"sécurité","Sécurité",[89,203,204,215],{},[92,205,206],{},[95,207,208,210,213],{},[98,209,100],{},[98,211,212],{},"Défaut",[98,214,103],{},[108,216,217],{},[95,218,219,224,229],{},[113,220,221],{},[79,222,223],{},"ALLOWED_HOSTS",[113,225,226,227],{},"valeur de ",[79,228,130],{},[113,230,231],{},"Hôtes autorisés (virgule-séparés)",[233,234,235],"blockquote",{},[70,236,237,240,241,240,244,247,248,251,252,255,256,259,260,263,264,267,268,271,272,274],{},[79,238,239],{},"DEBUG",", ",[79,242,243],{},"SECURE_SSL_REDIRECT",[79,245,246],{},"SESSION_COOKIE_SECURE"," et ",[79,249,250],{},"CSRF_COOKIE_SECURE"," ne sont ",[74,253,254],{},"pas"," des variables d'environnement. Le durcissement est décidé par le fichier de settings : ",[79,257,258],{},"config.settings.production"," force ",[79,261,262],{},"DEBUG=False",", les cookies ",[79,265,266],{},"Secure"," et HSTS (1 an, sous-domaines inclus). La redirection HTTPS est assurée par nginx, pas par Django. Il suffit donc de pointer ",[79,269,270],{},"DJANGO_SETTINGS_MODULE"," sur ",[79,273,258],{},".",[198,276,278],{"id":277},"cache-et-workers","Cache et workers",[89,280,281,291],{},[92,282,283],{},[95,284,285,287,289],{},[98,286,100],{},[98,288,212],{},[98,290,103],{},[108,292,293,306],{},[95,294,295,300,303],{},[113,296,297],{},[79,298,299],{},"REDIS_URL",[113,301,302],{},"None",[113,304,305],{},"URL Redis — absent = DB cache + Celery synchrone",[95,307,308,313,318],{},[113,309,310],{},[79,311,312],{},"DJANGO_LOG_LEVEL",[113,314,315],{},[79,316,317],{},"INFO",[113,319,320],{},"Verbosité des logs",[233,322,323],{},[70,324,325,326,328,329,332,333,336],{},"Si ",[79,327,299],{}," est absent, Suddenly bascule automatiquement sur le cache base de données et ",[79,330,331],{},"CELERY_TASK_ALWAYS_EAGER=True",". Pensez seulement à créer la table de cache (",[79,334,335],{},"manage.py createcachetable",").",[198,338,340],{"id":339},"stockage-des-médias","Stockage des médias",[89,342,343,353],{},[92,344,345],{},[95,346,347,349,351],{},[98,348,100],{},[98,350,212],{},[98,352,103],{},[108,354,355,371,383,398,411],{},[95,356,357,362,364],{},[113,358,359],{},[79,360,361],{},"AWS_STORAGE_BUCKET_NAME",[113,363,302],{},[113,365,366,367,370],{},"Absent = stockage sur le disque local (",[79,368,369],{},"media/",")",[95,372,373,378,380],{},[113,374,375],{},[79,376,377],{},"AWS_S3_ENDPOINT_URL",[113,379,302],{},[113,381,382],{},"Endpoint S3 / Cloudflare R2",[95,384,385,390,395],{},[113,386,387],{},[79,388,389],{},"AWS_S3_REGION_NAME",[113,391,392],{},[79,393,394],{},"auto",[113,396,397],{},"Région",[95,399,400,405,408],{},[113,401,402],{},[79,403,404],{},"AWS_ACCESS_KEY_ID",[113,406,407],{},"—",[113,409,410],{},"Requis si un bucket est défini",[95,412,413,418,420],{},[113,414,415],{},[79,416,417],{},"AWS_SECRET_ACCESS_KEY",[113,419,407],{},[113,421,410],{},[198,423,425],{"id":424},"fédération-et-divers","Fédération et divers",[89,427,428,438],{},[92,429,430],{},[95,431,432,434,436],{},[98,433,100],{},[98,435,212],{},[98,437,103],{},[108,439,440,455,470,485,500],{},[95,441,442,447,452],{},[113,443,444],{},[79,445,446],{},"AP_SIGNATURE_MAX_SKEW",[113,448,449],{},[79,450,451],{},"300",[113,453,454],{},"Tolérance d'horloge (s) pour les signatures HTTP",[95,456,457,462,467],{},[113,458,459],{},[79,460,461],{},"AP_ALLOW_INSECURE_HTTP",[113,463,464],{},[79,465,466],{},"0",[113,468,469],{},"N'autoriser le HTTP non chiffré qu'en développement",[95,471,472,477,482],{},[113,473,474],{},[79,475,476],{},"INGEST_TOKEN",[113,478,479],{},[79,480,481],{},"\"\"",[113,483,484],{},"Jeton d'ingestion des comptes rendus externes — vide = endpoint désactivé",[95,486,487,492,497],{},[113,488,489],{},[79,490,491],{},"FEED_PROMO_EVERY",[113,493,494],{},[79,495,496],{},"6",[113,498,499],{},"Fréquence des cartes « personnage à faire circuler » dans le fil",[95,501,502,507,512],{},[113,503,504],{},[79,505,506],{},"LANGUAGE_CODE",[113,508,509],{},[79,510,511],{},"fr",[113,513,514],{},"Langue par défaut de l'instance",[198,516,518],{"id":517},"email","Email",[89,520,521,531],{},[92,522,523],{},[95,524,525,527,529],{},[98,526,100],{},[98,528,212],{},[98,530,103],{},[108,532,533,545,560,572,584,599],{},[95,534,535,540,542],{},[113,536,537],{},[79,538,539],{},"EMAIL_HOST",[113,541,302],{},[113,543,544],{},"Serveur SMTP",[95,546,547,552,557],{},[113,548,549],{},[79,550,551],{},"EMAIL_PORT",[113,553,554],{},[79,555,556],{},"587",[113,558,559],{},"Port SMTP",[95,561,562,567,569],{},[113,563,564],{},[79,565,566],{},"EMAIL_HOST_USER",[113,568,302],{},[113,570,571],{},"Identifiant SMTP",[95,573,574,579,581],{},[113,575,576],{},[79,577,578],{},"EMAIL_HOST_PASSWORD",[113,580,302],{},[113,582,583],{},"Mot de passe SMTP",[95,585,586,591,596],{},[113,587,588],{},[79,589,590],{},"EMAIL_USE_TLS",[113,592,593],{},[79,594,595],{},"True",[113,597,598],{},"TLS activé",[95,600,601,606,608],{},[113,602,603],{},[79,604,605],{},"DEFAULT_FROM_EMAIL",[113,607,302],{},[113,609,610],{},"Adresse expéditeur",[84,612,614,615,617],{"id":613},"exemple-de-fichier-env-complet","Exemple de fichier ",[79,616,81],{}," complet",[70,619,620,621,624],{},"Le dépôt fournit un ",[79,622,623],{},".env.example"," à copier. Version minimale annotée :",[168,626,628],{"className":170,"code":627,"language":172,"meta":173,"style":173},"# Requis\nSECRET_KEY=votre-cle-tres-longue-generee-avec-django\nDOMAIN=mon-instance.example.com\nDATABASE_URL=postgres://suddenly:motdepasse-fort@localhost:5432/suddenly\nALLOWED_HOSTS=mon-instance.example.com\n\n# Redis (optionnel — absent = DB cache + Celery synchrone)\nREDIS_URL=redis://localhost:6379/0\n\n# Email (absent = les mails partent dans le vide)\nEMAIL_HOST=smtp.example.com\nEMAIL_PORT=587\nEMAIL_HOST_USER=noreply@example.com\nEMAIL_HOST_PASSWORD=mdp-email\nDEFAULT_FROM_EMAIL=noreply@example.com\n\n# Logs\nDJANGO_LOG_LEVEL=INFO\n",[79,629,630,636,649,659,669,678,685,691,701,706,712,722,732,742,752,761,766,772],{"__ignoreMap":173},[177,631,632],{"class":179,"line":180},[177,633,635],{"class":634},"sJ8bj","# Requis\n",[177,637,639,642,646],{"class":179,"line":638},2,[177,640,117],{"class":641},"sVt8B",[177,643,645],{"class":644},"szBVR","=",[177,647,648],{"class":191},"votre-cle-tres-longue-generee-avec-django\n",[177,650,652,654,656],{"class":179,"line":651},3,[177,653,130],{"class":641},[177,655,645],{"class":644},[177,657,658],{"class":191},"mon-instance.example.com\n",[177,660,662,664,666],{"class":179,"line":661},4,[177,663,145],{"class":641},[177,665,645],{"class":644},[177,667,668],{"class":191},"postgres://suddenly:motdepasse-fort@localhost:5432/suddenly\n",[177,670,672,674,676],{"class":179,"line":671},5,[177,673,223],{"class":641},[177,675,645],{"class":644},[177,677,658],{"class":191},[177,679,681],{"class":179,"line":680},6,[177,682,684],{"emptyLinePlaceholder":683},true,"\n",[177,686,688],{"class":179,"line":687},7,[177,689,690],{"class":634},"# Redis (optionnel — absent = DB cache + Celery synchrone)\n",[177,692,694,696,698],{"class":179,"line":693},8,[177,695,299],{"class":641},[177,697,645],{"class":644},[177,699,700],{"class":191},"redis://localhost:6379/0\n",[177,702,704],{"class":179,"line":703},9,[177,705,684],{"emptyLinePlaceholder":683},[177,707,709],{"class":179,"line":708},10,[177,710,711],{"class":634},"# Email (absent = les mails partent dans le vide)\n",[177,713,715,717,719],{"class":179,"line":714},11,[177,716,539],{"class":641},[177,718,645],{"class":644},[177,720,721],{"class":191},"smtp.example.com\n",[177,723,725,727,729],{"class":179,"line":724},12,[177,726,551],{"class":641},[177,728,645],{"class":644},[177,730,731],{"class":191},"587\n",[177,733,735,737,739],{"class":179,"line":734},13,[177,736,566],{"class":641},[177,738,645],{"class":644},[177,740,741],{"class":191},"noreply@example.com\n",[177,743,745,747,749],{"class":179,"line":744},14,[177,746,578],{"class":641},[177,748,645],{"class":644},[177,750,751],{"class":191},"mdp-email\n",[177,753,755,757,759],{"class":179,"line":754},15,[177,756,605],{"class":641},[177,758,645],{"class":644},[177,760,741],{"class":191},[177,762,764],{"class":179,"line":763},16,[177,765,684],{"emptyLinePlaceholder":683},[177,767,769],{"class":179,"line":768},17,[177,770,771],{"class":634},"# Logs\n",[177,773,775,777,779],{"class":179,"line":774},18,[177,776,312],{"class":641},[177,778,645],{"class":644},[177,780,781],{"class":191},"INFO\n",[233,783,784],{},[70,785,786,787,789,790,793],{},"Si aucun ",[79,788,539],{}," n'est défini, Django utilise le backend ",[79,791,792],{},"dummy"," : les mails de confirmation d'inscription sont silencieusement jetés. Configurez le SMTP avant d'ouvrir les inscriptions.",[84,795,797],{"id":796},"initialisation-post-installation","Initialisation post-installation",[70,799,800],{},"Après chaque déploiement ou mise à jour :",[168,802,804],{"className":170,"code":803,"language":172,"meta":173,"style":173},"# Migrations de base de données\npython manage.py migrate\n\n# Cache table (si pas de Redis)\npython manage.py createcachetable\n\n# Fichiers statiques\npython manage.py collectstatic --noinput\n",[79,805,806,811,821,825,830,839,843,848],{"__ignoreMap":173},[177,807,808],{"class":179,"line":180},[177,809,810],{"class":634},"# Migrations de base de données\n",[177,812,813,815,818],{"class":179,"line":638},[177,814,184],{"class":183},[177,816,817],{"class":191}," manage.py",[177,819,820],{"class":191}," migrate\n",[177,822,823],{"class":179,"line":651},[177,824,684],{"emptyLinePlaceholder":683},[177,826,827],{"class":179,"line":661},[177,828,829],{"class":634},"# Cache table (si pas de Redis)\n",[177,831,832,834,836],{"class":179,"line":671},[177,833,184],{"class":183},[177,835,817],{"class":191},[177,837,838],{"class":191}," createcachetable\n",[177,840,841],{"class":179,"line":680},[177,842,684],{"emptyLinePlaceholder":683},[177,844,845],{"class":179,"line":687},[177,846,847],{"class":634},"# Fichiers statiques\n",[177,849,850,852,854,857],{"class":179,"line":693},[177,851,184],{"class":183},[177,853,817],{"class":191},[177,855,856],{"class":191}," collectstatic",[177,858,859],{"class":187}," --noinput\n",[70,861,862],{},"Les clés ActivityPub n'ont pas à être créées à la main : les clés d'instance sont générées au premier besoin, celles des acteurs à leur création.",[84,864,866],{"id":865},"configuration-de-linstance","Configuration de l'instance",[70,868,869],{},"Deux interfaces, deux rôles.",[70,871,872,878,879,882],{},[74,873,874,875,370],{},"Le panel d'instance (",[79,876,877],{},"/gmh/"," — réservé aux comptes marqués administrateurs d'instance (",[79,880,881],{},"manage.py set_admin",") :",[884,885,886,897,907],"ul",{},[887,888,889,892,893,896],"li",{},[74,890,891],{},"Réglages"," : nom de l'instance, description, langue, ",[74,894,895],{},"inscriptions ouvertes ou fermées",", appels aux dons",[887,898,899,902,903,906],{},[74,900,901],{},"Instances distantes"," : consulter les serveurs fédérés connus et ",[74,904,905],{},"en bloquer"," un",[887,908,909,912],{},[74,910,911],{},"Utilisateurs"," : consulter et suspendre un compte",[70,914,915,921],{},[74,916,917,918,370],{},"L'admin Django (",[79,919,920],{},"/admin"," — accès bas niveau à tous les modèles, y compris les signalements de contenu et les blocages entre utilisateurs.",[233,923,924],{},[70,925,926,927,929,930,933],{},"Les inscriptions sont un simple booléen : ouvertes ou fermées. Il n'existe ",[74,928,254],{}," de mode « sur invitation ». Côté fédération, il n'y a ",[74,931,932],{},"pas de whitelist"," : on ne peut que bloquer une instance connue.",[84,935,937],{"id":936},"checklist-post-déploiement","Checklist post-déploiement",[168,939,944],{"className":940,"code":942,"language":943},[941],"language-text","[ ] HTTPS fonctionne\n[ ] WebFinger répond : /.well-known/webfinger?resource=acct:admin@domain\n[ ] NodeInfo accessible : /.well-known/nodeinfo\n[ ] Endpoint de sante : GET /health/ → {\"status\": \"ok\"}\n[ ] Création de compte fonctionne\n[ ] Upload de media fonctionne\n[ ] Federation testee avec une autre instance Suddenly ou Mastodon\n","text",[79,945,942],{"__ignoreMap":173},[947,948,949],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":173,"searchDepth":638,"depth":638,"links":951},[952,953,960,962,963,964],{"id":86,"depth":638,"text":87},{"id":195,"depth":638,"text":196,"children":954},[955,956,957,958,959],{"id":200,"depth":651,"text":201},{"id":277,"depth":651,"text":278},{"id":339,"depth":651,"text":340},{"id":424,"depth":651,"text":425},{"id":517,"depth":651,"text":518},{"id":613,"depth":638,"text":961},"Exemple de fichier .env complet",{"id":796,"depth":638,"text":797},{"id":865,"depth":638,"text":866},{"id":936,"depth":638,"text":937},"Variables d'environnement et paramètres de production de Suddenly.","md",{},{"title":52,"description":965},"Mh8D6TsDez-iLuFc0uGQ_XcQmMjq9yPJ02RAXN7J_ds",1784021864437]