确保PostgreSQL服务已启动,可以通过Windows服务管理器查看并启动服务。
以超级用户 "postgres" 的身份连接到数据库服务器。根据您在安装时设置的密码,可能会要求您输入密码。密码见 Secure-Passwords#Windows-PostgreSQL-Admin
psql -U postgres
使用以下命令创建一个名为 databaseName
的数据库和一个名为 databaseUser
的用户,和对应的密码 databaseUserPassword
:Secure-Passwords#NextCloud-PostgreSQL-Database
CREATE DATABASE databaseName;
CREATE USER nextclouduser WITH PASSWORD 'databaseUserPassword';
GRANT ALL PRIVILEGES ON DATABASE databaseName TO databaseUser;
ALTER DATABASE databaseName OWNER TO databaseUser;
\q
修改pg_hba.conf
文件,允许Docker容器访问PostgreSQL。找到该文件的位置(通常在PostgreSQL安装目录下的data
文件夹中),添加以下内容:
host all all 172.17.0.0/16 md5
all
。all
。当你在Docker容器中运行Nextcloud时,容器会有自己的IP地址,通常属于Docker的默认网络子网(例如172.17.0.0/16)。为了让容器中的Nextcloud能够连接到主机上的PostgreSQL数据库,你需要在pg_hba.conf
文件中添加这条规则,允许这个子网范围内的IP地址连接到PostgreSQL服务器,并使用MD5密码验证方式。
修改postgresql.conf
文件,允许外部连接。找到该文件的位置,确保以下行没有被注释掉
listen_addresses = '*'
以管理员方式打开PowerShell,输入以下命令完成重启
Restart-Service -Name 'postgresql-x64-16'
docker pull nextcloud
docker image ls
docker ps
docker volume create nextcloud-var_www_html
首先创建一个有名字的容器,这样以后更新服务端的时候,只要加载这个volume,无需配置就可以直接使用,做到服务和数据分离。
docker run -d --name nextcloud -p 5966:80 -v nextcloud-var_www_html:/var/www/html --restart=always nextcloud
docker run
:这是Docker命令,用于创建并运行一个新的容器。-d
:这个选项告诉Docker在后台运行容器(detached mode)。这样你可以继续使用命令行,并且容器在后台运行。--name nextcloud
:这个选项指定容器的名称为 nextcloud
。给容器指定一个名称有助于管理和识别。-p 5966:80
:这个选项将宿主机的端口 5966
映射到容器的端口 80
。意思是,当你访问宿主机的 http://localhost:5966
时,实际请求将被转发到容器的端口 80
上。Nextcloud的Web服务通常运行在容器的端口 80
上。nextcloud
:这是要运行的Docker镜像名称。在这种情况下,是 nextcloud
镜像。Docker会从本地镜像库或Docker Hub拉取这个镜像,然后创建并运行容器。docker update --restart=always nextcloud
在浏览器中打开网址 http://localhost:5966
,配置管理员用户名和密码以及posgreSQL的数据库账号、密码和数据库名 Secure-Passwords
注意这里为了让主机和外部通信,数据库的主机 地址不再是 127.0.0.1:5432
,而是 host.docker.internal:5432
我的电脑右键,映射网络驱动器,地址是
http://localhost:5966/remote.php/dav/files/nextcloud
打开注册表编辑器,打开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
项,修改BasicAuthLevel
的值为2
(原来为1)
win键+R,打开运行窗口,输入services.msc后按确定,找到WebClient服务,重新启动
有以下两种方式,目前通过方式一,解决了网页管理界面上删除提示 “该文件夹在某些元素上无法删除”的错误。
方式一:通过挂载的volume中删除
在 windows PowerShell 中执行,以id=33的用户登录对用的contaniner,执行 bash
docker exec -u 33 -it nextcloud_container_name bash
# example
docker exec -u 33 -it nextcloud bash
然后进入到挂载盘的数据中,删除对应的数据
cd /var/www/html/data/{your_user}/files
# example
cd /var/www/html/data/nextcloud/files
回到 html
目录下,该目录下有自带的管理工具 occ
## 运行 occ 文件扫描命令以同步文件状态
php occ files:scan --all
# 清理文件
php occ files:cleanup
方式二:通过数据库删除
在 windows PowerShell 中执行,这里 nextcloud_user 可以选择默认管理员账户 postgres,nextcloud_database的数据库名为 nextcloud
psql -U nextcloud_user -d nextcloud_database
# example
psql -U postgres -d nextcloud
查询所有带lock的文件,如果有非常多页显示不完,可以输入 q
退出分页;然后删除带 lock 的文件后,\q
退出。
SELECT * FROM oc_file_locks WHERE 1 = 1;
DELETE FROM oc_file_locks WHERE 1 = 1;
\q
回退版本,当前使用的3.12.1
https://download.nextcloud.com/desktop/releases/
为了支持域名访问,需要在/var/www/html/config/config.php
里添加被信任的域名
'trusted_domains' =>
array (
0 => '127.0.0.1:5966',
1 => 'analog.hopto.org',
2 => 'analog-ic.com',
3 => 'www.analog-ic.com',
4 => 'cloud.analog-ic.com'
),
如果需要配置https访问,需要增加
'overwriteprotocol' => 'https',
如果遇到以下错误
无法写入 "config" 目录!
通常可以为 Web 服务器授予对 config 目录的写入权限来修复这个问题。 但是,如果您更希望将 config.php 文件设为只读,可以将 "config_is_read_only" 选项设置为 true。
docker exec -it <容器名称> /bin/bash
docker exec -it nextcloud /bin/bash
chown -R www-data:www-data /var/www/html/config
chmod -R 750 /var/www/html/config
方法 1: 启用路由器的 NAT Loopback 功能
不同路由器的名称和功能位置可能有所不同,请参考路由器的说明文档或具体型号的支持文档。
方法 2: 修改本地设备的 hosts 文件
如果你的路由器不支持 NAT Loopback,可以手动修改设备的 hosts
文件,将域名解析为本地 IP 地址:
C:\Windows\System32\drivers\etc\hosts
。127.0.0.1 analog.hopto.org
docker run --rm --name nextcloud-backup -v nextcloud-var_www_html:/data -v D:\DockerServer\docker-nextcloud:/backup busybox tar czf /backup/nextcloud-html-backup.tar.gz -C /data .
--rm
:临时容器,用完自动删除。-v nextcloud-var_www_html:/data
:挂载你的 Nextcloud Volume 到临时容器的 /data
目录。-v D:\DockerServer\docker-nextcloud:/backup
:挂载 Windows 目录到容器的 /backup
。tar czf /backup/nextcloud-html-backup.tar.gz -C /data .
:用 busybox
生成压缩包 nextcloud-html-backup.tar.gz
,保存到 D:\DockerServer\docker-nextcloud
。