本文最后更新于 2024年5月16日。
背景
最近换了服务器,准备再搭建一下网盘用于以后的使用。
以前用的cloudreve,功能比较简单,由于用得少,渐渐停用了。
这次尝试了nextcloud和seafile。
这次搭建网盘花费了不少时间,因为总是不太顺利。这可能和我对docker不够熟悉有关,另外网盘的搭建教程多少有点不完善。
单单是搭建LNMP环境找合适的dockerfile和yml文件就很不容易。要找到适合自己的只能一步一步学习探索。幸运的是最后终于写出了适合自己的php8.0的dockerfile文件,并且可以正常使用。该文件也已经附在文章当中。希望对你有用。
虽然nextcloud用户比较多,但自己去搭建网盘服务的毕竟是少数。所以有很多问题找不到答案。
因此我把我的搭建过程写下来,给后来的人一些参考,少走一些弯路。不过需要说明的是,本片文章是我对探索出来可用的配置做一个记录,方便今后直接使用。内容比较简单,因此不适合新手当作教程用,因为可能会遇到其他问题不知道怎么解决。这篇文章供有一定基础的人参考,作用在于提供一个核心配置和一点思路。
seafile直接使用官方的方法搭建成功了。但是再启用https的时候又坑,虽然官方说新版本已经解决,但实际上并没有。并且官方给的解决办法不起作用。
seafile整体功能还可以,不过它会创建很多数据库,还有不少服务,再加上界面我也不太喜欢,所以就没用。
nextcloud功能很丰富,界面比较喜欢,不过用了很多方法去搭建,只有一种能完全成功的运行,并且还不确定如果让我再搭建一次还能不能成功。其他的都会有部分功能不正常。已经查明的原因有:
- 权限设置不符合程序要求,
- nginx配置设置不完善。
还有些也不知道具体原因,感觉程序日志不完善。
下面是我安装nextcloud安装方式中的两种方案,一个是使用官方的应用镜像,一个是自己搭好LNMP环境用单文件脚本装的。
两种方式都是用到docker-compose工具。
第一种方案所有功能可以正常使用,但是不确定是否可以复现。
第二种方案基本功能可以正常使用,但是有写功能不能正常加载,目前不清楚原因。
利用官方镜像安装
docker-compose使用的yml文件:
version: "3.4"
services:
mysql:
hostname: mysql
restart: always
image: mysql:5.6
container_name: mysql
ports:
- "3306:3306"
volumes:
- mysql-config:/etc/mysql
- mysql-log:/var/log/mysql
- mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpw
MYSQL_DATABASE: nextcloud
MYSQL_USER: user
MYSQL_PASSWORD: user123
# sort_buffer_size : 524288 #220920add no use
cache:
image: redis
restart: unless-stopped
expose:
- "6379"
volumes:
- ./cache:/data
command: redis-server --requirepass 'redis_password' # 这里的redis_password换成你要配置的redis密码
# command指的是启动容器后代替默认启动指令来启动服务的指令
app:
image: nextcloud:fpm
restart: unless-stopped
expose:
- "9000"
volumes:
- ./app/html:/var/www/html
- ./app/data:/var/www/html/data
- ./app/config:/var/www/html/config
- ./app/custom_apps:/var/www/html/custom_apps
links:
# links将容器与当前容器链接起来,以使得当前容器可以访问目标容器expose的端口
# 格式为 容器的原名:映射到当前容器中的名称
- mysql:mysql
- cache:cache
depends_on:
# 依赖的容器列表,只有这些容器都成功启动了,才会启动当前容器
- mysql
- cache
nginx:
hostname: nginx
restart: always
container_name: nginx
image: nginx:1.17.0
ports:
- "80:80"
- "443:443"
links:
#- "php:php"
- app:app
volumes:
- nginx-config:/etc/nginx
- nginx-log:/var/log/nginx
- nginx-html:/usr/share/nginx/html
- ./app/html:/var/www/html
- ./proxy/conf.d:/etc/nginx/conf.d:ro
- ./proxy/ssl_certs:/etc/nginx/ssl_certs:ro
depends_on:
- app
volumes:
mysql-config:
mysql-log:
mysql-data:
nginx-html:
php-config:
nginx-config:
nginx-log:
搭建LNMP环境后再安装Nextcloud
搭建LNMP环境使用的yml:
version: "3.4"
services:
mysql:
hostname: mysql
restart: always
image: mysql:5.6
container_name: mysql
ports:
- "3306:3306"
volumes:
- /home/mysql-config:/etc/mysql
- /home/mysql-log:/var/log/mysql
- /home/mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpw
MYSQL_USER: user
MYSQL_PASSWORD: user123
php:
hostname: php
restart: always
image: php:8.0
container_name: php
build:
context: ./php
dockerfile: Dockerfile
ports:
- "9000:9000"
links:
- mysql:mysql
volumes:
- /home/nginx-html:/var/www/html
- /home/php-workspace:/workspace
- /home/php-config:/usr/local/etc
depends_on:
# 依赖的容器列表,只有这些容器都成功启动了,才会启动当前容器
- mysql
- redis
nginx:
hostname: nginx
restart: always
container_name: nginx
image: nginx:1.17.0
ports:
- "80:80"
- "443:443"
links:
- "php:php"
volumes:
- /home/nginx-config:/etc/nginx
- /home/nginx-log:/var/log/nginx
- /home/nginx-html:/usr/share/nginx/html
# - /home/nginx-config/conf.d:/etc/nginx/conf.d:ro
# - /home/nginx-config/ssl_certs:/etc/nginx/ssl_certs:ro
depends_on:
- php
redis:
image: redis
restart: unless-stopped
expose:
- "6379"
volumes:
- /home/redis:/data
command: redis-server --requirepass 'redis_password' # 这里的redis_password换成你要配置的redis密码
# command指的是启动容器后代替默认启动指令来启动服务的指令
php的dockerfile:
此文件放入上面yml文件的同级目录的php文件夹下。
FROM php:8.0-fpm
#docker中php扩展安装方式
#1、PHP源码文件目录自带扩展 docker-php-ext-install直接安装
#2、pecl扩展 因为一些扩展不包含在PHP源码文件中,PHP 的扩展库仓库中存在。用 pecl install 安装扩展,再用 docker-php-ext-enable 命令 启用扩展
#3、其他扩展 一些既不在 PHP 源码包,也不再 PECL 扩展仓库中的扩展,可以通过下载扩展程序源码,编译安装的方式安装
#redis扩展 仓库地址 https://pecl.php.net/package/redis
ENV PHPREDIS_VERSION 5.3.4
#memcached扩展 仓库地址 https://pecl.php.net/package/memcached
ENV MEMCACHED_VERSION 3.1.5
#mongodb扩展 https://pecl.php.net/package/mongodb
ENV MONGODB_VERSION 1.11.1
# 设置时间
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezone
# #更换源
# RUN sed -i "s/deb.debian.org/mirrors.aliyun.com/g" /etc/apt/sources.list
RUN apt-get update && apt-get install -y \
vim \
wget \
git \
bzip2 \
zip \
libz-dev \
libssl-dev \
libnghttp2-dev \
libpcre3-dev \
libmemcached-dev \
libzip-dev \
libbz2-dev \
libjpeg-dev \
libpng-dev \
curl \
libcurl4-openssl-dev \
libonig-dev \
libxml2-dev \
supervisor \
libfreetype6-dev \
libjpeg62-turbo-dev \
zlib1g-dev \
# && docker-php-ext-install -j$(nproc) gd \
# && docker-php-ext-install zip \
# && docker-php-ext-install pdo_mysql \
# && docker-php-ext-install opcache \
# && docker-php-ext-install mysqli \
&& docker-php-ext-install mbstring \
&& docker-php-ext-install bz2 \
&& docker-php-ext-install soap \
&& rm -r /var/lib/apt/lists/*\
&& usermod -u 1000 www-data\
&& groupmod -g 1000 www-data
#编译安装核心扩展 gd
RUN apt-get update &&\
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd\
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install opcache \
&& docker-php-ext-install mysqli
# 安装zip扩展所需的依赖扩展
RUN apt-get update \
&& apt-get install -y zlib1g-dev && apt-get install -y libzip-dev\
# 安装并启动zip扩展
&& docker-php-ext-install zip
# # Composer安装
# RUN curl -sS https://getcomposer.org/installer | php \
# && mv composer.phar /usr/local/bin/composer \
# && composer self-update --clean-backups
# # Mysqli 扩展 自带 直接安装即可(当前数据库使用的mysqli查询的)
# RUN docker-php-ext-install mysqli
# # PDO 扩展 自带 直接安装即可
# RUN docker-php-ext-install pdo_mysql
# # Bcmath 扩展 自带 直接安装即可
# RUN docker-php-ext-install bcmath
# #pecl 安装扩展 redis
# RUN pecl install redis-5.3.2 \
# && docker-php-ext-enable redis
# Redis 扩展下载 pecl本地安装 开启扩展
RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tgz \
&& pecl install /tmp/redis.tgz \
&& rm -rf /tmp/redis.tgz \
&& docker-php-ext-enable redis
# memcached 扩展下载 pecl本地安装 开启扩展 前面已经通过 apt-get安装了libmemcached-dev依赖
RUN wget http://pecl.php.net/get/memcached-${MEMCACHED_VERSION}.tgz -O /tmp/memcached.tgz \
&& pecl install /tmp/memcached.tgz \
&& rm -rf /tmp/memcached.tgz \
&& docker-php-ext-enable memcached
# mongodb 扩展下载 pecl本地安装 开启扩展 前面已经通过
RUN wget http://pecl.php.net/get/mongodb-${MONGODB_VERSION}.tgz -O /tmp/mongodb.tgz \
&& pecl install /tmp/mongodb.tgz \
&& rm -rf /tmp/mongodb.tgz \
&& docker-php-ext-enable mongodb
# 开启php-fpm
# RUN php-fpm
CMD ["php-fpm", "-F"]
搭建好LNMP环境后在这里下载安装包。
https://download.nextcloud.com/server/releases/
我下载的是
nextcloud-24.0.5.zip
也可以去官网下载安装脚本文件
https://download.nextcloud.com/server/installer/setup-nextcloud.php
setup-nextcloud.php
用浏览器访问该文件根据提示进行安装。