Ubuntu 24.04 LTS 安装 nginx
Ubuntu 24.04 LTS 安装 nginx
- 安装 Docker(若未安装):
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # 非root用户添加docker权限(需重启生效)
##换源 并且配置Docker资源限制(避免占用过多内存)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors" : ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug": true,
"experimental": false
"default-shm-size": "256m", # 共享内存限制
"default-ulimits": {
"memlock": { "hard": -1, "soft": -1 }
}
}
EOF
sudo systemctl restart docker
2.创建deploy_nginx.sh脚本
#创建脚本
cat > deploy_nginx.sh << EOF
#!/bin/bash
set -e # 脚本出错时立即退出
# -------------------------- 配置参数(可根据需求修改) --------------------------
NGINX_BASE_DIR="/home/nginx" # 宿主机部署根目录
TEMP_CONTAINER_NAME="nginx-temp" # 临时容器名称
NGINX_IMAGE="registry-dockerhub.xiaoxiao.space/library/nginx:mainline-alpine3.22" # 镜像地址
CONTAINER_NAME="nginx" # 正式容器名称
COMPOSE_FILE="nginx.yaml" # docker-compose 文件名
# ------------------------------------------------------------------------------
# 检查是否首次部署(判断核心配置文件是否存在)
is_first_deploy() {
# 若 conf 目录或 docker-compose 文件不存在,视为首次部署
if [ ! -d "${NGINX_BASE_DIR}/conf" ] || [ ! -f "${NGINX_BASE_DIR}/${COMPOSE_FILE}" ]; then
return 0 # 首次部署
else
return 1 # 非首次部署
fi
}
# 1. 初始化操作(仅首次部署执行)
if is_first_deploy; then
echo "=== 1. 初始化宿主机目录 ==="
mkdir -p ${NGINX_BASE_DIR}/{conf,html,logs}
chmod -R 755 ${NGINX_BASE_DIR}
echo "宿主机目录创建完成:${NGINX_BASE_DIR}"
echo -e "\n=== 2. 启动临时容器 ==="
if docker ps -a --format '{{.Names}}' | grep -q "^${TEMP_CONTAINER_NAME}$"; then
docker rm -f ${TEMP_CONTAINER_NAME} >/dev/null
fi
docker run -d --name ${TEMP_CONTAINER_NAME} ${NGINX_IMAGE}
echo "临时容器 ${TEMP_CONTAINER_NAME} 启动成功"
echo -e "\n=== 3. 复制配置文件到宿主机 ==="
docker exec ${TEMP_CONTAINER_NAME} tar -cC /etc/nginx . | tar -xC ${NGINX_BASE_DIR}/conf/
docker cp ${TEMP_CONTAINER_NAME}:/usr/share/nginx/html ${NGINX_BASE_DIR}/
docker cp ${TEMP_CONTAINER_NAME}:/var/log/nginx ${NGINX_BASE_DIR}/
echo "配置文件复制完成"
echo -e "\n=== 4. 清理临时容器 ==="
docker rm -f ${TEMP_CONTAINER_NAME} >/dev/null
echo "临时容器 ${TEMP_CONTAINER_NAME} 已删除"
echo -e "\n=== 5. 生成 docker-compose 配置 ==="
cat > ${NGINX_BASE_DIR}/${COMPOSE_FILE} << EOF
services:
nginx:
image: ${NGINX_IMAGE}
container_name: ${CONTAINER_NAME} # 强制指定容器名
restart: always
ports: # 改用端口映射,避免 host 模式冲突
- "80:80"
volumes:
- ./conf:/etc/nginx:rw
- ./html:/usr/share/nginx/html:rw
- ./logs:/var/log/nginx:rw
env_file:
- env
EOF
echo "docker-compose 配置生成:${NGINX_BASE_DIR}/${COMPOSE_FILE}"
echo -e "\n=== 6. 创建环境变量文件 ==="
cat > ${NGINX_BASE_DIR}/env << EOF
TZ=Asia/Shanghai
EOF
echo "env 文件创建完成:${NGINX_BASE_DIR}/env"
else
echo "=== 1. 配置文件已存在,跳过初始化 ==="
fi
# 7. 清理旧容器(无论是否首次部署,均先删除旧容器)
echo -e "\n=== 7. 清理旧容器 ==="
# 进入部署目录
cd ${NGINX_BASE_DIR}
# 停止并删除所有相关容器(包括可能的残留容器)
if docker-compose -f ${COMPOSE_FILE} ps -q >/dev/null; then
docker-compose -f ${COMPOSE_FILE} down -v # -v 清理关联卷(避免配置冲突)
fi
# 额外检查是否有同名残留容器(强制删除)
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
docker rm -f ${CONTAINER_NAME} >/dev/null
fi
echo "旧容器清理完成"
# 8. 启动新容器
echo -e "\n=== 8. 启动正式容器 ==="
docker-compose -f ${COMPOSE_FILE} up -d
echo "正式容器 ${CONTAINER_NAME} 启动中..."
# 9. 验证部署结果
echo -e "\n=== 9. 验证部署 ==="
if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
echo "✅ Nginx 部署成功!容器名称:${CONTAINER_NAME}"
echo "访问测试:curl http://localhost"
echo "配置文件路径:${NGINX_BASE_DIR}/conf"
else
echo "❌ Nginx 部署失败,请查看日志:docker logs ${CONTAINER_NAME}"
exit 1
fi
EOF
#赋予权限
chmod +x deploy_nginx.sh
#启动
sudo ./deploy_nginx.sh

浙公网安备 33010602011771号