csxiaoyao.com整站第二次迁移记录

csxiaoyao.com整站第二次迁移记录

Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com

GitHub: github.com/csxiaoyaojianxian

Email: sunjianfeng@csxiaoyao.com

QQ: 1724338257

1. 缘起

csxiaoyao的主页( csxiaoyao.com / csxiaoyao.cn / victorsun.cn / sunshinestudio.cn )从阿里云迁移到腾讯云已经稳定运行了一年多,搭建了博客、云盘、git私有仓库、shadowsocks梯子、图床、FTP、db节点、git仓库、webconsole等服务。由于https服务使用的是Let’s Encrypt证书,而最近的一次系统环境升级导致证书自动升级失败,加上腾讯云给力的优惠活动和提供的免费https证书,本人将整站迁移到上海区的更高配置的腾讯云vps,主要的变化为更换ssl证书和博客系统使用docker封装为独立服务,下文记录最终的迁移方案。

2. 配置nginx和https

Step1: 腾讯云官网申请免费1年证书

Step2: 下载证书文件,拷贝nginx目录下的cert和pem密匙文件到服务器nginx目录下,如/etc/nginx/cert/

Step3: 配置 nginx server

nginx配置文件路径 /etc/nginx/sites-enabled/default

配置监听80和443端口

server {
    error_page 404 /src/page/404.html;
    error_page 500 502 503 504 /src/page/50x.html;
	listen 80 default_server;
	listen [::]:80 default_server;
	server_name csxiaoyao.com csxiaoyao.cn *.csxiaoyao.com *.csxiaoyao.cn;
	location / {
        root   /var/www/html;
        index index.php index.html index.htm;
		try_files $uri $uri/ =404;
	}
    # php
    location ~ \.php?.*$ {
	    root            /var/www/html;
	    include snippets/fastcgi-php.conf;
	    fastcgi_pass    127.0.0.1:9000;
	    fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
	    include         fastcgi_params;
	}
}
server {
    error_page 404 /src/page/404.html;
    error_page 500 502 503 504 /src/page/50x.html;
    listen 443;
	listen [::]:443;
    server_name csxiaoyao.cn *.csxiaoyao.cn;
    ssl on;
    root /var/www/html;
    index index.php index.html index.htm;
    ssl_certificate cert/1_www.csxiaoyao.cn_bundle.crt;
    ssl_certificate_key cert/2_www.csxiaoyao.cn.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        root    /var/www/html;
        index   index.php index.html index.htm;
        try_files $uri $uri/ =404;
    }
    # php
    location ~ \.php?.*$ {
	    root            /var/www/html;
	    include snippets/fastcgi-php.conf;
	    # fastcgi_pass    unix:/run/php/php7.0-fpm.sock;
	    fastcgi_pass    127.0.0.1:9000;
	    fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
	    include            fastcgi_params;
	}
    location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
        deny all;
    }
}

配置域名转发和反向代理:

由于内容较敏感,此处略

Step4: 重新加载nginx配置

$ sudo service nginx reload

3. docker构建wordpress博客

迁移过程中如果重新搭建服务器环境会比较麻烦,而且在站点服务器运行过程中难免涉及到系统环境的升级,而一台机器部署多种服务(博客、云盘、git私库、webconsole等),升级很容易带来软件兼容问题,导致程序不能正常运行,而微服务架构能够很好解决上述问题。微服务架构是一种将单应用程序作为一套小型服务开发的方法,每种应用程序都在其自己的进程中运行,使用HTTP协议的API进行通信,可以通过全自动部署机制进行独立部署。由于精力和能力有限,csxiaoyao.com站点仅进行服务隔离,不涉及自动化单元测试、部署、监控告警等。

3.1 docker vs 虚拟机(virtual machine)

开发过程中的机器环境配置是一项繁琐的工作,尤其是当不同应用依赖不同环境时,环境切换尤为繁琐,目前的解决方案主要是虚拟机和docker两种。

虚拟机可以在一个操作系统里运行另一种操作系统,而应用程序对此无感知,对主体系统而言,虚拟机是一个普通文件,不会对系统环境造成影响。虚拟机实现了还原软件原始环境,但存在两个致命缺点:(1)资源占用多,虚拟机需要运行整个系统,往往一个应用只占用几Mb内存,却要花费几百Mb内存来运行;(2)启动慢,虚拟机需要完整启动一个操作系统,因此启动速度会很慢。

Docker 是一个开源的应用容器引擎,是对linux容器对封装。Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离,因此比虚拟机性能要好很多。docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,容器是完全是沙箱机制,相互之间不会有影响。

具体的docker的使用说明可以参考docker中文社区:http://www.docker.org.cn/book/

wordpress博客的搭建需要两个镜像,mysql数据库镜像和wordpress镜像。

3.2 docker-mysql搭建

Step1: pull image 拉取镜像 mysql:5.7

$ docker pull mysql:5.7

Step2: run image 运行镜像

参数说明:

# -p53306:3306 将容器3306端口映射到主机53306端口
# -v$PWD/xxx:/var/lib/mysql 将主机目录挂载到容器的/var/lib/mysql
# -e MYSQL_ROOT_PASSWORD=password 初始化root用户密码
# --name 容器命名
# -d 容器后台运行
# mysql:5.7 image名

Run

$ docker run -p 53306:3306 -v $PWD/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=19931128 --name mysql-wp -d mysql:5.7

Step3: docker exec 从终端进入mysql服务

参数说明:

# -t docker分配伪终端,并绑定到容器的标准输入上
# -i 让容器的标准输入保持打开

Run

$ docker exec -it mysql-wp bash

Step4: 设置远程访问

$ mysql -uroot -p
mysql> grant all privileges on *.* to root@"%" identified by "19931128" with grant option;
mysql> flush privileges;

Step5: 本地客户端导入sql

客户端连接地址 localhost:53306

3.3 docker-wordpress搭建

$ docker run --name wordpress -d -p 80:80 --env WORDPRESS_DB_PASSWORD=19931128 --link mysql-wp:mysql -v "$PWD/wordpress":/var/www/html wordpress

拷贝原服务器下的wordpress文件夹到当前目录下的wordpress文件夹($PWD/wordpress),并修改wordpress数据库连接配置文件wp-config.php

define('DB_USER', 'root');
define('DB_HOST', 'mysql');

3.4 优化:使用 docker-compose

由于wordpress镜像依赖于mysql镜像,如果每次部署启动单独执行很可能出错,使用docker-compose.yml文件则能够统一管理服务以来的镜像。

新建docker-compose.yml文件如下:

version: '2'
services:
  db:
    image: mysql:5.7
    ports:
      - "53306:3306"
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 19931128
      MYSQL_DATABASE: wordpress
      MYSQL_USER: blog
      MYSQL_PASSWORD: 19931128
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /Users/sunshine/Workspace/apache2:/etc/apache2
      - $PWD/wordpress:/var/www/html
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: blog
      WORDPRESS_DB_PASSWORD: 19931128
volumes:
  db_data:

执行启动

$ docker-compose up

同样适用stop命令可以全部停止容器执行,但是不会删除,使用rm才能删除。

3.5 部署

服务器端端系统环境是ubuntu16.04,首先安装docker,安装完成后启动服务

$ sudo service docker start

由于默认镜像国内访问很慢,需要使用加速镜像,新建/etc/docker/daemon.json来配置Daemon,加入registry-mirrors。

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

执行 docker-compose up 时会报错:

ERROR: Couldn’t connect to Docker daemon at http+docker://xxxx If it’s at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

需要将当前用户加入docker组

$ sudo gpasswd -a ${USER} docker

再执行 up 即可

$ docker-compose up -d

3.6 phpmyadmin搭建

同样使用docker镜像能够快速实现phpmyadmin的搭建

$ docker run -d -p 8080:80 \
    --name phpmyadmin \
    --link mysql-wp \
    phpmyadmin/phpmyadmin

4. 其他

其他的环境配置和从阿里云迁移到腾讯云时的步骤大体相同,可以参考前面的文章,此处不再赘述。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

HAProxy、Nginx 配置 HTTP/2 完整指南

基于最近对HTTP/2的争论和它的优势,是时候升级底层架构了。这篇文章将会介绍如何在安装和配置HAProxy和Ngnix(使用ssl终端)。为了简化流程,我建议...

19610
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装Ghost CMS

Ghost 1.0.0是Ghost内容管理系统(CMS)的第一个主要稳定版本。Ghost 1.0.0有一个全新的Markdown编辑器,刷新的用户界面,新的默认...

22560
来自专栏眯眯眼猫头鹰的小树杈

猫头鹰的深夜翻译:持久化容器存储

临时性存储是容器的一个很大的买点。“根据一个镜像启动容器,随意变更,然后停止变更重启一个容器。你看,一个全新的文件系统又诞生了。”

18750
来自专栏技术翻译

使用Kubernetes和Ambassador API Gateway部署Java应用程序

在本文中,您将学习如何将三个简单的Java服务部署到Kubernetes(通过新的Docker for Mac / Windows集成在本地运行),并通过Kub...

94120
来自专栏A周立SpringCloud

Docker系列教程16-network命令

本文是一篇翻译,原文 https://docs.docker.com/engine/userguide/networking/work-with-network...

3.3K80
来自专栏Laoqi's Linux运维专列

KVM部署篇

85540
来自专栏云计算

Kubernetes服务网格(第8部分):Linkerd作为入口控制器

Linkerd旨在使应用程序内部服务间的通信安全,快速和可靠。但是,这些目标同样适用于网络的接入层(应用程序对外的服务)。在这篇文章中,我们将展示Linkerd...

56480
来自专栏容器云生态

overlayfs存储驱动的使用以及技术探究

overlayfs存储驱动的使用以及技术探究 1.overlayfs 基本概念 一种联合文件系统,设计简单,速度更快。overlayfs在linux主机上只有两...

423100

什么是Docker的编排?它到底意味着什么?为什么我们需要它?

[本文由Yaron Parasol编写]

40850
来自专栏杂文共赏

使用DCHQ自动部署和管理Docker Cloud /虚拟Java微服务

本文演示了一个在云或虚拟平台上,用于自动化部署和管理Docker Java微服务应用程序的解决方案。我们通过扩展现有项目Chris Richardson的示例—...

21940

扫码关注云+社区

领取腾讯云代金券