nextcloud的运行需要一个PHP运行环境和一个数据库作为依赖,服务器可以选传统的apache和nginx,但是apache和nginx配置比较复杂,我没有去仔细看,所以本文中采用一个golang开发的轻量级服务器Caddy,Caddy配置起来很简便,官方介绍甚至可以在28s配置好一个支持http2的server。
为了快速搭建nextcloud和服务器的整洁,采用了docker的方式运行。
一.Docker和docker-compost安装
yum install epel-release
yum install docker
service docker start
安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
测试
docker-compose --version
二.创建独立网络配置caddy文件
docker network create nextcloud
新建一个名为Caddyfile的文件,内容如下
example.com {
proxy / 233.233.233.233:6666 {
header_upstream Host {host}
header_upstream X-Real-IP {remote}
header_upstream X-Forwarded-Proto {scheme}
}
log /var/log/caddy.log
gzip
}
proxy为代理地址和端口
log为日志文件地址
gzip为压缩方式
Candy的好处在于不用花太多时间去配置服务器,不用申请ssl,但是如果有需要还是可以用nginx来代替。
三.镜像配置
新建一个docker-compose.yml的文件,
version: '2'
services:
#采用mysql数据库作为用户管理
db:
container_name: cloud_db
image: mysql
volumes:
- ./data/cloud/mysql:/var/lib/mysql #映射mysql地址
restart: always
environment:
MYSQL_ROOT_PASSWORD: root #mysql的root密码
MYSQL_DATABASE: nextcloud #数据库名
app:
container_name: cloud_app
depends_on:
- db
image: nextcloud
volumes:
- ./data/cloud/config:/var/www/html/config #nextcloud的配置文件
#nextcloud的数据存储,用户上传的文件会直接到这个文件夹下,以用户名分类
- ./data/cloud/data:/var/www/html/data
- ./data/cloud/apps:/var/www/html/apps #nextcloud插件的地址
links:
- db
ports:
- "6666:80" #映射端口
restart: always
cron:
container_name: cloud_cron
image: nextcloud
links:
- db
volumes_from:
- app
user: www-data
entrypoint: |
bash -c 'bash -s <
trap "break;exit" SIGHUP SIGINT SIGTERM
while /bin/true; do
/usr/local/bin/php /var/www/html/cron.php
sleep 900
done
EOF'
restart: always
web:
container_name: cloud_web
image: abiosoft/caddy
volumes:
- ./Caddyfile:/etc/Caddyfile #映射candy的配置文件,这个是步骤二中新建的Caddyfile
- ~/.caddy:/root/.caddy
ports:
- 80:80
- 443:443
restart: always
networks:
default:
external:
name: nextcloud
文件保存后,用docker-comese开始pull镜像
docker-compose up -d
配置完成后,可以通过 ip:映射端口 地址访问
首次登陆需要设置admin的用户名和密码,还有数据地址和用户名密码。