Linux服务器环境搭建

安装Docker

查看CPU架构

1
uname -m

下载

ARM架构CPU
1
wget https://download.docker.com/linux/static/stable/aarch64/docker-20.10.7.tgz
x86_64架构CPU
1
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.7.tgz

解压

1
tar -zxvf docker-20.10.7.tgz

移动

1
mv docker/* /usr/bin/

添加系统配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
vi /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker应用容器引擎
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

编辑代理文件

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
vim /etc/docker/daemon.json

{
"builder": {
"gc": {
"defaultKeepStorage": "64GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baiduce.com",
"https://cv2w2bcm.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com",
"https://docker.211678.top",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://do.nark.eu.org",
"https://dockerpull.com",
"https://dockerproxy.cn",
"https://docker.awsl9527.cn",
"https://hub.docker.com"
]
}

重新加载和重启docker

1
2
systemctl daemon-reload
systemctl restart docker

验证docker安装情况

1
docker info

安装docker-compose

下载docker-compose

1
wget https://github.com/docker/compose/releases/download/v2.40.3/docker-compose-linux-x86_64

安装docker-compse

1
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

授权

1
sudo chmod +x /usr/local/bin/docker-compose

验证安装情况

1
docker-compose --version

ES预备

构建临时容器

1
docker run --name elasticsearch-7.6.2 -p 9200:9200 -e "discovery.type=single-node"  -d elasticsearch:7.6.2

容器ID:920xxxxxxxxxxxx

ES容器文件拷贝, 编写shell脚本

1
2
3
4
5
docker cp 920:/usr/share/elasticsearch/bin/ /opt/application/docker/elasticsearch-7.6.2/
docker cp 920:/usr/share/elasticsearch/config/ /opt/application/docker/elasticsearch-7.6.2/
docker cp 920:/usr/share/elasticsearch/data/ /opt/application/docker/elasticsearch-7.6.2/
docker cp 920:/usr/share/elasticsearch/logs/ /opt/application/docker/elasticsearch-7.6.2/
docker cp 920:/usr/share/elasticsearch/plugins/ /opt/application/docker/elasticsearch-7.6.2/

停止并删除临时容器

1
docker stop 920 && docker rm 920

安装ES-Kibana

编排容器,编辑【es-kibana-7.6.2.yml】文件

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
version: '3.9'
services:
elasticsearch:
image: 'elasticsearch:7.6.2'
restart: always
volumes:
- '/opt/application/docker/elasticsearch-7.6.2/logs/:/usr/share/elasticsearch/logs/'
- '/opt/application/docker/elasticsearch-7.6.2/plugins/:/usr/share/elasticsearch/plugins/'
- '/opt/application/docker/elasticsearch-7.6.2/data/:/usr/share/elasticsearch/data/'
- '/opt/application/docker/elasticsearch-7.6.2/config/:/usr/share/elasticsearch/config/'
- '/opt/application/docker/elasticsearch-7.6.2/analysis/:/usr/share/elasticsearch/analysis/'
environment:
- discovery.type=single-node
ports:
- '9200:9200'
- '9300:9300'
container_name: elasticsearch-7.6.2
networks:
- es-kibana-762

kibana:
image: kibana:7.6.2
restart: always
volumes:
- '/opt/application/docker/kibana-7.6.2/config/kibana.yml:/usr/share/kibana/config/kibana.yml'
ports:
- '5601:5601'
container_name: kibana-7.6.2
networks:
- es-kibana-762

networks:
es-kibana-762:
driver: bridge

docker-compose执行yaml

1
docker-compose -p elasticsearch_762 -f es-kibana-7.6.2.yml up -d

ES配置

配置文件修改
1
2
3
4
5
6
7
vim /opt/application/docker/elasticsearch-7.6.2/config/elasticsearch.yml

cluster.name: "docker-cluster"
network.host: 0.0.0.0
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
密码
1
2
3
4
5
docekr restart 920
docker exec -it 920 bash
elasticsearch-setup-passwords interactive

输入密码

安装milvus

编排容器,编辑【milvus-standalone-docker-compose.yml】文件

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
64
65
version: '3.5'

services:
etcd:
container_name: milvus-etcd
image: quay.io/coreos/etcd:v3.5.5
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_AUTO_COMPACTION_RETENTION=1000
- ETCD_QUOTA_BACKEND_BYTES=4294967296
- ETCD_SNAPSHOT_COUNT=50000
volumes:
- /opt/application/docker/milvus/etcd:/etcd
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 30s
timeout: 20s
retries: 3

minio:
container_name: milvus-minio
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
environment:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
ports:
- "9001:9001"
- "9000:9000"
volumes:
- /opt/application/docker/milvus/minio:/minio_data
command: minio server /minio_data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3

standalone:
container_name: milvus-standalone
image: milvusdb/milvus:v2.4.11
command: ["milvus", "run", "standalone"]
security_opt:
- seccomp:unconfined
environment:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
volumes:
- /opt/application/docker/milvus/milvus:/var/lib/milvus
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
interval: 30s
start_period: 90s
timeout: 20s
retries: 3
ports:
- "19530:19530"
- "9091:9091"
depends_on:
- "etcd"
- "minio"

networks:
default:
name: milvus

docker-compose执行yaml

1
docker-compose -p milvus -f milvus-standalone-docker-compose.yml up -d

安装Redis

1
docker run --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --volume=/opt/application/docker/redis/data/:/data/ --volume=/opt/application/docker/redis/logs/:/logs --volume=/opt/application/docker/redis/conf/redis.conf:/etc/redis/redis.conf --volume=/data --network=bridge --privileged --workdir=/data -p 6379:6379 --restart=always --runtime=runc -d redis:8.0

安装JDK

检查原系统是否自带的有jdk

没出现jdk版本号则证明没有安装
1
2
javac -version
java -version

下载

1
wget http://www.yuan67.top/resources/jdk-8u291-linux-x64.tar.gz

解压

1
tar -zxvf jdk-8u291-linux-x64.tar.gz

移动到指定位置

1
mv ./jdk1.8.0_291 /usr/local

配置全局变量

1
vim /etc/profile

在profile文件最后加上如下内容并保存

1
2
3
4
#java environment
export JAVA_HOME=/usr/local/jdk1.8.0_291 #其中这行,需要改成你安装的实际路径,其它不用改。
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

刷新全局变量配置,使其生效

1
source /etc/profile

检查是否安装成功

1
2
javac -version
java -version

安装MySQL

下载

下载
1
wget http://www.yuan67.top/resources/mysql-8.0.24.tar.xz
解压
1
tar -xvf ./mysql-8.0.24.tar.xz
更改文件夹名称
1
mv ./mysql-8.0.24-linux-glibc2.17-x86_64-minimal mysql-8.0.24-3306
更改文件夹名称
1
mv ./mysql-8.0.24-3306 /usr/local/

创建配置文件

my.cnf
1
vim /usr/local/mysql-8.0.24-3306/my.cnf

文件内容

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
[client]
#socket=/usr/local/mysql-8.0.24-3306/temp/mysql.sock

[mysqld]
#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id=1

#服务端口号 默认3306
port=3306

#mysql安装根目录(default /usr)
basedir=/usr/local/mysql-8.0.24-3306

#mysql数据文件所在位置
datadir=/usr/local/mysql-8.0.24-3306/data

#pid
pid-file=/usr/local/mysql-8.0.24-3306/temp/mysqld.pid

#设置socke文件所在目录
#socket=/usr/local/mysql-8.0.24-3306/temp/mysql.sock

#设置临时目录
tmpdir=/usr/local/mysql-8.0.24-3306/temp

# 用户
user=mysql

# 允许访问的IP网段
# bind-address=0.0.0.0

# 跳过密码登录
#skip-grant-tables

#主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
#skip-external-locking

#只能用IP地址检查客户端的登录,不用主机名
#skip_name_resolve=1

#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
#transaction_isolation=READ-COMMITTED

#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server=utf8mb4

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci

#设置client连接mysql时的字符集,防止乱码
#init_connect='SET NAMES utf8mb4'

#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names=1

#最大连接数
max_connections=400

#最大错误连接数
max_connect_errors=1000

#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
explicit_defaults_for_timestamp=true

#SQL数据包发送的大小,如果有BLOB对象建议修改成1G
max_allowed_packet=128M

#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout=1800
wait_timeout=1800

#内部内存临时表的最大值 ,设置成128M。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size=134217728
max_heap_table_size=134217728

#禁用mysql的缓存查询结果集功能
#后期根据业务情况测试决定是否开启
#大部分情况下关闭下面两项
#query_cache_size = 0
#query_cache_type = 0

#数据库错误日志文件
log-error=/usr/local/mysql-8.0.24-3306/logs/mysqld.log

#慢查询sql日志设置
#slow_query_log=1
slow_query_log_file=/usr/local/mysql-8.0.24-3306/logs/mysqld_slow.log

#检查未使用到索引的sql
log_queries_not_using_indexes=1

#针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
log_throttle_queries_not_using_indexes=5

#作为从库时生效,从库复制中如何有慢sql也将被记录
log_slow_slave_statements=1

#慢查询执行的秒数,必须达到此值可被记录
long_query_time=8

#检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit=100

#mysql binlog日志文件保存的过期时间,过期后自动删除
#expire_logs_days=60
binlog_expire_logs_seconds=604800

创建文件夹

1
mkdir /usr/local/mysql-8.0.24-3306/data && mkdir /usr/local/mysql-8.0.24-3306/temp && mkdir /usr/local/mysql-8.0.24-3306/logs

创建用户组

1
useradd -g mysql mysql

文件夹授权

1
chmod -R 755 /usr/local/mysql-8.0.24-3306 && chmod -R 777 /usr/local/mysql-8.0.24-3306/data && chmod -R 777 /usr/local/mysql-8.0.24-3306/temp && chmod -R 777 /usr/local/mysql-8.0.24-3306/logs

授权用户组

1
chown -R mysql:mysql /usr/local/mysql-8.0.24-3306

初始化MySQL

当前目录
1
/usr/local/mysql-8.0.24-3306/bin/mysqld --defaults-file=/usr/local/mysql-8.0.24-3306/my.cnf --user=mysql --lower_case_table_names=1 --initialize

启动MySQL

当前目录
1
/usr/local/mysql-8.0.24-3306/bin/mysqld_safe --defaults-file=/usr/local/mysql-8.0.24-3306/my.cnf --user=mysql &

查看默认MySQL密码

1
cat /usr/local/mysql-8.0.24-3306/logs/mysqld.log
例如我这个mysql密码就是 #p<>0,tS%zjN
1
A temporary password is generated for root@localhost: #p<>0,tS%zjN

登录MySQL

当前目录
1
/usr/local/mysql-8.0.24-3306/bin/mysql -uroot -P3306 -h localhost -p

此处报错

1
error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

解决方案

1
2
sudo apt update
sudo apt install libncurses5

第一次登录要修改密码

第一次登录要修改密码
1
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword' 

刷新配置

刷新配置
1
FLUSH PRIVILEGES;

配置外部访问

配置外部访问
1
2
use mysql;
update user set host = "%" where user = "root";

设置开机自启

1
sudo vim /etc/systemd/system/mysql.service
1
2
3
4
5
6
7
[Unit]
Description=MySQLServer
After=network.target
[Service]
ExecStart=/usr/local/mysql-8.0.24-3306/bin/mysqld_safe --defaults-file=/usr/local/mysql-8.0.24-3306/my.cnf
[Install]
WantedBy=multi-user.target
1
sudo systemctl enable mysql

安装OpenCV

1
sudo apt install libopencv-dev

安装Nginx

1
2
3
sudo apt update
sudo apt upgrade -y
sudo apt install nginx -y

配置

注释掉下面的配置

1
2
3
4
5
6
7
8
sudo vim /etc/nginx/nginx.conf

http {
charset utf-8; # 添加编码格式
...其他配置...
#include /etc/nginx/sites-enabled/*;
...其他配置...
}

添加配置

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
64
65
66
67
68
69
70
71
72
73
74
75
sudo vim /etc/nginx/conf.d/nq.conf

# 前台
server {
listen 80;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
server_tokens off;
location / { # 前台
root /opt/application/project/reader/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
if (!-e $request_filename) {
rewrite ^/(.*) /index.html last;
break;
}
}

location /viewer { # 阅读器
alias /opt/application/project/viewer/;
index index.html index.htm;
try_files $uri $uri/ /viewer/index.html;
if (!-e $request_filename) {
rewrite ^/(.*) /viewer/index.html last;
break;
}
}

location /files { # 切图文件
alias /opt/data/wh/guji/DeepZoom/deeps/;
}

location /temp { # 临时文件
alias /opt/data/temp;
}

location /prod-api/ { # 后端代理
proxy_pass http://127.0.0.1:8087/;
}

# 错误页
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

# 后台
server {
listen 81;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
server_tokens off;
location / { # 后台
root /opt/application/project/system/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
if (!-e $request_filename) {
rewrite ^/(.*) /index.html last;
break;
}
}

location /prod-api/ { # 后端代理
proxy_pass http://127.0.0.1:8087/;
}

# 错误页
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

启动nginx

1
sudo /usr/sbin/nginx

开启自启

1
sudo systemctl enable docker
1
sudo systemctl enable nginx
1
sudo systemctl enable mysql

开机自启java服务

1
sudo vim /etc/systemd/system/java.service
1
2
3
4
5
6
7
8
9
10
[Unit]
Description=JAVAServer
After=network.target
[Service]
WorkingDirectory=/opt/application/project/java
ExecStart=/opt/application/project/java/start.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
1
sudo systemctl enable java

评论