Docker Web应用程序的SSL证书

在本文中,我想与您分享一种为您的Docker Web应用程序创建SSL证书的方法,如下 在Internet的俄语部分中-我没有找到类似的解决方案。

图片

削减更多细节。

我们有docker v.17.05,docker-compose v.1.21,Ubuntu Server 18和一品脱干净的Let'sEncrypt。 并不是说有必要在Docker上部署生产。 但是,如果您开始收集Docker,将很难停止。

因此,对于初学者来说,我将为您提供标准设置-我们在开发阶段即已 通常没有443端口和SSL:

docker-compose.yml
version: '2' services: php: build: ./php-fpm volumes: - ./StomUp:/var/www/StomUp - ./php-fpm/php.ini:/usr/local/etc/php/php.ini depends_on: - mysql container_name: "StomPHP" web: image: nginx:latest ports: - "80:80" - "443:443" volumes: - ./StomUp:/var/www/StomUp - ./nginx/main.conf:/etc/nginx/conf.d/default.conf depends_on: - php mysql: image: mysql:5.7 command: mysqld --sql_mode="" environment: MYSQL_ROOT_PASSWORD: xxx ports: - "3333:3306" 


nginx / main.conf
  server { listen 80; server_name *.stomup.ru stomup.ru; root /var/www/StomUp/public; client_max_body_size 5M; location / { # try to serve file directly, fallback to index.php try_files $uri /index.php$is_args$args; } location ~ ^/index\.php(/|$) { #fastcgi_pass unix:/var/run/php7.2-fpm.sock; fastcgi_pass php:9000; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; internal; } location ~ \.php$ { return 404; } error_log /var/log/nginx/project_error.log; access_log /var/log/nginx/project_access.log; } 


接下来,我们实际上需要实现SSL。 老实说-我研究了大约2个小时的com区域I。 那里所有建议的选项都很有趣。 但是在项目的当前阶段,我们(业务)需要快速可靠地将Let'sEnctypt SSLnginx容器绑定。

首先,我们在服务器上安装了certbot
sudo apt-get install certbot

接下来,我们为我们的域生成了通配符证书

 sudo certbot certonly -d stomup.ru -d *.stomup.ru --manual --preferred-challenges dns 

执行后,certbot将为我们提供2个TXT记录,这些记录需要在DNS设置中指定。

 _acme-challenge.stomup.ru TXT {CertBot} 

然后按回车。

之后,certbot将检查DNS中这些记录的可用性并为您创建证书。
如果添加了证书,但是certbot找不到,请尝试在5-10分钟后重新启动命令

好吧,在这里,我们是90天的Let'sEncrypt证书的骄傲拥有者,但是现在我们需要将其发送给Docker。

为此,请在docker-compose.yml中以最平庸的方式在nginx部分-链接目录。

带有SSL的Docker-compose.yml示例
 version: '2' services: php: build: ./php-fpm volumes: - ./StomUp:/var/www/StomUp - /etc/letsencrypt/live/stomup.ru/:/etc/letsencrypt/live/stomup.ru/ - ./php-fpm/php.ini:/usr/local/etc/php/php.ini depends_on: - mysql container_name: "StomPHP" web: image: nginx:latest ports: - "80:80" - "443:443" volumes: - ./StomUp:/var/www/StomUp - /etc/letsencrypt/:/etc/letsencrypt/ - ./nginx/main.conf:/etc/nginx/conf.d/default.conf depends_on: - php mysql: image: mysql:5.7 command: mysqld --sql_mode="" environment: MYSQL_ROOT_PASSWORD: xxx ports: - "3333:3306" 


你有联系吗? 超级-继续:

现在,我们通常需要更改nginx配置以与端口443SSL一起使用:

使用SSL的Main.conf配置示例
 # server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name *.stomup.ru stomup.ru; set $base /var/www/StomUp; root $base/public; # SSL ssl_certificate /etc/letsencrypt/live/stomup.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/stomup.ru/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/stomup.ru/chain.pem; client_max_body_size 5M; location / { # try to serve file directly, fallback to index.php try_files $uri /index.php$is_args$args; } location ~ ^/index\.php(/|$) { #fastcgi_pass unix:/var/run/php7.2-fpm.sock; fastcgi_pass php:9000; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; internal; } location ~ \.php$ { return 404; } error_log /var/log/nginx/project_error.log; access_log /var/log/nginx/project_access.log; } # HTTP redirect server { listen 80; listen [::]:80; server_name *.stomup.ru stomup.ru; location / { return 301 https://stomup.ru$request_uri; } } 


实际上,在进行了这些操作之后-我们使用Docker-compose进入目录,将docker-compose up -d写入。 然后我们检查SSL的功能。 一切都应该起飞。

最重要的是不要忘记Let'sEnctypt证书已发布90天,您将需要通过sudo certbot renew更新它,然后使用sudo certbot renew docker-compose restart重新启动项目

或者,将此序列添加到crontab。

我认为,这是将SSL连接到Docker Web应用程序的最简单方法。

PS:请注意,本文中介绍的所有脚本都不是最终的,现在该项目处于开发阶段,因此,我想请您不要批评配置文件-它们将被修改很多次。

Source: https://habr.com/ru/post/zh-CN481362/


All Articles