如何在 Ubuntu 18.04 上设置 WireGuard VPN

WireGuard 是具有最新加密技术的现代 VPN(虚拟专用网)技术。与 IPsec 和 OpenVPN 等其他类似解决方案相比,WireGuard 更快,更易于配置且性能更高。它是一个跨平台,几乎可以在任何地方运行,包括 Linux,Windows,Android 和 macOS。Wireguard 是对等 VPN。它不使用客户端-服务器模型。

WireGuard 通过在充当隧道的每个对等设备上创建网络接口来工作。对等体通过交换和验证公共密钥(类似于 SSH 模型)来相互认证。公钥与隧道中允许的 IP 地址列表进行映射。 VPN 流量封装在 UDP 中。

在本教程中,我们将在充当 VPN 服务器的 Ubuntu 18.04 计算机上设置 WireGuard。我们还将向您展示如何将 WireGuard 配置为客户端。客户端的流量将通过 Ubuntu 18.04 服务器进行路由。

此设置可用于防御中间人攻击,匿名浏览网络,绕过受地域限制的内容,或允许您的同事在远程工作时安全地连接到公司网络。

先决条件

您需要一台 Ubuntu 18.04 服务器,您可以以 root 用户或具有 sudo 特权的帐户访问。

设置 WireGuard 服务器

在本节中,我们将在 Ubuntu 机器上安装 WireGuard 并将其设置用作服务器。我们还将配置该系统以通过它路由客户的流量。

在 Ubuntu 18.04 上安装 WireGuard

WireGuard 维护自己的 APT 仓库,我们将从该仓库中安装软件包,并在有新版本可用时对其进行更新。

更新软件包列表,并安装管理系统存储库所需的工具。您的机器上可能已经装有该软件包:

1
2
sudo apt update
sudo apt install software-properties-common

添加 WireGuard 仓库:

1
sudo add-apt-repository ppa:wireguard/wireguard

出现提示时,按 Enter 键继续。add-apt-repository 也将自动更新软件包列表。

安装 WireGuard 软件包:

1
sudo apt install wireguard

WireGuard 作为内核模块运行,该模块被编译为 DKMS 模块。成功完成后,您将看到以下输出:

1
2
3
4
5
6
7
8
9
10
wireguard:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.15.0-88-generic/updates/dkms/

depmod...

DKMS: install completed.

更新内核时,将针对新内核编译 WireGuard 模块。

配置 WireGuard

WireGuard 附带了两个名为 wgwg-quick 的命令行工具,可用于配置和管理 WireGuard 接口。

运行以下命令以生成公钥和私钥:

1
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

这些文件将在 /etc/wireguard 目录中生成。您可以使用 cat 或更少的字体查看文件。私钥绝对不能与任何人共享。

生成密钥后,我们需要配置将路由 VPN 流量的隧道设备。

可以使用 ipwg 从命令行设置设备,也可以使用文本编辑器创建配置文件。

创建一个名为 wg0.conf 的新文件,并添加以下内容:

1
sudo nano /etc/wireguard/wg0.conf
1
2
3
4
5
6
7
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

该接口可以命名为任何名称,但是建议使用诸如包含 wg0wgvpn0 之类的名称。界面部分中的设置具有以下含义:

  • 地址 - wg0接口的以逗号分隔的 v4 或 v6 IP地址列表。使用专用于专用网络的范围内的 IP(10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16)。
  • ListenPort - WireGuard 接受传入连接的端口。
  • PrivateKey - 由 wg genkey 命令生成的私钥。(要查看文件内容,请运行:sudo cat/etc/wireguard/privatekey
  • SaveConfig - 设置为 true 时,关闭时接口的当前状态将保存到配置文件中。
  • PostUp - 在启动界面之前执行的命令或脚本。在此示例中,我们使用 iptables 启用伪装。这将允许流量离开服务器,从而使 VPN 客户端可以访问 Internet。
    确保在 -A POSTROUTING 之后替换 ens3 以匹配公共网络接口的名称。您可以通过运行以下命令轻松找到该接口:
    1
    ip -o -4 route show to default | awk '{print $5}'
  • PostDown - 在关闭接口之前执行的命令或脚本。接口关闭后,iptables 规则将被删除。

wg0.confprivatekey 文件对普通用户不可读。使用 chmod 将权限设置为 600:

1
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

完成后,使用配置文件中指定的属性启动 wg0 接口:

1
sudo wg-quick up wg0

该命令将产生类似于以下内容的输出:

1
2
3
4
5
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

运行 wg show wg0 检查接口状态和配置:

1
sudo wg show wg0
1
2
3
4
interface: wg0
public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
private key: (hidden)
listening port: 51820

您也可以运行 ip a show wg0 来验证接口状态:

1
ip a show wg0
1
2
3
4
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.0.0.1/24 scope global wg0
valid_lft forever preferred_lft forever

要在启动时启用 WireGuard 接口,请运行以下命令:

1
sudo systemctl enable wg-quick@wg0

服务器网络和防火墙配置

为了使 NAT 正常工作,我们需要启用 IP 转发。打开 /etc/sysctl.conf 文件,并添加或取消注释以下行:

1
sudo nano /etc/sysctl.conf
1
net.ipv4.ip_forward=1

保存文件并应用更改:

1
sudo sysctl -p
1
net.ipv4.ip_forward = 1

如果使用 UFW 管理防火墙,则需要在端口 51820 上打开 UDP 通信:

1
sudo ufw allow 51820/udp

仅此而已。已设置将作为服务器的 Ubuntu 对等端。

Linux 和 macOS 客户端设置

有关所有受支持平台的安装说明,请访问 https://wireguard.com/install/。在 Linux 系统上,您可以使用分发软件包管理器来安装软件包,而在带有 brew 的 macOS 上也可以安装软件包。安装 WireGuard 后,请按照以下步骤配置客户端设备。

设置 Linux 和 macOS 客户端的过程几乎与服务器相同。首先生成公钥和私钥:

1
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

创建文件 wg0.conf 并添加以下内容:

1
2
3
4
5
6
7
8
9
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

接口部分中的设置与设置服务器时的含义相同:

  • Address - wg0 接口的以逗号分隔的 v4 或 v6 IP 地址列表。
  • PrivateKey - 要在客户端计算机上查看文件的内容,请运行: sudo cat /etc/wireguard/privatekey

对等部分包含以下字段:

  • PublicKey - 您要连接的对等方的公共密钥。(服务器的 /etc/wireguard/publickey 文件的内容)。
  • Endpoint - 您要连接的对等方的 IP 或主机名,后跟冒号,然后是远程对等方侦听的端口号。
  • AllowedIPs - v4 或 v6 IP 地址的逗号分隔列表,允许从该对等方传入的流量,并将该对等体的传出流量定向到该列表。我们使用 0.0.0.0/0 是因为我们正在路由流量,并希望服务器对等方发送具有任何源 IP 的数据包。

如果您需要配置其他客户端,只需使用其他专用 IP 地址重复相同的步骤即可。

Windows 客户端安装程序

WireGuard 网站下载并安装 Windows msi 软件包。

安装完成后,打开 WireGuard 应用程序,然后单击 “添加隧道” -> “添加空隧道…”,如下图所示:

windows-add-tunnel

将自动创建一个公钥对并将其显示在屏幕上。

windows-tunnel

输入隧道的名称,并按如下所示编辑配置:

1
2
3
4
5
6
7
8
9
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

在接口部分中,添加新行以定义客户端隧道地址。

在对等部分中,添加以下字段:

  • PublicKey - Ubuntu 服务器的公共密钥(/etc/wireguard/publickey 文件)。
  • Endpoint - Ubuntu 服务器的 IP 地址,后跟冒号和 WireGuard 端口(51820)。
  • AllowedIPs - 0.0.0.0/0

完成后,单击“保存”按钮。

将客户端对等方添加到服务器

最后一步是将客户端公钥和 IP 地址添加到服务器:

1
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

确保使用在客户端计算机上生成的公用密钥(sudo cat /etc/wireguard/publickey)更改 CLIENT_PUBLIC_KEY 并调整客户端IP 地址(如果不同)。Windows 用户可以从 WireGuard 应用程序复制公钥。

完成后,返回客户端计算机并打开隧道接口。

Linux 和 macOS 客户端

在 Linux 客户端上,运行以下命令以打开界面:

1
sudo wg-quick up wg0

现在,您应该已连接到 Ubuntu 服务器,并且来自客户端计算机的流量应通过该服务器进行路由。您可以使用以下方法检查连接:

1
sudo wg
1
2
3
4
5
6
7
8
9
10
11
interface: wg0
public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
private key: (hidden)
listening port: 48052
fwmark: 0xca6c

peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
endpoint: XXX.XXX.XXX.XXX:51820
allowed ips: 0.0.0.0/0
latest handshake: 1 minute, 22 seconds ago
transfer: 58.43 KiB received, 70.82 KiB sent

您也可以打开浏览器,键入 “what is my ip”,然后您应该会看到 Ubuntu 服务器的 IP 地址。

要停止隧道,请关闭 wg0 接口:

1
sudo wg-quick down wg0

Windows 客户端

如果您在 Windows 上安装了 WireGuard,请单击“激活”按钮。连接对等体后,隧道状态将更改为“活动”:

windows-connect-tunnel

结论

我们向您展示了如何在 Ubuntu 18.04 计算机上安装 WireGuard 并将其配置为 VPN 服务器。通过此设置,您可以通过保持流量数据私有来匿名浏览 Web。

在 Ubuntu 18.04 上使用 Let's Encrypt 来保护 Nginx

Let’s Encrypt 是由 Internet 安全研究小组(ISRG)开发的免费且开放的证书颁发机构。如今,几乎所有浏览器都信任由 Let’s Encrypt 颁发的证书。

在本教程中,我们将提供分步说明,说明如何使用 Ubuntu 18.04 上的 certbot 工具通过 Let’s Encrypt 保护 Nginx。

先决条件

在继续本教程之前,请确保满足以下先决条件:

  • 您有一个指向您的公共服务器 IP 的域名。在本教程中,我们将使用 example.com
  • 请按照以下说明安装 Nginx
  • 您的域有一个服务器块。您可以按照以下说明详细了解如何创建一个。

安装 Certbot

Certbot 是功能齐全且易于使用的工具,可自动执行用于获取和续订 Let’s Encrypt SSL 证书以及配置网络服务器以使用证书的任务。certbot 软件包包含在默认的 Ubuntu 仓库中。

更新软件包列表并安装 certbot 软件包:

1
2
sudo apt update
sudo apt install certbot

产生强 Dh(Diffie-Hellman)组

Diffie-Hellman 密钥交换(DH)是一种在不安全的通信通道上安全地交换加密密钥的方法。我们将生成一组新的 2048 位 DH 参数以增强安全性:

1
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

如果您愿意,可以将大小最多更改为 4096 位,但是在这种情况下,生成时间可能会超过 30 分钟,具体取决于系统熵。

获取加密的 SSL 证书

为了获得我们域的 SSL 证书,我们将使用 Webroot 插件,该插件的工作原理是在 ${webroot-path}/well-known/acme-challenge 目录中创建一个用于验证请求的域的临时文件。Let’s Encrypt 服务器向临时文件发出 HTTP 请求,以验证请求的域是否解析为运行 certbot 的服务器。

为了简化起见,我们将所有针对 .well-known/acme-challenge 的 HTTP 请求映射到一个目录 /var/lib/letsencrypt

以下命令将创建目录,并使该目录可用于 Nginx 服务器。

1
2
3
sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt

为了避免重复代码,请创建以下两个代码段,并将其包含在所有 Nginx 服务器块文件中。

打开您的文本编辑器并创建第一个片段 letsencrypt.conf

1
sudo nano /etc/nginx/snippets/letsencrypt.conf
1
2
3
4
5
6
location ^~ /.well-known/acme-challenge/ {
allow all;
root /var/lib/letsencrypt/;
default_type "text/plain";
try_files $uri =404;
}

创建第二个片段 ssl.conf,其中包括 Mozilla 推荐的削片程序,启用 OCSP 装订,HTTP 严格传输安全性(HSTS)并强制执行少量以安全性为重点的 HTTP 标头。

1
sudo nano /etc/nginx/snippets/ssl.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

创建代码段后,打开域服务器块,并包含 letsencrypt.conf 代码段,如下所示:

1
sudo nano /etc/nginx/sites-available/example.com.conf
1
2
3
4
5
6
server {
listen 80;
server_name example.com www.example.com;

include snippets/letsencrypt.conf;
}

为了启用新的服务器阻止文件,我们需要创建一个从文件到启用站点的目录的符号链接,该链接在启动期间由 Nginx 读取:

1
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

重新启动 Nginx 服务,以使更改生效:

1
sudo systemctl restart nginx

现在,您可以使用 webroot 插件运行 Certbot 并通过发出以下命令获取 SSL 证书文件:

1
sudo certbot certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

如果成功获得 SSL 证书,certbot 将打印以下消息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-07-28. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

现在已经有了证书文件,您可以按如下所示编辑域服务器块:

1
sudo nano /etc/nginx/sites-available/example.com.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
server {
listen 80;
server_name www.example.com example.com;

include snippets/letsencrypt.conf;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
server_name www.example.com;

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
include snippets/ssl.conf;
include snippets/letsencrypt.conf;

return 301 https://example.com$request_uri;
}

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

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
include snippets/ssl.conf;
include snippets/letsencrypt.conf;

# . . . other code
}

通过上述配置,我们将强制 HTTPS 并从 www 重定向到非 www 版本。

重新加载 Nginx 服务以使更改生效:

1
sudo systemctl reload nginx

自动更新,让我们加密 SSL 证书

让我们的加密证书有效期为 90 天。要在证书过期之前自动更新证书,certbot 程序包会创建一个 cronjob,该程序每天运行两次,并将在证书过期前 30 天自动更新任何证书。

由于一旦更新了证书,我们就使用 certbot webroot 插件,因此我们还必须重新加载 nginx 服务。将 --renew-hook "systemctl reload nginx"附加到 /etc/cron.d/certbot 文件中,如下所示:

1
sudo nano /etc/cron.d/certbot
1
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

要测试续订过程,可以使用 certbot --dry-run 开关:

1
sudo certbot renew --dry-run

如果没有错误,则表示更新过程成功。

结论

在本教程中,您使用了 Let’s Encrypt 客户端 certbot 为您的域下载 SSL 证书。您还创建了 Nginx 代码段来避免重复代码,并配置了 Nginx 以使用证书。在本教程的最后,您已经设置了 cronjob 来自动更新证书。

如果您想了解有关如何使用 Certbot 的更多信息,那么 他们的文档 是一个很好的起点。

如何在 Ubuntu 18.04 上安装 Nginx

Nginx的发音是 “engine x”,它是一个免费的,开源的,高性能 HTTP 和反向代理服务器,负责处理 Internet 上一些最大站点的负载。

Nginx 可以用作独立的 Web 服务器,也可以用作 Apache 和其他 Web 服务器的反向代理。

与 Apache 相比,Nginx 可以处理大量并发连接,并且每个连接具有较小的内存占用。

本教程将概述在 Ubuntu 18.04 计算机上安装 Nginx 所需的步骤。

先决条件

在开始本教程之前,请确保您以具有 sudo 特权的用户身份登录,并且您没有在端口 80443 上运行 Apache 或任何其他 Web 服务器。

安装 Nginx

Nginx 软件包在默认的 Ubuntu 仓库中可用。安装非常简单。

首先,更新软件包列表,然后安装 Nginx:

1
2
sudo apt update
sudo apt install nginx

安装完成后,Nginx 服务将自动启动。您可以使用以下命令检查服务的状态:

1
sudo systemctl status nginx

输出将如下所示:

1
2
3
4
5
6
7
8
9
10
11
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2018-04-29 06:43:26 UTC; 8s ago
Docs: man:nginx(8)
Process: 3091 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 3080 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 3095 (nginx)
Tasks: 2 (limit: 507)
CGroup: /system.slice/nginx.service
├─3095 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─3097 nginx: worker process

配置防火墙

假设您正在使用 UFW 管理防火墙,则需要打开 HTTP(80)和 HTTPS(443)端口。为此,您可以启用 “Nginx Full” 配置文件,其中包括两个端口的规则:

1
sudo ufw allow 'Nginx Full'

要验证状态类型:

1
sudo ufw status

输出将类似于以下内容:

1
2
3
4
5
6
7
8
Status: active

To Action From
-- ------ ----
22/tcp ALLOW Anywhere
Nginx Full ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)

测试安装

您可以在选择的浏览器中打开 http//YOUR_IP 来测试新的 Nginx 安装,如下图所示,您将看到默认的 Nginx 登陆页面:

nginx-screenshot

管理 Nginx 服务

您可以通过与其他任何 systemd 服务相同的方式来管理 Nginx 服务。

停止 Nginx 服务,请运行:

1
sudo systemctl stop nginx

启动 Nginx 服务,请运行:

1
sudo systemctl start nginx

重新启动 Nginx 服务,请运行:

1
sudo systemctl restart nginx

进行一些配置更改后,请重新加载 Nginx 服务:

1
sudo systemctl reload nginx

默认情况下,Nginx 服务将在启动时启动。如果要禁用 Nginx 服务以在启动时启动:

1
sudo systemctl disable nginx

并重新启用它:

1
sudo systemctl enable nginx

Nginx 配置文件的结构和最佳做法

  • 所有 Nginx 配置文件都位于 /etc/nginx 目录中。
  • Nginx 的主要配置文件是 /etc/nginx/nginx.conf
  • 为了使 Nginx 配置更易于维护,建议为每个域创建一个单独的配置文件。您可以根据需要拥有任意数量的服务器阻止文件。
  • Nginx 服务器阻止文件存储在 /etc/nginx/sites-available 目录中。 Nginx 不会使用此目录中的配置文件,除非它们链接到 /etc/nginx/sites-enabled 目录。
  • 要激活服务器块,您需要创建一个从站点可用目录中的配置文件站点到站点启用目录的软链接。
  • 建议遵循标准命名约定,例如,如果您的域名是 mydomain.com,则您的配置文件应命名为 /etc/nginx/sites-available/mydomain.com.conf
  • /etc/nginx/snippets 目录包含可包含在服务器阻止文件中的配置片段。如果使用可重复的配置段,则可以将这些段重构为片段,并将片段文件包括在服务器块中。
  • Nginx 日志文件(access.log 和 error.log)位于 /var/log/nginx 目录中。建议为每个服务器块使用不同的访问和错误日​​志文件。
  • 您可以将域文档的根目录设置为所需的任何位置。 webroot 的最常见位置包括:
    • /home/<user_name>/<site_name>
    • /var/www/<site_name>
    • /var/www/html/<site_name>
      • /opt/<site_name>

结论

恭喜,您已在 Ubuntu 18.04 服务器上成功安装了 Nginx。现在,您准备开始部署应用程序并将 Nginx 用作 Web 或代理服务器。如今,安全证书是所有网站的必备功能,要使用免费的 Let’s Encrypt SSL 证书保护您的网站,可以在 Ubuntu 18.04 上按照此指南使用 Let’s Encrypt保护Nginx。

如何在 Ubuntu 18.04 上安装 Gitea

Gitea 是用 Go 编写的自托管开源 git 服务器。这是 Gogs 的项目分支。Gitea 包括存储库文件编辑器,项目问题跟踪,用户管理,通知,内置 Wiki 等。

Gitea 是轻量级的应用程序,可以安装在低性能系统上。如果您正在寻找内存占用量少得多的 Gitlab 替代产品,并且不需要 Gitlab 提供的所有功能,那么您绝对应该尝试 Gitea。

本教程说明了如何在 Ubuntu 18.04 上安装和配置 Gitea。相同的说明适用于 Ubuntu 16.04 和任何其他基于 Debian 的发行版。

先决条件

Gitea支持 SQLite,PostgreSQL 和 MySQL/MariaDB 作为数据库后端。

我们将使用 SQLite 作为 Gitea 的数据库。如果您的 Ubuntu 系统上未安装 SQLite,则可以通过以 sudo 用户身份输入以下命令来安装它:

1
2
sudo apt update
sudo apt install sqlite3

安装 Gitea

Gitea 提供了 Docker 映像,可以从源代码,二进制文件或作为软件包安装。我们将从二进制文件安装 Gitea。

安装 Git

第一步是在您的服务器上安装 Git:

1
2
sudo apt update
sudo apt install git

通过显示 Git 版本来验证安装:

1
git --version
1
git version 2.17.1

创建一个 Git 用户

创建一个新的系统用户,将通过键入以下内容来运行 Gitea 应用程序:

1
sudo adduser --system --group --disabled-password --shell /bin/bash --home /home/git --gecos 'Git Version Control' git

该命令将创建一个名为 git 的新用户和组,并将主目录设置为 /home/git。输出如下所示:

1
2
3
4
Adding system user `git' (UID 111) ...
Adding new group `git' (GID 116) ...
Adding new user `git' (UID 111) with group `git' ...
Creating home directory `/home/git' ...

下载 Gitea 二进制文件

访问 Gitea下载页面,并下载适用于您的体系结构的最新二进制文件。在撰写本文时,最新版本为 1.10.2。如果有可用的新版本,请在下面的命令中更改 VERSION 变量。

使用以下 wget 命令在 /tmp 目录中下载 Gitea 二进制文件:

1
2
VERSION=1.10.2
sudo wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64

gitea 二进制文件可以在任何位置运行。我们将遵循约定并将二进制文件移至 /usr/local/bin 目录:

1
sudo mv /tmp/gitea /usr/local/bin

使二进制文件可执行:

1
sudo chmod +x /usr/local/bin/gitea

运行以下命令以创建目录并设置所需的权限和所有权:

1
2
3
4
5
6
sudo mkdir -p /var/lib/gitea/{custom,data,indexers,public,log}
sudo chown git: /var/lib/gitea/{data,indexers,log}
sudo chmod 750 /var/lib/gitea/{data,indexers,log}
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea

上面的目录结构由官方的 Gitea 文档推荐。

/etc/gitea 目录的权限设置为 770,以便安装向导可以创建配置文件。安装完成后,我们将设置更多限制性权限。

创建系统单位文件

Gitea 提供了已配置为与我们的设置匹配的 Systemd unit 文件。

通过键入以下命令将文件下载到 /etc/systemd/system/ 目录:

1
sudo wget https://raw.githubusercontent.com/go-gitea/gitea/master/contrib/systemd/gitea.service -P /etc/systemd/system/

完成后,启用并启动 Gitea 服务:

1
2
sudo systemctl daemon-reload
sudo systemctl enable --now gitea

验证服务是否成功启动:

1
2
3
4
5
6
7
8
● gitea.service - Gitea (Git with a cup of tea)
Loaded: loaded (/etc/systemd/system/gitea.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-01-04 21:27:23 UTC; 3s ago
Main PID: 14804 (gitea)
Tasks: 9 (limit: 1152)
CGroup: /system.slice/gitea.service
└─14804 /usr/local/bin/gitea web --config /etc/gitea/app.ini
...

配置 Gitea

现在已经下载并运行了 Gitea,是时候通过 Web 界面完成安装了。

默认情况下,Gitea 会侦听所有网络接口上端口 3000 上的连接。

如果您的服务器上运行着 UFW防火墙,则需要打开 Gitea 端口:

要允许端口 3000 通行流量,请输入以下命令:

1
sudo ufw allow 3000/tcp

打开浏览器,输入 http//YOUR_DOMAIN_IR_IP3000,然后将显示类似以下的屏幕:

gitea-install

数据库设置:

  • 数据库类型:SQLite3
  • 路径:使用绝对路径 /var/lib/gitea/data/gitea.db

应用程序常规设置:

  • 站点名称:输入您的组织名称。
  • 存储库根路径:保留默认的 /home/git/gitea-repositories
  • Git LFS 根路径:保留默认的 /var/lib/gitea/data/lfs
  • 以用户名运行:git
  • SSH 服务器域:输入您的域或服务器 IP 地址
  • SSH 端口:22,如果 SSH 正在侦听其他端口,请更改它
  • Gitea HTTP 侦听端口:3000
  • Gitea 基本 URL:使用 http 和您的域或服务器 IP 地址
  • 日志路径:保留默认的 /var/lib/gitea/log

您可以随时通过编辑 Gitea 配置文件来更改设置。

完成后,点击 “安装 Gitea” 按钮。安装是即时的。完成后,您将被重定向到登录页面。

点击 “立即注册” 链接。第一个注册用户将自动添加到 Admin 组。

使用以下命令将 Gitea 配置文件的权限更改为只读:

1
2
sudo chmod 750 /etc/gitea
sudo chmod 640 /etc/gitea/app.ini

仅此而已。Gitea 已安装在您的 Ubuntu 计算机上。

将 Nginx 配置为 SSL 终止代理

此步骤是可选的,但强烈建议这样做。要将 Nginx 用作反向代理,您需要具有一个指向服务器公共 IP 的域或子域。在本教程中,我们将使用 git.example.com

首先,安装 Nginx 并使用以下指南生成免费的 “加密 SSL” 证书:

完成后,打开文本编辑器并编辑域服务器阻止文件:

1
sudo nano /etc/nginx/sites-enabled/git.example.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
server {
listen 80;
server_name git.example.com;

include snippets/letsencrypt.conf;
return 301 https://git.example.com$request_uri;
}

server {
listen 443 ssl http2;
server_name git.example.com;

proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;

client_max_body_size 50m;

# Proxy headers
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;

# SSL parameters
ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/git.example.com/chain.pem;
include snippets/letsencrypt.conf;
include snippets/ssl.conf;

# log files
access_log /var/log/nginx/git.example.com.access.log;
error_log /var/log/nginx/git.example.com.error.log;

# Handle / requests
location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:3000;
}
}

不要忘记用您的 Gitea 域替换 git.example.com,并为 SSL 证书文件设置正确的路径。 HTTP 流量重定向到 HTTPS。

重新启动 Nginx 服务以使更改生效:

1
sudo systemctl restart nginx

接下来,更改 Gitea 域和根 URL。为此,请打开配置文件并编辑以下行:

1
sudo nano /etc/gitea/app.ini
1
2
3
[server]
DOMAIN = git.example.com
ROOT_URL = https://git.example.com/

通过键入以下命令重新启动 Gitea 服务:

1
sudo systemctl restart gitea

至此,已经配置了 Gitea 代理,您可以在以下位置访问它:https://git.example.com

配置电子邮件通知

为了使 Gitea 能够发送通知电子邮件,您可以安装 Postfix 或使用某些事务性邮件服务,例如 SendGrid,MailChimp,MailGun 或 SES。

要启用电子邮件通知,请打开配置文件并编辑以下行:

1
sudo nano /etc/gitea/app.ini
1
2
3
4
5
6
[mailer]
ENABLED = true
HOST = SMTP_SERVER:SMTP_PORT
FROM = SENDER_EMAIL
USER = SMTP_USER
PASSWD = YOUR_SMTP_PASSWORD

确保您输入了正确的 SMTP 服务器信息。

重新启动 Gitea 服务以使更改生效:

1
sudo systemctl restart gitea

要验证设置并发送测试电子邮件,请登录 Gitea,然后转到:站点管理 > 配置 > SMTP 邮件程序配置。

Gitea 还允许您通过创建 Web Webhook 连接到 Slack 并将通知发送到您的 Slack 频道。

升级 Gitea

要升级到最新的 Gitea 版本,只需下载并替换二进制文件即可。

  1. 停止 Gitea 服务:
1
sudo systemctl stop gitea
  1. 下载最新的 Gitea 版本并将其移至 /home/git 目录:
1
2
3
VERSION=<THE_LATEST_GITEA_VERSION>
wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64
sudo mv /tmp/gitea /usr/local/bin
  1. 使二进制文件可执行:
1
sudo chmod +x /usr/local/bin/gitea
  1. 启动 Gitea 服务:
1
sudo systemctl restart gitea

就这样!

结论

本教程将引导您完成在 Ubuntu 18.04 上安装 Gitea 的过程。

现在,您应该访问 Gitea 文档页面,并学习如何配置 Gitea 实例并创建第一个项目。

如何在 Ubuntu 18.04 上安装 Mono

Mono 是一个基于 ECMA/ISO 标准开发和运行跨平台应用程序的平台。它是 Microsoft .NET 框架的免费开放源代码实现。

本教程介绍了如何在 Ubuntu 18.04 上安装 Mono。

先决条件

这些说明假定您以 root 用户或具有 sudo 特权的用户身份登录。

在 Ubuntu 上安装 Mono

在 Ubuntu 18.04 上安装 Mono 的最简单和最推荐的方法是从 Mono 的仓库中安装它。这是一个相对简单的过程,只需几分钟。

  1. 首先安装必要的软件包:
1
2
sudo apt update
sudo apt install dirmngr gnupg apt-transport-https ca-certificates
  1. 使用以下命令导入仓库的 GPG 密钥:
1
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

输出应如下所示:

1
2
3
gpg: key A6A19B38D3D831EF: public key "Xamarin Public Jenkins (auto-signing) <releng@xamarin.com>" imported
gpg: Total number processed: 1
gpg: imported: 1
  1. 通过运行以下命令,将 Mono 仓库添加到系统源列表中:
1
sudo sh -c 'echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" > /etc/apt/sources.list.d/mono-official-stable.list'
  1. 启用 apt 信息库后,更新软件包列表并使用以下命令安装 Mono:
1
2
sudo apt update
sudo apt install mono-complete

mono-complete 是一个元软件包,可安装 Mono 运行时,开发工具和所有库。

  1. 通过键入以下命令来验证安装,该命令将打印 Mono 版本:
1
mono --version

在撰写本文时,Mono 的最新稳定版本是 6.6.0 Stable(6.6.0.161)。

1
2
3
4
5
6
7
8
9
10
11
12
Mono JIT compiler version 6.6.0.161 (tarball Tue Dec 10 10:36:32 UTC 2019)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
Interpreter: yes
LLVM: yes(610)
Suspend: hybrid
GC: sgen (concurrent by default)

就是这样,您已经在 Ubuntu 上成功安装了 Mono,然后就可以开始使用它了。

Mono 入门

为了验证所有设置是否正确,我们将构建一个 Hello World 程序,该程序将打印经典的 “hello world” 消息。

打开您的文本编辑器,并创建一个名为 hello.cs 的文件,其内容如下:

1
2
3
4
5
6
7
8
9
using System;

public class HelloWorld
{
public static void Main(string[] args)
{
Console.WriteLine ("Hello World!");
}
}

使用 csc 编译器生成程序:

1
csc hello.cs

上面的命令将生成一个名为 hello.exe 的可执行文件。

使用以下命令运行可执行文件:

1
mono hello.exe

输出应如下所示:

1
Hello, World

如果您只想通过输入程序名称来执行该程序,则需要设置一个可执行标志:

1
chmod +x hello.exe

现在,您可以通过键入以下内容运行 hello.exe 文件:

1
./hello.exe

结论

可从官方 Mono 软件包存储库中安装最新的稳定 Mono 发行包。

如何在 CentOS 8 上安装 Gradle

Gradle 是一个强大而灵活的构建工具,主要用于 Java 项目,结合了 Ant 和 Maven 的最佳功能。与使用 XML 编写脚本的前辈不同,Gradle 使用 Groovy(一种针对Java平台的动态,面向对象的编程语言)来定义项目和构建脚本。

本文介绍了如何在 CentOS 8 上安装 Gradle。我们将从其官方网站上下载最新版本的Gradle。

先决条件

这些说明假定您以 root 用户或具有 sudo 特权的用户身份登录。

安装 OpenJDK

Gradle 要求在服务器上安装J ava SE 8 或更高版本。

输入以下命令以安装 OpenJDK 软件包:

1
sudo yum install java-1.8.0-openjdk-devel

通过打印 Java 版本来验证 Java 安装:

1
java -version

输出应如下所示:

1
2
3
openjdk version "11.0.6" 2020-01-14 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.6+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.6+10-LTS, mixed mode, sharing)

下载 Gradle

在撰写本文时,Gradle 的最新版本是 6.3。在继续下一步之前,您应该检查 Gradle 发行页面以查看是否有较新的版本。

使用以下 wget 命令将 Gradle 二进制文件下载到 /tmp 目录中:

1
wget https://services.gradle.org/distributions/gradle-6.3-bin.zip -P /tmp

下载完成后,将文件解压缩到 /opt/gradle 目录中:

1
sudo unzip -d /opt/gradle /tmp/gradle-*.zip

如果出现错误消息 “sudo: unzip: command not found”,请使用以下命令安装解压缩软件包: sudo dnf install unzip

验证是否提取了 Gradle 文件:

1
ls /opt/gradle/gradle-*
1
bin  init.d  lib  LICENSE  NOTICE  README

设置环境变量

接下来,我们需要配置 PATH 环境变量以包含 Gradle bin 目录。为此,请打开文本编辑器,并在 /etc/profile.d 目录中创建一个名为 gradle.sh 的新文件:

1
sudo nano /etc/profile.d/gradle.sh

粘贴以下配置:

1
2
export GRADLE_HOME=/opt/gradle/gradle-6.3
export PATH=${GRADLE_HOME}/bin:${PATH}

保存并关闭文件。该脚本将在 shell 启动时执行。

通过发出以下 chmod 命令,使脚本可执行:

1
sudo chmod +x /etc/profile.d/gradle.sh

使用 source 命令加载环境变量:

1
source /etc/profile.d/gradle.sh

验证 Gradle 安装

要验证 Gradle 是否已正确安装,请运行以下命令,该命令将显示Gradle版本:

1
gradle -v

您应该看到类似以下的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Welcome to Gradle 6.3!

Here are the highlights of this release:
- Java 14 support
- Improved error messages for unexpected failures

For more details see https://docs.gradle.org/6.3/release-notes.html


------------------------------------------------------------
Gradle 6.3
------------------------------------------------------------

Build time: 2020-03-24 19:52:07 UTC
Revision: bacd40b727b0130eeac8855ae3f9fd9a0b207c60

Kotlin: 1.3.70
Groovy: 2.5.10
Ant: Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM: 11.0.6 (Oracle Corporation 11.0.6+10-LTS)
OS: Linux 4.18.0-80.11.2.el8_0.x86_64 amd64

仅此而已!您已经在 CentOS 系统上安装了最新版本的 Gradle,然后就可以开始使用它了。

结论

我们已经向您展示了如何在 CentOS 8 上安装 Gradle。您现在可以访问 Gradle 官方文档页面,了解如何开始使用 Gradle。

如何在 CentOS 8 上添加和删除用户

设置新的 Linux 服务器时,首要任务之一是添加和删除用户。每个用户对于各种命令行和 GUI 应用程序可以具有不同的权限级别和特定设置。

本文说明了如何在 CentOS 8 系统上添加和删除用户。

先决条件

为了能够创建和删除用户,您需要以 root 或具有 sudo 特权的用户身份登录。

如何在 CentOS 8 中添加用户

在 CentOS 中,您可以使用 useradd 命令创建一个新的用户帐户,后跟您要创建的用户名。

例如,要创建一个名为 “linuxman” 的新用户帐户,请运行:

1
sudo adduser linuxman

成功执行后,该命令不会产生任何输出。它创建用户和用户的主目录 (/home/linuxman),并将文件从 /etc/skel 目录复制到用户的主目录。在主目录中,用户可以编写,编辑和删除文件和目录。

如果您以 root 用户身份登录,则不必在每个命令前添加 sudo。

接下来,您需要为新用户设置密码,以便该用户可以登录。为此,请先执行 passwd 命令,然后输入用户名:

1
sudo passwd linuxman

系统将提示您输入并确认密码:

1
2
3
4
Changing password for user linuxman.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

确保使用包含大写和小写字母,数字和特殊字符的强密码。

授予 Sudo 特权

在 CentOS 上,默认情况下,对组成员授予 sudo 访问权限。

如果您希望新创建的用户具有管理权限,则将该用户添加到组中:

1
sudo usermod -aG wheel linuxize

您还可以通过修改 sudoers 文件来配置用户 sudo 访问。

如何在 CentOS 中删除用户

如果要删除一个不再需要的用户帐户,请调用 userdel 命令,后跟用户名。

例如,要删除名为 “linuxman” 的用户帐户,请运行:

1
sudo userdel linuxman

成功执行后,该命令不会产生任何输出。

上面的命令将删除用户而不删除用户文件。该用户也将从其所属的任何组中删除。

要删除用户并删除其主目录和脱机邮件,请将 -r 选项传递给 userdel

1
sudo userdel -r linuxman

结论

我们已经向您展示了如何在 CentOS 8 中添加和删除用户。相同的命令适用于任何其他 Linux 发行版。

CentOS 以及所有其他 Linux 发行版都是多用户操作系统。知道如何添加和删除用户是每个 Linux 用户应了解的基本技能之一。

如何在 ubuntu 18.04 上安装 Vmware Tools

VMware 是一种成熟且稳定的虚拟化解决方案,可让您在一台计算机上运行多个独立的操作系统。

当使用 VMware 作为虚拟机管理程序时,在客户机中安装 VMware Tools 以提高虚拟机性能很重要。VMware Tools 提供了一些有用的功能,例如更快的图形性能,共享的文件夹,共享的剪贴板,拖放操作等等。

本教程说明了如何在 Ubuntu 18.04 guest 虚拟机上安装 VMware Tools 软件包。相同的说明适用于 Ubuntu 16.04 和任何其他基于 Ubuntu 的发行版,包括 Linux Mint 和 Elementary OS。

使用 Open VM Tools 安装 VMware Tools

在 Ubuntu guest 虚拟机上安装 VMware Tools 的最简单和最推荐的方法是从 Ubuntu 的默认仓库安装 Open VM Tools 软件包。

Open VM Tools 是适用于 Linux guest 操作系统的 VMware Tools 的开源实现。

VMware Tools 分为两个软件包:用于无头系统的 open-vm-tools 和用于桌面系统的 open-vm-tools-desktop。根据配置实例的方式,默认情况下可能会安装 Open VM Tools 软件包。

运行以下命令以在 Ubuntu 服务器客户机上安装 VMware Tools:

1
2
sudo apt update
sudo apt install open-vm-tools

如果您正在运行 Ubuntu Desktop,请运行以下命令来安装 VMware Tools:

1
2
sudo apt update
sudo apt install open-vm-tools-desktop

仅此而已。您已在 Ubuntu 虚拟机上成功安装了 VMware Tools。

发布新版本的 Open VM Tools 时,您可以通过桌面标准软件更新工具或在终端中运行以下命令来更新软件包:

1
sudo apt update && sudo apt upgrade

使用 VMware Tools ISO 文件安装 VMware Tools

VMware 附带一个映像 ISO 文件,该映像包含所有受支持的客户机操作系统的 VMware Tools 安装程序。该文件位于主机上,可以从 VMware GUI 菜单挂载在来宾系统上。挂载后,即可开始在客户机系统上安装 VMware Tools。

以下是在 Ubuntu guest 虚拟机上安装 VMware Tools 的分步说明。这些步骤将适用于 Ubuntu 桌面和 Server 来宾安装。

  1. 打开 VMware Workstation,Fusion 或 Player。
  2. 启动 Ubuntu 来宾虚拟机。
  3. 在 VMware 菜单中,单击 “虚拟机” -> “安装VMware Tools …”,如下图所示:
    insert-vm-tools-cd-image
    如果使用的是 VMware Player,将提示您下载 VMware Tools。
  4. 以 sudo 用户身份登录 Ubuntu 来宾,并创建一个新目录作为 CD 驱动器的挂载点并挂载 ISO 文件:
    1
    2
    sudo mkdir -p /mnt/cdrom
    sudo mount /dev/cdrom /mnt/cdrom
  5. 导航到目录并解压缩包含 VMware Tools 安装程序的 VMwareTools-x.x.x-xxx.tar.gz 文件:
    1
    2
    cd /mnt/cdrom
    sudo tar xf VMwareTools-*.tar.gz -C /tmp
  6. 运行 vmware-install.pl 脚本以安装 VMware Tools:
    1
    sudo /tmp/vmware-tools-distrib/vmware-install.pl -d
    -d 选项将告诉安装程序接受默认选项。
  7. 重新引导 Ubuntu guest 虚拟机,以使更改生效:
    1
    sudo shutdown -r now

结论

在 Ubuntu 18.04 虚拟机上安装 VMware Tools 是一件容易的事。 VMware Tools 将优化客户机操作系统,以提高性能并增强可用性。

如何在 CentOS 8 上安装 Mono

Mono 是一个基于 ECMA/ISO 标准开发和运行跨平台应用程序的平台。它是 Microsoft .NET 框架的免费开放源代码实现。

本教程描述了如何在 CentOS 8 上安装 Mono。

先决条件

这些说明假定您以 root 用户或具有 sudo 特权的用户身份登录。

在 CentOS 8 上安装 Mono

在 CentOS 8 上安装 Mono 的最简单和推荐的方法是从 Mono 的仓库中进行安装。这是一个相对简单的过程,只需几分钟。

  1. 首先导入存储库的GPG密钥:
1
sudo rpm --import 'http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x3fa7e0328081bff6a14da29aa6a19b38d3d831ef'

导入成功,不会产生任何输出。

  1. 通过运行以下命令将 Mono 仓库添加到您的系统中:
1
dnf config-manager --add-repo https://download.mono-project.com/repo/centos8-stable.repo

输出应类似于以下内容:

1
Adding repo from: https://download.mono-project.com/repo/centos8-stable.repo
  1. 启用仓库后,安装 Mono:
1
sudo dnf install mono-complete

mono-complete 是一个元软件包,可安装 Mono 运行时,开发工具和所有库。

  1. 通过运行以下打印 Mono 版本的命令来验证安装:
1
mono --version

在撰写本文时,Mono 的最新稳定版本是 6.8.0.105:

1
2
3
4
5
6
7
8
9
10
11
12
Mono JIT compiler version 6.8.0.105 (tarball Tue Feb  4 19:28:42 UTC 2020)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
Interpreter: yes
LLVM: yes(610)
Suspend: hybrid
GC: sgen (concurrent by default)

仅此而已。您已经在 CentOS 系统上成功安装了 Mono,然后就可以开始使用它了。

Mono 入门

为确保一切设置正确,我们将构建一个 Hello World 程序,该程序将打印经典的 “hello world” 信息。

打开您的文本编辑器,并创建一个名为 hello.cs 的文件,其内容如下:

1
2
3
4
5
6
7
8
9
using System;

public class HelloWorld
{
public static void Main(string[] args)
{
Console.WriteLine ("Hello World!");
}
}

使用 csc 编译器生成程序:

1
csc hello.cs

上面的命令将创建一个名为 hello.exe 的可执行文件。

使用以下命令运行程序:

1
mono hello.exe

输出应如下所示:

1
Hello, World

如果您只想通过输入程序名称来执行该程序,则需要设置一个可执行标志:

1
chmod +x hello.exe

现在,您可以通过键入以下内容运行 hello.exe 文件:

1
./hello.exe

结论

可从官方 Mono 软件包仓库中安装最新的稳定 Mono 发行包。

如何在 CentOS 8 安装 Memcached

Memcached 是一个免费的开源高性能内存中键值数据存储。通常,它用作缓存系统,通过从数据库调用结果中缓存各种对象来加速应用程序。

本文显示了如何在 CentOS 8 上安装和配置 Memcached。

在 CentOS 上安装 Memcached

Memcached 软件包包含在默认的 CentOS 8 仓库中。安装非常简单,以 root 或具有 sudo 特权的用户身份输入以下命令:

1
sudo dnf install memcached libmemcached

libmemcached 软件包提供了一些用于管理 Memcached 服务器的命令行工具。

安装完成后,通过键入以下内容启用并启动 Memcached 服务:

1
sudo systemctl enable memcached --now

要验证 memcached 是否正在运行,请键入:

1
sudo systemctl status memcached

输出应如下所示:

1
2
3
4
● memcached.service - memcached daemon
Loaded: loaded (/usr/lib/systemd/system/memcached.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-04-13 20:12:52 UTC; 2s ago
...

就是这样而已,您已经在 CentOS 8 服务器上安装了 Memcached,就可以开始使用它了。

配置 Memcached

可以在 /etc/sysconfig/memcached 文件中配置 Memcached 选项。默认情况下,Memcached 设置为仅在本地主机上侦听。

如果连接到服务器的客户端也正在同一主机上运行,​​则不应进行任何更改。

远程访问

如果将连接到 Memcached 的应用程序托管在远程服务器上,则需要配置防火墙并仅允许从客户端 IP 地址访问 Memcached 端口 11211

如果配置不当,则会被人用 Memcached 执行分布式拒绝服务(DDoS)攻击。

以下示例假定您要通过专用网络连接到 Memcached 服务器。Memcached 服务器的 IP 为 192.168.100.20,客户端的 IP 地址为 192.168.100.30

第一步是编辑 Memcached 配置,并将服务设置为在服务器的专用网络接口上进行侦听:

打开 memcached 配置文件:

1
sudo nano /etc/sysconfig/memcached

OPTIONS 参数中,添加服务器 IP 地址 -l 192.168.100.20。这指示 Memcached 仅绑定到指定的接口。

1
2
3
/etc/sysconfig/memcached

OPTIONS="-l 192.168.100.20"

保存文件并重新启动 Memcached 服务,以使更改生效:

1
sudo systemctl restart memcached

配置服务后,下一步是在防火墙中打开内存缓存端口。

CentOS 附带防火墙配置工具 FirewallD。下面的命令将创建一个名为 memcached 的新区域,打开端口 11211,并仅允许从客户端 IP 地址进行访问。

1
2
3
4
5
sudo firewall-cmd --new-zone=memcached --permanent
sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent
sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent
sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
sudo firewall-cmd --reload

连接到 Memcached

要连接到 Memcached 服务器,您需要使用特定于语言的客户端。

PHP

要将 Memcached 用作 WordPress,Drupal 或 Magento 等 PHP 应用程序的缓存数据库,您需要安装 php-pecl-memcached 扩展名:

1
sudo apt install php-pecl-memcache

Python

有几个 Python 库可与 memcached 进行交互。您可以使用 pip 安装首选库:

1
pip install pymemcache
1
pip install python-memcached

结论

我们已经向您展示了如何在 CentOS 8 上安装 Memcached。有关此主题的更多信息,请查阅 Memcached Wiki