前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >csxiaoyao.com整站第二次迁移记录

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

原创
作者头像
CS逍遥剑仙
修改2018-12-15 09:46:21
1.3K0
修改2018-12-15 09:46:21
举报
文章被收录于专栏:禅林阆苑

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端口

代码语言:txt
复制
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配置

代码语言:txt
复制
$ 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

代码语言:txt
复制
$ docker pull mysql:5.7

Step2: run image 运行镜像

参数说明:

代码语言:txt
复制
# -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

代码语言:txt
复制
$ 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服务

参数说明:

代码语言:txt
复制
# -t docker分配伪终端,并绑定到容器的标准输入上
# -i 让容器的标准输入保持打开

Run

代码语言:txt
复制
$ docker exec -it mysql-wp bash

Step4: 设置远程访问

代码语言:txt
复制
$ 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搭建

代码语言:txt
复制
$ 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

代码语言:txt
复制
define('DB_USER', 'root');
define('DB_HOST', 'mysql');

3.4 优化:使用 docker-compose

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

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

代码语言:txt
复制
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:

执行启动

代码语言:txt
复制
$ docker-compose up

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

3.5 部署

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

代码语言:txt
复制
$ sudo service docker start

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

代码语言:txt
复制
{
  "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组

代码语言:txt
复制
$ sudo gpasswd -a ${USER} docker

再执行 up 即可

代码语言:txt
复制
$ docker-compose up -d

3.6 phpmyadmin搭建

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

代码语言:txt
复制
$ docker run -d -p 8080:80 \
    --name phpmyadmin \
    --link mysql-wp \
    phpmyadmin/phpmyadmin

4. 其他

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • csxiaoyao.com整站第二次迁移记录
    • 1. 缘起
      • 2. 配置nginx和https
        • 3. docker构建wordpress博客
          • 3.1 docker vs 虚拟机(virtual machine)
          • 3.2 docker-mysql搭建
          • 3.3 docker-wordpress搭建
          • 3.4 优化:使用 docker-compose
          • 3.5 部署
          • 3.6 phpmyadmin搭建
        • 4. 其他
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档