0

0

怎么在CentOS7中使用Nginx和PHP7-FPM安装Nextcloud

WBOY

WBOY

发布时间:2023-05-24 20:13:04

|

1239人浏览过

|

来源于亿速云

转载

先决条件

  1. 64 位的 centos 7

  2. 服务器的 root 权限

步骤 1 - 在 centos 7 中安装 nginxphp7-fpm

在开始安装 nginx 和 php7-fpm 之前,我们还学要先添加 epel 包的仓库源。使用如下命令:

yum -y install epel-release

现在开始从 epel 仓库来安装 nginx:

yum -y install nginx

然后我们还需要为 php7-fpm 添加另外一个仓库。互联网中有很个远程仓库提供了 php 7 系列包,我在这里使用的是 webtatic。

添加 php7-fpm webtatic 仓库:

rpm -uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

然后就是安装 php7-fpm 以及 nextcloud 需要的一些包。

复制代码 代码如下:

yum -y install php70w-fpm php70w-cli php70w-gd php70w-mcrypt php70w-mysql php70w-pear php70w-xml php70w-mbstring php70w-pdo php70w-json php70w-pecl-apcu php70w-pecl-apcu-devel

最后,从服务器终端里查看 php 的版本号,以便验证 php 是否正确安装。

php -v

步骤 2 - 配置 php7-fpm

在这一个步骤中,我们将配置 php-fpm 与 nginx 协同运行。php7-fpm 将使用 nginx 用户来运行,并监听 9000 端口。

使用 vim 编辑默认的 php7-fpm 配置文件。

vim /etc/php-fpm.d/www.conf

在第 8 行和第 10行,user 和 group 赋值为 nginx

user = nginx
group = nginx

在第 22 行,确保 php-fpm 运行在指定端口。

listen = 127.0.0.1:9000

取消第 366-370 行的注释,启用 php-fpm 的系统环境变量。

env[hostname] = $hostname
env[path] = /usr/local/bin:/usr/bin:/bin
env[tmp] = /tmp
env[tmpdir] = /tmp
env[temp] = /tmp

保存文件并退出 vim 编辑器。

下一步,就是在 /var/lib/ 目录下创建一个新的文件夹 session,并将其拥有者变更为 nginx 用户。

mkdir -p /var/lib/php/session
chown nginx:nginx -r /var/lib/php/session/

然后启动 php-fpm 和 nginx,并且将它们设置为随开机启动的服务。

sudo systemctl start php-fpm
sudo systemctl start nginx
sudo systemctl enable php-fpm
sudo systemctl enable nginx

php7-fpm 配置完成

步骤 3 - 安装和配置 mariadb

我这里使用 mariadb 作为 nextcloud 的数据库。可以直接使用 yum 命令从 centos 默认远程仓库中安装 mariadb-server 包。

yum -y install mariadb mariadb-server

启动 mariadb,并将其添加到随系统启动的服务中去。

systemctl start mariadb
systemctl enable mariadb

现在开始配置 mariadb 的 root 用户密码。

mysql_secure_installation

键入 ,然后设置 mariadb 的 root 密码。

set root password? [y/n] y
new password:
re-enter new password:
remove anonymous users? [y/n] y
disallow root login remotely? [y/n] y
remove test database and access to it? [y/n] y
reload privilege tables now? [y/n] y

这样就设置好了密码,现在登录到 mysql shell 并为 nextcloud 创建一个新的数据库和用户。这里我创建名为 nextcloud_db 的数据库以及名为 nextclouduser 的用户,用户密码为 nextclouduser@ 。当然了,要给你自己的系统选用一个更安全的密码。

mysql -u root -p

输入 mariadb 的 root 密码,即可登录 mysql shell。

输入以下 mysql 查询语句来创建新的数据库和用户。

create database nextcloud_db;
create user nextclouduser@localhost identified by 'nextclouduser@';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'nextclouduser@';
flush privileges;

nextcloud_db 数据库和 nextclouduser 数据库用户创建完成

蛙蛙写作——超级AI智能写作助手
蛙蛙写作——超级AI智能写作助手

蛙蛙写作辅助AI写文,帮助获取创意灵感,提供拆书、小说转剧本、视频生成等功能,是一款功能全面的AI智能写作工具。

下载

步骤 4 - 为 nextcloud 生成一个自签名 ssl 证书

在教程中,我会让客户端以 https 连接来运行 nextcloud。你可以使用诸如 let's encrypt 等免费 ssl 证书,或者是自己创建自签名 (self signed) ssl 证书。这里我使用 openssl 来创建自己的自签名 ssl 证书。

为 ssl 文件创建新目录:

mkdir -p /etc/nginx/cert/

如下,使用 openssl 生成一个新的 ssl 证书。

复制代码 代码如下:


openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.key

最后使用 chmod 命令将所有证书文件的权限设置为 600。

chmod 700 /etc/nginx/cert
chmod 600 /etc/nginx/cert/*

步骤 5 - 下载和安装 nextcloud

我直接使用 wget 命令下载 nextcloud 到服务器上,因此需要先行安装 wget。此外,还需要安装 unzip 来进行解压。使用 yum 命令来安装这两个程序。

yum -y install wget unzip

先进入 /tmp 目录,然后使用 wget 从官网下载最新的 nextcloud 10。

cd /tmp
wget https://download.nextcloud.com/server/releases/nextcloud-10.0.2.zip

解压 nextcloud,并将其移动到 /usr/share/nginx/html/ 目录。

unzip nextcloud-10.0.2.zip
mv nextcloud/ /usr/share/nginx/html/

下一步,转到 nginx 的 web 根目录为 nextcloud 创建一个 data 文件夹。

cd /usr/share/nginx/html/
mkdir -p nextcloud/data/

变更 nextcloud 目录的拥有者为 nginx 用户和组。

chown nginx:nginx -r nextcloud/

步骤 6 - 在 nginx 中为 nextcloud 配置虚拟主机

在步骤 5 我们已经下载好了 nextcloud 源码,并配置好了让它运行于 nginx 服务器中,但我们还需要为它配置一个虚拟主机。在 nginx 的 conf.d 目录下创建一个新的虚拟主机配置文件 nextcloud.conf

cd /etc/nginx/conf.d/
vim nextcloud.conf

将以下内容粘贴到虚拟主机配置文件中:

upstream php-handler {
  server 127.0.0.1:9000;
  #server unix:/var/run/php5-fpm.sock;
}
server {
  listen 80;
  server_name cloud.nextcloud.co;
  # enforce https
  return 301 https://$server_name$request_uri;
}
server {
  listen 443 ssl;
  server_name cloud.nextcloud.co;
  ssl_certificate /etc/nginx/cert/nextcloud.crt;
  ssl_certificate_key /etc/nginx/cert/nextcloud.key;
  # add headers to serve security related headers
  # before enabling strict-transport-security headers please read into this
  # topic first.
  add_header strict-transport-security "max-age=15768000;
  includesubdomains; preload;";
  add_header x-content-type-options nosniff;
  add_header x-frame-options "sameorigin";
  add_header x-xss-protection "1; mode=block";
  add_header x-robots-tag none;
  add_header x-download-options noopen;
  add_header x-permitted-cross-domain-policies none;
  # path to the root of your installation
  root /usr/share/nginx/html/nextcloud/;
  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }
  # the following 2 rules are only needed for the user_webfinger app.
  # uncomment it if you're planning to use this app.
  #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
  #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
  # last;
  location = /.well-known/carddav {
   return 301 $scheme://$host/remote.php/dav;
  }
  location = /.well-known/caldav {
   return 301 $scheme://$host/remote.php/dav;
  }
  # set max upload size
  client_max_body_size 512m;
  fastcgi_buffers 64 4k;
  # disable gzip to avoid the removal of the etag header
  gzip off;
  # uncomment if your server is build with the ngx_pagespeed module
  # this module is currently not supported.
  #pagespeed off;
  error_page 403 /core/templates/403.php;
  error_page 404 /core/templates/404.php;
  location / {
    rewrite ^ /index.php$uri;
  }
  location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
    deny all;
  }
  location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
    deny all;
  }
  location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
    include fastcgi_params;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    fastcgi_param script_filename $document_root$fastcgi_script_name;
    fastcgi_param path_info $fastcgi_path_info;
    fastcgi_param https on;
    #avoid sending the security headers twice
    fastcgi_param modheadersavailable true;
    fastcgi_param front_controller_active true;
    fastcgi_pass php-handler;
    fastcgi_intercept_errors on;
    fastcgi_request_buffering off;
  }
  location ~ ^/(?:updater|ocs-provider)(?:$|/) {
    try_files $uri/ =404;
    index index.php;
  }
  # adding the cache control header for js and css files
  # make sure it is below the php block
  location ~* \.(?:css|js)$ {
    try_files $uri /index.php$uri$is_args$args;
    add_header cache-control "public, max-age=7200";
    # add headers to serve security related headers (it is intended to
    # have those duplicated to the ones above)
    # before enabling strict-transport-security headers please read into
    # this topic first.
    add_header strict-transport-security "max-age=15768000;
    includesubdomains; preload;";
    add_header x-content-type-options nosniff;
    add_header x-frame-options "sameorigin";
    add_header x-xss-protection "1; mode=block";
    add_header x-robots-tag none;
    add_header x-download-options noopen;
    add_header x-permitted-cross-domain-policies none;
    # optional: don't log access to assets
    access_log off;
  }
  location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
    try_files $uri /index.php$uri$is_args$args;
    # optional: don't log access to other assets
    access_log off;
  }
}

保存文件并退出 vim。

下载测试以下该 nginx 配置文件是否有错误,没有的话就可以重启服务了。

nginx -t
systemctl restart nginx

步骤 7 - 为 nextcloud 配置 selinux 和 firewalld 规则

本教程中,我们将以强制模式运行 selinux,因此需要一个 selinux 管理工具来为 nextcloud 配置 selinux。

使用以下命令安装 selinux 管理工具。

yum -y install policycoreutils-python

然后以 root 用户来运行以下命令,以便让 nextcloud 运行于 selinux 环境之下。如果你是用的其他名称的目录,记得将 nextcloud 替换掉。

semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.user.ini'
restorecon -rv '/usr/share/nginx/html/nextcloud/'

接下来,我们要启用 firewalld 服务,同时为 nextcloud 开启 http 和 https 端口。

启动 firewalld 并设置随系统启动。

systemctl start firewalld
systemctl enable firewalld

现在使用 firewall-cmd 命令来开启 http 和 https 端口,然后重新加载防火墙。

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

至此,服务器配置完成。

步骤 8 - nextcloud 安装

打开你的 web 浏览器,输入你为 nextcloud 设置的域名,我这里设置为 cloud.nextcloud.co,然后会重定向到安全性更好的 https 连接。

设置你的管理员用户名和密码,然后输入数据验证信息,点击 '完成安装 (finish setup)'。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

686

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

513

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

287

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

519

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

267

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

392

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

542

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

666

2023.08.14

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.3万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号