申请免费SSL证书并配置Nginx绑定WordPress

SSL证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。

目前,网上也有一些有效时间较长的免费的证书,以SSL FOR FREE为例

申请好后,下载完成将得到3个文件ca_bundle.crt、certificate.crt以及私钥private.key,值得注意的是,如果我们要把证书配置到Nginx,按照官方说法,则需要把ca_bundle.crt、certificate.crt文件合并。

我们先把文件上传到服务器,然后执行如下命令

cat certificate.crt ca_bundle.crt

然后,我们把得到的新文件certificate.crt和私钥private.key放到Nginx对应的证书目录上,然后,修改nginx的配置文件,以我的网站为例,(location反向代理的跳转部分可以忽略)

server {
	listen 80;
	server_name www.tzqutao.top tzqutao.top;
	return 301 https://$host$request_uri; 
}

server {
    listen 443 ssl;
    server_name www.tzqutao.top tzqutao.top;
    ssl_certificate      /var/log/nginx/certificate.crt; 
    ssl_certificate_key  /var/log/nginx/private.key;
    
    access_log  /var/log/nginx/www.tzqutao.top.access.log;
    error_log /var/log/nginx/www.tzqutao.top.error.log;
    location / {
        proxy_pass http://172.17.0.3;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

此处,我们需要确保服务器对外的80端口和443端口是通畅的,如果Nginx是在DOCKER中,则还要保证容器的端口和本地80端口和443端口是有存在映射的,完成之后,重启Nginx即可

下面,我们来具体说明WordPress网站,如何启用Https,证书安装好后,我们进入到WordPress根目录的\wp-includes\functions.php,找到代码 require( ABSPATH . WPINC . ‘/option.php’ );大概在第8行。在下方添加以下代码:

add_filter('script_loader_src', 'agnostic_script_loader_src', 20,2); function agnostic_script_loader_src($src, $handle) { return preg_replace('/^(http|https):/', '', $src); } 
add_filter('style_loader_src', 'agnostic_style_loader_src', 20,2); function agnostic_style_loader_src($src, $handle) { return preg_replace('/^(http|https):/', '', $src); }

打开网站根目录\wp-config.php文件找到代码,在下方添加如下代码:

*
* @package WordPress
*/

$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

此时,我们登录到WordPress后台,把WordPress站点地址修改为HTTPS的路径,就完成了HTTP到HTTPS的迁移

Amazon Linux系统Docker定时重启

我们部署完DOCKER容器之后,有时候需要定时设定重启时间用来回收容器的内存资源,如果当前服务器是亚马逊OS系统的,可以使用以下方法

首先,我们先安装crontab,所谓crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。有点像WINDOS系统中的定时任务

sudo yum install cronie

启动并设置crond服务开机自启:

sudo systemctl start crond
sudo systemctl enable crond

然后,我们可以配置当前用户的crontab文件:

crontab -e

格式如下:比如,我们想每日凌晨一点重启容器WordPress、mystifying_hoover、mathapp,就可以按照下面的写法

0 1 * * * /usr/bin/docker restart mystifying_hoover
0 1 * * * /usr/bin/docker restart wordpress
0 1 * * * /usr/bin/docker restart mathapp

保存并退出编辑器。系统会自动安装新的crontab文件。验证计划任务是否已经正确安装

crontab -l

看到下面的结果,说明已经定时任务已经启用,下面3个容器会在凌晨1点重启

使用 Docker 快速部署 shadowsocks

Step1:拉取 shadowsocks-libev

docker pull appso/shadowsocks-libev

Step2:创建 shadowssocks配置文件

mkdir -p /etc/shadowsocks-libev/
vi /etc/shadowsocks-libev/config.json

将下面的内容修改后,粘贴进去。其中server_port就是可以随便改,比如,我这里是8188。密码修改成自己的

{
  "server": "0.0.0.0",
  "server_port": 8188,
  "password": "密码",
  "timeout": 600,
  "method": "aes-256-gcm",
  "fast_open": false,
  "mode": "tcp_and_udp"
}

Step3:保存退出后,启动Docker容器

docker run -d -p 8188:8188 -p 8188:8188/udp \
       --name ss-libev \
       --restart=always \
       -v /etc/shadowsocks-libev:/etc/shadowsocks-libev \
       appso/shadowsocks-libev

这样服务端就算是配置完成了

接下来,就可以下载对应客户端文件,去各个终端连接服务器的8188端口进行使用了

Windows客户端:点击下载

MAC客户端:点击下载

Android客户端:点击下载

Docker部署.Net Core 3.1程序(超详细)

首先,我们把编译好的.Net Core 3.1程序上传到宿主机的特地目录,如下图,确保你的程序路径在netcoreapp3.1/publish/文件夹中,以下是以我的程序Web.dll为例

然后,在netcoreapp3.1文件同级,新建Dockerfile文件,并且为了防止DOCK镜像中可能不存在字体,我们在同级别目录放一个字体文件 simsun.ttc

Dockerfile的内容如下,以下我以运行我的Web.dll程序为例子,为了调试方便,看到错误信息,ASPNETCORE_ENVIRONMENT暂时设置为Development,容器内端口设置为80,容器内的工作目录设置为/app

# 使用官方.NET Core运行时镜像作为基础镜像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
 
# 设置工作目录
WORKDIR /app
 
# 复制项目发布文件到容器中的工作目录
COPY ./netcoreapp3.1/publish/ .

COPY simsun.ttc /usr/share/fonts/
 
# 设置环境变量,端口
ENV ASPNETCORE_ENVIRONMENT=Development
ENV ASPNETCORE_URLS=http://+:80
 
# 当容器启动时,运行应用程序
ENTRYPOINT ["dotnet", "Web.dll"]

接下来,在控制台,定位到指定目录,用以下命令生成镜像,然后就会新增一个mathapp的Image镜像

sudo docker build -t mathapp .

此时,我们可以试着用这个镜像部署一个容器mathapp,并且把宿主机的8080端口,映射到容器80

sudo docker run --name mathapp -d -p 8080:80 mathapp

这时,我们就可以在游览器地址栏输入:http://服务器IP:8080 来访问自己的.Net Core程序了

接下来,我们为了后续更新方便,也可以试着在宿主机做个文件映射,首先,把容器内刚刚的/app工作目录的文件,复制到宿主机

sudo docker cp mathapp:/app /home/ec2-user/www

此时,我们看到,宿主机的对应目录中多了一个app文件,里面就是我们容器的工作目录文件

此时,我们可以删除之前创建的测试容器,创建全新容器,然后把这个目录挂载到新容器上

sudo docker stop mathapp
sudo docker rm mathapp
sudo docker run -d -p 8080:80 --name mathapp --restart=always -v /home/ec2-user/www/app:/app mathapp

接下来,后续更新只要更新宿主机中的文件,然后重启对应的docker容器即可

Docker部署wordpress

一、拉取wordpress镜像

docker pull wordpress

二、部署启动Docker容器,把宿主机当前用户的本地路径挂载到容器上,宿主机的端口可以设置成8081,这样,容器内的 WordPress 网站就会使用 /data 目录作为持久存储,你可以将数据保存在该目录下,即使容器被删除或重新创建,数据也不会丢失。请确保在运行此命令之前,已经在主机上创建了目标挂载点。

docker run -it --name mywordpress2 -p 8081:80 -v ~/www/blog:/var/www/html -d wordpress

此时在浏览器访问http://localhost:8081/wp-admin/setup-config.php进行安装。

此时需要配置数据库信息,DOCKER配置MYSQL数据库的方法,参考如下:Centos下的Docker环境RabbitMQ以及SqlServer和MySql搭建

如果您已经在 Docker 容器中分别安装了 WordPress 和 MySQL,并且想要让它们链接起来,可以按照以下步骤进行操作,首先,需要查找正在运行的 MySQL 容器的 IP 地址。可以使用以下命令:

docker inspect 容器id或容器名 | grep IPAddress

此时,会返回DOCKER容器中MYSQL对应的IP地址,回到刚刚的WordPress配置页面将数据库主机填上你获取的数据库ip地址即可

配置完毕后,如果是小内存服务器,可以再在WordPress的根目录的wp-config.php文件上,添加一个内存限制,如下,就是限制到128兆内存

define('WP_MEMORY_LIMIT', '64M');
define('WP_MAX_MEMORY_LIMIT', '128M');

同时,也可以对Docker的容器内存大小进行限制,(例:不能超过148M)

docker update --restart=always --memory="148m" --memory-swap="148m" 容器ID

Docker环境部署Nginx

1、运行容器

docker run --name nginx -d nginx

2、在宿主机的当前用户文件夹下创建nginx的目录结构

mkdir -p ~/nginx/{html,logs,conf,conf.d,cert}

3、把容器中的Nginx目录拷贝到宿主机的当前用户文件夹下

docker cp nginx:/etc/nginx/conf.d/default.conf ~/nginx/conf.d/default.conf
docker cp nginx:/etc/nginx/nginx.conf ~/nginx/conf/nginx.conf
docker cp nginx:/usr/share/nginx/html ~/nginx/html

4、此时,宿主机中有了nginx容器的配置,可以停止容器,并删除

docker stop nginx
docker rm nginx

5、现在,我们可以重新创建一个新的nginx容器,并且把宿主机刚刚复制出的文件挂载到容器上

docker run --name=nginx \
           -p 80:80 \
           -p 443:443 \
           -v ~/nginx/conf.d:/etc/nginx/conf.d \
           -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
           -v ~/nginx/html:/usr/share/nginx/html \
           -v ~/nginx/logs:/var/log/nginx \
           -v ~/nginx/cert:/etc/nginx/cert \
           --privileged=true \
           --restart=always \
           -d \
           nginx

6、平滑重启Nginx

docker exec nginx nginx -s reload

以下为Nginx的一个简单反向代理配置

server {
    listen 80;
    server_name www.域名A.com bbs.域名B.com;
    access_log  /var/log/nginx/www.域名A.com.access.log;
    error_log /var/log/nginx/www.域名A.com.error.log;
    location / {
        proxy_pass http://IP地址:端口;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Centos下的Docker环境RabbitMQ以及SqlServer和MySql搭建

以下为快速构建Centos下的生产环境、包括数据库、消息队列

step1:安装Docker

sudo yum install
 #安装所需的软件包
 sudo yum install -y yum-utils device-mapper-persistent-data lvm2
 #添加Docker稳定版本的yum软件源
 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 #更新yum软件源缓存,并安装Docker
 sudo yum install
 sudo yum install -y docker-ce
 #确认Docker服务启动正常
 sudo systemctl start docker

step2:拉取RabbitMQ镜像

docker pull rabbitmq:3.8.3-management

step3:启动RabbitMQ

docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672  --name some-rabbit rabbitmq:3.8.3-management

启动命令中设置了映射端口,可以直接访问服务器IP的15672端口来查看,用户名和密码默认都是guest,进入页面后会提示修改密码
到此Docker安装rabbitMq已经完成,且已成功启动。

setp4:拉取SQLServer2019镜像

sudo docker pull mcr.microsoft.com/mssql/server:2019-latest

step5:启动SQLServer2019

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_PID=HMWJ3-KY3J2-NMVD7-KG4JR-X2G8G" -e "MSSQL_SA_PASSWORD=Myun@123jx" --name sqlserver -p 1433:1433 -v /var/opt/mssql:/var/opt/mssql  -d mcr.microsoft.com/mssql/server:2019-latest

step6:连接登录SQLServer后,可以选择执行以下SQL打开代理服务

EXEC sp_configure 'show advanced', 1;
 RECONFIGURE;
 EXEC sp_configure 'allow updates', 0;
 RECONFIGURE;
 EXEC sp_configure 'Agent XPs', 1;
 RECONFIGURE;
 GO

step7:拉取MySQL镜像

docker pull mysql:8.0

step8:在本地宿主机上创建MySQL的配置文件my8.cnf

mkdir ~/mysql8
cd ~/mysql8
mkdir log
vim my8.cnf

以下是my8.cnf内容,以低配的1GB服务器为例子,可以用如下的配置

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
innodb_buffer_pool_size = 16M
performance_schema_max_table_instances=400  
table_definition_cache=400  
table_open_cache=256
performance_schema = off
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
# Custom config should go here
# !includedir /etc/mysql/conf.d/

step9:此后可以把MySQL容器启动,然后把宿主机的配置映射到容器内,为了防止被攻击,可以选择宿主机的非常用端口4306

docker run -d --restart=always -p 4306:3306 -v ~/mysql8/log:/var/log/mysql -v ~/mysql8/my8.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=数据库密码 -e MYSQL_GENERAL_LOG=1 mysql:8.0

step10:此后MySQL容器配置完成,我们可以通过宿主机的4306端口,访问到容器内的MySQL,最后,我们可以把Docker服务设置为开机启动

systemctl enable docker.service

此外,以下为容器自动重启以及Docker固化命令

 docker update --restart=always 容器id