Commit ca25eaf3 authored by name's avatar name
Browse files

优化

parent 30899665
......@@ -10,7 +10,7 @@ RUN set -ex \
&& cd /acme_src && ./acme.sh --install --cert-home /acme_cert \
&& apk del git \
&& rm -rf /acme_src /var/cache/apk/* \
&& mkdir -p /etc/nginx/ssl/app
&& mkdir -p /etc/nginx/ssl/
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./default.conf /etc/nginx/conf.d/default.conf
......
......@@ -30,10 +30,10 @@ https://github.com/xiaojun207/docker-nginx
```shell
docker run -d -p 80:80 -p 443:443 -v "/data/web":/data/web \
-v "/data/nginx/nginx/ssl":/etc/nginx/ssl \
-v "/data/nginx/nginx/conf.d":/etc/nginx/conf.d \
-v "/data/nginx/acme_cert":/acme_cert \
-e DOMAINS="example.com www.example.com test.example.com test2.example.com" \
-v "/data/mynginx/nginx/ssl":/etc/nginx/ssl \
-v "/data/mynginx/nginx/conf.d":/etc/nginx/conf.d \
-v "/data/mynginx/acme_cert":/acme_cert \
-e SslDomains="example.com;www.example.com;test.example.com;test2.example.com" \
-e SslServer="zerossl" \
-e mail="youmail@example.com" \
--name nginx xiaojun207/nginx:latest
......@@ -44,18 +44,19 @@ https://github.com/xiaojun207/docker-nginx
* 3、测试部署时,建议使用letsencrypt的测试地址(即参数,-e SslServer="https://acme-staging-v02.api.letsencrypt.org/directory")。
# 使用说明
默认情况下, 使用的是服务器验证方式(非dns方式),所以请确保,需要申请证书的域名可以正常访问nginx容器(正确访问http端口)。
默认情况下, 使用的是服务器验证方式(非dns方式),所以请确保,需要申请证书的域名http端口可以正常访问(本nginx启动的http端口)。
# 参数说明
| 参数 | 是否必填 | 说明 |
|------------|------|----------------------------------------------------------------------------------------------------------------------------------------|
| DOMAINS | 必填 | 域名列表参数是acme用来自动获取ssl,多域名以空格分隔。如果为空或不填,这就是个普通的nginx镜像,哈哈。 |
| mail | 必填 | 你的邮箱,用于获取ssl时配置,有的证书服务商有网页管理端,可以根据邮箱查看相关的证书。如果为空可能会导致注册到证书服务商失败,因此如果参数为空会使用默认邮箱。 |
| SslDomains | 必填 | 需要获取参数ssl的域名列表。多个域名间以英文分号分隔(即:;)。如果为空或不填,这就是个普通的nginx镜像,哈哈。 |
| mail | 必填 | 你的邮箱,用于获取ssl时配置,有的证书服务商有网页管理端,可以根据邮箱查看相关的证书。如果为空可能会导致注册到证书服务商失败,因此如果参数为空会使用默认邮箱。 |
| SslServer | 否 | 证书服务商(名字或地址),默认:zerossl,你还可以使用:letsencrypt,buypass,ssl等等,<br>或者letsencrypt的测试地址:https://acme-staging-v02.api.letsencrypt.org/directory |
| dns | 否 | 域名是否采用dns验证,可选参数为:空格,dns_ali,dns_aws,dns_cf,dns_dp,,。。。<br> 更多参数请查看:https://github.com/acmesh-official/acme.sh/wiki/dnsapi <br>例如1: -e dns=" ", 空格时,请查看控制台日志中的dns记录,并手动为域名添加解析;<br>例如2: -e dns="dns_ali" -e Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" -e Ali_Secret="jlsdflanljkljlfdsaklkjflsa" 使用云厂商api,请添加对应的key、secret等"添加域名解析"授权参数 |
# 证书路径和nginx配置方法
容器启动,会创建一个默认证书,避免nginx启动失败。 证书获取成功后,将会被安装到/etc/nginx/ssl/app/,
容器启动,会创建一个默认证书,避免nginx启动失败。 证书获取成功后,将会被安装到固定路径:/etc/nginx/ssl/
nginx配置方法如下:
```shell
......@@ -72,8 +73,8 @@ nginx配置方法如下:
root /data/web/www;
ssl_stapling off;
ssl_certificate /etc/nginx/ssl/app/cert.pem;
ssl_certificate_key /etc/nginx/ssl/app/key.pem;
ssl_certificate /etc/nginx/ssl/cert.pem; # 证书自动安装的路径
ssl_certificate_key /etc/nginx/ssl/key.pem; # 证书自动安装的路径
# ...
}
......
......@@ -6,8 +6,8 @@ server {
listen 443 ssl;
ssl_stapling off;
ssl_certificate /etc/nginx/ssl/app/cert.pem;
ssl_certificate_key /etc/nginx/ssl/app/key.pem;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
return 403;
}
#!/usr/bin/env bash
# author by xiaojun207
DOMAINS=$(echo "$DOMAINS" | tr -s ' ')
SslServer="$SslServer"
mail="$mail"
export SSL_DIR="/etc/nginx/ssl/app"
export DOMAINS=$(echo "$SslDomains" | tr -s ';')
export SslServer="$SslServer"
export mail="$mail"
export SSL_DIR="/etc/nginx/ssl"
export RELOAD_CMD="nginx -s reload"
if [ -z "$mail" ]; then
echo "[$(date)] Empty env var mail"
echo "[$(date)] Empty env var mail, set mail=\"youmail@example.com\""
mail="youmail@example.com"
fi
if [ -z "$DOMAINS" ]; then
echo "[$(date)] Empty env var DOMAINS"
# exit 1
echo "[$(date)] Empty env var SslDomains"
fi
mkdir -p ${SSL_DIR}/
function CreateDefault() {
if [ -e "${SSL_DIR}/cert.pem" ]; then
# true if the file exists and is not empty
if [ -s "${SSL_DIR}/cert.pem" ]; then
echo "[$(date)] default cert exists in :${SSL_DIR}"
else
echo "[$(date)] create default cert to :${SSL_DIR}"
......@@ -51,6 +51,10 @@ function StartAcmesh() {
else
ACME_DOMAIN_OPTION+=" -d ${list[$i]}"
fi
if [[ -n "$dns" ]]; then
ACME_DOMAIN_OPTION+=" --dns $dns"
fi
done
echo "[$(date)] Issue the cert: $DOMAINS with options $ACME_DOMAIN_OPTION"
......@@ -78,8 +82,7 @@ function StartAcmesh() {
}
if [[ -n "$DOMAINS" ]]; then
# 生成默认证书, 配置文件中使用,否则nginx启动会失败
echo "[$(date)] 生成默认证书, 配置文件中使用,否则nginx启动会失败"
CreateDefault
export -f StartAcmesh
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment