Ubuntu 18.04 服务器初始化部署记录

新买了服务器,第一件事就是初始化配置。以下是我在 Ubuntu 18.04 上搭建环境的实际步骤,包括踩过的坑。

确认系统版本

1
lsb_release -a

输出:

1
2
3
4
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic

顺便看看资源配置:

1
2
3
4
lscpu        # CPU
free -h # 内存
df -h # 磁盘
uptime # 负载

安装 Nginx

1
2
3
sudo apt-get update
sudo apt-get install nginx -y
nginx -v # 查看版本

基本操作:

1
2
3
4
5
sudo service nginx start    # 启动
sudo service nginx stop # 停止
sudo service nginx restart # 重启
sudo service nginx reload # 重载配置(不中断)
sudo systemctl enable nginx # 开机自启

验证是否成功:

1
curl http://localhost

看到欢迎页面说明装好了。

安装 MongoDB

Ubuntu 18.04 直接装:

1
2
sudo apt-get install mongodb -y
mongo --version

管理命令:

1
2
3
4
sudo service mongodb start
sudo service mongodb stop
sudo service mongodb restart
sudo systemctl status mongodb

迁移数据目录(重要)

MongoDB 默认数据在 /var/lib/mongodb,系统盘一般不大,建议迁到数据盘。

创建新目录:

1
2
3
4
sudo mkdir -p /data/db/mongodb
sudo mkdir -p /data/log/mongodb
sudo touch /data/log/mongodb/mongodb.log
sudo chmod 777 /data/log/mongodb/mongodb.log

停止服务,迁移数据:

1
2
3
sudo service mongodb stop
sudo cp -r /var/lib/mongodb/* /data/db/mongodb/
sudo chown -R mongodb:mongodb /data/db/mongodb

关键:删掉 diagnostic.data 目录

1
2
3
cd /data/db/mongodb/
sudo rm -rf diagnostic.data/
sudo rm -f *.lock

不删这个目录,重启后会触发修复,耗时很长。

修改配置:

1
sudo vim /etc/mongodb.conf

改这几项:

1
2
3
4
5
dbpath=/data/db/mongodb
logpath=/data/log/mongodb/mongodb.log
logappend=true
bind_ip = 127.0.0.1
port = 27017

启动验证:

1
2
3
sudo service mongodb start
tail -n 500 /data/log/mongodb/mongodb.log
mongo

启用认证

配置文件里加上:

1
auth = true

创建管理员:

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

安装 Redis

1
sudo apt-get install redis-server -y

管理:

1
2
3
4
redis-server              # 前台启动
sudo service redis-server start
sudo service redis-server stop
sudo systemctl enable redis-server

测试:

1
2
3
4
5
6
7
redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set test_key "hello"
OK
127.0.0.1:6379> get test_key
"hello"

Redis 安全配置

1
sudo vim /etc/redis/redis.conf

修改:

1
2
3
4
5
6
7
8
9
10
11
bind 127.0.0.1                    # 只绑本地
requirepass your_strong_password # 设密码

# 禁用危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG "CONFIG_6f4a8b2c"

# 内存限制
maxmemory 256mb
maxmemory-policy allkeys-lru

重启生效:

1
sudo service redis-server restart

配置防火墙 UFW

1
2
3
sudo apt-get install ufw -y
sudo ufw enable
sudo ufw status

配置规则:

1
2
3
4
5
6
7
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp

系统优化

文件描述符限制

1
sudo vim /etc/security/limits.conf

添加:

1
2
3
4
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

内核参数优化

1
sudo vim /etc/sysctl.conf

添加:

1
2
3
4
5
6
7
8
9
10
# TCP 优化
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200

# 内存优化
vm.swappiness = 10
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10

生效:

1
sudo sysctl -p

时区设置

1
2
sudo timedatectl set-timezone Asia/Shanghai
timedatectl status

监控和日志

安装 htop

1
2
sudo apt-get install htop -y
htop

查看各类日志

1
2
3
4
5
journalctl -xe                                    # 系统日志
sudo tail -f /var/log/nginx/access.log # Nginx 访问
sudo tail -f /var/log/nginx/error.log # Nginx 错误
sudo tail -f /data/log/mongodb/mongodb.log # MongoDB
sudo tail -f /var/log/redis/redis-server.log # Redis

自动更新

1
2
sudo apt-get install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

MongoDB 备份脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
# backup_mongodb.sh

DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/mongodb"
DB_NAME="your_database"

mkdir -p $BACKUP_DIR
mongodump --db $DB_NAME --out $BACKUP_DIR/$DATE

cd $BACKUP_DIR
tar -czf $DATE.tar.gz $DATE
rm -rf $DATE

# 保留7天
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete

加入定时任务:

1
0 2 * * * /path/to/backup_mongodb.sh

常见问题排查

服务起不来时:

1
2
3
sudo journalctl -u mongodb -n 50    # 看详细错误
ls -la /data/db/mongodb/ # 检查权限
sudo netstat -tlnp | grep 27017 # 检查端口占用

连接问题:

1
2
3
mongo --host 127.0.0.1 --port 27017 # 测试本地连接
sudo ufw status # 检查防火墙
netstat -plntu | grep 27017 # 看监听地址

至此,一个基础的 Ubuntu 18.04 服务器环境就搭建完成了,包括 Nginx、MongoDB、Redis,还有基本的安全配置和备份策略。