文章目录
- 应用场景
- 拉取Nginx镜像
- 部署脚本
应用场景
容器版nginx默认安装后需要把相关配置文件映射到宿主机进行配置更改,太麻烦,写个脚本自动映射出来方便些,包括包括映射nginx.conf配置文件、default.conf配置文件、放置网页或数据目录的html文件夹、日志文件夹。
拉取Nginx镜像
docker pull nginx
部署脚本
- 当前目录新建
nginx.sh
文件,填入下面的脚本内容,赋予执行权限chmod +x nginx.sh
,会在当前目录新建nginx_conf_site文件夹,配置文件及网站文件夹会映射到该文件夹。 - 如果不是最新版的nginx,nginx_install()函数docker运行脚本里加上nginx的版本号。
#!/bin/bash
# 获取脚本当前目录
current_dir=$(pwd)
# 定义文件夹名称,用来存储配置文件、日志、以及需要发布的文件或网站。
nginx_dir=nginx_conf_site# 初始化文件夹,$1为函数传的第一个参数。用法initial_dir() $nginx_dir
initial_dir(){echo -e "\033[31m 将在当前目录新建$1目录用于存储nginx配置文件和数据! \033[37m"mkdir -p ./$1/conf/conf.d/mkdir -p ./$1/conf/log/mkdir -p ./$1/nginx_www
}# 写nginx.conf默认内容,来自容器的该文件/etc/nginx/nginx.conf。S1参数为$nginx_dir目录,即当前脚本所在目录下新建的用于存储nginx配置文件和数据的目录。函数用法write_nginx_conf $nginx_dir
write_nginx_conf(){
cat > ./$1/conf/nginx.conf <<EOFuser nginx;worker_processes auto;error_log /var/log/nginx/error.log notice;pid /var/run/nginx.pid;events {worker_connections 1024;}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;}
EOF
}# 写default.conf默认内容,来自容器的该文件/etc/nginx/conf.d/default.conf。$1为脚本相同目录新建的文件$nginx_dir变量值。用法write_nginx_default() $nginx_dir
write_nginx_default(){
cat > ./$1/conf/conf.d/default.conf <<EOFserver {listen 80;listen [::]:80;server_name localhost;#access_log /var/log/nginx/host.access.log main;location / {root /usr/share/nginx/html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}
EOF
}# 安装nginx。函数用法nginx_install() $current_dir $nginx_dir
nginx_install(){# -v 映射的目录组装,$1为传参引用当前脚本所在目录$current_dir,$2为创建的用于存储Nginx配置文件和数据的目录$nginx_dirconf_d=$1/$2/conf/conf.d/conf_f=$1/$2/conf/nginx.confconf_log=$1/$2/conf/log/www=$1/$2/nginx_www/# 运行docker容器docker run -d \--restart=always \--privileged=true \-p 80:80 \--name some-nginx \-v $conf_d:/etc/nginx/conf.d/ \-v $conf_f:/etc/nginx/nginx.conf \-v $conf_log:/var/log/nginx/ \-v $www:/usr/share/nginx/html/ \nginx
}# 主函数,$1代表引用的第一个传参,用法main $nginx_dir
main(){if test -e ./$1/conf/nginx.conf;thenecho 'nginx.conf文件已存在,请确保不存在同名的nginx容器,然后输入对应的数字选项进行安装。'echo '1.使用已有的nginx.conf配置文件进行安装。'echo '2.重新初始化nginx.conf配置文件进行安装。'echo '3.输入其他任意值退出安装。'read mynumberif [ "$mynumber" == "1" ]; thenecho "安装开始..."nginx_install $current_dir $nginx_direlif [ "$mynumber" == "2" ]; thenecho "初始化nginx.conf,开始安装..."write_nginx_conf $nginx_dirwrite_nginx_default $nginx_dirnginx_install $current_dir $nginx_direlseecho "退出!"fielseecho '开始安装...'initial_dir $nginx_dirwrite_nginx_conf $nginx_dirwrite_nginx_default $nginx_dirnginx_install $current_dir $nginx_dir echo -e "\033[31m Done! \033[37m"fi
}main $nginx_dir