MySQL + MQ 最终一致性终极方案:Outbox + 幂等 + 补偿 + 对账全解析
2026/1/19 22:26:28
docker pull docker.1ms.run/library/nextcloud:stablemkdir -p /opt/data/docker/nextcloudnano /opt/data/docker/nextcloud/docker-compose.yml # yml 内容 version: '3' services: # Nextcloud 主服务 nextcloud: image: nextcloud:stable container_name: nextcloud ports: - "19000:80" # 宿主机19000端口映射到容器80 volumes: # 仅挂载一个根目录,所有子目录自动创建 - /opt/data/docker/nextcloud:/var/www/html environment: # 数据库连接配置(和下方mariadb保持一致) - MYSQL_PASSWORD=nextcloud123 - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_HOST=mariadb restart: always depends_on: - mariadb # MariaDB 数据库服务(必须配套) mariadb: image: mariadb:10.11 # 稳定版本,兼容Nextcloud container_name: nextcloud-mariadb volumes: # 数据库数据也放到你的根目录下,统一管理 - /opt/data/docker/nextcloud/mysql:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root123456 - MYSQL_PASSWORD=nextcloud123 - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud restart: always command: --transaction-isolation=READ-COMMITTED --binlog-format=ROWdocker-compose up -d# /opt/data/docker/nextcloud/config/config.php cp /opt/data/docker/nextcloud/config/config.php /opt/data/docker/nextcloud/config/config.php.bk nano /opt/data/docker/nextcloud/config/config.php <?php $NC_PREFIX = '/nextcloud'; //前缀 $NC_HOST = 'xxxx.net:18082'; //主机 $NC_PROTO = 'https';//协议 $CONFIG = array ( 'htaccess.RewriteBase' => $NC_PREFIX, 'memcache.local' => '\\OC\\Memcache\\APCu', 'apps_paths' => array ( 0 => array ( 'path' => '/var/www/html/apps', 'url' => $NC_PREFIX . '/apps', 'writable' => false, ), 1 => array ( 'path' => '/var/www/html/custom_apps', 'url' => $NC_PREFIX . '/custom_apps', 'writable' => true, ), ), // ===== 新增:强制静态资源带前缀 ===== 'asseturl' => $NC_PROTO . '://' . $NC_HOST . $NC_PREFIX, // 静态资源根地址 'asset-pipeline.enabled' => false, // 禁用资源合并(避免路径错乱) 'reverse_proxy' => true, // 声明反向代理 'reverse_proxy_urls' => array( // 代理URL映射 $NC_PROTO . '://' . $NC_HOST . $NC_PREFIX => $NC_PROTO . '://127.0.0.1:19000' ), // ================================== 'upgrade.disable-web' => true, 'instanceid' => 'occlx1qd7h7o', 'passwordsalt' => 'GUdqRQp0vNN/07f9/sjRWSpkw5O1+n', 'secret' => 'X++ibZC1kQ4W93uporffkeeiifx5IWK1LgysB3rVutT1oidb', 'trusted_domains' => array ( 0 => '127.0.0.1:19000', 1 => $NC_HOST, ), 'datadirectory' => '/var/www/html/data', 'dbtype' => 'mysql', 'version' => '31.0.13.1', 'overwrite.cli.url' => $NC_PROTO . '://' . $NC_HOST . $NC_PREFIX, 'overwritehost' => $NC_HOST, 'overwriteprotocol' => $NC_PROTO, 'overwritewebroot' => $NC_PREFIX, 'force_ssl' => true, 'trusted_ports' => [80, 443, 18082], 'trusted_proxies' => ['127.0.0.1', '172.17.0.1'], 'dbname' => 'nextcloud', 'dbhost' => 'mariadb', 'dbport' => '', 'dbtableprefix' => 'oc_', 'mysql.utf8mb4' => true, 'dbuser' => 'nextcloud', 'dbpassword' => 'nextcloud123', 'installed' => true, );nano /opt/data/docker/nextcloud/.user.ini # 末尾增加 upload_max_filesize=1G post_max_size=1Gnano /opt/data/docker/nextcloud/.htaccess # 末尾增加 php_value upload_max_filesize 1G php_value post_max_size 1Gdocker restart nextcloud:stablelocation /nextcloud/ { proxy_pass http://127.0.0.1:19000/; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Forwarded-Prefix /nextcloud; client_max_body_size 2048M; }systemctl reload nginx