编辑
2022-03-29
Application
00
请注意,本文编写于 952 天前,最后修改于 417 天前,其中某些信息可能已经过时。

目录

1、重装系统
2、配置远程登录
3、系统基本配置
4、编译安装NGINX
5、开启https
7、安装nextcloud网盘
1. 下载nextcloud服务器版
2. 安装并配置mariaDB
3. 安装并配置PHP8
4. 配置NGINX文件并登录使用安装导向
5. nextcloud问题以及调优
6. 建议安装的插件
7. 建议禁用的插件
8. 更新问题
8、安装dokuwiki笔记服务
1. 准备工作
2. 配置NGINX配置文件
3. 安装服务
4. 注意事项
9、参考链接

当一个念头萌生的时候,便一发不可收拾。昨天下午loading稍微轻了一点,我就又开始想要不做个自己的网盘吧,有好多东西没有统一的地方放,主要是坚果云不能在Debian下使用非root用户登录;然后又想要不把Server换成Debian吧,这样服务端和客户端都统一了,感觉也挺不错的;再然后就是想着完整的记录下部署过程,云服务器也快到期了,方便下次部署。于是,就在备份数据之后,把阿里云的服务器重置成Debian10.5了把腾讯云的服务器安装成Debian11.3了......

买了腾讯云的VPS,换成Debian11.3,440大洋5年,配置是2C/4G/1000G/6M/60G,BGP线路,实际配置肯定会有缩水,但是也还行

1、重装系统

~~登录阿里云的控制台,VPS安装系统Debian10.5,倒不是不想安装11.2,阿里的镜像只支持10.5。~~因为重置的时候并不会给设定root密码的界面,重新安装完成之后,通过web console进入系统,第一件事就是重置root密码。可以通过sudo passwd root来设定,或者通过控制台界面来设定也可。此时,就可以通过远程登录工具(xshell或者SecureCRT等)使用密码登录系统了。

2、配置远程登录

在使用xshell进行远程登陆之前首先要设置下sshd服务,因为默认root用户是不允许远程登录进来了的。可通过修改/etc/ssh/sshd_config文件的配置,如下参数按照对应的值设置,保存退出后重启sshd服务:

txt
LoginGraceTime 2m PermitRootLogin yes StrictModes yes MaxAuthTries 6 MaxSessions 10 PubkeyAuthentication yes PermitEmptyPasswords no PasswordAuthentication yes

通常这样设置就可以了,如果追求更高的安全性,可以考虑使用密钥登陆:

  1. 生成密钥对 ssh-keygen -t rsa -b 4096 -f ECX -C "key for ECX VPS"
  2. 配置.ssh文件夹下的文件内容及权限
    bash
    $ cat ECX.pub >> ~/.ssh/authorized_keys $ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys
  3. 修改服务器ssh配置,取消密码登录 PasswordAuthentication yes → PasswordAuthentication no
  4. 重启服务 systemctl restart sshd

记得把服务器上的密钥对删除,并把私钥拷贝出来,放在xshell或者跳板机的某个地方,然后配置登录。

3、系统基本配置

可以远程获取系统管理权之后,第一时间需要对系统做一些基础配置,一来是为了适应自己的使用习惯,二来也是为了系统使用起来更加顺畅。主要包括命令行显示,系统安全与更新,以及其他一些常用的软件安装配置等。

bash
# 1. 修改PS1以及hostname $ echo 'PS1="\e[1;33m[ $? \u@\h \W]\$ \e[0m"' >> .bashrc $ hostnamectl set-hostname rustle # 2. 更新软件源并更新系统 $ apt update && apt upgrade # 3. 安装配置防火墙,可以通过ufw -h获取帮助(如下顺序一定不能颠倒,不然你将永远失去你的机器...) $ apt install ufw $ ufw allow 22 $ ufw allow 80 $ ufw allow 443 $ ufw enable # 4. 一些其他的软件 $ apt install lrzsz curl wget gnupg2 ca-certificates lsb-release debian-archive-keyring dos2unix oathtool git

git的配置详见上一篇博客。

4、编译安装NGINX

Nginx是一款高性能的反向代理服务器,支持高并发是它极具优势的一个方面。可以通过apt/yum等工具直接安装二进制文件,也可以通过源码编译安装,区别在于源码安装可以通过编译定制所需要的模块,升级更加灵活,但是后续配置稍显麻烦,因工作需要,这里选择通过源码安装。

bash
# 准备工作,安装一些依赖模块 $ apt install libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev libgeoip-dev # 从nginx官网下载安装包并安装 $ wget https://nginx.org/download/nginx-1.20.2.tar.gz $ tar -xzf nginx-1.20.2.zip && cd nginx-1.20.2 $ ./configure --prefix=/usr/local/nginx \ --with-select_module \ --with-poll_module \ --with-threads \ --with-file-aio \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_geoip_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_auth_request_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_degradation_module \ --with-http_slice_module \ --with-http_stub_status_module \ --with-mail \ --with-mail_ssl_module \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module \ --with-stream_geoip_module \ --with-stream_ssl_preread_module \ --user=www-data \ --group=www-data \ --add-module=/opt/source-code/nginx-1.20.2/modules/headers-more-nginx-module $ make && make install $ ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx #------------------------------------------------------------------- Configuration summary + using system PCRE library + using system OpenSSL library + using system zlib library nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx modules path: "/usr/local/nginx/modules" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"

如上是默认安装之后,各模块所在路径,可以通过编译选项指定,详见官方指导文档。安装好nginx之后,需要制作一个nginx.service文件,放在/lib/systemd/system/目录下,然后就可以使用systemctl命令来管理服务了。

有时候需要使用第三方模块,对现有的nginx版本进行热升级步骤如下:

  • 下载tar包,解压后放在安装目录的modules目录下
  • 编译选项添加--add-module=/usr/local/src/third-party-module,并重新编译
  • 执行make,但不要执行make install!!
  • 备份原有文件
  • 拷贝objs下编译好的文件到执行目录替换原有的nginx,要加-f选项
  • 向master进程发送热升级信号:kill -USR2 pidOfOldMaster
  • 在确认新的nginx版本的master进程起来之后,优雅的关闭老的worker进程:kill -WINCH pidOfOldMaster

这个时候就会发现nginx老版本的master进程还在,并不会自动退出,允许我们通过reload回退,但是已经没有worker进程了,版本回退过程如下:

  • 将之前备份的文件重新复制回去
  • 不重载配置文件的情况下启动旧版的worker进程:kill -HUB pidOfNewMaster
  • 向新进程发出平滑升级(回退)的信号:kill -USR2 pidOfNewMaster
  • 优雅的关闭新进程的worker:kill -WINCH pidOfNewMaster
  • 同样新版本的master进程也不会自动退出

日志切割:kill -USR1 pidOfMaster/nginx -s reopen,执行后需要sleep 2~5s,以保证日志完整性

bash
# Stop dance for nginx # ======================= # # ExecStop sends SIGSTOP (graceful stop) to the nginx process. # If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control # and sends SIGTERM (fast shutdown) to the main process. # After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends # SIGKILL to all the remaining processes in the process group (KillMode=mixed). # # nginx signals reference doc: # http://nginx.org/en/docs/control.html # [Unit] Description=A high performance web server and a reverse proxy server Documentation=man:nginx(8) After=network.target nss-lookup.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit TimeoutStopSec=5 PrivateTmp=true KillMode=mixed [Install] WantedBy=multi-user.target

5、开启https

开启https有很多方法,可以直接通过直接购买,也可以通过免费的证书颁发机构申请,还可以自己做个CA,做自签名证书。对于钱包并不是那么鼓的同学来说,第一种方法可能会直接pass掉,做自签名证书也不麻烦,但是可能会出现浏览器依然判定为不安全的风险,因为CA并不是权威的。这里使用的是申请免费的证书,只不过有效期比较短,只有3个月,之后要续订,可以通过cron服务自动化续订。

  • 复杂的方法
    bash
    apt install snapd systemctl enable --now snapd.socket ln -s /var/lib/snapd/snap /snap snap install core snap refresh core snap install --classic certbot ln -s /snap/bin/certbot /usr/bin/certbot # 生成证书 certbot --nginx-server-root /usr/local/nginx/conf # 续订证书 certbot renew --dry-run
  • 简单的方法
    bash
    apt install python3-certbot-nginx certbot # 之所以重新link一遍,是因为如上命令会破坏掉之前的/usr/bin/nginx的软链接,放置一个标准的nginx程序在这个地方 ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx certbot --nginx-server-root /usr/local/nginx/conf certbot renew --dry-run

6、配置Jekell blog

jekyll blog是一种静态网页生成器,通过markdown文件编译成html文件,极大地简化了blog发布流程,环境配置步骤如下:

bash
apt install ruby ruby-dev gem install jekyll bundler gem source -l gem source -r https://rubygems.org gem source --add https://gems.ruby-china.com # 如下命令有问题,原因可能是Debian ruby版本是2.5,比较低,升级有各种问题,可以通过rvm等管理工具解决 # 但是通过删除Gemfile解决 # gem update --system 3.2.3 # bundle install gem install jekyll-paginate jekyll build

7、安装nextcloud网盘

最近在自己家中的台式机安装了Debian11.2,之前在Windows下是使用坚果云来做数据同步盘的,Debian确实也可以安装,只不过只能使用root用户登录。另外数据还是存放在别人服务器的,虽然出于商业道德,我们有理由坚信,坚果云不会窃取我们的数据信息。但是还是想把自己的隐私信息存放在自己的服务器上,所以,我决定再次折腾一下nextcloud网盘。

1. 下载nextcloud服务器版

安装nextcloud网盘也有很多方式,仅仅是官网就提供了三种,也可以使用docker安装,不过这里还是使用最普通的方式构建的,大概还是为了配置灵活,也最能够理解为什么某些配置生效或者不生效吧。安装网盘第一步,下载服务端文件,解压到指定目录:

bash
wget https://download.nextcloud.com/server/releases/nextcloud-23.0.3.zip unzip -q nextcloud-23.0.3.zip -d /opt chown -R www-data:www-data /opt/nextcloud

2. 安装并配置mariaDB

bash
wget -O /usr/share/keyrings/mariadb-archive-keyring.asc https://mariadb.org/mariadb_release_signing_key.asc echo "deb [signed-by=/usr/share/keyrings/mariadb-archive-keyring.asc] https://mirror-cdn.xtom.com/mariadb/repo/10.6/debian $(lsb_release -sc) main" > /etc/apt/sources.list.d/mariadb.list apt update && apt upgrade apt install mariadb-server mysql_secure_installation mysql -u root -p > create database nextcloud; > create user 'nextcloud'@'localhost' identified by '<new_password>'; > grant all privileges on nextcloud.* to 'nextcloud'@'localhost'; > flush privileges; > exit

3. 安装并配置PHP8

nextcloud推荐使用php8,但是不支持php8.1,只能使用8.0版本!!!由于Debian官方源的php版本不符合要求,所以要使用第三方源,具体的规则可以参考Debian使用第三方源的规则。

bash
wget -O /usr/share/keyrings/php-archive-keyring.gpg https://packages.sury.org/php/apt.gpg echo "deb [signed-by=/usr/share/keyrings/php-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list apt update && apt upgrade apt install php8.0-fpm php8.0-cli php8.0-mysql php8.0-curl php8.0-gd php8.0-mbstring php8.0-xml php8.0-zip php8.0-imap php8.0-opcache php8.0-soap php8.0-gmp php8.0-bcmath php8.0-intl php8.0-imagick -y # 修改/etc/php/8.0/fpm/pool.d/www.conf clear_env = no # 取消该条注释 listen.allowed_clients = 127.0.0.1 # 取消该条注释 将listen = /run/php/php8.0-fpm.sock → listen = 127.0.0.1:9000

4. 配置NGINX文件并登录使用安装导向

nextcloud默认是支持Apache web服务器的,官方指导文档也是推荐使用Apache作为默认,但是工作需要,使用的是nginx web server,配置上有很大的不同,好在官方给出了一个非官方的nginx配置示例,可以参考下。配置完了之后重启nginx服务即可,输入指定域名(以及端口)就可以看到安装导向。

安装过程中,或者在后续调优过程中如果遇到报错,一定要记得看系统日志,位置在nextcloud/data/nextcloud.log,很多问题现象都可以在这里找到答案,或者根据这里的报错信息去搜索引擎寻找答案。

5. nextcloud问题以及调优

  • 上传速度慢
bash
sudo -u www-data php8.0 /opt/nextcloud/occ config:app:set files max_chunk_size --value 0
  • 访问速度慢-1
bash
apt install php8.0-memcache* memcached 'memcache.distributed' => '\OC\Memcache\Memcached', 'memcached_servers' => array( array('localhost', 11211), )
  • 访问速度慢-2
bash
apt install php8.0-redis* 'memcache.distributed' => '\OC\Memcache\Redis', 'redis' => array( 'host' => 'localhost', 'port' => 6379, )
  • 开启内存访问
bash
apt install php8.0-apcu echo 'apc.enable_cli=1' >> /etc/php/8.0/mods-available/apcu.ini echo 'apc.enable_cli=1' >> /etc/php/8.0/cli/php.ini echo 'apc.enable_cli=1' >> /etc/php/8.0/fpm/php.ini
  • /etc/php/8.0/fpm/php.ini 文件调优
bash
memory_limit = 1024M post_max_size = 4096M upload_max_filesize = 4096M max_execution_time = 3600; max_input_time = 3600;
  • /opt/nextcloud/config/config.php 文件调优
bash
'memcache.local' => '\OC\Memcache\APCu', # 本地缓存优化 'filelocking.enabled' => true # 解决网盘文件(夹)无法删除时设置为false,但是检测会报错,建议删除后在改为true 'appstoreenabled' => true, # 解决appstore无法打开 'appstoreurl' => 'https://www.orcy.net/ncapps/v1/', 'allow_local_remote_servers' => true,
  • nginx的配置文件调优
bash
client_max_body_size 500M; client_header_timeout 3600s; client_body_timeout 3600s; fastcgi_connect_timeout 3600s; fastcgi_send_timeout 3600s; fastcgi_read_timeout 3600s; # 关闭文件压缩
bash
pm.max_spare_servers = 18 pm.min_spare_servers = 6 pm.start_servers = 12 pm.max_children = 120 pm = dynamic
  • cron定时任务:同时也需要在界面上修改
bash
crontab -u www-data -e */5 * * * * php -f /opt/nextcloud/cron.php
  • root用户指定www-data执行命令报错
bash
# sudo: unable to resolve host aliyun: Name or service not known # 修改/etc/hosts,注意localhost后面的aliyun这个hostname是自定义的 127.0.0.1 localhost aliyun
  • 手动重新构建用户文件结构
bash
sudo -u www-data php8.0 occ files:scan --all
  • 此实例中的 php-imagick 模块不支持 SVG。
bash
apt install libmagickcore-6.q16-6-extra

6. 建议安装的插件

如下是推荐的插件,Calendar和Tasks是任务管理规划插件,可以相互配合;Collabora Online是word,PPT以及Excel文档编辑预览插件,但是需要一个文档服务器,最简单的办法是使用Collabora Online - Built-in CODE Server这个插件构造的内建文档服务器;Drow.io是流程图,思维导图插件,支持各种形式的;Notes是笔记插件,支持Markdown语法,可以放你心无旁骛的做笔记;Markdown Editor插件和Plain text editor的组合是为了让文本支持Markdown扩展语法。

  • Calendar
  • Tasks
  • Collabora Online
  • Collabora Online - Built-in CODE Server
  • Draw.io
  • Notes
  • Markdown Editor
  • Plain text editor

Collabora Online - Built-in CODE Server这个插件很大,直接从appstore安装的话会出现Operation timeout的告警,可之间在系统下执行sudo -u www-data php -d memory_limit=1024M ./occ app:install richdocumentscode命令,安装好了重启服务即可使用文档在线预览和编辑。

如果使用appstore下载总是出现超时,可以下载使用github上的tar包,然后再解压到nextcloud/data/apps/,记得修改所属组和所有者。然后再在浏览器界面的应用管理,启用该应用即可。

7. 建议禁用的插件

如下是不推荐的插件,Weather status插件使用的国外的API,获取地理位置以及天气信息耗时较长;Activity插件会记录一些操作记录,感觉也挺鸡肋,切占用资源;Dashboard一样,相当于一个首页的界面,加载耗时很长;最后一个Text文本插件是Nextcloud自带的文本编辑以及预览工具,因为仅支持markdown基本语法,而且和Markdown Editor插件冲突,所以禁用掉。换成Markdown Editor和Plain text editor的组合,后者是必须的,不然前者不起作用。

  • Weather status
  • Activity
  • Dashboard
  • Text

8. 更新问题

Nextcloud更新的时候,最容易出现的问题就是卡在第四步下载更新包,因为源在国外,VPS的网速堪忧,导致"Step 4 is currently in process. Please reload this page later."的告警,如果长时间停留在这一步的话,可以参照如下步骤,手动更新:

  1. VPS下找到php-fpm下载进程,并kill
  2. 删除nextcloud路径/data/updater-xxxxxxx/downloads/下的所有文件
  3. 科学上网情况下,手动下载安装包,并放置在第二步中的路径下,文件名保持一致
  4. 解压,并设置所有文件的归属为www-data
  5. nextcloud路径/data/updater-xxxxxxx/目录下找到隐藏文件.step
  6. 修改如上文件内容为{"state":"stop","step":6}
  7. 刷新页面而不是点击重试!!!

刷新之后,则跳过了下载文件的步骤,可以继续更新,具体的步骤编号,可以参考如下:

nextcloud_step_number.png

建议所有配置设置完毕之后,重启nginx服务和php-fpm服务

8、安装dokuwiki笔记服务

本来想用nextcloud记作网盘服务又做笔记服务的,用了几天发现不太合适,因为nextcloud虽然有客户端,在网页上编辑还是不是很方便。而且,上面写的Markdown插件被证明也不是很好用,在手机端不能解析语法,包括标准语法都无法解析。所以,还是做一个单独的wiki页面吧。DokuWiki是有php语言开发的,无数据库类型的wiki服务,安装配置也还算方便,个人使用应该是够了的。

1. 准备工作

首先是下载dokuwiki安装包,这里并没有选择stable版本的,而是选择了Development Snapshot,因为stable版本的是2020年的,比较老;而且明确写着不支持php8及以上,安装nextcloud的时候安装了php8.0,想直接复用,当nginx也是复用之前的程序。

2. 配置NGINX配置文件

可以使用参考链接中的配置:

nginx
server { server_name wiki.ulyaoth.net; listen 80; autoindex off; client_max_body_size 15M; client_body_buffer_size 128k; index index.html index.htm index.php doku.php; access_log /var/log/nginx/wiki.ulyaoth.net/access.log; error_log /var/log/nginx/wiki.ulyaoth.net/error.log; root /usr/share/nginx/dokuwiki; location / { try_files $uri $uri/ @dokuwiki; } location ~ ^/lib.*\.(gif|png|ico|jpg)$ { expires 30d; } location = /robots.txt { access_log off; log_not_found off; } location = /favicon.ico { access_log off; log_not_found off; } location ~ /\. { access_log off; log_not_found off; deny all; } location ~ ~$ { access_log off; log_not_found off; deny all; } location @dokuwiki { rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last; rewrite ^/(.*) /doku.php?id=$1 last; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/wiki.ulyaoth.net.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } location ~ /(data|conf|bin|inc)/ { deny all; } location ~ /\.ht { deny all; } }

如果按照之前安装php时的配置,还需要使用如下块:

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

3. 安装服务

浏览器直接访问对应于名,没有问题的话会出现注册信息界面,按照提示填写即可。

4. 注意事项

最重要的是www-data用户问题,需要把nginx配置文件中的用户改为www-data,需要修改/var/run/php/php8.0-fpm.sock的所有者和所属组为www-data,还要把dokuwiki的整体目录所有者和所属组改为www-data。

9、参考链接

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Manford Fan

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!