简单服务器搭建流程
哎呀最近又奢侈买了一台 VPS(说来话长),总之就是又要重新搭一遍。顺便回忆一下流程吧。
VPS 用的操作系统是 Debian 系的(包括 Ubuntu)。
选购 VPS¶
如果想用下文的 TCP BBR 算法加速网络的话, 基本要选 KVM, OpenVZ 没法升级内核。 由于国内网络有时不好, 不论什么服务器, 可能最好先测试一下各个数据中心的网络状况, 英文叫做 looking glass, 多线程 100M 测试一下, ping 的话看看丢包率就行了吧.
最初的登录¶
SSH登陆进去,这时一般的 VPS 都只有一个用户帐号(root),马上创建用户禁止 root 登陆,使用密钥。
# # 默认遵循 Arch Wiki 的规范, # 开头的行使用 root 权限 $ ssh <ip> [-p port] # 一般起始的端口就是22,不用指定 # useradd -m <用户名> # usermod -a -G sudo <用户名> # apt install sudo # visudo # 看看有没有 '%sudo ALL=(ALL) ALL' 这一行,没有的话自己加上,前面有 '#' 的话去掉 # passwd <用户名> # 更改密码
这时本地新开一个终端,如果没有创建过密钥:
$ ssh-keygen -t ed25519 # 跟着提示走 $ ssh-copy-id [-p port] <用户名>@<ip> $ # 如果创建过密钥,直接: $ ssh-copy-id [-p port] <用户名>@<ip> $ ssh <用户名>@<ip> # 尝试登陆,如果登陆不了不要继续!先找到问题,否则之后就进不了SSH了 $ # 注意:这里应该直接进入,或者显示 `Enter passphrase for key ...` $ # 如果显示的是 `<username>@<ip>'s password:` 那这是有问题的!可能是设置错了或者是公钥没有复制对(比如你有多个公钥的时候)! $ # (这里还应该有更多说明,但是暂时懒得。可以查一下 `ssh-copy-key` 的用法。)
这时直接回到原来的SSH:
# nano /etc/ssh/sshd_config # 进行以下的更改 Port <你喜欢的端口> PermitRootLogin no PubkeyAuthentication yes PasswordAuthentication no
重启SSHD:
Ctrl+D 退出SSH,以后登陆使用一下命令:
简单的安全措施¶
-
简单的防火墙,这里用的是相对简单的 UFW :
-
大更新:
-
设置服务器日志自动删除(避免太多日志占满硬盘,虽然说一般不太可能):
其它操作¶
开启 BBR¶
可以考虑按照 https://wiki.archlinux.org/title/Sysctl#Enable_BBR 把 BBR 开启了,对于用户来说网页加载速度大概会快一些。 内核版本要 4.9 以上 (uname -a 查看版本)。
screen¶
GNU Screen ……很难直接介绍它到底有什么用。
-
一个可能的使用场景:
SSH 连上服务器,跑一个耗时较长的程序,突然网络不好掉线了。 如果是普通的 SSH 连接直接用 Bash 的话,这样子基本很难再次连回到原来执行的程序,也看不到输出,不知道程序是正常运行完毕了还是出错了还是被中断了。
但是套个
screen
的话,连接断线的时候只需要重新连一个 SSH,再使用screen -R
命令就可以连回到原来的终端。
别忘了按维基里的说明让每一个 Shell 都自动启动一个 screen
。
needrestart¶
在更新了软件之后最好把软件的各种服务都重启了。 needrestart
能够极大方便用户找到需要重启的服务。
Fail2ban¶
把出现网络攻击行为的 IP 给自动屏蔽掉。
ddos-deflate¶
在经受 DDoS 攻击时把可能的攻击者给屏蔽掉(当然有可能误伤)。
服务器搭建¶
以 Friendica 为例。
Debian¶
因为个人感觉 Ubuntu 最近推 Snap 实在做过火了,总之跑回 Debian 这边。
Nginx¶
按照 https://packages.sury.org/nginx-mainline/README.txt 安装 Nginx (Mainline):
$ sudo apt install lsb-release ca-certificates curl $ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-nginx-mainline.gpg https://packages.sury.org/nginx-mainline/apt.gpg $ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-nginx-mainline.gpg] https://packages.sury.org/nginx-mainline/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/nginx-mainline.list' $ sudo apt update $ sudo apt remove apache2 && sudo apt autoremove # 移除 Apache2(Debian 默认安装) $ sudo apt install nginx-full
PHP¶
按照 https://packages.sury.org/php/README.txt 安装 PHP(下面例子里装的是 PHP 8.2):
$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg $ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' $ sudo apt update $ sudo apt install php8.2 php8.2-fpm
PHP 扩展¶
Friendica 需要 Curl, GD, GMP, Intl, PDO, POSIX, mbstrings, MySQLi, hash, Imagick, xml, zip 和 OpenSSL 的扩展:
MariaDB / MySQL¶
$ sudo curl -sSLo /usr/share/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp' $ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/mariadb-keyring.pgp] https://deb.mariadb.org/10.11/debian $(lsb_release -sc) main" > /etc/apt/sources.list.d/mariadb.list' $ sudo apt update $ sudo apt install mariadb-server
推荐安装完之后使用 sudo mariadb-secure-installation
。
另外创建 MariaDB 用户的 SQL 大致如下:
Ubuntu 下¶
普通的 Nginx + PHP
$ sudo apt update $ sudo apt upgrade $ sudo apt install $ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:ondrej/php $ sudo add-apt-repository ppa:ondrej/nginx-mainline $ sudo apt update $ sudo apt install nginx $ sudo apt search php7.3 # 看看想装啥,顺便之后可能PHP版本会变 $ sudo apt install php7.3 php7.3-fpm php7.3-mbstring php7.3-mysql
-
Mariadb数据库(MySQL),可以先试一下:
$ sudo apt install mariadb-server $ # 上面的命令反正我是出错了,版本也不够新,所以用官方的repo。 $ sudo apt remove -f mariadb-server $ sudo apt autoremove -f $ sudo apt install curl $ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash $ sudo apt install mariadb-server
但还是出错了……安装停在了:
Setting up mariadb-server-10.4 (1:10.4.10+maria~bionic) ...
之后就没有动。没办法,再开一个SSH,
ps aux | grep mysql
发现有几个东西。kill -9
弄掉,至少安装结束了:Setting up mariadb-server-10.4 (1:10.4.10+maria~bionic) ... /var/lib/dpkg/info/mariadb-server-10.4.postinst: line 23: 1208 Terminated bash /usr/bin/mysql_install_db --rpm --cross-bootstrap --user=mysql --disable-log-bin --skip-test-db 2>&1 1209 Done | $ERR_LOGGER Created symlink /etc/systemd/system/mysql.service → /lib/systemd/system/mariadb.service. Created symlink /etc/systemd/system/mysqld.service → /lib/systemd/system/mariadb.service. Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /lib/systemd/system/mariadb.service. Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details. Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details. Setting up mariadb-server (1:10.4.10+maria~bionic) ... Processing triggers for man-db (2.8.3-2ubuntu0.1) ... Processing triggers for libc-bin (2.27-3ubuntu1) ...
还给出了出错命令,重新试一遍:
似乎可以了。
评论