五指山市网站建设_网站建设公司_React_seo优化
2026/1/20 8:46:45 网站建设 项目流程

这次部署测试,自己找的是一台腾讯云服务器,几十块一年,信息如下:

image

 

.1.部署准备-

删除所有容器-

 

image

 

删除所有docker镜像-

 

image

 

卸载原有docker版本-

 

 

 

sudo systemctl stop docker

 

sudo systemctl stop docker.socket

 

 

 

sudo yum remove docker-ce docker-ce-cli containerd.io

 

 

 

sudo rm -rf /var/lib/docker

 

sudo rm -rf /var/lib/containerd

image

 

.2.安装依赖组件,配置 docker 官方 yum 源

# 安装依赖

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 配置docker官方yum源(稳定版)

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 

sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

 

查看docker版本和docker compose 版本

image

 

.4.创建个人登陆账号-

登陆root账户,创建运维用户和部署账户。

 

# 创建部署账户(用于运行应用)

sudo useradd -u 10086 -m -s /bin/bash deploy

 

设部署账户空密码:root 下执行 passwd -d deploy

先备份-

 

# 创建运维账户(用于系统管理)

sudo useradd -u 10087 -m -s /bin/bash dengyilang

注意:可以指定UID和GID,避免UID太小,在容器内创建新用户,运行时出现UID不匹配的情况。

sudo passwd dengyilang

密码:xxxxxx

 

image

 

 

.5.添加必要权限

# 格式:用户名  主机=(可切换的用户)  可执行的命令列表

 

# 为部署账户添加sudo权限(仅限必要操作)

echo "deploy ALL=(ALL) NOPASSWD: /usr/bin/docker compose *, /usr/bin/systemctl restart docker" | sudo tee /etc/sudoers.d/deploy

 

echo "dengyilang ALL=(ALL) NOPASSWD: /usr/bin/systemctl *, /usr/bin/docker *, /usr/bin/yum *, /usr/bin/df, /usr/bin/ps" | sudo tee /etc/sudoers.d/dengyilang

 

查看编辑结果-

cat /etc/sudoers.d/deploy

cat /etc/sudoers.d/dengyilang

 

image

 

 

 

设置dengyilang用户可以切换到deploy用户。

 

dengyilang ALL=(deploy)ALL

image

 

.5.将运维账号建议添加到 docker 组

# 将运维账户添加到部署组(便于访问日志)

sudo usermod -aG deploy dengyilang

 

验证组是否添加成功

groups deploy

 

groups dengyilang

image

 

# 添加 deploy 用户到 docker 组

sudo usermod -aG docker deploy

 

设计原因:

部署账户:专门用于运行应用,UID/GID=10086(避免与系统用户冲突)

运维账户:用于系统管理,UID/GID=10087(与部署账户不同,避免权限过度集中)

sudo权限:严格限制,仅允许执行必要的命令

组权限:将运维账户加入部署组,便于查看日志但不拥有应用运行权限

 

.6.使用root用户创建项目目录

 

# 创建应用基础目录

sudo mkdir -p /opt/u01/exam/{nginx,java,mysql,redis}

sudo chown -R deploy:deploy /opt/u01/exam

sudo chmod -R 755 /opt/u01/exam

 

# 为Nginx设置专用目录(使用合理命名)

先创建nginx这个组

sudo groupadd -g 101 nginx

 

sudo mkdir -p /opt/u01/exam/nginx/{html,logs,sslkey,conf.d}

sudo chown -R deploy:nginx /opt/u01/exam/nginx

sudo chmod -R 775 /opt/u01/exam/nginx/logs

 

 

 

image

 

# 为Java应用设置专用目录

sudo mkdir -p /opt/u01/exam/java/{logs,data,conf}

sudo chown -R deploy:deploy /opt/u01/exam/java

sudo chmod -R 755 /opt/u01/exam/java/logs

 

# 为MySQL设置专用目录

# 先创建mysql这个组

sudo groupadd -g 9998 mysql

 

sudo mkdir -p /opt/u01/exam/mysql/{data,logs,conf,init-scripts}

sudo chown -R deploy:mysql /opt/u01/exam/mysql

sudo chmod -R 755 /opt/u01/exam/mysql/logs

image

 

# 为Redis设置专用目录

sudo groupadd -g 9999 redis

sudo mkdir -p /opt/u01/exam/redis/{data,logs}

sudo chown -R deploy:redis /opt/u01/exam/redis

sudo chmod -R 755 /opt/u01/exam/redis/logs

image

 

 

.7.使用运维账户远程登陆,上传文件-

 

遇到问题一:使用dengyilang登陆后,不能上传文件-

image

 

解决办法,需要先给deploy账户设置空密码,

root 下执行 passwd -d deploy

并且设置需要使用dengyilang用户切换到deploy账户即可。

dengyilang ALL=(deploy)ALL

image

 

说明:先使用运维账户将所有部署文件上传到/tmp目录中,

然后在切换到depoly用户,将部署文件复制到指定目录。

 

启动容器报错-

docker compose up -d --build

image

 

将部署账户添加到docker组即可。

# 添加 deploy 用户到 docker 组

sudo usermod -aG docker deploy

 

# 重新登录或重启 shell 生效

 su - deploy

 

image

 

一次启动成功-

 

image

 

访问成功-

 

image

 

其他问题,访问网站时,菜单出现乱码。

排查后发现返回的菜单数据是乱码,初步判断是数据库执行时,插入数据时出现乱码。

 

image

 

 

 

 

由于执行脚本是在docker容器启动mysql的时候执行的,自己猜测大概率是在插入数据的时候出现异常。

去查询数据库时,发现保存的中文数据出现问题-

 

image

 

解决办法-在数据库执行脚本前面添加如下代码即可-

image

 

再次访问,问题解决-

 

image

 感谢千问AI 全程的辅助与支持!IT相关的技术问题,还是千问更专业!点三个赞

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询