Serenader

Learning by sharing.

在 Linux 服务器中创建属于自己的私人 Cloud

写了好长的文章结果一死机毛都没了。尼玛又得重新来过。Ghost 没有实时保存的功能真的很烂!!!!

这次不那么啰嗦了。

利用 ownCloud 可以在我们自己的服务器上面创建私人的 Cloud ,相当于私人网盘。因为 ownCloud 客户端比较全,所以打算试试。

服务器环境选择 CentOS, Web Server 组合使用 Lnmp。因为 Lnmp 占用的资源比较少,且用的人也多。不过就是配置相对麻烦一些。下面开始讲过程。


第一步 配置网络服务器

yum install php php-mysql php-dom php-mbstring php-gd php-pdo php-json php-xml php-zip php-gd curl php-curl -y  

因为已经已经安装了 Nginx + Mysql + PHP 了,所以我们不用再额外安装太多东西。

接着新建一个站点。ssh 到服务器,然后执行以下命令:

cd ~  
./vhost.sh

然后一步一步按照步骤创建。如以下截图:

第一步到此结束。

第二步 安装 owncloud

cd /home/wwwroot  
wget http://download.owncloud.org/community/owncloud-6.0.3.tar.bz2  
tar xvf owncloud-6.0.3.tar.bz2  
rm -rf cloud.example.com  
mv owncloud cloud.example.com  
cd cloud.example.com  
mkdir data  

以上步骤把 ownCloud 下载在 cloud 这个二级域名的目录下。注意,最新版的 ownCloud 请到 http://owncloud.org/install 下载。选择 tar 文件下载。现在要更改文件夹的权限。找到 php-fpm 的配置文件目录,查看其用户和用户组。

vi /usr/local/php/etc/php-fpm.conf  

如下图:

可以看到 php-fpm 监听文件在 /tmp/php-cgi.sock , 用户和用户组都是 www

退出编辑,执行:

cd /home/wwwroot/cloud.example.com  
chown -R www:www apps/  
chown -R www:www config/  
chown -R www:www data/  

以上的 www:www 第一个为用户,第二个为用户组。

第二步到此完成。

第三步 创建数据库,添加用户

终端下输入:

mysql -u root -p  
#输入数据库 root 的密码
CREATE DATABASE owncloud;  
GRANT ALL ON owncloud.* TO 'ownuser'@'localhost' IDENTIFIED BY 'ownpass';  
flush privileges;  
exit;  

以上代码表示创建了 owncloud 这个数据库,然后添加了 ownuser 这个用户,其密码为 ownpass 。这三个都可以自行修改。后面的配置要用到。

第三步到此结束。

第四步 创建 SSL 密钥

默认 ownCloud 是开启强制 https 模式的。所以我们需要先配置好 Openssl.终端下输入:

cd /usr/local/nginx/conf  
openssl genrsa -out server.key 2048  
openssl req -new -key server.key -out server.csr  
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt  

这个过程中会询问你的地区,请自行填写。不懂的Google。具体如下图所示:

到此第四步完成。

第五步 配置 Nginx

因为我们是直接采用 Lnmp 生成站点的配置文件,所以存在一些问题。接下来要手动修改这个配置文件。终端下输入:

cd /usr/local/nginx/conf/vhost  
rm cloud.example.com.conf  
vi cloud.example.com.conf  

接着将下面的配置信息粘贴进去:

upstream php-handler {  
        server 127.0.0.1:9000;
        #server unix:/var/run/php5-fpm.sock;
}

server {  
        listen 80;
        server_name cloud.example.com;
        return 301 https://$server_name$request_uri;  # enforce https
}

server {  
        listen 443 ssl;
        server_name cloud.example.com;

        ssl_certificate /etc/ssl/nginx/cloud.example.com.crt;
        ssl_certificate_key /etc/ssl/nginx/cloud.example.com.key;

        # Path to the root of your installation
        root /var/www/;

        client_max_body_size 10G; # set max upload size
        fastcgi_buffers 64 4K;

        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

        index index.php;
        error_page 403 /core/templates/403.php;
        error_page 404 /core/templates/404.php;

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
                deny all;
        }

        location / {
                # The following 2 rules are only needed with webfinger
                rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
                rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

                rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
                rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;

                rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;

                try_files $uri $uri/ index.php;
        }

        location ~ ^(.+?\.php)(/.*)?$ {
                try_files $1 = 404;

                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$1;
                fastcgi_param PATH_INFO $2;
                fastcgi_param HTTPS on;
                fastcgi_pass php-handler;
        }

        # Optional: set long EXPIRES header on static assets
        location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                expires 30d;
                # Optional: Don't log access to assets
                access_log off;
        }

}

有几个地方需要修改,第一个是 server_name ,改为你创建的站点的域名。第二个是 ssl_certificatessl_certificate_key ,修改为刚刚创建密钥的目录。第三个要修改的是 root ,修改为站点的目录。最后一个要修改的是第二第三行,修改为前面提到的监听路径。

以下是修改好的配置:

upstream php-handler {  
        #server 127.0.0.1:9000;
        server unix:/tmp/php-cgi.sock;
}

server {  
        listen 80;
        server_name cloud.example.com;
        return 301 https://$server_name$request_uri;  # enforce https
}

server {  
        listen 443 ssl;
        server_name cloud.example.com;

        ssl_certificate /usr/local/nginx/conf/server.crt;
        ssl_certificate_key /usr/local/nginx/conf/server.key;

        # Path to the root of your installation
        root /home/wwwroot/cloud.example.com;

        client_max_body_size 10G; # set max upload size
        fastcgi_buffers 64 4K;

        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

        index index.php;
        error_page 403 /core/templates/403.php;
        error_page 404 /core/templates/404.php;

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
                deny all;
        }

        location / {
                # The following 2 rules are only needed with webfinger
                rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
                rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

                rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
                rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;

                rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;

                try_files $uri $uri/ index.php;
        }

        location ~ ^(.+?\.php)(/.*)?$ {
                try_files $1 = 404;

                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$1;
                fastcgi_param PATH_INFO $2;
                fastcgi_param HTTPS on;
                fastcgi_pass php-handler;
        }

        # Optional: set long EXPIRES header on static assets
        location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                expires 30d;
                # Optional: Don't log access to assets
                access_log off;
        }

}

修改好配置文件之后重启 Nginx 服务器,然后打开地址就可以看到设置界面了。(会出现证书错误的情况,请直接无视。)之后再注册系统管理员账号,和设置数据库就可以了。

需要注意的是,数据库应该选择 Mysql ,然后具体用户名和密码和数据库名和地址见前面的步骤。

配置完 ownCloud 之后就可以正常使用了。本文到此结束。

Comments is loading...

Comments is loading...