Enabling SSL with Let’s Encrypt, NGINX and Docker

Recently, I read a lot of articles on how to enable ssl with certbot, nginx and docker, but all the methods I read did not work for me untill I found this methods listed below. Thanks to all the authories who wrote the articles in the references.

Steps

  • Setting up Nginx and Certbot on your host server
  • Obtaining an SSL Certificate on your hose server
  • Map your host letsencrypt folder to nginx in docker

Detail

Step 1 Setting up Nginx and Certbot on your host server

Setting up Nginx

find the following line:

change to your domain name

reload your nginx new configuration

Step 2 Obtaining an SSL Certificate

You need to configure your HTTPS settings according to certbot.

After you configure your HTTPS, stop the nginx

Step 3 Map your host letsencrypt folder to nginx in docker

You'd like to modify your nignx config file first.

Then you need to open 443 port and map folders to docker.

Here is a sample.

Conclusion

I knew this approach is not elegant, but it works.

References

如何免费的让网站启用HTTPS

How To Secure Nginx with Let's Encrypt on Ubuntu 14.04

Enabling SSL with Let's Encrypt, NGINX and Docker

stackoverflow

apache 换成 nginx

https://www.howtoforge.com/tutorial/dockerizing-wordpress-with-nginx-and-php-fpm/

之前在DO的VPS上搭建的博客(LAMP),如果不开swap space 有时会因为内存不过杀掉mysql,导致网站无法打开。虽然最近打开了swap space, 情况大幅度好转,但从网上看到说nginx比apache 省内存。所以,动手试试:). 这篇文章根据网上教程写的(链接在最上面), 内容非原创. 因为,网上已经有教程了。所以,我也就只把配置文件贴出来就好了,具体请看教程.

docker-compose.yml

效果:比apache省100MB内存

安装mysql

mysql

安装

现在运行mysql服务器

docker inspect test-mysql 来查看ip地址和端口

现在用mysql客户端连接服务器

  • -u

user

  • -p

password

  • -P

port

  • -h

host

基本命令


PHP

PHP 是什么

PHP("Hypertext Preprocessor", 超文本预处理器)是一种被广泛应用的开放源代码的多用途脚本语言。

PHP能做什么

  • 收集表单数据
  • 生成动态网页
  • 发送/接受cookies

安装


用PHP 连接 mysql

demo.php

执行

使用VPS搭建自己的WordPress

准备

  • 一个运行linux的VPS
  • 一个 non-root 用户
  • 域名

租用VPS

  • 请自己google

下面的图片是我刚创建的vps

申请域名

域名申请

  • 略过(请Google)

我自己用的是namecheap

配备域名解析

Digital Ocean

Namecheap

-配置成功的话后,打开terminal, ping 自己的域名


现在,你就成功的将你的网址解析到你的ip地址了。

用Docker 来搭建wordpress

第一步 安装Docker

Ubuntu

第二步 测试Docker是否安装成功(可略过)

第三部 安装后的配置

  • 安装docker-compse

  • 开机重启docker

  • Non-root access

如果,你没有创建普通用户的话。执行下面的命令

如果,你有普通用户,请执行下面的命令

第四步 用LAMP来测试Docker

  • 什么是LAMP
    • Linux
    • Apache
    • MySQL
    • PHP/Python/Perl

    在non-root 用户执行下面的指令

docker run

  • 创建和开始一个容器

-d

  • "detach" from it, 跟我们连ssh和tmux 一样

--name=apache

  • 给容器一个名字apache

-p 8080:80

  • 把本机的端口8080和容器的端口80连在一起

-v $HOME/apache:/var/www/html

  • map 以上的文件夹
  • $HOME/apache 的文件map到 /var/www/html

现在你可以看到容器在运行

现在,你应该可以访问http://YOUR-SERVER-IP:8080/info.php

现在关掉并且删掉容器

第五步 搭建wordpress

创建docker-compose.yml

mariadb 比mysql 省内存
第一次运行容器

docker ps 查看容器

http://YOUR-SERVER-IP:8080 安装WordPress, 用docker-compose down停止运行容器

在安装完WordPress后,你就可以用http://YOUR-SERVER-IP:8080 访问你的WordPress网站了。

Docker 教程系列 二

使用Dockerfile 定制镜像

  • Dockerfile

镜像的定制实际上是定制每一层所添加的配置、文件。我们可以吧每一层修改、安装、构建、操作的命令写在一个脚本,用这个脚本来构建、定制镜像。 这个脚本叫做Dockerfile。

Dockerfile 内容

FROM 指定基础镜像

所谓定制镜像,那一定是以一个基础镜像为基础,在其上定制。

FROM 就是制订基础镜像

在Dockerfile中FROM 是必备的指令,并且是第一个指令。

RUN 执行指令

  • shell格式: RUN <命令>

  • exec 格式: RUN [“可执行文件”,“参数1”,“参数2”]

错误的写法

Dockerfile 中每一个指令都会建立一层

上面的写法创建了7层镜像

正确的写法

&&将各个所需命令串联起来,将7层,简化为1层。

\换行

#注释

构建镜像

Dockerfile 文件所在目录执行:

RUN指令启动了一个容器23d1b8a55e02,执行命令,并提交了最后一层2c1c0dc5e64e, 随后删掉了23d1b8a55e02

dokcer build指令

  • -t

tag list -- Name and optionally a tag in the name:tag format

其它docker build 的用法

直接用Git repo

用tar压缩包构建

从标准输入中读取 Dockerfile 进行构建

从标准输入中读取上下文压缩包进行构建

Docker 教程系列 一

介绍

准备

在学习docker之前,你应该对这些概念熟悉:

  • IP Addresses and Ports
  • Virtual Machines
  • Editing configuration files
  • Basic familiarity with the ideas of code dependencies and building
  • Machine resource usage terms, like CPU percentages, RAM use in bytes, etc.
容器
  • 镜像

An image is a lightweight, stand-alone, executable package that includes everything needed to run a piece of software, including the code, a runtime, libraries, environment variables, and config files.

跟虚拟机中的镜像概念相同

  • 容器

A container is a runtime instance of an image—what the image becomes in memory when actually executed. It runs completely isolated from the host environment by default, only accessing host files and ports if configured to do so.

安装Docker

Ubuntu

Mac

下载安装包

https://docs.docker.com/docker-for-mac/install/

打开docker app

安装 docker 二进制文件

测试是否安装成功

如果以上都正常的话,可以运行一个Nginx服务器:

  • -d

detach -- Run container in background and print container ID

跟ssh和tmux的detach 一样

  • -p

publish list -- Publish all exposed ports to the host

感觉跟virtualbox里的portforwarding 很像, 不太确定

跟ngrok里的很像

  • --name webserver

把这个容器命名为webserver

如果成功的话,会显示以下的画面

要停止Nginx服务器并且删除