快速入门:在Linux服务器上部署和运行爬虫程序

服务器准备工作

购买一个服务器实例

以阿里云为例,阿里云现在有学生优惠,可以在以下链接领取:https://university.aliyun.com/

然后租一个2核2G的服务器,仅需285元,优惠下来只需0元即可租一年,还多出来15块钱可以缴十几个G的流量钱。

绑定弹性网卡

参考:

弹性网卡概述:弹性网卡概述_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)

如何创建弹性网卡:如何创建弹性网卡_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)

绑定弹性网卡的功能:

  1. 绑定弹性网卡以访问外网
  2. 获得公网ip,从而可以ssh访问

设置安全组

参考:

安全组概述:什么是安全组_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)

设置安全组:如何创建一个安全组并设置安全组规则_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)

服务器设有防火墙,如果需要从本地访问服务器的MongoDB,则会被服务器的防火墙阻拦,因此需要设置安全组,允许访问27017端口。

配置MongoDB

安装MongoDB

参考:在 Ubuntu 上安装 MongoDB Community Edition — MongoDB 手册

主要参照MongoDB手册,为了阅读方便,将关键内容摘抄如下:

1. 导入MongoDB的public key

安装gnupgcurl

1
sudo apt-get install gnupg curl

导入 MongoDB public GPG key

1
2
3
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \
--dearmor

创建MongoDB的列表文件

1
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

更新软件包列表

1
sudo apt-get update

安装最新的稳定版的MongoDB

1
sudo apt-get install -y mongodb-org

在systemd下启动MongoDB

1
sudo systemctl start mongod

创建管理员

为了防止被攻击,需要设定管理员角色,这样的话访问MongoDB需要账户密码。

1. 启用访问控制

编辑 MongoDB 的配置文件(通常是 etc/mongod.conf),以启用访问控制。在配置文件中添加或更新以下行:

1
2
security:
authorization: enabled

这将启用用户认证。

一般情况下服务器进去默认在root,etc和root在同一级文件夹中,访问etc需要先到上一级文件夹再访问

2. 重启 MongoDB 服务

更改配置后,需要重启 MongoDB 服务以应用更改。这通常可以通过以下命令完成(systemd系统下):

1
sudo systemctl restart mongod

3. 连接到 MongoDB Shell

使用 MongoDB Shell 连接到数据库:

1
mongosh

4. 创建管理员用户

在 MongoDB Shell 中,切换到 admin 数据库并创建一个新用户:

1
2
3
4
5
6
use admin
db.createUser({
user: "your_user_name",
pwd: "your_password",
roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
})

"myAdmin""adminPassword" 替换为自己的用户名和密码。

5. 退出并以管理员身份重新登录

退出 MongoDB Shell(使用 exit 命令),然后使用您刚创建的管理员账户重新登录:

1
mongosh -u <your_user_name> -p <your_password> --authenticationDatabase admin

tmux

参考:Linux笔记:终端复用与管理工具screen和tmux_tmux和screen-CSDN博客

更多功能参见:终端神器tmux:多任务管理大师

假设已经可以通过ssh连接服务器了,为了保证程序可以在后台运行,需要使用终端复用与管理工具tmux

安装tmux

1
sudo apt install tmux

常用命令

  1. 创建一个名为name新会话并进入:

    1
    tmux new -s name
  2. 进入一个已经创建了的会话:

1
tmux a -t name
  1. 退出会话:先按ctrl+b,然后再按d

  2. 上下翻页:先按ctrl+b,然后再按PgUp,按q退出

  3. 结束会话:

    1
    tmux kill-session -t name

使用tmux创建一个会话并在其中运行爬虫程序,这样断开ssh连接后爬虫仍会继续运行。

MongoDB相关问题

错误代码14

1
2
3
4
5
6
7
8
9
10
11
12
× mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2024-01-21 11:34:16 CST; 7min ago
Docs: https://docs.mongodb.org/manual
Process: 15798 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=14)
Main PID: 15798 (code=exited, status=14)
CPU: 591ms

Jan 21 11:34:15 iZ2ze5le5fm8myuecguyayZ systemd[1]: Started MongoDB Database Server.
Jan 21 11:34:16 iZ2ze5le5fm8myuecguyayZ mongod[15798]: {"t":{"$date":"2024-01-21T03:34:16.004Z"},"s":"I", "c":"CONTROL", "i>
Jan 21 11:34:16 iZ2ze5le5fm8myuecguyayZ systemd[1]: mongod.service: Main process exited, code=exited, status=14/n/a
Jan 21 11:34:16 iZ2ze5le5fm8myuecguyayZ systemd[1]: mongod.service: Failed with result 'exit-code'.

没有足够的访问权限

1
2
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chmod -R 700 /var/lib/mongodb
  1. sudo chown -R mongodb:mongodb /var/lib/mongodb:
    • 这条命令会递归地(由 -R 参数指定)更改 /var/lib/mongodb 目录的所有权,包括目录内的所有文件和子目录。
    • mongodb:mongodb 指定了新的所有者和所属组,这里两者都是 mongodb。这表示该目录及其内容的所有者和所属组都更改为 mongodb 用户和组。
    • 这样做确保了运行 MongoDB 服务的用户(通常是 mongodb 用户)有权读取和写入这个目录,这对于 MongoDB 存储数据和日志至关重要。
  2. sudo chmod -R 700 /var/lib/mongodb:
    • 这条命令同样递归地更改 /var/lib/mongodb 目录的权限。
    • 700 是一个八进制数,代表着设置的权限。在这个上下文中,7 表示目录的所有者(mongodb 用户)有读、写和执行(访问)权限;而后面两个 0 表示其他用户和组没有任何权限。
    • 这意味着只有目录的所有者(mongodb 用户)可以读取、写入和进入该目录,而其他任何用户都无法访问。这是一种安全措施,防止未经授权的访问或修改 MongoDB 的数据。