[{"data":1,"prerenderedAt":1347},["ShallowReactive",2],{"docs-nav":3,"/docs/administration/maintenance":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":56,"body":62,"description":1342,"extension":1343,"meta":1344,"navigation":216,"path":57,"seo":1345,"stem":58,"__hash__":1346},"docs/docs/3.administration/2.maintenance.md",{"type":63,"value":64,"toc":1319},"minimark",[65,69,74,79,129,140,143,147,154,258,263,326,329,389,393,400,405,470,475,503,506,510,512,552,563,566,662,664,668,671,718,721,797,801,893,895,899,903,921,931,935,995,999,1058,1060,1064,1067,1110,1113,1220,1222,1226,1309,1315],[66,67,56],"h1",{"id":68},"maintenance",[70,71,73],"h2",{"id":72},"sauvegardes","Sauvegardes",[75,76,78],"h3",{"id":77},"le-plus-simple-les-scripts-fournis-docker","Le plus simple : les scripts fournis (Docker)",[80,81,86],"pre",{"className":82,"code":83,"language":84,"meta":85,"style":85},"language-bash shiki shiki-themes github-light github-dark","./scripts/backup.sh /backups    # dump PostgreSQL + volume médias + .env/compose/nginx\n./scripts/restore.sh \u003Cprefixe>  # restauration complète, interactive\n","bash","",[87,88,89,106],"code",{"__ignoreMap":85},[90,91,94,98,102],"span",{"class":92,"line":93},"line",1,[90,95,97],{"class":96},"sScJk","./scripts/backup.sh",[90,99,101],{"class":100},"sZZnC"," /backups",[90,103,105],{"class":104},"sJ8bj","    # dump PostgreSQL + volume médias + .env/compose/nginx\n",[90,107,109,112,116,119,123,126],{"class":92,"line":108},2,[90,110,111],{"class":96},"./scripts/restore.sh",[90,113,115],{"class":114},"szBVR"," \u003C",[90,117,118],{"class":100},"prefix",[90,120,122],{"class":121},"sVt8B","e",[90,124,125],{"class":114},">",[90,127,128],{"class":104},"  # restauration complète, interactive\n",[130,131,132,135,136,139],"p",{},[87,133,134],{},"backup.sh"," purge de lui-même les archives de plus de 7 jours. ",[87,137,138],{},"restore.sh"," détruit et recrée la base avant de restaurer : il demande confirmation.",[130,141,142],{},"Le reste de cette section décrit les opérations équivalentes à la main, utiles hors Docker.",[75,144,146],{"id":145},"base-de-données","Base de données",[130,148,149,153],{},[150,151,152],"strong",{},"Docker"," :",[80,155,157],{"className":82,"code":156,"language":84,"meta":85,"style":85},"# Sauvegarde\ndocker compose exec db pg_dump -U suddenly suddenly > backup_$(date +%Y%m%d).sql\n\n# Restauration\ncat backup.sql | docker compose exec -T db psql -U suddenly suddenly\n",[87,158,159,164,211,218,224],{"__ignoreMap":85},[90,160,161],{"class":92,"line":93},[90,162,163],{"class":104},"# Sauvegarde\n",[90,165,166,169,172,175,178,181,185,188,190,193,196,199,202,205,208],{"class":92,"line":108},[90,167,168],{"class":96},"docker",[90,170,171],{"class":100}," compose",[90,173,174],{"class":100}," exec",[90,176,177],{"class":100}," db",[90,179,180],{"class":100}," pg_dump",[90,182,184],{"class":183},"sj4cs"," -U",[90,186,187],{"class":100}," suddenly",[90,189,187],{"class":100},[90,191,192],{"class":114}," >",[90,194,195],{"class":100}," backup_",[90,197,198],{"class":121},"$(",[90,200,201],{"class":96},"date",[90,203,204],{"class":100}," +%Y%m%d",[90,206,207],{"class":121},")",[90,209,210],{"class":100},".sql\n",[90,212,214],{"class":92,"line":213},3,[90,215,217],{"emptyLinePlaceholder":216},true,"\n",[90,219,221],{"class":92,"line":220},4,[90,222,223],{"class":104},"# Restauration\n",[90,225,227,230,233,236,239,241,243,246,248,251,253,255],{"class":92,"line":226},5,[90,228,229],{"class":96},"cat",[90,231,232],{"class":100}," backup.sql",[90,234,235],{"class":114}," |",[90,237,238],{"class":96}," docker",[90,240,171],{"class":100},[90,242,174],{"class":100},[90,244,245],{"class":183}," -T",[90,247,177],{"class":100},[90,249,250],{"class":100}," psql",[90,252,184],{"class":183},[90,254,187],{"class":100},[90,256,257],{"class":100}," suddenly\n",[130,259,260,153],{},[150,261,262],{},"VPS (bare metal)",[80,264,266],{"className":82,"code":265,"language":84,"meta":85,"style":85},"# Sauvegarde\nsudo -u postgres pg_dump suddenly > backup_$(date +%Y%m%d).sql\n\n# Restauration\nsudo -u postgres psql suddenly \u003C backup.sql\n",[87,267,268,272,301,305,309],{"__ignoreMap":85},[90,269,270],{"class":92,"line":93},[90,271,163],{"class":104},[90,273,274,277,280,283,285,287,289,291,293,295,297,299],{"class":92,"line":108},[90,275,276],{"class":96},"sudo",[90,278,279],{"class":183}," -u",[90,281,282],{"class":100}," postgres",[90,284,180],{"class":100},[90,286,187],{"class":100},[90,288,192],{"class":114},[90,290,195],{"class":100},[90,292,198],{"class":121},[90,294,201],{"class":96},[90,296,204],{"class":100},[90,298,207],{"class":121},[90,300,210],{"class":100},[90,302,303],{"class":92,"line":213},[90,304,217],{"emptyLinePlaceholder":216},[90,306,307],{"class":92,"line":220},[90,308,223],{"class":104},[90,310,311,313,315,317,319,321,323],{"class":92,"line":226},[90,312,276],{"class":96},[90,314,279],{"class":183},[90,316,282],{"class":100},[90,318,250],{"class":100},[90,320,187],{"class":100},[90,322,115],{"class":114},[90,324,325],{"class":100}," backup.sql\n",[130,327,328],{},"Automatiser avec cron (quotidien à 3h) :",[80,330,332],{"className":82,"code":331,"language":84,"meta":85,"style":85},"0 3 * * * pg_dump -U suddenly suddenly > /backups/suddenly_$(date +\\%Y\\%m\\%d).sql\n",[87,333,334],{"__ignoreMap":85},[90,335,336,339,342,345,347,349,351,353,355,357,359,362,364,366,369,372,375,377,380,382,385,387],{"class":92,"line":93},[90,337,338],{"class":96},"0",[90,340,341],{"class":183}," 3",[90,343,344],{"class":183}," *",[90,346,344],{"class":183},[90,348,344],{"class":183},[90,350,180],{"class":100},[90,352,184],{"class":183},[90,354,187],{"class":100},[90,356,187],{"class":100},[90,358,192],{"class":114},[90,360,361],{"class":100}," /backups/suddenly_",[90,363,198],{"class":121},[90,365,201],{"class":96},[90,367,368],{"class":100}," +",[90,370,371],{"class":183},"\\%",[90,373,374],{"class":100},"Y",[90,376,371],{"class":183},[90,378,379],{"class":100},"m",[90,381,371],{"class":183},[90,383,384],{"class":100},"d",[90,386,207],{"class":121},[90,388,210],{"class":100},[75,390,392],{"id":391},"fichiers-médias","Fichiers médias",[130,394,395,396,399],{},"Les uploads utilisateurs (avatars, images) sont dans le dossier ",[87,397,398],{},"media/",".",[130,401,402,153],{},[150,403,404],{},"Docker — sauvegarder le volume",[80,406,408],{"className":82,"code":407,"language":84,"meta":85,"style":85},"docker run --rm \\\n  -v suddenly_media:/data \\\n  -v /backups:/backup \\\n  alpine tar czf /backup/media_$(date +%Y%m%d).tar.gz /data\n",[87,409,410,423,433,442],{"__ignoreMap":85},[90,411,412,414,417,420],{"class":92,"line":93},[90,413,168],{"class":96},[90,415,416],{"class":100}," run",[90,418,419],{"class":183}," --rm",[90,421,422],{"class":183}," \\\n",[90,424,425,428,431],{"class":92,"line":108},[90,426,427],{"class":183},"  -v",[90,429,430],{"class":100}," suddenly_media:/data",[90,432,422],{"class":183},[90,434,435,437,440],{"class":92,"line":213},[90,436,427],{"class":183},[90,438,439],{"class":100}," /backups:/backup",[90,441,422],{"class":183},[90,443,444,447,450,453,456,458,460,462,464,467],{"class":92,"line":220},[90,445,446],{"class":100},"  alpine",[90,448,449],{"class":100}," tar",[90,451,452],{"class":100}," czf",[90,454,455],{"class":100}," /backup/media_",[90,457,198],{"class":121},[90,459,201],{"class":96},[90,461,204],{"class":100},[90,463,207],{"class":121},[90,465,466],{"class":100},".tar.gz",[90,468,469],{"class":100}," /data\n",[130,471,472,153],{},[150,473,474],{},"VPS",[80,476,478],{"className":82,"code":477,"language":84,"meta":85,"style":85},"tar czf /backups/media_$(date +%Y%m%d).tar.gz /opt/suddenly/app/media/\n",[87,479,480],{"__ignoreMap":85},[90,481,482,485,487,490,492,494,496,498,500],{"class":92,"line":93},[90,483,484],{"class":96},"tar",[90,486,452],{"class":100},[90,488,489],{"class":100}," /backups/media_",[90,491,198],{"class":121},[90,493,201],{"class":96},[90,495,204],{"class":100},[90,497,207],{"class":121},[90,499,466],{"class":100},[90,501,502],{"class":100}," /opt/suddenly/app/media/\n",[504,505],"hr",{},[70,507,509],{"id":508},"mise-à-jour","Mise à jour",[75,511,152],{"id":168},[80,513,515],{"className":82,"code":514,"language":84,"meta":85,"style":85},"git pull origin main\ndocker compose build\ndocker compose up -d\n",[87,516,517,531,540],{"__ignoreMap":85},[90,518,519,522,525,528],{"class":92,"line":93},[90,520,521],{"class":96},"git",[90,523,524],{"class":100}," pull",[90,526,527],{"class":100}," origin",[90,529,530],{"class":100}," main\n",[90,532,533,535,537],{"class":92,"line":108},[90,534,168],{"class":96},[90,536,171],{"class":100},[90,538,539],{"class":100}," build\n",[90,541,542,544,546,549],{"class":92,"line":213},[90,543,168],{"class":96},[90,545,171],{"class":100},[90,547,548],{"class":100}," up",[90,550,551],{"class":183}," -d\n",[130,553,554,555,558,559,562],{},"Les migrations sont appliquées par ",[87,556,557],{},"scripts/entrypoint.sh"," au démarrage du conteneur ",[87,560,561],{},"web"," — pas besoin de les lancer à la main.",[75,564,474],{"id":565},"vps",[80,567,569],{"className":82,"code":568,"language":84,"meta":85,"style":85},"sudo -u suddenly bash \u003C\u003C 'EOF'\ncd /opt/suddenly/app\ngit pull origin main\nsource venv/bin/activate\npip install --upgrade pip && pip install -e \".[federation]\"\npython manage.py migrate\npython manage.py collectstatic --noinput\nEOF\n\nsudo systemctl restart suddenly\nsudo systemctl restart suddenly-celery suddenly-celery-beat  # si Celery actif\n",[87,570,571,588,593,598,603,608,614,620,626,631,644],{"__ignoreMap":85},[90,572,573,575,577,579,582,585],{"class":92,"line":93},[90,574,276],{"class":96},[90,576,279],{"class":183},[90,578,187],{"class":100},[90,580,581],{"class":100}," bash",[90,583,584],{"class":114}," \u003C\u003C",[90,586,587],{"class":100}," 'EOF'\n",[90,589,590],{"class":92,"line":108},[90,591,592],{"class":100},"cd /opt/suddenly/app\n",[90,594,595],{"class":92,"line":213},[90,596,597],{"class":100},"git pull origin main\n",[90,599,600],{"class":92,"line":220},[90,601,602],{"class":100},"source venv/bin/activate\n",[90,604,605],{"class":92,"line":226},[90,606,607],{"class":100},"pip install --upgrade pip && pip install -e \".[federation]\"\n",[90,609,611],{"class":92,"line":610},6,[90,612,613],{"class":100},"python manage.py migrate\n",[90,615,617],{"class":92,"line":616},7,[90,618,619],{"class":100},"python manage.py collectstatic --noinput\n",[90,621,623],{"class":92,"line":622},8,[90,624,625],{"class":100},"EOF\n",[90,627,629],{"class":92,"line":628},9,[90,630,217],{"emptyLinePlaceholder":216},[90,632,634,636,639,642],{"class":92,"line":633},10,[90,635,276],{"class":96},[90,637,638],{"class":100}," systemctl",[90,640,641],{"class":100}," restart",[90,643,257],{"class":100},[90,645,647,649,651,653,656,659],{"class":92,"line":646},11,[90,648,276],{"class":96},[90,650,638],{"class":100},[90,652,641],{"class":100},[90,654,655],{"class":100}," suddenly-celery",[90,657,658],{"class":100}," suddenly-celery-beat",[90,660,661],{"class":104},"  # si Celery actif\n",[504,663],{},[70,665,667],{"id":666},"logs","Logs",[75,669,152],{"id":670},"docker-1",[80,672,674],{"className":82,"code":673,"language":84,"meta":85,"style":85},"docker compose logs -f web\ndocker compose logs -f celery\ndocker compose logs --tail=100 nginx\n",[87,675,676,691,704],{"__ignoreMap":85},[90,677,678,680,682,685,688],{"class":92,"line":93},[90,679,168],{"class":96},[90,681,171],{"class":100},[90,683,684],{"class":100}," logs",[90,686,687],{"class":183}," -f",[90,689,690],{"class":100}," web\n",[90,692,693,695,697,699,701],{"class":92,"line":108},[90,694,168],{"class":96},[90,696,171],{"class":100},[90,698,684],{"class":100},[90,700,687],{"class":183},[90,702,703],{"class":100}," celery\n",[90,705,706,708,710,712,715],{"class":92,"line":213},[90,707,168],{"class":96},[90,709,171],{"class":100},[90,711,684],{"class":100},[90,713,714],{"class":183}," --tail=100",[90,716,717],{"class":100}," nginx\n",[75,719,474],{"id":720},"vps-1",[80,722,724],{"className":82,"code":723,"language":84,"meta":85,"style":85},"# Application\nsudo journalctl -u suddenly -f\nsudo tail -f /var/log/suddenly/error.log\n\n# Nginx\nsudo tail -f /var/log/nginx/suddenly_error.log\n\n# PostgreSQL\nsudo tail -f /var/log/postgresql/postgresql-16-main.log\n",[87,725,726,731,745,757,761,766,777,781,786],{"__ignoreMap":85},[90,727,728],{"class":92,"line":93},[90,729,730],{"class":104},"# Application\n",[90,732,733,735,738,740,742],{"class":92,"line":108},[90,734,276],{"class":96},[90,736,737],{"class":100}," journalctl",[90,739,279],{"class":183},[90,741,187],{"class":100},[90,743,744],{"class":183}," -f\n",[90,746,747,749,752,754],{"class":92,"line":213},[90,748,276],{"class":96},[90,750,751],{"class":100}," tail",[90,753,687],{"class":183},[90,755,756],{"class":100}," /var/log/suddenly/error.log\n",[90,758,759],{"class":92,"line":220},[90,760,217],{"emptyLinePlaceholder":216},[90,762,763],{"class":92,"line":226},[90,764,765],{"class":104},"# Nginx\n",[90,767,768,770,772,774],{"class":92,"line":610},[90,769,276],{"class":96},[90,771,751],{"class":100},[90,773,687],{"class":183},[90,775,776],{"class":100}," /var/log/nginx/suddenly_error.log\n",[90,778,779],{"class":92,"line":616},[90,780,217],{"emptyLinePlaceholder":216},[90,782,783],{"class":92,"line":622},[90,784,785],{"class":104},"# PostgreSQL\n",[90,787,788,790,792,794],{"class":92,"line":628},[90,789,276],{"class":96},[90,791,751],{"class":100},[90,793,687],{"class":183},[90,795,796],{"class":100}," /var/log/postgresql/postgresql-16-main.log\n",[75,798,800],{"id":799},"rotation-des-logs-vps","Rotation des logs (VPS)",[80,802,804],{"className":82,"code":803,"language":84,"meta":85,"style":85},"sudo tee /etc/logrotate.d/suddenly \u003C\u003C 'EOF'\n/var/log/suddenly/*.log {\n    daily\n    missingok\n    rotate 14\n    compress\n    delaycompress\n    notifempty\n    create 0640 suddenly suddenly\n    sharedscripts\n    postrotate\n        systemctl reload suddenly > /dev/null 2>&1 || true\n    endscript\n}\nEOF\n",[87,805,806,820,825,830,835,840,845,850,855,860,865,870,876,882,888],{"__ignoreMap":85},[90,807,808,810,813,816,818],{"class":92,"line":93},[90,809,276],{"class":96},[90,811,812],{"class":100}," tee",[90,814,815],{"class":100}," /etc/logrotate.d/suddenly",[90,817,584],{"class":114},[90,819,587],{"class":100},[90,821,822],{"class":92,"line":108},[90,823,824],{"class":100},"/var/log/suddenly/*.log {\n",[90,826,827],{"class":92,"line":213},[90,828,829],{"class":100},"    daily\n",[90,831,832],{"class":92,"line":220},[90,833,834],{"class":100},"    missingok\n",[90,836,837],{"class":92,"line":226},[90,838,839],{"class":100},"    rotate 14\n",[90,841,842],{"class":92,"line":610},[90,843,844],{"class":100},"    compress\n",[90,846,847],{"class":92,"line":616},[90,848,849],{"class":100},"    delaycompress\n",[90,851,852],{"class":92,"line":622},[90,853,854],{"class":100},"    notifempty\n",[90,856,857],{"class":92,"line":628},[90,858,859],{"class":100},"    create 0640 suddenly suddenly\n",[90,861,862],{"class":92,"line":633},[90,863,864],{"class":100},"    sharedscripts\n",[90,866,867],{"class":92,"line":646},[90,868,869],{"class":100},"    postrotate\n",[90,871,873],{"class":92,"line":872},12,[90,874,875],{"class":100},"        systemctl reload suddenly > /dev/null 2>&1 || true\n",[90,877,879],{"class":92,"line":878},13,[90,880,881],{"class":100},"    endscript\n",[90,883,885],{"class":92,"line":884},14,[90,886,887],{"class":100},"}\n",[90,889,891],{"class":92,"line":890},15,[90,892,625],{"class":100},[504,894],{},[70,896,898],{"id":897},"monitoring","Monitoring",[75,900,902],{"id":901},"health-check","Health check",[80,904,906],{"className":82,"code":905,"language":84,"meta":85,"style":85},"curl https://votre-instance.example.com/health/\n# → {\"status\": \"ok\"}\n",[87,907,908,916],{"__ignoreMap":85},[90,909,910,913],{"class":92,"line":93},[90,911,912],{"class":96},"curl",[90,914,915],{"class":100}," https://votre-instance.example.com/health/\n",[90,917,918],{"class":92,"line":108},[90,919,920],{"class":104},"# → {\"status\": \"ok\"}\n",[922,923,924],"blockquote",{},[130,925,926,927,930],{},"Cet endpoint confirme seulement que Django répond : il ne teste ni la base, ni Redis. Une instance dont PostgreSQL est tombé renverra quand même ",[87,928,929],{},"ok",". Surveillez les services séparément.",[75,932,934],{"id":933},"indicateurs-à-surveiller","Indicateurs à surveiller",[936,937,938,951],"table",{},[939,940,941],"thead",{},[942,943,944,948],"tr",{},[945,946,947],"th",{},"Indicateur",[945,949,950],{},"Seuil d'alerte",[952,953,954,963,971,979,987],"tbody",{},[942,955,956,960],{},[957,958,959],"td",{},"Utilisation CPU",[957,961,962],{},"> 80% soutenu",[942,964,965,968],{},[957,966,967],{},"RAM disponible",[957,969,970],{},"\u003C 200 Mo",[942,972,973,976],{},[957,974,975],{},"Espace disque",[957,977,978],{},"\u003C 20% libre",[942,980,981,984],{},[957,982,983],{},"Queue Celery (Redis)",[957,985,986],{},"> 1000 tâches en attente",[942,988,989,992],{},[957,990,991],{},"Taux d'erreur 5xx (Nginx)",[957,993,994],{},"> 1%",[75,996,998],{"id":997},"statut-des-services-vps","Statut des services (VPS)",[80,1000,1002],{"className":82,"code":1001,"language":84,"meta":85,"style":85},"sudo systemctl status suddenly\nsudo systemctl status suddenly-celery\nsudo systemctl status postgresql\nsudo systemctl status nginx\nsudo systemctl status redis-server\n",[87,1003,1004,1015,1026,1037,1047],{"__ignoreMap":85},[90,1005,1006,1008,1010,1013],{"class":92,"line":93},[90,1007,276],{"class":96},[90,1009,638],{"class":100},[90,1011,1012],{"class":100}," status",[90,1014,257],{"class":100},[90,1016,1017,1019,1021,1023],{"class":92,"line":108},[90,1018,276],{"class":96},[90,1020,638],{"class":100},[90,1022,1012],{"class":100},[90,1024,1025],{"class":100}," suddenly-celery\n",[90,1027,1028,1030,1032,1034],{"class":92,"line":213},[90,1029,276],{"class":96},[90,1031,638],{"class":100},[90,1033,1012],{"class":100},[90,1035,1036],{"class":100}," postgresql\n",[90,1038,1039,1041,1043,1045],{"class":92,"line":220},[90,1040,276],{"class":96},[90,1042,638],{"class":100},[90,1044,1012],{"class":100},[90,1046,717],{"class":100},[90,1048,1049,1051,1053,1055],{"class":92,"line":226},[90,1050,276],{"class":96},[90,1052,638],{"class":100},[90,1054,1012],{"class":100},[90,1056,1057],{"class":100}," redis-server\n",[504,1059],{},[70,1061,1063],{"id":1062},"taches-planifiees","Taches planifiees",[130,1065,1066],{},"Quand Celery Beat tourne, il planifie exactement deux tâches :",[936,1068,1069,1082],{},[939,1070,1071],{},[942,1072,1073,1076,1079],{},[945,1074,1075],{},"Tâche",[945,1077,1078],{},"Fréquence",[945,1080,1081],{},"Effet",[952,1083,1084,1097],{},[942,1085,1086,1091,1094],{},[957,1087,1088],{},[87,1089,1090],{},"cleanup_expired_quotes",[957,1092,1093],{},"toutes les heures",[957,1095,1096],{},"Supprime les citations éphémères arrivées à expiration",[942,1098,1099,1104,1107],{},[957,1100,1101],{},[87,1102,1103],{},"refresh_remote_actors",[957,1105,1106],{},"une fois par jour",[957,1108,1109],{},"Rafraîchit les acteurs distants connus",[130,1111,1112],{},"Si Celery n'est pas activé (petites instances), lancez-les via cron — sinon elles ne tournent jamais :",[80,1114,1116],{"className":82,"code":1115,"language":84,"meta":85,"style":85},"# Nettoyage des sessions expirées (quotidien)\n0 3 * * * /opt/suddenly/app/venv/bin/python /opt/suddenly/app/manage.py clearsessions\n\n# Nettoyage des citations ephemeres (toutes les heures)\n0 * * * * /opt/suddenly/app/venv/bin/python /opt/suddenly/app/manage.py shell -c \\\n  \"from suddenly.activitypub.tasks import cleanup_expired_quotes; cleanup_expired_quotes()\"\n\n# Rafraichissement des acteurs distants (quotidien)\n30 4 * * * /opt/suddenly/app/venv/bin/python /opt/suddenly/app/manage.py shell -c \\\n  \"from suddenly.activitypub.tasks import refresh_remote_actors; refresh_remote_actors()\"\n",[87,1117,1118,1123,1144,1148,1153,1177,1182,1186,1191,1215],{"__ignoreMap":85},[90,1119,1120],{"class":92,"line":93},[90,1121,1122],{"class":104},"# Nettoyage des sessions expirées (quotidien)\n",[90,1124,1125,1127,1129,1131,1133,1135,1138,1141],{"class":92,"line":108},[90,1126,338],{"class":96},[90,1128,341],{"class":183},[90,1130,344],{"class":183},[90,1132,344],{"class":183},[90,1134,344],{"class":183},[90,1136,1137],{"class":100}," /opt/suddenly/app/venv/bin/python",[90,1139,1140],{"class":100}," /opt/suddenly/app/manage.py",[90,1142,1143],{"class":100}," clearsessions\n",[90,1145,1146],{"class":92,"line":213},[90,1147,217],{"emptyLinePlaceholder":216},[90,1149,1150],{"class":92,"line":220},[90,1151,1152],{"class":104},"# Nettoyage des citations ephemeres (toutes les heures)\n",[90,1154,1155,1157,1159,1161,1163,1165,1167,1169,1172,1175],{"class":92,"line":226},[90,1156,338],{"class":96},[90,1158,344],{"class":183},[90,1160,344],{"class":183},[90,1162,344],{"class":183},[90,1164,344],{"class":183},[90,1166,1137],{"class":100},[90,1168,1140],{"class":100},[90,1170,1171],{"class":100}," shell",[90,1173,1174],{"class":183}," -c",[90,1176,422],{"class":183},[90,1178,1179],{"class":92,"line":610},[90,1180,1181],{"class":100},"  \"from suddenly.activitypub.tasks import cleanup_expired_quotes; cleanup_expired_quotes()\"\n",[90,1183,1184],{"class":92,"line":616},[90,1185,217],{"emptyLinePlaceholder":216},[90,1187,1188],{"class":92,"line":622},[90,1189,1190],{"class":104},"# Rafraichissement des acteurs distants (quotidien)\n",[90,1192,1193,1196,1199,1201,1203,1205,1207,1209,1211,1213],{"class":92,"line":628},[90,1194,1195],{"class":96},"30",[90,1197,1198],{"class":183}," 4",[90,1200,344],{"class":183},[90,1202,344],{"class":183},[90,1204,344],{"class":183},[90,1206,1137],{"class":100},[90,1208,1140],{"class":100},[90,1210,1171],{"class":100},[90,1212,1174],{"class":183},[90,1214,422],{"class":183},[90,1216,1217],{"class":92,"line":633},[90,1218,1219],{"class":100},"  \"from suddenly.activitypub.tasks import refresh_remote_actors; refresh_remote_actors()\"\n",[504,1221],{},[70,1223,1225],{"id":1224},"infrastructure-recommandee","Infrastructure recommandee",[936,1227,1228,1250],{},[939,1229,1230],{},[942,1231,1232,1235,1238,1241,1244,1247],{},[945,1233,1234],{},"Taille",[945,1236,1237],{},"CPU",[945,1239,1240],{},"RAM",[945,1242,1243],{},"Disque",[945,1245,1246],{},"Redis",[945,1248,1249],{},"Celery",[952,1251,1252,1271,1291],{},[942,1253,1254,1257,1260,1263,1266,1269],{},[957,1255,1256],{},"\u003C 50 utilisateurs",[957,1258,1259],{},"1 vCPU",[957,1261,1262],{},"1 Go",[957,1264,1265],{},"20 Go SSD",[957,1267,1268],{},"Non",[957,1270,1268],{},[942,1272,1273,1276,1279,1282,1285,1288],{},[957,1274,1275],{},"50–500 utilisateurs",[957,1277,1278],{},"2 vCPU",[957,1280,1281],{},"2 Go",[957,1283,1284],{},"50 Go SSD",[957,1286,1287],{},"Oui",[957,1289,1290],{},"Recommande",[942,1292,1293,1296,1299,1302,1305,1307],{},[957,1294,1295],{},"500+ utilisateurs",[957,1297,1298],{},"4 vCPU",[957,1300,1301],{},"4 Go",[957,1303,1304],{},"100 Go SSD",[957,1306,1287],{},[957,1308,1287],{},[130,1310,1311,1314],{},[150,1312,1313],{},"OS supportés"," : Ubuntu 22.04 LTS ou 24.04 LTS, Debian 12+. Python 3.11 minimum.",[1316,1317,1318],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":85,"searchDepth":108,"depth":108,"links":1320},[1321,1326,1330,1335,1340,1341],{"id":72,"depth":108,"text":73,"children":1322},[1323,1324,1325],{"id":77,"depth":213,"text":78},{"id":145,"depth":213,"text":146},{"id":391,"depth":213,"text":392},{"id":508,"depth":108,"text":509,"children":1327},[1328,1329],{"id":168,"depth":213,"text":152},{"id":565,"depth":213,"text":474},{"id":666,"depth":108,"text":667,"children":1331},[1332,1333,1334],{"id":670,"depth":213,"text":152},{"id":720,"depth":213,"text":474},{"id":799,"depth":213,"text":800},{"id":897,"depth":108,"text":898,"children":1336},[1337,1338,1339],{"id":901,"depth":213,"text":902},{"id":933,"depth":213,"text":934},{"id":997,"depth":213,"text":998},{"id":1062,"depth":108,"text":1063},{"id":1224,"depth":108,"text":1225},"Sauvegardes, mise à jour, logs et monitoring d'une instance Suddenly.","md",{},{"title":56,"description":1342},"3zuM18OHSx5TBNp4cqnzl2qtmy0viV_yVGVG_JhqSng",1784021864437]