因为CentOS在2021年宣布正式停止维护,缩短生命周期,被迫重新将Linux服务器运行平台以Ubuntu系统重装,本文章记录主要的建站套件安装、配置及维护方法

关于网站域名购买及配置本文不再赘述,已在CloudFlare文章中进行说明,关于域名的购买与备案不在本文探讨范围内

因此本文的前提条件为已经购买或拥有一台带有独立公网IP地址的服务器及一个已经完成工信部备案的域名

Nginx

Apache HTTP服务器相较于Nginx更麻烦,且配置繁琐,本文建议使用Nginx作为网站架设服务器

安装Nginx

Nginx 在默认的 Ubuntu 源仓库中可用,使用以下命令进行安装:

1
2
sudo apt update
sudo apt install nginx

安装完成后输入命令测试运行状态

1
sudo systemctl status nginx

出现绿色点则说明运行正常

status nginx
status nginx

配置防火墙

防火墙分为服务器上的防火墙与云服务器提供商的防火墙

云服务器的防火墙直接在控制台配置端口对所有IP开放即可

云服务器防火墙
云服务器防火墙

Ubuntu系统自带ufw防火墙,配置允许Nginx即可,并验证目前防火墙状态

1
2
3
sudo ufw enable
sudo ufw allow 'Nginx Full'
sudo ufw status
UFW
UFW

如需要允许/删除某个端口,允许以下命令:

1
2
sudo ufw allow 3050/tcp  
sudo ufw delete allow 3050/tcp

除了配置防火墙防止暴露过多的端口,但仍然会被别有用心之人暴力扫描开放的端口并以穷举法暴力登录,Fail2Ban 能够自动化监视暴力攻击和密码猜测者的攻击,对于在短时间内反复未能通过身份验证,则自动的禁止进行尝试。Fail2Ban 可使用以下命令进行安装并测试运行状态:

1
2
sudo apt-get install fail2ban
sudo systemctl status fail2ban.service
fail2ban
fail2ban

配置Nginx并测试

切换到Nginx配置目录并查看nginx.conf配置文件

1
2
cd /etc/nginx
sudo cat nginx.conf

第一行说明了nginx的权限属于www-data用户,需要另行配置或直接修改为主用户账户即可

11-63行为对HTTP的解析配置,默认开启SSL

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
worker_connections 768;
# multi_accept on;
}

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;

##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip Settings
##

gzip on;

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

对于网站服务,可直接使用如下的配置,listen需要设置为 443 ssl,server_name为需要解析的域名(已在CloudFlare完成配置),ssl_certificate与ssl_certificate_key为TLS密匙地址,location /模块中的root为网站储存路径(需确保nginx所属用户组可以访问)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {

listen 443 ssl;
server_name XXXX.com;
root /home/ubuntu/WorkSpace/;
ssl_certificate /etc/nginx/cert/XXXX.com.pem;
ssl_certificate_key /etc/nginx/cert/XXXX.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
root /home/ubuntu/XXXXXX;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
}

对于需要使用反向代理的服务,模块基本如上,proxy_pass设置为反向代理的地址即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

server {

listen 443 ssl;
server_name yyy.yyyy.com;
root /home/ubuntu/WorkSpace/visual-kg-history/;
ssl_certificate /etc/nginx/cert/yyyy.com.pem;
ssl_certificate_key /etc/nginx/cert/yyyy.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:1008;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
}
error_page 500 502 503 504 /50x.html;
}

配置完成后保存推出,使用命令确认文件格式及内容准确

1
sudo nginx -t

查看配置是否准确,如出现successful则说明文件配置检查通过

nginx -t
nginx -t

使用命令重启nginx以配置新的设置

1
sudo nginx -s reload

Nginx管理

1
2
3
nginx -s reload #更改配置重启
nginx -s stop #关闭
nginx -t #检查配置文件

不建议使用KILL命令强制停止所有Nginx服务,可能会导致意想不到的错误

对于nginx: [error] invalid PID number “” in “/run/nginx.pid”错误的处理方法:

1
sudo nginx -c /etc/nginx/nginx.conf

MySQL

MySQL同样被集成到了中央仓库中,可使用以下命令直接安装,并检查安装结果

1
2
3
sudo apt update
sudo apt install mysql-server
sudo systemctl status mysql
mysql status
mysql status

通过这张方式安装的MySQL账户与密码为自动生成,需要查看debian.cnf文件

1
sudo cat /etc/mysql/debian.cnf
mysql password
mysql password

服务器端的MySQL通常被设置为默认占有大量内存资源,如果需要削减内存占用量,可以修改mysqld.cnf文件进行修改

1
2
3
4
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

performance_schema = off
table_open_cache = 512

Neo4j

neo4j图数据库可通过以下命令安装并测试:

1
2
3
4
5
6
7
curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key |sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg
echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 4.1" | sudo tee -a /etc/apt/sources.list.d/neo4j.list
sudo apt update
sudo apt install neo4j
sudo systemctl enable neo4j.service
sudo systemctl start neo4j.service
sudo systemctl status neo4j.service
neo4j status
neo4j status

进入neo4j交互式shell,输入默认的账户与密码neo4j后修改密码

1
cypher-shell