在 Linux 系统中,我们可以使用 useradd 命令来创建新用户。打开你的终端,键入下面的命令:
sudo useradd -m 新用户名
这里,-m
选项会为新用户在 /home
目录下创建一个新的家目录,而 新用户名 就是你想要创建的新用户的用户名。
接下来,你可能会希望给新用户设置一个密码,你可以使用 passwd 命令:
sudo passwd 新用户名
然后,根据提示输入新密码两次。
在某些基于 Debian 的 Linux 发行版中,你可能会找到一个叫做 adduser 的命令。它实际上是 useradd 的一个友好版本,更方便你进行交互式操作。
sudo adduser 新用户名
执行这个命令后,系统会自动引导你完成创建新用户的过程,包括设置密码、填写用户全名、房间号码、工作电话、家庭电话和其他信息(这些额外信息是可选的,如果不需要,可以直接按回车跳过)。
为了操作顺利需要给用户授权管理员
sudo vim /etc/sudoers
编辑sudoers文件,找到一下内容,
root ALL=(ALL) ALL
在后面加上以下内容
用户名 ALL=(ALL) NOPASSWD:ALL
用户授权了管理员之后可能还有些权限功能不足的地方,一下以docker举例
例:在执行docker命令的时候依旧权限不足
所有查看用户组
cat /etc/group
找到docker所属的用户组
把已有的用户添加到docker用户组
usermod -G {groupname} {username}
添加成功之后就可以使用docker命令了
创建部署所需相关文件夹和文件
mkdir 文件夹名
touch 文件名.文件类型
docker pull nginx:latest
异常:error pulling image configuration: download failed ******
点击处理
docker run --name nginx-test -p 20240:80 -d nginx
将正在运行的nginx中的配置文件复制到本机上
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /home/nginx/
# 将容器中的日志文件夹复制到宿主机
docker cp nginx:/var/log/nginx /home/nginx/logs/
注意:
挂载点文件路径,和上一步配置的要对应上
version: "3"
services:
web:
#定义主机名
container_name: lrnginx
#使用的镜像
image: nginx:latest
#容器的映射端口
ports:
- 20240:80
#定义挂载点
volumes:
- ./html:/usr/share/nginx/html
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./conf.d:/etc/nginx/conf.d
- ./logs:/var/log/nginx
#docker 重启后,容器自启动
restart: always
运行命令
docker-compose up -d
*进入容器内部查看nginx配置文件
docker exec -it nginx-test bash
*查看容器中nginx配置文件
cat /etc/nginx/nginx.conf
docker pull mysql:8.0
docker run --name mysql-test -p 20241:3306 -d mysql:8.0
将正在运行的mysql中的配置文件复制到本机上
# 将容器mysql 文件复制到宿主机
docker cp mysql-test:/etc/mysql /home/lirong/mysql/
容器中mysql文件这样的
├── conf.d
├── my.cnf
└── my.cnf.fallback
将文件复制过来调整一下,调整以后文件夹是这样的
├── conf.d
├── conf
│ └── my.cnf
│ └── my.cnf.fallback
根据个人习惯调整
version: '3'
services:
mysql:
restart: always
privileged: true
image: mysql:8.0
container_name: lrmysql
volumes:
- ./data:/var/lib/mysql
- ./conf.d:/etc/mysql/conf.d
- ./conf/my.cnf:/etc/mysql/my.cnf
- ./logs:/var/log/mysql
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
environment:
MYSQL_ROOT_PASSWORD: "***"
MYSQL_USER: "**"
MYSQL_PASSWORD: "**"
MYSQL_INITDB_SKIP_TZINFO: "Asia/Shanghai"
ports:
- 20241:3306
network_mode: "bridge"
运行命令
docker-compose up -d
在部署过程中遇到服务互顶的情况(服务A启动 服务B挂掉,服务B启动 服务A挂掉)
这种情况请检查容器名,服务名的唯一性.
docker pull redis:6.0
docker run --name redis-test -p 20242:3306 -d redis:6.0
version: '3'
services:
lrredis:
image: redis
container_name: lrredis
hostname: redis
ports:
- 20242:6379
volumes:
- ./redis.conf:/etc/redis/redis.conf
- ./data:/data
- ./logs:/logs
command: redis-server /etc/redis/redis.conf
restart: always
# Redis服务器配置
# 绑定IP地址
#解除本地限制 注释bind 127.0.0.1
#bind 127.0.0.1
# 服务器端口号
port 6379
#配置密码,不要可以删掉
requirepass syf133618
#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no
#当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(自定义)
#pidfile /data/dockerData/redis/run/redis6379.pid
#默认为no,redis持久化,可以改为yes
appendonly yes
#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 60
# 服务器系统默认配置参数影响 Redis 的应用
maxclients 10000
tcp-keepalive 300
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合(分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改)
save 900 1
save 300 10
save 60 10000
# 按需求调整 Redis 线程数
tcp-backlog 511
# 设置数据库数量,这里设置为16个数据库
databases 16
# 启用 AOF, AOF常规配置
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 慢查询阈值
slowlog-log-slower-than 10000
slowlog-max-len 128
# 是否记录系统日志,默认为yes
syslog-enabled yes
#指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice
# 日志输出文件,默认为stdout,也可以指定文件路径
logfile stdout
# 日志文件
#logfile /var/log/redis/redis-server.log
# 系统内存调优参数
# 按需求设置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
docker pull emqx:latest
docker run -dit --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx:latest
拷贝配置文件到宿主机,这样修改宿主机的配置文件之后只需要重启容器,配置文件就会生效。左边是容器的路径,右边是要映射宿主机路径。
docker cp emqx:/opt/emqx/etc /home/lirong/emqx/etc
version: '3'
services:
lrredis:
image: redis
container_name: lrredis
hostname: redis
ports:
- 20242:6379
volumes:
- ./redis.conf:/etc/redis/redis.conf
- ./data:/data
- ./logs:/logs
command: redis-server /etc/redis/redis.conf
restart: always
配置/修改 mysql数据库地址、账号、密码
mysql数据库库表配置
redis 缓存地址、密码
检查项目中所涉及服务的端口占用情况
项目日志输出路径
文件上传到服务器指定位置,启动jar包
nohup java -jar jar包名.jar &
前端调整好配置,打包上传到指定位置。
因为我们nginx是用docker镜像部署的,所以前端资源也要挂载到容器里面去
修改nginx中的dockr-compose.yml将前端资源挂载进容器
server {
# 端口监听
listen 80;
listen [::]:80;
server_name localhost;
# websocket协议升级配置
location /api/campus/websocket {
proxy_pass http://localhost:9016/api/campus/websocket;
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_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 默认后端请求转发
location /api/campus {
proxy_pass http://localhost:9016/api/campus;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
# 默认前端端请求定向
location / {
root /home/admin/vue/campus/platform;
index index.html;
}
# 403
error_page 403 /respon_403.json;
location = /respon_403.json {
default_type application/json;
return 403 '{"code":"403","status":"error","message":"Forbidden"}';
}
# 404
error_page 404 /respon_404.json;
location = /respon_404.json {
default_type application/json;
return 403 '{"code":"404","status":"error","message":"Not Found"}';
}
# 500-504
error_page 500 502 503 504 /respon_500.json;
location = /respon_500.json {
default_type application/json;
return 403 '{"code":"500","status":"error","message":"Server Error"}';
}
}
配置完成后重启nginx,浏览器访问服务器 ip+ 20240(nginx映射出去的端口)
upstream server temporarily disabled while connecting to upstream
连接到上游时,上游服务器暂时被禁用
正常情况下websocket配置nginx.conf代理,协议升级就好。如下:
# websocket协议升级配置
location /api/campus/websocket {
proxy_pass http://localhost:9016/api/campus/websocket;
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_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
2024/09/02 11:20:17 [warn] 24#24: *9 upstream server temporarily disabled while connecting to upstream, client: 114.219.61.179, server: , request: “GET /api/campus/websocket/R81SA42120002 HTTP/1.1”, upstream: “http://127.0.0.1:20243/api/campus/websocket/R81SA42120002”, host: “180.153.118.123”
在nginx访问接口的时候,去做一些权限的校验。只有校验通过才能访问接口,否则就直接返回失败。但是在调用上游接口的时候,一直提示上游服务暂时禁用。但是上游服务可以保证一定运行着,并且可以访问通。所以通过查阅前人总结发现。原来每个容器内的本地主机(如Nginx容器)与容器外部的本地主机不同
。
将proxy_pass localhost:port”中的本地主机更改为“ip:port”(这是我计算机中的IPv4)即可解决这个问题。
即:将上面配置中的
proxy_pass http://localhost:9016/api/campus/websocket;
改成(拿我服务器ip为192.168.0.3 举例)
proxy_pass http://192.168.0.3:9016/api/campus/websocket;